Skip to content

Commit 8ce5d90

Browse files
author
Tang Chen
committed
Refactor service unit tests
Add a FakeService class, and refactor service unit tests to use this class. Change-Id: I650ad83386a58205ebe42274d2bf2f508436bfa6
1 parent e45b1c6 commit 8ce5d90

2 files changed

Lines changed: 101 additions & 73 deletions

File tree

openstackclient/tests/compute/v2/fakes.py

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,6 @@
7676
QUOTA_columns = tuple(sorted(QUOTA))
7777
QUOTA_data = tuple(QUOTA[x] for x in sorted(QUOTA))
7878

79-
service_host = 'host_test'
80-
service_binary = 'compute_test'
81-
service_status = 'enabled'
82-
service_disabled_reason = 'earthquake'
83-
SERVICE = {
84-
'host': service_host,
85-
'binary': service_binary,
86-
'status': service_status,
87-
'disabled_reason': service_disabled_reason,
88-
}
89-
9079

9180
class FakeAggregate(object):
9281
"""Fake one aggregate."""
@@ -523,6 +512,54 @@ def get_servers(servers=None, count=2):
523512
return mock.MagicMock(side_effect=servers)
524513

525514

515+
class FakeService(object):
516+
"""Fake one or more services."""
517+
518+
@staticmethod
519+
def create_one_service(attrs=None):
520+
"""Create a fake service.
521+
522+
:param Dictionary attrs:
523+
A dictionary with all attributes
524+
:return:
525+
A FakeResource object, with id, name, ram, vcpus, properties
526+
"""
527+
attrs = attrs or {}
528+
529+
# Set default attributes.
530+
service_info = {
531+
'host': 'host-' + uuid.uuid4().hex,
532+
'binary': 'binary-' + uuid.uuid4().hex,
533+
'status': 'enabled',
534+
'disabled_reason': 'earthquake',
535+
}
536+
537+
# Overwrite default attributes.
538+
service_info.update(attrs)
539+
540+
service = fakes.FakeResource(info=copy.deepcopy(service_info),
541+
loaded=True)
542+
543+
return service
544+
545+
@staticmethod
546+
def create_services(attrs=None, count=2):
547+
"""Create multiple fake services.
548+
549+
:param Dictionary attrs:
550+
A dictionary with all attributes
551+
:param int count:
552+
The number of services to fake
553+
:return:
554+
A list of FakeResource objects faking the services
555+
"""
556+
services = []
557+
for i in range(0, count):
558+
services.append(FakeService.create_one_service(attrs))
559+
560+
return services
561+
562+
526563
class FakeFlavor(object):
527564
"""Fake one or more flavors."""
528565

openstackclient/tests/compute/v2/test_service.py

Lines changed: 53 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313
# under the License.
1414
#
1515

16-
import copy
1716
import mock
1817

1918
from openstackclient.compute.v2 import service
2019
from openstackclient.tests.compute.v2 import fakes as compute_fakes
21-
from openstackclient.tests import fakes
2220

2321

2422
class TestService(compute_fakes.TestComputev2):
@@ -36,24 +34,26 @@ class TestServiceDelete(TestService):
3634
def setUp(self):
3735
super(TestServiceDelete, self).setUp()
3836

37+
self.service = compute_fakes.FakeService.create_one_service()
38+
3939
self.service_mock.delete.return_value = None
4040

4141
# Get the command object to test
4242
self.cmd = service.DeleteService(self.app, None)
4343

4444
def test_service_delete_no_options(self):
4545
arglist = [
46-
compute_fakes.service_binary,
46+
self.service.binary,
4747
]
4848
verifylist = [
49-
('service', compute_fakes.service_binary),
49+
('service', self.service.binary),
5050
]
5151
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5252

5353
result = self.cmd.take_action(parsed_args)
5454

5555
self.service_mock.delete.assert_called_with(
56-
compute_fakes.service_binary,
56+
self.service.binary,
5757
)
5858
self.assertIsNone(result)
5959

