From 832b2591cf299bf51c1922df1cdd4ba0aabe88c0 Mon Sep 17 00:00:00 2001 From: Sindhu Devale Date: Tue, 4 Oct 2016 13:02:41 -0500 Subject: [PATCH] OSC Extension Show Implement Neutron feature of Extension Show into OpenStack Client. Change-Id: Ifecb794838cb3bf8c2466d178345349db3cd4003 Implements: blueprint extension-show --- doc/source/command-objects/extension.rst | 17 ++++++ openstackclient/common/extension.py | 29 ++++++++++ .../tests/functional/common/test_extension.py | 42 ++++++++++++++ .../tests/unit/common/test_extension.py | 58 +++++++++++++++++++ .../bp-extension-show-6f7e31a27dad0dc9.yaml | 8 +++ setup.cfg | 1 + 6 files changed, 155 insertions(+) create mode 100644 openstackclient/tests/functional/common/test_extension.py create mode 100644 releasenotes/notes/bp-extension-show-6f7e31a27dad0dc9.yaml diff --git a/doc/source/command-objects/extension.rst b/doc/source/command-objects/extension.rst index dff30fa13..4d71bbc78 100644 --- a/doc/source/command-objects/extension.rst +++ b/doc/source/command-objects/extension.rst @@ -39,3 +39,20 @@ List API extensions .. option:: --long List additional fields in output + +extension show +-------------- + +Show API extension + +.. program:: extension show +.. code:: bash + + openstack extension show + + +.. _extension_show: +.. describe:: + + Extension to display. Currently, only network extensions are supported. + (Name or Alias) diff --git a/openstackclient/common/extension.py b/openstackclient/common/extension.py index de4800160..07c407f65 100644 --- a/openstackclient/common/extension.py +++ b/openstackclient/common/extension.py @@ -134,3 +134,32 @@ class ListExtension(command.Lister): LOG.warning(message) return (columns, extension_tuples) + + +class ShowExtension(command.ShowOne): + _description = _("Show API extension") + + def get_parser(self, prog_name): + parser = super(ShowExtension, self).get_parser(prog_name) + parser.add_argument( + 'extension', + metavar='', + help=_('Extension to display. ' + 'Currently, only network extensions are supported. ' + '(Name or Alias)'), + ) + return parser + + def take_action(self, parsed_args): + client = self.app.client_manager.network + columns = ('Alias', 'Description', 'Links', 'Name', + 'Namespace', 'Updated') + ext = str(parsed_args.extension) + obj = client.find_extension(ext) + dict_tuples = (utils.get_item_properties( + obj, + columns, + formatters={},) + ) + + return columns, dict_tuples diff --git a/openstackclient/tests/functional/common/test_extension.py b/openstackclient/tests/functional/common/test_extension.py new file mode 100644 index 000000000..7c527eaec --- /dev/null +++ b/openstackclient/tests/functional/common/test_extension.py @@ -0,0 +1,42 @@ +# Copyright (c) 2017, Intel Corporation. +# 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 json + +from openstackclient.tests.functional import base + + +class TestExtension(base.TestCase): + """Functional tests for extension.""" + + def test_extension_list(self): + """Test extension list.""" + json_output = json.loads(self.openstack( + 'extension list -f json ' + '--network') + ) + self.assertEqual( + 'Default Subnetpools', + json_output[0]['Name'], + ) + + def test_extension_show(self): + """Test extension show.""" + name = 'agent' + json_output = json.loads(self.openstack( + 'extension show -f json ' + name) + ) + self.assertEqual( + name, + json_output.get('Alias')) diff --git a/openstackclient/tests/unit/common/test_extension.py b/openstackclient/tests/unit/common/test_extension.py index bf856ed1c..68fdf17d4 100644 --- a/openstackclient/tests/unit/common/test_extension.py +++ b/openstackclient/tests/unit/common/test_extension.py @@ -19,6 +19,7 @@ from openstackclient.tests.unit import fakes from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes from openstackclient.tests.unit.network.v2 import fakes as network_fakes from openstackclient.tests.unit import utils +from openstackclient.tests.unit import utils as tests_utils from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes @@ -242,3 +243,60 @@ class TestExtensionList(TestExtension): ), ) self._test_extension_list_helper(arglist, verifylist, datalist) self.volume_extensions_mock.show_all.assert_called_with() + + +class TestExtensionShow(TestExtension): + extension_details = ( + network_fakes.FakeExtension.create_one_extension() + ) + + columns = ( + 'Alias', + 'Description', + 'Links', + 'Name', + 'Namespace', + 'Updated' + ) + + data = ( + extension_details.alias, + extension_details.description, + extension_details.links, + extension_details.name, + extension_details.namespace, + extension_details.updated + ) + + def setUp(self): + super(TestExtensionShow, self).setUp() + + self.cmd = extension.ShowExtension(self.app, None) + + self.app.client_manager.network.find_extension = mock.Mock( + return_value=self.extension_details) + + def test_show_no_options(self): + arglist = [] + verifylist = [] + + self.assertRaises(tests_utils.ParserException, self.check_parser, + self.cmd, arglist, verifylist) + + def test_show_all_options(self): + arglist = [ + self.extension_details.alias, + ] + verifylist = [ + ('extension', self.extension_details.alias), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.app.client_manager.network.find_extension.assert_called_with( + self.extension_details.alias) + + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) diff --git a/releasenotes/notes/bp-extension-show-6f7e31a27dad0dc9.yaml b/releasenotes/notes/bp-extension-show-6f7e31a27dad0dc9.yaml new file mode 100644 index 000000000..21ed6470c --- /dev/null +++ b/releasenotes/notes/bp-extension-show-6f7e31a27dad0dc9.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Added `openstack extension show` command to allow users + to view the details of the extension. Currently works only for + network extensions. + + [Blueprint `extension-show `_] diff --git a/setup.cfg b/setup.cfg index 2aa887401..9869d5a23 100644 --- a/setup.cfg +++ b/setup.cfg @@ -46,6 +46,7 @@ openstack.common = availability_zone_list = openstackclient.common.availability_zone:ListAvailabilityZone configuration_show = openstackclient.common.configuration:ShowConfiguration extension_list = openstackclient.common.extension:ListExtension + extension_show = openstackclient.common.extension:ShowExtension limits_show = openstackclient.common.limits:ShowLimits quota_set = openstackclient.common.quota:SetQuota quota_show = openstackclient.common.quota:ShowQuota