From 9c172fb0567b45a916ff1bd230f800d9711268d8 Mon Sep 17 00:00:00 2001 From: Louis Taylor Date: Fri, 1 May 2015 16:58:16 +0000 Subject: [PATCH] Add some basic CLI functional tests This ports over most of the functional glanceclient cli tests out from tempest. Change-Id: I59d409ade72c289ed9942ce374cae732a40518aa --- glanceclient/tests/functional/base.py | 16 ++++-- .../tests/functional/test_readonly_glance.py | 49 ++++++++++++++++++- 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/glanceclient/tests/functional/base.py b/glanceclient/tests/functional/base.py index 89b9092a..f710ab65 100644 --- a/glanceclient/tests/functional/base.py +++ b/glanceclient/tests/functional/base.py @@ -27,16 +27,24 @@ class ClientTestBase(base.ClientTestBase): * initially just check return codes, and later test command outputs """ + + def __init__(self, *args, **kwargs): + super(ClientTestBase, self).__init__(*args, **kwargs) + self.username = os.environ.get('OS_USERNAME') + self.password = os.environ.get('OS_PASSWORD') + self.tenant_name = os.environ.get('OS_TENANT_NAME') + self.uri = os.environ.get('OS_AUTH_URL') + def _get_clients(self): cli_dir = os.environ.get( 'OS_GLANCECLIENT_EXEC_DIR', os.path.join(os.path.abspath('.'), '.tox/functional/bin')) return base.CLIClient( - username=os.environ.get('OS_USERNAME'), - password=os.environ.get('OS_PASSWORD'), - tenant_name=os.environ.get('OS_TENANT_NAME'), - uri=os.environ.get('OS_AUTH_URL'), + username=self.username, + password=self.password, + tenant_name=self.tenant_name, + uri=self.uri, cli_dir=cli_dir) def glance(self, *args, **kwargs): diff --git a/glanceclient/tests/functional/test_readonly_glance.py b/glanceclient/tests/functional/test_readonly_glance.py index 773d52db..0082f292 100644 --- a/glanceclient/tests/functional/test_readonly_glance.py +++ b/glanceclient/tests/functional/test_readonly_glance.py @@ -10,6 +10,10 @@ # 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 @@ -22,4 +26,47 @@ class SimpleReadOnlyGlanceClientTest(base.ClientTestBase): """ def test_list(self): - self.glance('image-list') + out = self.glance('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(self): + tenant_name = '--tenant-id %s' % self.tenant_name + out = self.glance('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('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 = set(('image-create', 'image-delete', 'help', + 'image-download', 'image-show', 'image-update', + 'member-create', 'member-delete', + 'member-list', 'image-list')) + self.assertFalse(wanted_commands - commands) + + def test_version(self): + self.glance('', flags='--version') + + def test_debug_list(self): + self.glance('image-list', flags='--debug')