Skip to content

Commit 4208f02

Browse files
committed
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
1 parent 4bb48c0 commit 4208f02

2 files changed

Lines changed: 137 additions & 40 deletions

File tree

openstackclient/tests/common/test_extension.py

Lines changed: 117 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
#
1313

1414
import copy
15+
import mock
1516

1617
from openstackclient.common import extension
1718
from openstackclient.tests import fakes
1819
from openstackclient.tests import utils
1920

21+
from openstackclient.tests.compute.v2 import fakes as compute_fakes
2022
from openstackclient.tests.identity.v2_0 import fakes as identity_fakes
2123
from openstackclient.tests.network.v2 import fakes as network_fakes
24+
from openstackclient.tests.volume.v2 import fakes as volume_fakes
2225

2326

2427
class TestExtension(utils.TestCommand):
@@ -34,6 +37,16 @@ def setUp(self):
3437
self.app.client_manager.identity.extensions)
3538
self.identity_extensions_mock.reset_mock()
3639

40+
self.app.client_manager.compute = compute_fakes.FakeComputev2Client(
41+
endpoint=fakes.AUTH_URL,
42+
token=fakes.AUTH_TOKEN,
43+
)
44+
45+
self.app.client_manager.volume = volume_fakes.FakeVolumeClient(
46+
endpoint=fakes.AUTH_URL,
47+
token=fakes.AUTH_TOKEN,
48+
)
49+
3750
network_client = network_fakes.FakeNetworkV2Client()
3851
self.app.client_manager.network = network_client
3952
self.network_extensions_mock = network_client.extensions
@@ -43,6 +56,8 @@ def setUp(self):
4356
class TestExtensionList(TestExtension):
4457

4558
columns = ('Name', 'Alias', 'Description')
59+
long_columns = ('Name', 'Namespace', 'Description', 'Alias', 'Updated',
60+
'Links')
4661

4762
def setUp(self):
4863
super(TestExtensionList, self).setUp()
@@ -55,36 +70,76 @@ def setUp(self):
5570
),
5671
]
5772

73+
self.app.client_manager.compute.list_extensions = mock.Mock()
74+
self.compute_extensions_mock = (
75+
self.app.client_manager.compute.list_extensions)
76+
self.compute_extensions_mock.show_all.return_value = [
77+
fakes.FakeResource(
78+
None,
79+
copy.deepcopy(compute_fakes.EXTENSION),
80+
loaded=True,
81+
),
82+
]
83+
84+
self.app.client_manager.volume.list_extensions = mock.Mock()
85+
self.volume_extensions_mock = (
86+
self.app.client_manager.volume.list_extensions)
87+
self.volume_extensions_mock.show_all.return_value = [
88+
fakes.FakeResource(
89+
None,
90+
copy.deepcopy(volume_fakes.EXTENSION),
91+
loaded=True,
92+
),
93+
]
94+
5895
# Get the command object to test
5996
self.cmd = extension.ListExtension(self.app, None)
6097

61-
def test_extension_list_no_options(self):
62-
arglist = []
63-
verifylist = []
98+
def _test_extension_list_helper(self, arglist, verifylist,
99+
expected_data, long=False):
64100
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
65101

66102
# In base command class Lister in cliff, abstract method take_action()
67103
# returns a tuple containing the column names and an iterable
68104
# containing the data to be listed.
69105
columns, data = self.cmd.take_action(parsed_args)
70106

71-
# no args should output from all services
72-
self.identity_extensions_mock.list.assert_called_with()
107+
if long:
108+
self.assertEqual(self.long_columns, columns)
109+
else:
110+
self.assertEqual(self.columns, columns)
111+
self.assertEqual(expected_data, tuple(data))
73112

74-
self.assertEqual(self.columns, columns)
113+
def test_extension_list_no_options(self):
114+
arglist = []
115+
verifylist = []
75116
datalist = (
76117
(
77118
identity_fakes.extension_name,
78119
identity_fakes.extension_alias,
79120
identity_fakes.extension_description,
80121
),
122+
(
123+
compute_fakes.extension_name,
124+
compute_fakes.extension_alias,
125+
compute_fakes.extension_description,
126+
),
127+
(
128+
volume_fakes.extension_name,
129+
volume_fakes.extension_alias,
130+
volume_fakes.extension_description,
131+
),
81132
(
82133
network_fakes.extension_name,
83134
network_fakes.extension_alias,
84135
network_fakes.extension_description,
85136
),
86137
)
87-
self.assertEqual(datalist, tuple(data))
138+
self._test_extension_list_helper(arglist, verifylist, datalist)
139+
self.identity_extensions_mock.list.assert_called_with()
140+
self.compute_extensions_mock.show_all.assert_called_with()
141+
self.volume_extensions_mock.show_all.assert_called_with()
142+
self.network_extensions_mock.assert_called_with()
88143

