Add basic read only glance cli tests
* Display help
* List images
Change-Id: Iee5a4ebf4a47e8c41545c0d404cc15eb345705da
diff --git a/cli/__init__.py b/cli/__init__.py
index 6ffe229..2a00ecc 100644
--- a/cli/__init__.py
+++ b/cli/__init__.py
@@ -70,6 +70,11 @@
return self.cmd_with_auth(
'keystone', action, flags, params, admin, fail_ok)
+ def glance(self, action, flags='', params='', admin=True, fail_ok=False):
+ """Executes glance command for the given action."""
+ return self.cmd_with_auth(
+ 'glance', action, flags, params, admin, fail_ok)
+
def cmd_with_auth(self, cmd, action, flags='', params='',
admin=True, fail_ok=False):
"""Executes given command with auth attributes appended."""
diff --git a/cli/simple_read_only/test_glance.py b/cli/simple_read_only/test_glance.py
new file mode 100644
index 0000000..f9822cc
--- /dev/null
+++ b/cli/simple_read_only/test_glance.py
@@ -0,0 +1,66 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2013 OpenStack Foundation
+# All Rights Reserved.
+#
+# 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 logging
+import re
+import subprocess
+
+import cli
+
+
+LOG = logging.getLogger(__name__)
+
+
+class SimpleReadOnlyGlanceClientTest(cli.ClientTestBase):
+ """Basic, read-only tests for Glance CLI client.
+
+ Checks return values and output of read-only commands.
+ These tests do not presume any content, nor do they create
+ their own. They only verify the structure of output if present.
+ """
+
+ def test_glance_fake_action(self):
+ self.assertRaises(subprocess.CalledProcessError,
+ self.glance,
+ 'this-does-not-exist')
+
+ def test_glance_image_list(self):
+ out = self.glance('image-list')
+ endpoints = self.parser.listing(out)
+ self.assertTableStruct(endpoints, [
+ 'ID', 'Name', 'Disk Format', 'Container Format',
+ 'Size', 'Status'])
+
+ def test_glance_help(self):
+ help_text = self.glance('help')
+ lines = help_text.split('\n')
+ self.assertTrue(lines[0].startswith('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-add', 'member-create', 'member-delete',
+ 'member-list'))
+ self.assertFalse(wanted_commands - commands)