Enhance list extension unit test

Extension list involves identity, compute, volume and network.
Current test covers only identity and network. This patch added test
against compute and volum. Also refactored current implentation.

Change-Id: If9b36cba24c50a817a17f685801e418fb898596a
This commit is contained in:
Fang Zhen 2016-03-10 18:51:22 +08:00
parent 4bb48c088d
commit 4208f02a20
2 changed files with 137 additions and 40 deletions
openstackclient/tests

@ -12,13 +12,16 @@
#
import copy
import mock
from openstackclient.common import extension
from openstackclient.tests import fakes
from openstackclient.tests import utils
from openstackclient.tests.compute.v2 import fakes as compute_fakes
from openstackclient.tests.identity.v2_0 import fakes as identity_fakes
from openstackclient.tests.network.v2 import fakes as network_fakes
from openstackclient.tests.volume.v2 import fakes as volume_fakes
class TestExtension(utils.TestCommand):
@ -34,6 +37,16 @@ class TestExtension(utils.TestCommand):
self.app.client_manager.identity.extensions)
self.identity_extensions_mock.reset_mock()
self.app.client_manager.compute = compute_fakes.FakeComputev2Client(
endpoint=fakes.AUTH_URL,
token=fakes.AUTH_TOKEN,
)
self.app.client_manager.volume = volume_fakes.FakeVolumeClient(
endpoint=fakes.AUTH_URL,
token=fakes.AUTH_TOKEN,
)
network_client = network_fakes.FakeNetworkV2Client()
self.app.client_manager.network = network_client
self.network_extensions_mock = network_client.extensions
@ -43,6 +56,8 @@ class TestExtension(utils.TestCommand):
class TestExtensionList(TestExtension):
columns = ('Name', 'Alias', 'Description')
long_columns = ('Name', 'Namespace', 'Description', 'Alias', 'Updated',
'Links')
def setUp(self):
super(TestExtensionList, self).setUp()
@ -55,12 +70,33 @@ class TestExtensionList(TestExtension):
),
]
self.app.client_manager.compute.list_extensions = mock.Mock()
self.compute_extensions_mock = (
self.app.client_manager.compute.list_extensions)
self.compute_extensions_mock.show_all.return_value = [
fakes.FakeResource(
None,
copy.deepcopy(compute_fakes.EXTENSION),
loaded=True,
),
]
self.app.client_manager.volume.list_extensions = mock.Mock()
self.volume_extensions_mock = (
self.app.client_manager.volume.list_extensions)
self.volume_extensions_mock.show_all.return_value = [
fakes.FakeResource(
None,
copy.deepcopy(volume_fakes.EXTENSION),
loaded=True,
),
]
# Get the command object to test
self.cmd = extension.ListExtension(self.app, None)
def test_extension_list_no_options(self):
arglist = []
verifylist = []
def _test_extension_list_helper(self, arglist, verifylist,
expected_data, long=False):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
@ -68,23 +104,42 @@ class TestExtensionList(TestExtension):
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# no args should output from all services
self.identity_extensions_mock.list.assert_called_with()
if long:
self.assertEqual(self.long_columns, columns)
else:
self.assertEqual(self.columns, columns)
self.assertEqual(expected_data, tuple(data))
self.assertEqual(self.columns, columns)
def test_extension_list_no_options(self):
arglist = []
verifylist = []
datalist = (
(
identity_fakes.extension_name,
identity_fakes.extension_alias,
identity_fakes.extension_description,
),
(
compute_fakes.extension_name,
compute_fakes.extension_alias,
compute_fakes.extension_description,
),
(
volume_fakes.extension_name,
volume_fakes.extension_alias,
volume_fakes.extension_description,
),
(
network_fakes.extension_name,
network_fakes.extension_alias,
network_fakes.extension_description,
),
)
self.assertEqual(datalist, tuple(data))
self._test_extension_list_helper(arglist, verifylist, datalist)
self.identity_extensions_mock.list.assert_called_with()
self.compute_extensions_mock.show_all.assert_called_with()
self.volume_extensions_mock.show_all.assert_called_with()
self.network_extensions_mock.assert_called_with()
def test_extension_list_long(self):
arglist = [
@ -93,19 +148,6 @@ class TestExtensionList(TestExtension):
verifylist = [
('long', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# no args should output from all services
self.identity_extensions_mock.list.assert_called_with()
collist = ('Name', 'Namespace', 'Description', 'Alias', 'Updated',
'Links')
self.assertEqual(collist, columns)
datalist = (
(
identity_fakes.extension_name,
@ -115,6 +157,22 @@ class TestExtensionList(TestExtension):
identity_fakes.extension_updated,
identity_fakes.extension_links,
),
(
compute_fakes.extension_name,
compute_fakes.extension_namespace,
compute_fakes.extension_description,
compute_fakes.extension_alias,
compute_fakes.extension_updated,
compute_fakes.extension_links,
),
(
volume_fakes.extension_name,
volume_fakes.extension_namespace,
volume_fakes.extension_description,
volume_fakes.extension_alias,
volume_fakes.extension_updated,
volume_fakes.extension_links,
),
(
network_fakes.extension_name,
network_fakes.extension_namespace,
@ -124,7 +182,11 @@ class TestExtensionList(TestExtension):
network_fakes.extension_links,
),
)
self.assertEqual(datalist, tuple(data))
self._test_extension_list_helper(arglist, verifylist, datalist, True)
self.identity_extensions_mock.list.assert_called_with()
self.compute_extensions_mock.show_all.assert_called_with()
self.volume_extensions_mock.show_all.assert_called_with()
self.network_extensions_mock.assert_called_with()
def test_extension_list_identity(self):
arglist = [
@ -133,22 +195,13 @@ class TestExtensionList(TestExtension):
verifylist = [
('identity', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.identity_extensions_mock.list.assert_called_with()
self.assertEqual(self.columns, columns)
datalist = ((
identity_fakes.extension_name,
identity_fakes.extension_alias,
identity_fakes.extension_description,
), )
self.assertEqual(datalist, tuple(data))
self._test_extension_list_helper(arglist, verifylist, datalist)
self.identity_extensions_mock.list.assert_called_with()
def test_extension_list_network(self):
arglist = [
@ -157,13 +210,6 @@ class TestExtensionList(TestExtension):
verifylist = [
('network', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.network_extensions_mock.assert_called_with()
self.assertEqual(self.columns, columns)
datalist = (
(
network_fakes.extension_name,
@ -171,4 +217,35 @@ class TestExtensionList(TestExtension):
network_fakes.extension_description,
),
)
self.assertEqual(datalist, tuple(data))
self._test_extension_list_helper(arglist, verifylist, datalist)
self.network_extensions_mock.assert_called_with()
def test_extension_list_compute(self):
arglist = [
'--compute',
]
verifylist = [
('compute', True),
]
datalist = ((
compute_fakes.extension_name,
compute_fakes.extension_alias,
compute_fakes.extension_description,
), )
self._test_extension_list_helper(arglist, verifylist, datalist)
self.compute_extensions_mock.show_all.assert_called_with()
def test_extension_list_volume(self):
arglist = [
'--volume',
]
verifylist = [
('volume', True),
]
datalist = ((
volume_fakes.extension_name,
volume_fakes.extension_alias,
volume_fakes.extension_description,
), )
self._test_extension_list_helper(arglist, verifylist, datalist)
self.volume_extensions_mock.show_all.assert_called_with()

@ -211,6 +211,26 @@ IMAGE = {
'name': image_name
}
extension_name = 'SchedulerHints'
extension_namespace = 'http://docs.openstack.org/'\
'block-service/ext/scheduler-hints/api/v2'
extension_description = 'Pass arbitrary key/value'\
'pairs to the scheduler.'
extension_updated = '2013-04-18T00:00:00+00:00'
extension_alias = 'OS-SCH-HNT'
extension_links = '[{"href":'\
'"https://github.com/openstack/block-api", "type":'\
' "text/html", "rel": "describedby"}]'
EXTENSION = {
'name': extension_name,
'namespace': extension_namespace,
'description': extension_description,
'updated': extension_updated,
'alias': extension_alias,
'links': extension_links,
}
class FakeVolumeClient(object):