summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/common/module.py14
-rw-r--r--openstackclient/tests/functional/common/test_module.py35
-rw-r--r--openstackclient/tests/unit/common/test_module.py35
3 files changed, 84 insertions, 0 deletions
diff --git a/openstackclient/common/module.py b/openstackclient/common/module.py
index ba911ecb..20497f21 100644
--- a/openstackclient/common/module.py
+++ b/openstackclient/common/module.py
@@ -29,12 +29,26 @@ class ListCommand(command.Lister):
auth_required = False
+ def get_parser(self, prog_name):
+ parser = super(ListCommand, self).get_parser(prog_name)
+ parser.add_argument(
+ '--group',
+ metavar='<group-keyword>',
+ help=_('Show commands filtered by a command group, for example: '
+ 'identity, volume, compute, image, network and '
+ 'other keywords'),
+ )
+ return parser
+
def take_action(self, parsed_args):
cm = self.app.command_manager
groups = cm.get_command_groups()
groups = sorted(groups)
columns = ('Command Group', 'Commands')
+ if parsed_args.group:
+ groups = (group for group in groups if parsed_args.group in group)
+
commands = []
for group in groups:
command_names = cm.get_command_names(group)
diff --git a/openstackclient/tests/functional/common/test_module.py b/openstackclient/tests/functional/common/test_module.py
index f4f2e952..e9e4ee3a 100644
--- a/openstackclient/tests/functional/common/test_module.py
+++ b/openstackclient/tests/functional/common/test_module.py
@@ -42,3 +42,38 @@ class ModuleTest(base.TestCase):
cmd_output = json.loads(self.openstack('module list --all -f json'))
for one_module in self.CLIENTS + self.LIBS:
self.assertIn(one_module, cmd_output.keys())
+
+
+class CommandTest(base.TestCase):
+ """Functional tests for openstackclient command list."""
+ GROUPS = [
+ 'openstack.volume.v2',
+ 'openstack.network.v2',
+ 'openstack.image.v2',
+ 'openstack.identity.v3',
+ 'openstack.compute.v2',
+ 'openstack.common',
+ 'openstack.cli',
+ ]
+
+ def test_command_list_no_option(self):
+ cmd_output = json.loads(self.openstack('command list -f json'))
+ group_names = [each.get('Command Group') for each in cmd_output]
+ for one_group in self.GROUPS:
+ self.assertIn(one_group, group_names)
+
+ def test_command_list_with_group(self):
+ input_groups = [
+ 'volume',
+ 'network',
+ 'image',
+ 'identity',
+ 'compute.v2'
+ ]
+ for each_input in input_groups:
+ cmd_output = json.loads(self.openstack(
+ 'command list --group %s -f json' % each_input
+ ))
+ group_names = [each.get('Command Group') for each in cmd_output]
+ for each_name in group_names:
+ self.assertIn(each_input, each_name)
diff --git a/openstackclient/tests/unit/common/test_module.py b/openstackclient/tests/unit/common/test_module.py
index 4b586d3b..2491d639 100644
--- a/openstackclient/tests/unit/common/test_module.py
+++ b/openstackclient/tests/unit/common/test_module.py
@@ -88,6 +88,41 @@ class TestCommandList(utils.TestCommand):
self.assertEqual(datalist, tuple(data))
+ def test_command_list_with_group_not_found(self):
+ arglist = [
+ '--group', 'not_exist',
+ ]
+ verifylist = [
+ ('group', 'not_exist'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ collist = ('Command Group', 'Commands')
+ self.assertEqual(collist, columns)
+ self.assertEqual([], data)
+
+ def test_command_list_with_group(self):
+ arglist = [
+ '--group', 'common',
+ ]
+ verifylist = [
+ ('group', 'common'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ collist = ('Command Group', 'Commands')
+ self.assertEqual(collist, columns)
+ datalist = ((
+ 'openstack.common',
+ 'limits show\nextension list'
+ ),)
+
+ self.assertEqual(datalist, tuple(data))
+
@mock.patch.dict(
'openstackclient.common.module.sys.modules',