diff --git a/glanceclient/tests/functional/base.py b/glanceclient/tests/functional/base.py index 89b9092..f710ab6 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 773d52d..0082f29 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')