@@ -63,23 +63,21 @@ class TestServiceList(TestService):
6363
def setUp(self):
6464
super(TestServiceList, self).setUp()
6565

66-
self.service_mock.list.return_value = [fakes.FakeResource(
67-
None,
68-
copy.deepcopy(compute_fakes.SERVICE),
69-
loaded=True,
70-
)]
66+
self.service = compute_fakes.FakeService.create_one_service()
67+
68+
self.service_mock.list.return_value = [self.service]
7169

7270
# Get the command object to test
7371
self.cmd = service.ListService(self.app, None)
7472

7573
def test_service_list(self):
7674
arglist = [
77-
'--host', compute_fakes.service_host,
78-
'--service', compute_fakes.service_binary,
75+
'--host', self.service.host,
76+
'--service', self.service.binary,
7977
]
8078
verifylist = [
81-
('host', compute_fakes.service_host),
82-
('service', compute_fakes.service_binary),
79+
('host', self.service.host),
80+
('service', self.service.binary),
8381
]
8482
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
8583

@@ -89,22 +87,22 @@ def test_service_list(self):
8987
columns, data = self.cmd.take_action(parsed_args)
9088

9189
self.service_mock.list.assert_called_with(
92-
compute_fakes.service_host,
93-
compute_fakes.service_binary,
90+
self.service.host,
91+
self.service.binary,
9492
)
9593

9694
self.assertNotIn("Disabled Reason", columns)
97-
self.assertNotIn(compute_fakes.service_disabled_reason, list(data)[0])
95+
self.assertNotIn(self.service.disabled_reason, list(data)[0])
9896

9997
def test_service_list_with_long_option(self):
10098
arglist = [
101-
'--host', compute_fakes.service_host,
102-
'--service', compute_fakes.service_binary,
99+
'--host', self.service.host,
100+
'--service', self.service.binary,
103101
'--long'
104102
]
105103
verifylist = [
106-
('host', compute_fakes.service_host),
107-
('service', compute_fakes.service_binary),
104+
('host', self.service.host),
105+
('service', self.service.binary),
108106
('long', True)
109107
]
110108
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -115,67 +113,60 @@ def test_service_list_with_long_option(self):
115113
columns, data = self.cmd.take_action(parsed_args)
116114

117115
self.assertIn("Disabled Reason", columns)
118-
self.assertIn(compute_fakes.service_disabled_reason, list(data)[0])
116+
self.assertIn(self.service.disabled_reason, list(data)[0])
119117

120118

121119
class TestServiceSet(TestService):
122120

123121
def setUp(self):
124122
super(TestServiceSet, self).setUp()
125123

126-
self.service_mock.enable.return_value = [fakes.FakeResource(
127-
None,
128-
copy.deepcopy(compute_fakes.SERVICE),
129-
loaded=True,
130-
)]
124+
self.service = compute_fakes.FakeService.create_one_service()
131125

132-
self.service_mock.disable.return_value = [fakes.FakeResource(
133-
None,
134-
copy.deepcopy(compute_fakes.SERVICE),
135-
loaded=True,
136-
)]
126+
self.service_mock.enable.return_value = self.service
127+
self.service_mock.disable.return_value = self.service
137128

138129
self.cmd = service.SetService(self.app, None)
139130

140131
def test_service_set_enable(self):
141132
arglist = [
142133
'--enable',
143-
compute_fakes.service_host,
144-
compute_fakes.service_binary,
134+
self.service.host,
135+
self.service.binary,
145136
]
146137
verifylist = [
147138
('enabled', True),
148-
('host', compute_fakes.service_host),
149-
('service', compute_fakes.service_binary),
139+
('host', self.service.host),
140+
('service', self.service.binary),
150141
]
151142
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
152143

153144
result = self.cmd.take_action(parsed_args)
154145

