Merge ~adam-collard/maas:less-testtools into maas:master

Proposed by Adam Collard
Status: Merged
Approved by: Adam Collard
Approved revision: 4e7ad7e674ecf182a46a255f26dca354a87e0757
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~adam-collard/maas:less-testtools
Merge into: maas:master
Diff against target: 998 lines (+170/-222)
10 files modified
src/provisioningserver/drivers/hardware/tests/test_seamicro.py (+21/-37)
src/provisioningserver/drivers/hardware/tests/test_ucsm.py (+40/-68)
src/provisioningserver/drivers/hardware/tests/test_virsh.py (+32/-37)
src/provisioningserver/drivers/hardware/tests/test_vmware.py (+32/-29)
src/provisioningserver/drivers/osystem/tests/test_centos.py (+1/-3)
src/provisioningserver/drivers/osystem/tests/test_esxi.py (+1/-3)
src/provisioningserver/drivers/osystem/tests/test_rhel.py (+1/-3)
src/provisioningserver/tests/test_monkey.py (+39/-36)
src/provisioningserver/utils/tests/test_events.py (+1/-3)
src/provisioningserver/utils/tests/test_text.py (+2/-3)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Anton Troyanov Approve
Review via email: mp+457042@code.launchpad.net

Commit message

refactor(pserv/*): replace testtools' expectThat with unittest

refactor(pserv/drivers/hardware): replace testtools with unittest

To post a comment you must log in.
Revision history for this message
Anton Troyanov (troyanov) :
review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b less-testtools lp:~adam-collard/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/4199/console
COMMIT: ceddd187e1b20f2590eb5ba1dc87046584d1a02e

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b less-testtools lp:~adam-collard/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 4e7ad7e674ecf182a46a255f26dca354a87e0757

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/provisioningserver/drivers/hardware/tests/test_seamicro.py b/src/provisioningserver/drivers/hardware/tests/test_seamicro.py
2index f06111c..0907960 100644
3--- a/src/provisioningserver/drivers/hardware/tests/test_seamicro.py
4+++ b/src/provisioningserver/drivers/hardware/tests/test_seamicro.py
5@@ -14,11 +14,6 @@ from twisted.internet.threads import deferToThread
6
7 from maastesting import get_testing_timeout
8 from maastesting.factory import factory
9-from maastesting.matchers import (
10- MockCalledOnceWith,
11- MockCalledWith,
12- MockCallsMatch,
13-)
14 from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
15 from provisioningserver.drivers.hardware import seamicro
16 from provisioningserver.drivers.hardware.seamicro import (
17@@ -39,9 +34,9 @@ from provisioningserver.utils.twisted import asynchronous
18 class FakeResponse:
19 def __init__(self, response_code, response, is_json=False):
20 self.response_code = response_code
21- self.response = response
22 if is_json:
23- self.response = json.dumps(response)
24+ response = json.dumps(response)
25+ self.response = response
26
27 def getcode(self):
28 return self.response_code
29@@ -163,7 +158,7 @@ class TestSeaMicroAPIV09(MAASTestCase):
30 def assert_put_power_called(self, mock, idx, new_status, *params):
31 location = "servers/%d" % idx
32 params = ["action=%s" % new_status] + list(params)
33- self.assertThat(mock, MockCalledOnceWith(location, params=params))
34+ mock.assert_called_once_with(location, params=params)
35
36 def test_put_server_power_on_using_pxe(self):
37 token = factory.make_string()
38@@ -251,12 +246,11 @@ class TestSeaMicro(MAASTestCase):
39 password,
40 "ipmi",
41 )
42- self.assertThat(
43- mock,
44- MockCallsMatch(
45+ mock.assert_has_calls(
46+ [
47 call("v2.0", ip, username, password),
48 call("v0.9", ip, username, password),
49- ),
50+ ]
51 )
52
53 def test_find_seamicro15k_servers_restapi(self):
54@@ -269,9 +263,7 @@ class TestSeaMicro(MAASTestCase):
55 password,
56 "restapi",
57 )
58- self.assertThat(
59- mock, MockCalledOnceWith("v0.9", ip, username, password)
60- )
61+ mock.assert_called_once_with("v0.9", ip, username, password)
62
63 def test_find_seamicro15k_servers_restapi2(self):
64 mock, ip, username, password = self.configure_get_seamicro15k_api()
65@@ -283,9 +275,7 @@ class TestSeaMicro(MAASTestCase):
66 password,
67 "restapi2",
68 )
69- self.assertThat(
70- mock, MockCalledOnceWith("v2.0", ip, username, password)
71- )
72+ mock.assert_called_once_with("v2.0", ip, username, password)
73
74 def configure_api_v09_login(self, token=None):
75 token = token or factory.make_string()
76@@ -349,17 +339,14 @@ class TestSeaMicro(MAASTestCase):
77 "power_pass": password,
78 "power_user": username,
79 }
80- self.expectThat(
81- mock_create_node,
82- MockCalledWith(
83- last["serverMacAddr"],
84- "amd64",
85- "sm15k",
86- power_params,
87- domain=domain,
88- ),
89+ mock_create_node.assert_called_with(
90+ last["serverMacAddr"],
91+ "amd64",
92+ "sm15k",
93+ power_params,
94+ domain=domain,
95 )
96- self.expectThat(mock_commission_node, MockCalledWith(system_id, user))
97+ mock_commission_node.assert_called_with(system_id, user)
98
99 def test_power_control_seamicro15k_v09(self):
100 self.configure_api_v09_login()
101@@ -369,9 +356,7 @@ class TestSeaMicro(MAASTestCase):
102 mock = self.patch(SeaMicroAPIV09, "power_server")
103
104 power_control_seamicro15k_v09(ip, username, password, "25", "on")
105- self.assertThat(
106- mock, MockCalledOnceWith("25/0", POWER_STATUS.ON, do_pxe=True)
107- )
108+ mock.assert_called_once_with("25/0", POWER_STATUS.ON, do_pxe=True)
109
110 def test_power_control_seamicro15k_v09_retry_failure(self):
111 self.configure_api_v09_login()
112@@ -439,9 +424,8 @@ class TestSeaMicro(MAASTestCase):
113 )
114 self.assertEqual(2, mock_create_node.call_count)
115
116- self.expectThat(
117- mock_create_node,
118- MockCallsMatch(
119+ mock_create_node.assert_has_calls(
120+ [
121 call(
122 fake_server_0.get_fake_macs(),
123 "amd64",
124@@ -468,9 +452,9 @@ class TestSeaMicro(MAASTestCase):
125 },
126 domain=None,
127 ),
128- ),
129+ ]
130 )
131- self.expectThat(mock_commission_node, MockCalledWith(system_id, user))
132+ mock_commission_node.assert_called_with(system_id, user)
133
134 def test_power_control_seamicro15k_v2(self):
135 ip = factory.make_ipv4_address()
136@@ -487,7 +471,7 @@ class TestSeaMicro(MAASTestCase):
137 mock_get_api.return_value = fake_client
138
139 power_control_seamicro15k_v2(ip, username, password, "0", "on")
140- self.assertThat(mock_power_on, MockCalledOnceWith(using_pxe=True))
141+ mock_power_on.assert_called_once_with(using_pxe=True)
142
143 def test_power_control_seamicro15k_v2_raises_error_when_api_None(self):
144 ip = factory.make_ipv4_address()
145diff --git a/src/provisioningserver/drivers/hardware/tests/test_ucsm.py b/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
146index ebac33b..87f6a16 100644
147--- a/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
148+++ b/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
149@@ -10,17 +10,11 @@ import urllib.parse
150 import urllib.request
151
152 from lxml.etree import Element, SubElement, XML
153-from testtools.matchers import Equals
154 from twisted.internet.defer import inlineCallbacks
155 from twisted.internet.threads import deferToThread
156
157 from maastesting import get_testing_timeout
158 from maastesting.factory import factory
159-from maastesting.matchers import (
160- MockCalledOnceWith,
161- MockCallsMatch,
162- MockNotCalled,
163-)
164 from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
165 from provisioningserver.drivers.hardware import ucsm
166 from provisioningserver.drivers.hardware.ucsm import (
167@@ -142,7 +136,7 @@ class TestLogin(MAASTestCase):
168 api, mock = make_api_patch_call(self, user=user, password=password)
169 api.login()
170 fields = {"inName": user, "inPassword": password}
171- self.assertThat(mock, MockCalledOnceWith("aaaLogin", fields))
172+ mock.assert_called_once_with("aaaLogin", fields)
173
174
175 class TestLogout(MAASTestCase):
176@@ -157,7 +151,7 @@ class TestLogout(MAASTestCase):
177 cookie = api.cookie
178 api.logout()
179 fields = {"inCookie": cookie}
180- self.assertThat(mock, MockCalledOnceWith("aaaLogout", fields))
181+ mock.assert_called_once_with("aaaLogout", fields)
182
183
184 class TestConfigResolveClass(MAASTestCase):
185@@ -166,9 +160,7 @@ class TestConfigResolveClass(MAASTestCase):
186 api, mock = make_api_patch_call(self)
187 api.config_resolve_class(class_id)
188 fields = {"cookie": api.cookie, "classId": class_id}
189- self.assertThat(
190- mock, MockCalledOnceWith("configResolveClass", fields, ANY)
191- )
192+ mock.assert_called_once_with("configResolveClass", fields, ANY)
193
194 def test_with_filters(self):
195 class_id = make_class()
196@@ -192,18 +184,14 @@ class TestConfigResolveChildren(MAASTestCase):
197 api, mock = make_api_patch_call(self)
198 api.config_resolve_children(dn, class_id)
199 fields = {"inDn": dn, "classId": class_id, "cookie": api.cookie}
200- self.assertThat(
201- mock, MockCalledOnceWith("configResolveChildren", fields)
202- )
203+ mock.assert_called_once_with("configResolveChildren", fields)
204
205 def test_no_class_id(self):
206 dn = make_dn()
207 api, mock = make_api_patch_call(self)
208 api.config_resolve_children(dn)
209 fields = {"inDn": dn, "cookie": api.cookie}
210- self.assertThat(
211- mock, MockCalledOnceWith("configResolveChildren", fields)
212- )
213+ mock.assert_called_once_with("configResolveChildren", fields)
214
215 def test_return_response(self):
216 api, mock = make_api_patch_call(self)
217@@ -219,7 +207,7 @@ class TestConfigConfMo(MAASTestCase):
218 api, mock = make_api_patch_call(self)
219 api.config_conf_mo(dn, config_items)
220 fields = {"dn": dn, "cookie": api.cookie}
221- self.assertThat(mock, MockCalledOnceWith("configConfMo", fields, ANY))
222+ mock.assert_called_once_with("configConfMo", fields, ANY)
223 in_configs = mock.call_args[0][2]
224 self.assertEqual(config_items, in_configs[0][:])
225
226@@ -240,10 +228,8 @@ class TestCall(MAASTestCase):
227 mock_send_request.return_value = response
228
229 api._call(name, fields, children)
230- self.assertThat(
231- mock_make_request_data, MockCalledOnceWith(name, fields, children)
232- )
233- self.assertThat(mock_send_request, MockCalledOnceWith(request))
234+ mock_make_request_data.assert_called_once_with(name, fields, children)
235+ mock_send_request.assert_called_once_with(request)
236
237
238 class TestSendRequest(MAASTestCase):
239@@ -266,7 +252,7 @@ class TestConfigResolveDn(MAASTestCase):
240 test_dn = make_dn()
241 fields = {"cookie": api.cookie, "dn": test_dn}
242 api.config_resolve_dn(test_dn)
243- self.assertThat(mock, MockCalledOnceWith("configResolveDn", fields))
244+ mock.assert_called_once_with("configResolveDn", fields)
245
246
247 class TestGetServers(MAASTestCase):
248@@ -292,7 +278,7 @@ class TestGetServers(MAASTestCase):
249 api = make_api()
250 mock = self.patch(api, "config_resolve_class")
251 get_servers(api, uuid)
252- self.assertThat(mock, MockCalledOnceWith("computeItem", ANY))
253+ mock.assert_called_once_with("computeItem", ANY)
254
255
256 class TestProbeLanBootOptions(MAASTestCase):
257@@ -309,16 +295,11 @@ class TestProbeLanBootOptions(MAASTestCase):
258 )
259 mock_config_resolve_children.return_value = fake_result
260 self.assertEqual(1, len(probe_lan_boot_options(api, server)))
261- self.assertThat(
262- mock_config_resolve_children,
263- MockCalledOnceWith(sentinel.profile_get),
264- )
265- self.assertThat(
266- mock_service_profile.get, MockCalledOnceWith("operBootPolicyName")
267- )
268- self.assertThat(
269- mock_get_service_profile, MockCalledOnceWith(api, server)
270+ mock_config_resolve_children.assert_called_once_with(
271+ sentinel.profile_get
272 )
273+ mock_service_profile.get.assert_called_once_with("operBootPolicyName")
274+ mock_get_service_profile.assert_called_once_with(api, server)
275
276
277 class TestGetChildren(MAASTestCase):
278@@ -340,7 +321,7 @@ class TestGetChildren(MAASTestCase):
279 in_element = Element("test", {"dn": parent_dn})
280 class_id = search_class
281 get_children(api, in_element, class_id)
282- self.assertThat(mock, MockCalledOnceWith(parent_dn, search_class))
283+ mock.assert_called_once_with(parent_dn, search_class)
284
285
286 class TestGetMacs(MAASTestCase):
287@@ -359,12 +340,11 @@ class TestGetMacs(MAASTestCase):
288
289 mock.side_effect = fake_get_children
290 macs = get_macs(api, server)
291- self.assertThat(
292- mock,
293- MockCallsMatch(
294+ mock.assert_has_calls(
295+ [
296 call(api, server, "adaptorUnit"),
297 call(api, adaptor, "adaptorHostEthIf"),
298- ),
299+ ]
300 )
301 self.assertEqual([mac], macs)
302
303@@ -374,7 +354,7 @@ class TestProbeServers(MAASTestCase):
304 api = make_api()
305 mock = self.patch(ucsm, "get_servers")
306 probe_servers(api)
307- self.assertThat(mock, MockCalledOnceWith(api))
308+ mock.assert_called_once_with(api)
309
310 def test_returns_results(self):
311 servers = [{"uuid": factory.make_UUID()}]
312@@ -415,7 +395,7 @@ class TestGetServerPowerControl(MAASTestCase):
313 dn = make_dn()
314 server = Element("computeItem", {"assignedToDn": dn})
315 power_control = get_server_power_control(api, server)
316- self.assertThat(mock, MockCalledOnceWith(dn, "lsPower"))
317+ mock.assert_called_once_with(dn, "lsPower")
318 self.assertEqual("lsPower", power_control.tag)
319
320
321@@ -427,7 +407,7 @@ class TestSetServerPowerControl(MAASTestCase):
322 config_conf_mo_mock = self.patch(api, "config_conf_mo")
323 state = "state"
324 set_server_power_control(api, power_control, state)
325- self.assertThat(config_conf_mo_mock, MockCalledOnceWith(power_dn, ANY))
326+ config_conf_mo_mock.assert_called_once_with(power_dn, ANY)
327 power_change = config_conf_mo_mock.call_args[0][1][0]
328 self.assertEqual(power_change.tag, "lsPower")
329 self.assertEqual({"state": state, "dn": power_dn}, power_change.attrib)
330@@ -443,9 +423,9 @@ class TestLoggedIn(MAASTestCase):
331
332 with logged_in(url, username, password) as api:
333 self.assertEqual(mock.return_value, api)
334- self.assertThat(api.login, MockCalledOnceWith())
335+ api.login()
336
337- self.assertThat(mock.return_value.logout, MockCalledOnceWith())
338+ mock.return_value.logout.assert_called_once_with()
339
340
341 class TestValidGetPowerCommand(MAASTestCase):
342@@ -498,10 +478,9 @@ class TestPowerControlUCSM(MAASTestCase):
343 ucsm, "set_server_power_control"
344 )
345 power_control_ucsm("url", "username", "password", uuid, "off")
346- self.assertThat(get_servers_mock, MockCalledOnceWith(api, uuid))
347- self.assertThat(
348- set_server_power_control_mock,
349- MockCalledOnceWith(api, power_control, state),
350+ get_servers_mock.assert_called_once_with(api, uuid)
351+ set_server_power_control_mock.assert_called_once_with(
352+ api, power_control, state
353 )
354
355
356@@ -517,8 +496,8 @@ class TestUCSMPowerState(MAASTestCase):
357 get_servers_mock.return_value = [make_server("off")]
358
359 power_state = power_state_ucsm(url, username, password, uuid)
360- self.expectThat(get_servers_mock, MockCalledOnceWith(api, uuid))
361- self.expectThat(power_state, Equals("off"))
362+ get_servers_mock.assert_called_once_with(api, uuid)
363+ self.assertEqual(power_state, "off")
364
365 def test_power_state_get_on(self):
366 url = factory.make_name("url")
367@@ -531,8 +510,8 @@ class TestUCSMPowerState(MAASTestCase):
368 get_servers_mock.return_value = [make_server("on")]
369
370 power_state = power_state_ucsm(url, username, password, uuid)
371- self.expectThat(get_servers_mock, MockCalledOnceWith(api, uuid))
372- self.expectThat(power_state, Equals("on"))
373+ get_servers_mock.assert_called_once_with(api, uuid)
374+ self.assertEqual(power_state, "on")
375
376 def test_power_state_error_on_unknown_state(self):
377 url = factory.make_name("url")
378@@ -576,23 +555,18 @@ class TestProbeAndEnlistUCSM(MAASTestCase):
379 yield deferToThread(
380 probe_and_enlist_ucsm, user, url, username, password, True, domain
381 )
382- self.expectThat(
383- set_lan_boot_default_mock, MockCalledOnceWith(api, server_element)
384- )
385- self.expectThat(probe_servers_mock, MockCalledOnceWith(api))
386+ set_lan_boot_default_mock.assert_called_once_with(api, server_element)
387+ probe_servers_mock.assert_called_once_with(api)
388 params = {
389 "power_address": url,
390 "power_user": username,
391 "power_pass": password,
392 "uuid": server[0]["uuid"],
393 }
394- self.expectThat(
395- create_node_mock,
396- MockCalledOnceWith(server[1], "amd64", "ucsm", params, domain),
397- )
398- self.expectThat(
399- commission_node_mock, MockCalledOnceWith(system_id, user)
400+ create_node_mock.assert_called_once_with(
401+ server[1], "amd64", "ucsm", params, domain
402 )
403+ commission_node_mock.assert_called_once_with(system_id, user)
404
405
406 class TestGetServiceProfile(MAASTestCase):
407@@ -605,7 +579,7 @@ class TestGetServiceProfile(MAASTestCase):
408 "configResolveDn", "lsServer", "outConfig"
409 )
410 service_profile = get_service_profile(api, server)
411- self.assertThat(mock, MockCalledOnceWith(test_dn))
412+ mock.assert_called_once_with(test_dn)
413 self.assertEqual(mock.return_value[0], service_profile)
414
415
416@@ -646,7 +620,7 @@ class TestsForStripRoKeys(MAASTestCase):
417 attributes = {key: "DC" for key in RO_KEYS}
418
419 elements = [
420- Element("Element%d" % i, attributes)
421+ Element(f"Element{i}", attributes)
422 for i in range(random.randint(0, 10))
423 ]
424
425@@ -667,7 +641,7 @@ class TestMakePolicyChange(MAASTestCase):
426 mock.return_value = boot_profile_response[0]
427 change = make_policy_change(boot_profile_response)
428 self.assertIsNone(change)
429- self.assertThat(mock, MockCalledOnceWith(boot_profile_response))
430+ mock.assert_called_once_with(boot_profile_response)
431
432 def test_change_lan_to_top_priority(self):
433 boot_profile_response = Element("outConfigs")
434@@ -694,7 +668,7 @@ class TestSetLanBootDefault(MAASTestCase):
435 self.patch(ucsm, "make_policy_change").return_value = None
436 config_conf_mo = self.patch(api, "config_conf_mo")
437 set_lan_boot_default(api, server)
438- self.assertThat(config_conf_mo, MockNotCalled())
439+ config_conf_mo.assert_not_called()
440
441 def test_with_change(self):
442 api = make_api()
443@@ -707,6 +681,4 @@ class TestSetLanBootDefault(MAASTestCase):
444 self.patch(ucsm, "make_policy_change").return_value = test_change
445 config_conf_mo = self.patch(api, "config_conf_mo")
446 set_lan_boot_default(api, server)
447- self.assertThat(
448- config_conf_mo, MockCalledOnceWith(test_dn, [test_change])
449- )
450+ config_conf_mo.assert_called_once_with(test_dn, [test_change])
451diff --git a/src/provisioningserver/drivers/hardware/tests/test_virsh.py b/src/provisioningserver/drivers/hardware/tests/test_virsh.py
452index 0711efa..5c124a0 100644
453--- a/src/provisioningserver/drivers/hardware/tests/test_virsh.py
454+++ b/src/provisioningserver/drivers/hardware/tests/test_virsh.py
455@@ -11,13 +11,11 @@ from unittest.mock import call
456
457 from lxml import etree
458 import pexpect
459-from testtools.testcase import ExpectedException
460 from twisted.internet.defer import inlineCallbacks
461 from twisted.internet.threads import deferToThread
462
463 from maastesting import get_testing_timeout
464 from maastesting.factory import factory
465-from maastesting.matchers import MockCalledOnceWith, MockCallsMatch
466 from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
467 from provisioningserver.drivers.hardware import virsh
468 from provisioningserver.utils.arch import KERNEL_TO_DEBIAN_ARCHITECTURES
469@@ -130,7 +128,7 @@ class TestVirshSSH(MAASTestCase):
470 conn = self.configure_virshssh_pexpect(virsh_outputs)
471 mock_sendline = self.patch(conn, "sendline")
472 conn.login(poweraddr=None)
473- self.assertThat(mock_sendline, MockCalledOnceWith("yes"))
474+ mock_sendline.assert_called_once_with("yes")
475
476 def test_login_with_password(self):
477 virsh_outputs = [
478@@ -140,7 +138,7 @@ class TestVirshSSH(MAASTestCase):
479 fake_password = factory.make_name("password")
480 mock_sendline = self.patch(conn, "sendline")
481 conn.login(poweraddr=None, password=fake_password)
482- self.assertThat(mock_sendline, MockCalledOnceWith(fake_password))
483+ mock_sendline.assert_called_once_with(fake_password)
484
485 def test_login_missing_password(self):
486 virsh_outputs = [
487@@ -149,22 +147,22 @@ class TestVirshSSH(MAASTestCase):
488 conn = self.configure_virshssh_pexpect(virsh_outputs)
489 mock_close = self.patch(conn, "close")
490 self.assertFalse(conn.login(poweraddr=None, password=None))
491- self.assertThat(mock_close, MockCalledOnceWith())
492+ mock_close.assert_called_once_with()
493
494 def test_login_invalid(self):
495 virsh_outputs = [factory.make_string()]
496 conn = self.configure_virshssh_pexpect(virsh_outputs)
497 mock_close = self.patch(conn, "close")
498 self.assertFalse(conn.login(poweraddr=None))
499- self.assertThat(mock_close, MockCalledOnceWith())
500+ mock_close.assert_called_once_with()
501
502 def test_logout(self):
503 conn = self.configure_virshssh_pexpect()
504 mock_sendline = self.patch(conn, "sendline")
505 mock_close = self.patch(conn, "close")
506 conn.logout()
507- self.assertThat(mock_sendline, MockCalledOnceWith("quit"))
508- self.assertThat(mock_close, MockCalledOnceWith())
509+ mock_sendline.assert_called_once_with("quit")
510+ mock_close.assert_called_once_with()
511
512 def test_prompt(self):
513 virsh_outputs = ["virsh # "]
514@@ -185,8 +183,8 @@ class TestVirshSSH(MAASTestCase):
515 mock_sendline = self.patch(conn, "sendline")
516 mock_prompt = self.patch(conn, "prompt")
517 output = conn.run(cmd)
518- self.assertThat(mock_sendline, MockCalledOnceWith(expected))
519- self.assertThat(mock_prompt, MockCalledOnceWith())
520+ mock_sendline.assert_called_once_with(expected)
521+ mock_prompt.assert_called_once_with()
522 self.assertEqual("\n".join(names), output)
523
524 def test_list(self):
525@@ -242,11 +240,8 @@ class TestVirshSSH(MAASTestCase):
526 c_utf8_environment = get_env_with_locale()
527 mock_spawn = self.patch(pexpect.spawn, "__init__")
528 self.configure_virshssh("")
529- self.assertThat(
530- mock_spawn,
531- MockCalledOnceWith(
532- None, timeout=30, maxread=2000, env=c_utf8_environment
533- ),
534+ mock_spawn.assert_called_once_with(
535+ None, timeout=30, maxread=2000, env=c_utf8_environment
536 )
537
538
539@@ -359,15 +354,12 @@ class TestVirsh(MAASTestCase):
540
541 # Check that login was called with the provided poweraddr and
542 # password.
543- self.expectThat(
544- mock_login, MockCalledOnceWith(poweraddr, fake_password)
545- )
546+ mock_login.assert_called_once_with(poweraddr, fake_password)
547
548 # Check that the create command had the correct parameters for
549 # each machine.
550- self.expectThat(
551- mock_create_node,
552- MockCallsMatch(
553+ mock_create_node.assert_has_calls(
554+ [
555 call(
556 fake_macs[0],
557 fake_arch,
558@@ -408,24 +400,25 @@ class TestVirsh(MAASTestCase):
559 domain,
560 machines[4],
561 ),
562- ),
563+ ]
564 )
565
566 # The first and last machine should have poweroff called on it, as it
567 # was initial in the on state.
568- self.expectThat(
569- mock_poweroff, MockCallsMatch(call(machines[0]), call(machines[3]))
570- )
571+ mock_poweroff.assert_has_calls([call(machines[0]), call(machines[3])])
572
573- self.assertThat(mock_logout, MockCalledOnceWith())
574- self.expectThat(
575- mock_commission_node,
576- MockCallsMatch(
577+ mock_logout.assert_called_once_with()
578+ mock_commission_node.assert_has_calls(
579+ [
580 call(system_id, user),
581+ call().wait(30),
582 call(system_id, user),
583+ call().wait(30),
584 call(system_id, user),
585+ call().wait(30),
586 call(system_id, user),
587- ),
588+ call().wait(30),
589+ ]
590 )
591
592 @inlineCallbacks
593@@ -434,7 +427,9 @@ class TestVirsh(MAASTestCase):
594 poweraddr = factory.make_name("poweraddr")
595 mock_login = self.patch(virsh.VirshSSH, "login")
596 mock_login.return_value = False
597- with ExpectedException(virsh.VirshError):
598+ with self.assertRaisesRegex(
599+ virsh.VirshError, r"^Failed to login to virsh console\.$"
600+ ):
601 yield deferToThread(
602 virsh.probe_virsh_and_enlist,
603 user,
604@@ -469,9 +464,9 @@ class TestVirshPowerControl(MAASTestCase):
605 machine = factory.make_name("machine")
606 virsh.power_control_virsh(poweraddr, machine, "on")
607
608- self.assertThat(mock_login, MockCalledOnceWith(poweraddr, None))
609- self.assertThat(mock_state, MockCalledOnceWith(machine))
610- self.assertThat(mock_poweron, MockCalledOnceWith(machine))
611+ mock_login.assert_called_once_with(poweraddr, None)
612+ mock_state.assert_called_once_with(machine)
613+ mock_poweron.assert_called_once_with(machine)
614
615 def test_power_control_off(self):
616 mock_login = self.patch(virsh.VirshSSH, "login")
617@@ -484,9 +479,9 @@ class TestVirshPowerControl(MAASTestCase):
618 machine = factory.make_name("machine")
619 virsh.power_control_virsh(poweraddr, machine, "off")
620
621- self.assertThat(mock_login, MockCalledOnceWith(poweraddr, None))
622- self.assertThat(mock_state, MockCalledOnceWith(machine))
623- self.assertThat(mock_poweroff, MockCalledOnceWith(machine))
624+ mock_login.assert_called_once_with(poweraddr, None)
625+ mock_state.assert_called_once_with(machine)
626+ mock_poweroff.assert_called_once_with(machine)
627
628 def test_power_control_bad_domain(self):
629 mock_login = self.patch(virsh.VirshSSH, "login")
630diff --git a/src/provisioningserver/drivers/hardware/tests/test_vmware.py b/src/provisioningserver/drivers/hardware/tests/test_vmware.py
631index 433b452..a52a93e 100644
632--- a/src/provisioningserver/drivers/hardware/tests/test_vmware.py
633+++ b/src/provisioningserver/drivers/hardware/tests/test_vmware.py
634@@ -7,8 +7,6 @@
635
636 import random
637
638-from testtools import ExpectedException
639-from testtools.matchers import Equals, Is, IsInstance, Not
640 from twisted.internet.defer import inlineCallbacks
641 from twisted.internet.threads import deferToThread
642
643@@ -16,10 +14,6 @@ from maastesting import get_testing_timeout
644 from maastesting.factory import factory
645 from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
646 from provisioningserver.drivers.hardware import vmware
647-from provisioningserver.drivers.hardware.vmware import (
648- VMwarePyvmomiAPI,
649- VMwareVMNotFound,
650-)
651 from provisioningserver.utils.twisted import asynchronous
652
653
654@@ -53,8 +47,7 @@ class FakeVmomiVMRuntime:
655
656
657 class FakeVmomiVMConfigHardwareDevice:
658- def __init__(self):
659- pass
660+ pass
661
662
663 class FakeVmomiNic(FakeVmomiVMConfigHardwareDevice):
664@@ -246,35 +239,36 @@ class TestVMwarePyvmomi(MAASTestCase):
665
666 def test_api_connection(self):
667 mock_vmomi_api = self.configure_vmomi_api(servers=0)
668- api = VMwarePyvmomiAPI(
669+ api = vmware.VMwarePyvmomiAPI(
670 factory.make_hostname(),
671 factory.make_username(),
672 factory.make_username(),
673 )
674 api.connect()
675- self.expectThat(
676- api.service_instance, IsInstance(FakeVmomiServiceInstance)
677- )
678- self.expectThat(api.is_connected(), Equals(True))
679+ self.assertIsInstance(api.service_instance, FakeVmomiServiceInstance)
680+ self.assertTrue(api.is_connected())
681 api.disconnect()
682- self.expectThat(mock_vmomi_api.SmartConnect.called, Equals(True))
683- self.expectThat(mock_vmomi_api.Disconnect.called, Equals(True))
684+ self.assertTrue(mock_vmomi_api.SmartConnect.called)
685+ self.assertTrue(mock_vmomi_api.Disconnect.called)
686
687 def test_api_failed_connection(self):
688 mock_vmomi_api = self.patch(vmware, "vmomi_api")
689 mock_vmomi_api.SmartConnect.return_value = None
690- api = VMwarePyvmomiAPI(
691+ api = vmware.VMwarePyvmomiAPI(
692 factory.make_hostname(),
693 factory.make_username(),
694 factory.make_username(),
695 )
696- with ExpectedException(vmware.VMwareAPIConnectionFailed):
697+ with self.assertRaisesRegex(
698+ vmware.VMwareAPIConnectionFailed,
699+ "^Could not connect to VMware service API$",
700+ ):
701 api.connect()
702- self.expectThat(api.service_instance, Is(None))
703- self.expectThat(api.is_connected(), Equals(False))
704+ self.assertIsNone(api.service_instance)
705+ self.assertFalse(api.is_connected())
706 api.disconnect()
707- self.expectThat(mock_vmomi_api.SmartConnect.called, Equals(True))
708- self.expectThat(mock_vmomi_api.Disconnect.called, Equals(True))
709+ self.assertTrue(mock_vmomi_api.SmartConnect.called)
710+ self.assertTrue(mock_vmomi_api.Disconnect.called)
711
712 def test_get_vmware_servers_empty(self):
713 self.configure_vmomi_api(servers=0)
714@@ -285,7 +279,7 @@ class TestVMwarePyvmomi(MAASTestCase):
715 port=8443,
716 protocol="https",
717 )
718- self.expectThat(servers, Equals({}))
719+ self.assertEqual(servers, {})
720
721 def test_get_vmware_servers(self):
722 self.configure_vmomi_api(servers=10)
723@@ -294,7 +288,7 @@ class TestVMwarePyvmomi(MAASTestCase):
724 factory.make_username(),
725 factory.make_username(),
726 )
727- self.expectThat(servers, Not(Equals({})))
728+ self.assertNotEqual(servers, {})
729
730 def test_get_server_by_instance_uuid(self):
731 mock_vmomi_api = self.configure_vmomi_api(
732@@ -336,7 +330,10 @@ class TestVMwarePyvmomi(MAASTestCase):
733 mock_vmomi_api = self.configure_vmomi_api(
734 servers=1, has_instance_uuid=True, has_uuid=True
735 )
736- with ExpectedException(VMwareVMNotFound):
737+ with self.assertRaisesRegex(
738+ vmware.VMwareVMNotFound,
739+ "^Failed to find VM; need a UUID or a VM name for power control$",
740+ ):
741 vmware._find_vm_by_uuid_or_name(mock_vmomi_api, None, None)
742
743 def test_power_control_missing_server_raises_VMwareVMNotFound(self):
744@@ -346,7 +343,10 @@ class TestVMwarePyvmomi(MAASTestCase):
745 host = factory.make_hostname()
746 username = factory.make_username()
747 password = factory.make_username()
748- with ExpectedException(VMwareVMNotFound):
749+ with self.assertRaisesRegex(
750+ vmware.VMwareVMNotFound,
751+ "^Failed to find VM; need a UUID or a VM name for power control$",
752+ ):
753 vmware.power_control_vmware(
754 host, username, password, None, None, "on"
755 )
756@@ -358,7 +358,10 @@ class TestVMwarePyvmomi(MAASTestCase):
757 host = factory.make_hostname()
758 username = factory.make_username()
759 password = factory.make_username()
760- with ExpectedException(VMwareVMNotFound):
761+ with self.assertRaisesRegex(
762+ vmware.VMwareVMNotFound,
763+ "^Failed to find VM; need a UUID or a VM name for power control$",
764+ ):
765 vmware.power_query_vmware(host, username, password, None, None)
766
767 def test_power_control(self):
768@@ -399,7 +402,7 @@ class TestVMwarePyvmomi(MAASTestCase):
769 state = vmware.power_query_vmware(
770 host, username, password, vm_name, uuid
771 )
772- self.expectThat(state, Equals("on"))
773+ self.assertEqual(state, "on")
774
775 # turn off a set of VMs, then verify they are off
776 for uuid in instance_uuids:
777@@ -410,9 +413,9 @@ class TestVMwarePyvmomi(MAASTestCase):
778 state = vmware.power_query_vmware(
779 host, username, password, vm_name, uuid
780 )
781- self.expectThat(state, Equals("off"))
782+ self.assertEqual(state, "off")
783
784- self.expectThat(servers, Not(Equals({})))
785+ self.assertNotEqual(servers, {})
786
787 @inlineCallbacks
788 def test_probe_and_enlist(self):
789diff --git a/src/provisioningserver/drivers/osystem/tests/test_centos.py b/src/provisioningserver/drivers/osystem/tests/test_centos.py
790index aabc7f9..ccc1b4d 100644
791--- a/src/provisioningserver/drivers/osystem/tests/test_centos.py
792+++ b/src/provisioningserver/drivers/osystem/tests/test_centos.py
793@@ -6,8 +6,6 @@
794
795 from itertools import product
796
797-from testtools.matchers import Equals
798-
799 from maastesting.factory import factory
800 from maastesting.testcase import MAASTestCase
801 from provisioningserver.drivers.osystem.centos import (
802@@ -53,4 +51,4 @@ class TestCentOS(MAASTestCase):
803 }
804 osystem = CentOS()
805 for name, title in name_titles.items():
806- self.expectThat(osystem.get_release_title(name), Equals(title))
807+ self.assertEqual(osystem.get_release_title(name), title)
808diff --git a/src/provisioningserver/drivers/osystem/tests/test_esxi.py b/src/provisioningserver/drivers/osystem/tests/test_esxi.py
809index 8b60360..cea57d1 100644
810--- a/src/provisioningserver/drivers/osystem/tests/test_esxi.py
811+++ b/src/provisioningserver/drivers/osystem/tests/test_esxi.py
812@@ -6,8 +6,6 @@
813
814 from itertools import product
815
816-from testtools.matchers import Equals
817-
818 from maastesting.factory import factory
819 from maastesting.testcase import MAASTestCase
820 from provisioningserver.drivers.osystem import BOOT_IMAGE_PURPOSE
821@@ -47,4 +45,4 @@ class TestESXi(MAASTestCase):
822 }
823 osystem = ESXi()
824 for name, title in name_titles.items():
825- self.expectThat(osystem.get_release_title(name), Equals(title))
826+ self.assertEqual(osystem.get_release_title(name), title)
827diff --git a/src/provisioningserver/drivers/osystem/tests/test_rhel.py b/src/provisioningserver/drivers/osystem/tests/test_rhel.py
828index 709aee9..fc2acd7 100644
829--- a/src/provisioningserver/drivers/osystem/tests/test_rhel.py
830+++ b/src/provisioningserver/drivers/osystem/tests/test_rhel.py
831@@ -6,8 +6,6 @@
832
833 from itertools import product
834
835-from testtools.matchers import Equals
836-
837 from maastesting.factory import factory
838 from maastesting.testcase import MAASTestCase
839 from provisioningserver.drivers.osystem.rhel import (
840@@ -51,4 +49,4 @@ class TestRHEL(MAASTestCase):
841 }
842 osystem = RHELOS()
843 for name, title in name_titles.items():
844- self.expectThat(osystem.get_release_title(name), Equals(title))
845+ self.assertEqual(osystem.get_release_title(name), title)
846diff --git a/src/provisioningserver/tests/test_monkey.py b/src/provisioningserver/tests/test_monkey.py
847index 3c38d49..7ddc0ff 100644
848--- a/src/provisioningserver/tests/test_monkey.py
849+++ b/src/provisioningserver/tests/test_monkey.py
850@@ -5,7 +5,6 @@
851
852
853 from testtools.deferredruntest import assert_fails_with
854-from testtools.matchers import Equals
855 from twisted.internet.defer import Deferred
856 from twisted.internet.threads import deferToThread
857
858@@ -38,58 +37,62 @@ class TestAugmentDeferToThreadPool(MAASTestCase):
859
860 class TestPatchedURI(MAASTestCase):
861 def test_parses_URL_with_hostname(self):
862- hostname = factory.make_name("host").encode("ascii")
863- path = factory.make_name("path").encode("ascii")
864- uri = get_patched_URI().fromBytes(b"http://%s/%s" % (hostname, path))
865- self.expectThat(uri.host, Equals(hostname))
866- self.expectThat(uri.path, Equals(b"/%s" % path))
867- self.expectThat(uri.port, Equals(80))
868+ hostname = factory.make_name("host")
869+ path = factory.make_name("path")
870+ uri = get_patched_URI().fromBytes(
871+ f"http://{hostname}/{path}".encode("utf-8")
872+ )
873+ self.assertEqual(uri.host, hostname.encode("utf-8"))
874+ self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
875+ self.assertEqual(uri.port, 80)
876
877 def test_parses_URL_with_hostname_and_port(self):
878- hostname = factory.make_name("host").encode("ascii")
879+ hostname = factory.make_name("host")
880 port = factory.pick_port()
881- path = factory.make_name("path").encode("ascii")
882+ path = factory.make_name("path")
883 uri = get_patched_URI().fromBytes(
884- b"http://%s:%d/%s" % (hostname, port, path)
885+ f"http://{hostname}:{port}/{path}".encode("utf-8")
886 )
887- self.expectThat(uri.host, Equals(hostname))
888- self.expectThat(uri.path, Equals(b"/%s" % path))
889- self.expectThat(uri.port, Equals(port))
890+ self.assertEqual(uri.host, hostname.encode("utf-8"))
891+ self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
892+ self.assertEqual(uri.port, port)
893
894 def test_parses_URL_with_IPv4_address(self):
895- ip = factory.make_ipv4_address().encode("ascii")
896+ ip = factory.make_ipv4_address()
897 path = factory.make_name("path").encode("ascii")
898- uri = get_patched_URI().fromBytes(b"http://%s/%s" % (ip, path))
899- self.expectThat(uri.host, Equals(ip))
900- self.expectThat(uri.path, Equals(b"/%s" % path))
901- self.expectThat(uri.port, Equals(80))
902+ uri = get_patched_URI().fromBytes(
903+ f"http://{ip}/{path}".encode("utf-8")
904+ )
905+ self.assertEqual(uri.host, ip.encode("utf-8"))
906+ self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
907+ self.assertEqual(uri.port, 80)
908
909 def test_parses_URL_with_IPv4_address_and_port(self):
910- ip = factory.make_ipv4_address().encode("ascii")
911+ ip = factory.make_ipv4_address()
912 port = factory.pick_port()
913- path = factory.make_name("path").encode("ascii")
914+ path = factory.make_name("path")
915 uri = get_patched_URI().fromBytes(
916- b"http://%s:%d/%s" % (ip, port, path)
917+ f"http://{ip}:{port}/{path}".encode("utf-8")
918 )
919- self.expectThat(uri.host, Equals(ip))
920- self.expectThat(uri.path, Equals(b"/%s" % path))
921- self.expectThat(uri.port, Equals(port))
922+ self.assertEqual(uri.host, ip.encode("utf-8"))
923+ self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
924+ self.assertEqual(uri.port, port)
925
926 def test_parses_URL_with_IPv6_address(self):
927- ip = factory.make_ipv6_address().encode("ascii")
928- path = factory.make_name("path").encode("ascii")
929- uri = get_patched_URI().fromBytes(b"http://[%s]/%s" % (ip, path))
930- self.expectThat(uri.host, Equals(b"%s" % ip))
931- self.expectThat(uri.path, Equals(b"/%s" % path))
932- self.expectThat(uri.port, Equals(80))
933+ ip = factory.make_ipv6_address()
934+ path = factory.make_name("path")
935+ uri = get_patched_URI().fromBytes(f"http://[{ip}]/{path}".encode())
936+ self.assertEqual(uri.host, ip.encode("utf-8"))
937+ self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
938+ self.assertEqual(uri.port, 80)
939
940 def test_parses_URL_with_IPv6_address_and_port(self):
941- ip = factory.make_ipv6_address().encode("ascii")
942+ ip = factory.make_ipv6_address()
943 port = factory.pick_port()
944- path = factory.make_name("path").encode("ascii")
945+ path = factory.make_name("path")
946 uri = get_patched_URI().fromBytes(
947- b"http://[%s]:%d/%s" % (ip, port, path)
948+ f"http://[{ip}]:{port}/{path}".encode()
949 )
950- self.expectThat(uri.host, Equals(b"%s" % ip))
951- self.expectThat(uri.path, Equals(b"/%s" % path))
952- self.expectThat(uri.port, Equals(port))
953+ self.assertEqual(uri.host, ip.encode("utf-8"))
954+ self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
955+ self.assertEqual(uri.port, port)
956diff --git a/src/provisioningserver/utils/tests/test_events.py b/src/provisioningserver/utils/tests/test_events.py
957index c9a677f..c3c64bb 100644
958--- a/src/provisioningserver/utils/tests/test_events.py
959+++ b/src/provisioningserver/utils/tests/test_events.py
960@@ -6,8 +6,6 @@
961
962 from unittest.mock import MagicMock, sentinel
963
964-from testtools.matchers import IsInstance
965-
966 from maastesting.factory import factory
967 from maastesting.testcase import MAASTestCase
968 from provisioningserver.utils.events import Event, EventGroup
969@@ -64,4 +62,4 @@ class TestEventGroup(MAASTestCase):
970 events = [factory.make_name("event") for _ in range(3)]
971 group = EventGroup(*events)
972 for event in events:
973- self.expectThat(getattr(group, event), IsInstance(Event))
974+ self.assertIsInstance(getattr(group, event), Event)
975diff --git a/src/provisioningserver/utils/tests/test_text.py b/src/provisioningserver/utils/tests/test_text.py
976index 5e6f949..c585619 100644
977--- a/src/provisioningserver/utils/tests/test_text.py
978+++ b/src/provisioningserver/utils/tests/test_text.py
979@@ -8,7 +8,6 @@ from itertools import repeat
980 import string
981
982 import hypothesis.strategies
983-from testtools.matchers import Equals
984
985 from maastesting.factory import factory
986 from maastesting.testcase import MAASTestCase
987@@ -111,9 +110,9 @@ class TestNormalizeToCommaListScenarios(MAASTestCase):
988
989 def test_scenarios(self):
990 unquoted = normalise_to_comma_list(self.test_input)
991- self.expectThat(unquoted, Equals(self.unquoted))
992+ self.assertEqual(unquoted, self.unquoted)
993 quoted = normalise_to_comma_list(self.test_input, quoted=True)
994- self.expectThat(quoted, Equals(self.quoted))
995+ self.assertEqual(quoted, self.quoted)
996
997
998 class TestSplitStringList(MAASTestCase):

Subscribers

People subscribed via source and target branches