89144
def test_extension_list_long(self):
90145
arglist = [
@@ -93,19 +148,6 @@ def test_extension_list_long(self):
93148
verifylist = [
94149
('long', True),
95150
]
96-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
97-
98-
# In base command class Lister in cliff, abstract method take_action()
99-
# returns a tuple containing the column names and an iterable
100-
# containing the data to be listed.
101-
columns, data = self.cmd.take_action(parsed_args)
102-
103-
# no args should output from all services
104-
self.identity_extensions_mock.list.assert_called_with()
105-
106-
collist = ('Name', 'Namespace', 'Description', 'Alias', 'Updated',
107-
'Links')
108-
self.assertEqual(collist, columns)
109151
datalist = (
110152
(
111153
identity_fakes.extension_name,
@@ -115,6 +157,22 @@ def test_extension_list_long(self):
115157
identity_fakes.extension_updated,
116158
identity_fakes.extension_links,
117159
),
160+
(
161+
compute_fakes.extension_name,
162+
compute_fakes.extension_namespace,
163+
compute_fakes.extension_description,
164+
compute_fakes.extension_alias,
165+
compute_fakes.extension_updated,
166+
compute_fakes.extension_links,
167+
),
168+
(
169+
volume_fakes.extension_name,
170+
volume_fakes.extension_namespace,
171+
volume_fakes.extension_description,
172+
volume_fakes.extension_alias,
173+
volume_fakes.extension_updated,
174+
volume_fakes.extension_links,
175+
),
118176
(
119177
network_fakes.extension_name,
120178
network_fakes.extension_namespace,
@@ -124,7 +182,11 @@ def test_extension_list_long(self):
124182
network_fakes.extension_links,
125183
),
126184
)
127-
self.assertEqual(datalist, tuple(data))
185+
self._test_extension_list_helper(arglist, verifylist, datalist, True)
186+
self.identity_extensions_mock.list.assert_called_with()
187+
self.compute_extensions_mock.show_all.assert_called_with()
188+
self.volume_extensions_mock.show_all.assert_called_with()
189+
self.network_extensions_mock.assert_called_with()
128190

129191
def test_extension_list_identity(self):
130192
arglist = [
@@ -133,22 +195,13 @@ def test_extension_list_identity(self):
133195
verifylist = [
134196
('identity', True),
135197
]
136-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
137-
138-
# In base command class Lister in cliff, abstract method take_action()
139-
# returns a tuple containing the column names and an iterable
140-
# containing the data to be listed.
141-
columns, data = self.cmd.take_action(parsed_args)
142-
143-
self.identity_extensions_mock.list.assert_called_with()
144-
145-
self.assertEqual(self.columns, columns)
146198
datalist = ((
147199
identity_fakes.extension_name,
148200
identity_fakes.extension_alias,
149201
identity_fakes.extension_description,
150202
), )
151-
self.assertEqual(datalist, tuple(data))
203+
self._test_extension_list_helper(arglist, verifylist, datalist)
204+
self.identity_extensions_mock.list.assert_called_with()
152205

153206
def test_extension_list_network(self):
154207
arglist = [
@@ -157,18 +210,42 @@ def test_extension_list_network(self):
157210
verifylist = [
158211
('network', True),
159212
]
160-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
161-
162-
columns, data = self.cmd.take_action(parsed_args)
163-
164-
self.network_extensions_mock.assert_called_with()
165-
166-
self.assertEqual(self.columns, columns)
167213
datalist = (
168214
(
169215
network_fakes.extension_name,
170216
network_fakes.extension_alias,
171217
network_fakes.extension_description,
172218
),
173219
)
174-
self.assertEqual(datalist, tuple(data))
220+
self._test_extension_list_helper(arglist, verifylist, datalist)
221+
self.network_extensions_mock.assert_called_with()
222+
223+
def test_extension_list_compute(self):
224+
arglist = [
225+
'--compute',
226+
]
227+
verifylist = [
228+
('compute', True),
229+
]
230+
datalist = ((
231+
compute_fakes.extension_name,
232+
compute_fakes.extension_alias,
233+
compute_fakes.extension_description,
234+
), )
235+
self._test_extension_list_helper(arglist, verifylist, datalist)
236+
self.compute_extensions_mock.show_all.assert_called_with()
237+
238+
def test_extension_list_volume(self):
239+
arglist = [
240+
'--volume',
241+
]
242+
verifylist = [
243+
('volume', True),
244+
]
245+
datalist = ((
246+
volume_fakes.extension_name,
247+
volume_fakes.extension_alias,
248+
volume_fakes.extension_description,
249+
), )
250+
self._test_extension_list_helper(arglist, verifylist, datalist)
251+
self.volume_extensions_mock.show_all.assert_called_with()

openstackclient/tests/volume/v2/fakes.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,26 @@
211211
'name': image_name
212212
}
213213

214+
extension_name = 'SchedulerHints'
215+
extension_namespace = 'http://docs.openstack.org/'\
216+
'block-service/ext/scheduler-hints/api/v2'
217+
extension_description = 'Pass arbitrary key/value'\
218+
'pairs to the scheduler.'
219+
extension_updated = '2013-04-18T00:00:00+00:00'
220+
extension_alias = 'OS-SCH-HNT'
221+
extension_links = '[{"href":'\
222+
'"https://github.com/openstack/block-api", "type":'\
223+
' "text/html", "rel": "describedby"}]'
224+
225+
EXTENSION = {
226+
'name': extension_name,
227+
'namespace': extension_namespace,
228+
'description': extension_description,
229+
'updated': extension_updated,
230+
'alias': extension_alias,
231+
'links': extension_links,
232+
}
233+
214234

215235
class FakeVolumeClient(object):
216236

0 commit comments

Comments
 (0)