155146
self.service_mock.enable.assert_called_with(
156-
compute_fakes.service_host,
157-
compute_fakes.service_binary,
147+
self.service.host,
148+
self.service.binary
158149
)
159150
self.assertIsNone(result)
160151

161152
def test_service_set_disable(self):
162153
arglist = [
163154
'--disable',
164-
compute_fakes.service_host,
165-
compute_fakes.service_binary,
155+
self.service.host,
156+
self.service.binary,
166157
]
167158
verifylist = [
168159
('enabled', False),
169-
('host', compute_fakes.service_host),
170-
('service', compute_fakes.service_binary),
160+
('host', self.service.host),
161+
('service', self.service.binary),
171162
]
172163
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
173164

174165
result = self.cmd.take_action(parsed_args)
175166

176167
self.service_mock.disable.assert_called_with(
177-
compute_fakes.service_host,
178-
compute_fakes.service_binary,
168+
self.service.host,
169+
self.service.binary
179170
)
180171
self.assertIsNone(result)
181172

@@ -184,22 +175,22 @@ def test_service_set_disable_with_reason(self):
184175
arglist = [
185176
'--disable',
186177
'--disable-reason', reason,
187-
compute_fakes.service_host,
188-
compute_fakes.service_binary,
178+
self.service.host,
179+
self.service.binary,
189180
]
190181
verifylist = [
191182
('enabled', False),
192183
('disable_reason', reason),
193-
('host', compute_fakes.service_host),
194-
('service', compute_fakes.service_binary),
184+
('host', self.service.host),
185+
('service', self.service.binary),
195186
]
196187
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
197188

198189
result = self.cmd.take_action(parsed_args)
199190

200191
self.service_mock.disable_log_reason.assert_called_with(
201-
compute_fakes.service_host,
202-
compute_fakes.service_binary,
192+
self.service.host,
193+
self.service.binary,
203194
reason
204195
)
205196
self.assertIsNone(result)
@@ -208,14 +199,14 @@ def test_service_set_only_with_disable_reason(self):
208199
reason = 'earthquake'
209200
arglist = [
210201
'--disable-reason', reason,
211-
compute_fakes.service_host,
212-
compute_fakes.service_binary,
202+
self.service.host,
203+
self.service.binary,
213204
]
214205
verifylist = [
215206
('enabled', True),
216207
('disable_reason', reason),
217-
('host', compute_fakes.service_host),
218-
('service', compute_fakes.service_binary),
208+
('host', self.service.host),
209+
('service', self.service.binary),
219210
]
220211
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
221212

@@ -226,8 +217,8 @@ def test_service_set_only_with_disable_reason(self):
226217
mock_log.assert_called_once_with(msg)
227218

228219
self.service_mock.enable.assert_called_with(
229-
compute_fakes.service_host,
230-
compute_fakes.service_binary
220+
self.service.host,
221+
self.service.binary
231222
)
232223
self.assertIsNone(result)
233224

@@ -236,14 +227,14 @@ def test_service_set_enable_with_disable_reason(self):
236227
arglist = [
237228
'--enable',
238229
'--disable-reason', reason,
239-
compute_fakes.service_host,
240-
compute_fakes.service_binary,
230+
self.service.host,
231+
self.service.binary,
241232
]
242233
verifylist = [
243234
('enabled', True),
244235
('disable_reason', reason),
245-
('host', compute_fakes.service_host),
246-
('service', compute_fakes.service_binary),
236+
('host', self.service.host),
237+
('service', self.service.binary),
247238
]
248239
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
249240

@@ -254,7 +245,7 @@ def test_service_set_enable_with_disable_reason(self):
254245
mock_log.assert_called_once_with(msg)
255246

256247
self.service_mock.enable.assert_called_with(
257-
compute_fakes.service_host,
258-
compute_fakes.service_binary
248+
self.service.host,
249+
self.service.binary
259250
)
260251
self.assertIsNone(result)

0 commit comments

Comments
 (0)