summaryrefslogtreecommitdiff
path: root/glanceclient
diff options
context:
space:
mode:
authorBrian Rosmaita <rosmaita.fossdev@gmail.com>2018-03-15 20:32:40 -0400
committerBrian Rosmaita <rosmaita.fossdev@gmail.com>2018-03-28 22:32:44 -0400
commit32b83078194f40e0d3445d95cf04ce97091fd229 (patch)
tree4dd3856a7847b6f88a9c6d04a34c340199917cff /glanceclient
parent4cb8b030623ec3980f3897e8b5c0f4d20acff2ed (diff)
downloadpython-glanceclient-32b83078194f40e0d3445d95cf04ce97091fd229.tar.gz
Split glanceclient functional tests
Prepare for the Image API v1 to be removed from glance during Rocky by splitting the functional tests that hit v1 from the tests that hit v2. Introduce a new job that runs the functional-v1 tests against a devstack running glance stable/queens, and configure this job for both check and gate for the glanceclient. The v2 functional tests continue to be run for both check and gate against a devstack running glance master. Change-Id: Ifa98ada26a84e4cca3ea8c98173f61a6174cca27
Diffstat (limited to 'glanceclient')
-rw-r--r--glanceclient/tests/functional/base.py3
-rw-r--r--glanceclient/tests/functional/v1/__init__.py0
-rw-r--r--glanceclient/tests/functional/v1/test_readonly_glance.py73
-rw-r--r--glanceclient/tests/functional/v2/__init__.py0
-rw-r--r--glanceclient/tests/functional/v2/test_http_headers.py (renamed from glanceclient/tests/functional/test_http_headers.py)0
-rw-r--r--glanceclient/tests/functional/v2/test_readonly_glance.py (renamed from glanceclient/tests/functional/test_readonly_glance.py)15
6 files changed, 75 insertions, 16 deletions
diff --git a/glanceclient/tests/functional/base.py b/glanceclient/tests/functional/base.py
index 0efc079..578dc39 100644
--- a/glanceclient/tests/functional/base.py
+++ b/glanceclient/tests/functional/base.py
@@ -48,9 +48,10 @@ class ClientTestBase(base.ClientTestBase):
def _get_clients(self):
self.creds = credentials().get_auth_args()
+ venv_name = os.environ.get('OS_TESTENV_NAME', 'functional')
cli_dir = os.environ.get(
'OS_GLANCECLIENT_EXEC_DIR',
- os.path.join(os.path.abspath('.'), '.tox/functional/bin'))
+ os.path.join(os.path.abspath('.'), '.tox/%s/bin' % venv_name))
return base.CLIClient(
username=self.creds['username'],
diff --git a/glanceclient/tests/functional/v1/__init__.py b/glanceclient/tests/functional/v1/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/glanceclient/tests/functional/v1/__init__.py
diff --git a/glanceclient/tests/functional/v1/test_readonly_glance.py b/glanceclient/tests/functional/v1/test_readonly_glance.py
new file mode 100644
index 0000000..122c61b
--- /dev/null
+++ b/glanceclient/tests/functional/v1/test_readonly_glance.py
@@ -0,0 +1,73 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import re
+
+from tempest.lib import exceptions
+
+from glanceclient.tests.functional import base
+
+
+class SimpleReadOnlyGlanceClientTest(base.ClientTestBase):
+
+ """Read only functional python-glanceclient tests.
+
+ This only exercises client commands that are read only.
+ """
+
+ def test_list_v1(self):
+ out = self.glance('--os-image-api-version 1 image-list')
+ endpoints = self.parser.listing(out)
+ self.assertTableStruct(endpoints, [
+ 'ID', 'Name', 'Disk Format', 'Container Format',
+ 'Size', 'Status'])
+
+ def test_fake_action(self):
+ self.assertRaises(exceptions.CommandFailed,
+ self.glance,
+ 'this-does-not-exist')
+
+ def test_member_list_v1(self):
+ tenant_name = '--tenant-id %s' % self.creds['project_name']
+ out = self.glance('--os-image-api-version 1 member-list',
+ params=tenant_name)
+ endpoints = self.parser.listing(out)
+ self.assertTableStruct(endpoints,
+ ['Image ID', 'Member ID', 'Can Share'])
+
+ def test_help(self):
+ help_text = self.glance('--os-image-api-version 1 help')
+ lines = help_text.split('\n')
+ self.assertFirstLineStartsWith(lines, 'usage: glance')
+
+ commands = []
+ cmds_start = lines.index('Positional arguments:')
+ cmds_end = lines.index('Optional arguments:')
+ command_pattern = re.compile('^ {4}([a-z0-9\-\_]+)')
+ for line in lines[cmds_start:cmds_end]:
+ match = command_pattern.match(line)
+ if match:
+ commands.append(match.group(1))
+ commands = set(commands)
+ wanted_commands = {'bash-completion', 'help',
+ 'image-create', 'image-delete',
+ 'image-download', 'image-list',
+ 'image-show', 'image-update',
+ 'member-create', 'member-delete',
+ 'member-list'}
+ self.assertEqual(commands, wanted_commands)
+
+ def test_version(self):
+ self.glance('', flags='--version')
+
+ def test_debug_list(self):
+ self.glance('--os-image-api-version 1 image-list', flags='--debug')
diff --git a/glanceclient/tests/functional/v2/__init__.py b/glanceclient/tests/functional/v2/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/glanceclient/tests/functional/v2/__init__.py
diff --git a/glanceclient/tests/functional/test_http_headers.py b/glanceclient/tests/functional/v2/test_http_headers.py
index 1596444..1596444 100644
--- a/glanceclient/tests/functional/test_http_headers.py
+++ b/glanceclient/tests/functional/v2/test_http_headers.py
diff --git a/glanceclient/tests/functional/test_readonly_glance.py b/glanceclient/tests/functional/v2/test_readonly_glance.py
index ccd49d6..c024303 100644
--- a/glanceclient/tests/functional/test_readonly_glance.py
+++ b/glanceclient/tests/functional/v2/test_readonly_glance.py
@@ -24,13 +24,6 @@ class SimpleReadOnlyGlanceClientTest(base.ClientTestBase):
This only exercises client commands that are read only.
"""
- def test_list_v1(self):
- out = self.glance('--os-image-api-version 1 image-list')
- endpoints = self.parser.listing(out)
- self.assertTableStruct(endpoints, [
- 'ID', 'Name', 'Disk Format', 'Container Format',
- 'Size', 'Status'])
-
def test_list_v2(self):
out = self.glance('--os-image-api-version 2 image-list')
endpoints = self.parser.listing(out)
@@ -41,14 +34,6 @@ class SimpleReadOnlyGlanceClientTest(base.ClientTestBase):
self.glance,
'this-does-not-exist')
- def test_member_list_v1(self):
- tenant_name = '--tenant-id %s' % self.creds['project_name']
- out = self.glance('--os-image-api-version 1 member-list',
- params=tenant_name)
- endpoints = self.parser.listing(out)
- self.assertTableStruct(endpoints,
- ['Image ID', 'Member ID', 'Can Share'])
-
def test_member_list_v2(self):
try:
# NOTE(flwang): If set disk-format and container-format, Jenkins