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
diff --git a/src/provisioningserver/drivers/hardware/tests/test_seamicro.py b/src/provisioningserver/drivers/hardware/tests/test_seamicro.py
index f06111c..0907960 100644
--- a/src/provisioningserver/drivers/hardware/tests/test_seamicro.py
+++ b/src/provisioningserver/drivers/hardware/tests/test_seamicro.py
@@ -14,11 +14,6 @@ from twisted.internet.threads import deferToThread
1414
15from maastesting import get_testing_timeout15from maastesting import get_testing_timeout
16from maastesting.factory import factory16from maastesting.factory import factory
17from maastesting.matchers import (
18 MockCalledOnceWith,
19 MockCalledWith,
20 MockCallsMatch,
21)
22from maastesting.testcase import MAASTestCase, MAASTwistedRunTest17from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
23from provisioningserver.drivers.hardware import seamicro18from provisioningserver.drivers.hardware import seamicro
24from provisioningserver.drivers.hardware.seamicro import (19from provisioningserver.drivers.hardware.seamicro import (
@@ -39,9 +34,9 @@ from provisioningserver.utils.twisted import asynchronous
39class FakeResponse:34class FakeResponse:
40 def __init__(self, response_code, response, is_json=False):35 def __init__(self, response_code, response, is_json=False):
41 self.response_code = response_code36 self.response_code = response_code
42 self.response = response
43 if is_json:37 if is_json:
44 self.response = json.dumps(response)38 response = json.dumps(response)
39 self.response = response
4540
46 def getcode(self):41 def getcode(self):
47 return self.response_code42 return self.response_code
@@ -163,7 +158,7 @@ class TestSeaMicroAPIV09(MAASTestCase):
163 def assert_put_power_called(self, mock, idx, new_status, *params):158 def assert_put_power_called(self, mock, idx, new_status, *params):
164 location = "servers/%d" % idx159 location = "servers/%d" % idx
165 params = ["action=%s" % new_status] + list(params)160 params = ["action=%s" % new_status] + list(params)
166 self.assertThat(mock, MockCalledOnceWith(location, params=params))161 mock.assert_called_once_with(location, params=params)
167162
168 def test_put_server_power_on_using_pxe(self):163 def test_put_server_power_on_using_pxe(self):
169 token = factory.make_string()164 token = factory.make_string()
@@ -251,12 +246,11 @@ class TestSeaMicro(MAASTestCase):
251 password,246 password,
252 "ipmi",247 "ipmi",
253 )248 )
254 self.assertThat(249 mock.assert_has_calls(
255 mock,250 [
256 MockCallsMatch(
257 call("v2.0", ip, username, password),251 call("v2.0", ip, username, password),
258 call("v0.9", ip, username, password),252 call("v0.9", ip, username, password),
259 ),253 ]
260 )254 )
261255
262 def test_find_seamicro15k_servers_restapi(self):256 def test_find_seamicro15k_servers_restapi(self):
@@ -269,9 +263,7 @@ class TestSeaMicro(MAASTestCase):
269 password,263 password,
270 "restapi",264 "restapi",
271 )265 )
272 self.assertThat(266 mock.assert_called_once_with("v0.9", ip, username, password)
273 mock, MockCalledOnceWith("v0.9", ip, username, password)
274 )
275267
276 def test_find_seamicro15k_servers_restapi2(self):268 def test_find_seamicro15k_servers_restapi2(self):
277 mock, ip, username, password = self.configure_get_seamicro15k_api()269 mock, ip, username, password = self.configure_get_seamicro15k_api()
@@ -283,9 +275,7 @@ class TestSeaMicro(MAASTestCase):
283 password,275 password,
284 "restapi2",276 "restapi2",
285 )277 )
286 self.assertThat(278 mock.assert_called_once_with("v2.0", ip, username, password)
287 mock, MockCalledOnceWith("v2.0", ip, username, password)
288 )
289279
290 def configure_api_v09_login(self, token=None):280 def configure_api_v09_login(self, token=None):
291 token = token or factory.make_string()281 token = token or factory.make_string()
@@ -349,17 +339,14 @@ class TestSeaMicro(MAASTestCase):
349 "power_pass": password,339 "power_pass": password,
350 "power_user": username,340 "power_user": username,
351 }341 }
352 self.expectThat(342 mock_create_node.assert_called_with(
353 mock_create_node,343 last["serverMacAddr"],
354 MockCalledWith(344 "amd64",
355 last["serverMacAddr"],345 "sm15k",
356 "amd64",346 power_params,
357 "sm15k",347 domain=domain,
358 power_params,
359 domain=domain,
360 ),
361 )348 )
362 self.expectThat(mock_commission_node, MockCalledWith(system_id, user))349 mock_commission_node.assert_called_with(system_id, user)
363350
364 def test_power_control_seamicro15k_v09(self):351 def test_power_control_seamicro15k_v09(self):
365 self.configure_api_v09_login()352 self.configure_api_v09_login()
@@ -369,9 +356,7 @@ class TestSeaMicro(MAASTestCase):
369 mock = self.patch(SeaMicroAPIV09, "power_server")356 mock = self.patch(SeaMicroAPIV09, "power_server")
370357
371 power_control_seamicro15k_v09(ip, username, password, "25", "on")358 power_control_seamicro15k_v09(ip, username, password, "25", "on")
372 self.assertThat(359 mock.assert_called_once_with("25/0", POWER_STATUS.ON, do_pxe=True)
373 mock, MockCalledOnceWith("25/0", POWER_STATUS.ON, do_pxe=True)
374 )
375360
376 def test_power_control_seamicro15k_v09_retry_failure(self):361 def test_power_control_seamicro15k_v09_retry_failure(self):
377 self.configure_api_v09_login()362 self.configure_api_v09_login()
@@ -439,9 +424,8 @@ class TestSeaMicro(MAASTestCase):
439 )424 )
440 self.assertEqual(2, mock_create_node.call_count)425 self.assertEqual(2, mock_create_node.call_count)
441426
442 self.expectThat(427 mock_create_node.assert_has_calls(
443 mock_create_node,428 [
444 MockCallsMatch(
445 call(429 call(
446 fake_server_0.get_fake_macs(),430 fake_server_0.get_fake_macs(),
447 "amd64",431 "amd64",
@@ -468,9 +452,9 @@ class TestSeaMicro(MAASTestCase):
468 },452 },
469 domain=None,453 domain=None,
470 ),454 ),
471 ),455 ]
472 )456 )
473 self.expectThat(mock_commission_node, MockCalledWith(system_id, user))457 mock_commission_node.assert_called_with(system_id, user)
474458
475 def test_power_control_seamicro15k_v2(self):459 def test_power_control_seamicro15k_v2(self):
476 ip = factory.make_ipv4_address()460 ip = factory.make_ipv4_address()
@@ -487,7 +471,7 @@ class TestSeaMicro(MAASTestCase):
487 mock_get_api.return_value = fake_client471 mock_get_api.return_value = fake_client
488472
489 power_control_seamicro15k_v2(ip, username, password, "0", "on")473 power_control_seamicro15k_v2(ip, username, password, "0", "on")
490 self.assertThat(mock_power_on, MockCalledOnceWith(using_pxe=True))474 mock_power_on.assert_called_once_with(using_pxe=True)
491475
492 def test_power_control_seamicro15k_v2_raises_error_when_api_None(self):476 def test_power_control_seamicro15k_v2_raises_error_when_api_None(self):
493 ip = factory.make_ipv4_address()477 ip = factory.make_ipv4_address()
diff --git a/src/provisioningserver/drivers/hardware/tests/test_ucsm.py b/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
index ebac33b..87f6a16 100644
--- a/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
+++ b/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
@@ -10,17 +10,11 @@ import urllib.parse
10import urllib.request10import urllib.request
1111
12from lxml.etree import Element, SubElement, XML12from lxml.etree import Element, SubElement, XML
13from testtools.matchers import Equals
14from twisted.internet.defer import inlineCallbacks13from twisted.internet.defer import inlineCallbacks
15from twisted.internet.threads import deferToThread14from twisted.internet.threads import deferToThread
1615
17from maastesting import get_testing_timeout16from maastesting import get_testing_timeout
18from maastesting.factory import factory17from maastesting.factory import factory
19from maastesting.matchers import (
20 MockCalledOnceWith,
21 MockCallsMatch,
22 MockNotCalled,
23)
24from maastesting.testcase import MAASTestCase, MAASTwistedRunTest18from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
25from provisioningserver.drivers.hardware import ucsm19from provisioningserver.drivers.hardware import ucsm
26from provisioningserver.drivers.hardware.ucsm import (20from provisioningserver.drivers.hardware.ucsm import (
@@ -142,7 +136,7 @@ class TestLogin(MAASTestCase):
142 api, mock = make_api_patch_call(self, user=user, password=password)136 api, mock = make_api_patch_call(self, user=user, password=password)
143 api.login()137 api.login()
144 fields = {"inName": user, "inPassword": password}138 fields = {"inName": user, "inPassword": password}
145 self.assertThat(mock, MockCalledOnceWith("aaaLogin", fields))139 mock.assert_called_once_with("aaaLogin", fields)
146140
147141
148class TestLogout(MAASTestCase):142class TestLogout(MAASTestCase):
@@ -157,7 +151,7 @@ class TestLogout(MAASTestCase):
157 cookie = api.cookie151 cookie = api.cookie
158 api.logout()152 api.logout()
159 fields = {"inCookie": cookie}153 fields = {"inCookie": cookie}
160 self.assertThat(mock, MockCalledOnceWith("aaaLogout", fields))154 mock.assert_called_once_with("aaaLogout", fields)
161155
162156
163class TestConfigResolveClass(MAASTestCase):157class TestConfigResolveClass(MAASTestCase):
@@ -166,9 +160,7 @@ class TestConfigResolveClass(MAASTestCase):
166 api, mock = make_api_patch_call(self)160 api, mock = make_api_patch_call(self)
167 api.config_resolve_class(class_id)161 api.config_resolve_class(class_id)
168 fields = {"cookie": api.cookie, "classId": class_id}162 fields = {"cookie": api.cookie, "classId": class_id}
169 self.assertThat(163 mock.assert_called_once_with("configResolveClass", fields, ANY)
170 mock, MockCalledOnceWith("configResolveClass", fields, ANY)
171 )
172164
173 def test_with_filters(self):165 def test_with_filters(self):
174 class_id = make_class()166 class_id = make_class()
@@ -192,18 +184,14 @@ class TestConfigResolveChildren(MAASTestCase):
192 api, mock = make_api_patch_call(self)184 api, mock = make_api_patch_call(self)
193 api.config_resolve_children(dn, class_id)185 api.config_resolve_children(dn, class_id)
194 fields = {"inDn": dn, "classId": class_id, "cookie": api.cookie}186 fields = {"inDn": dn, "classId": class_id, "cookie": api.cookie}
195 self.assertThat(187 mock.assert_called_once_with("configResolveChildren", fields)
196 mock, MockCalledOnceWith("configResolveChildren", fields)
197 )
198188
199 def test_no_class_id(self):189 def test_no_class_id(self):
200 dn = make_dn()190 dn = make_dn()
201 api, mock = make_api_patch_call(self)191 api, mock = make_api_patch_call(self)
202 api.config_resolve_children(dn)192 api.config_resolve_children(dn)
203 fields = {"inDn": dn, "cookie": api.cookie}193 fields = {"inDn": dn, "cookie": api.cookie}
204 self.assertThat(194 mock.assert_called_once_with("configResolveChildren", fields)
205 mock, MockCalledOnceWith("configResolveChildren", fields)
206 )
207195
208 def test_return_response(self):196 def test_return_response(self):
209 api, mock = make_api_patch_call(self)197 api, mock = make_api_patch_call(self)
@@ -219,7 +207,7 @@ class TestConfigConfMo(MAASTestCase):
219 api, mock = make_api_patch_call(self)207 api, mock = make_api_patch_call(self)
220 api.config_conf_mo(dn, config_items)208 api.config_conf_mo(dn, config_items)
221 fields = {"dn": dn, "cookie": api.cookie}209 fields = {"dn": dn, "cookie": api.cookie}
222 self.assertThat(mock, MockCalledOnceWith("configConfMo", fields, ANY))210 mock.assert_called_once_with("configConfMo", fields, ANY)
223 in_configs = mock.call_args[0][2]211 in_configs = mock.call_args[0][2]
224 self.assertEqual(config_items, in_configs[0][:])212 self.assertEqual(config_items, in_configs[0][:])
225213
@@ -240,10 +228,8 @@ class TestCall(MAASTestCase):
240 mock_send_request.return_value = response228 mock_send_request.return_value = response
241229
242 api._call(name, fields, children)230 api._call(name, fields, children)
243 self.assertThat(231 mock_make_request_data.assert_called_once_with(name, fields, children)
244 mock_make_request_data, MockCalledOnceWith(name, fields, children)232 mock_send_request.assert_called_once_with(request)
245 )
246 self.assertThat(mock_send_request, MockCalledOnceWith(request))
247233
248234
249class TestSendRequest(MAASTestCase):235class TestSendRequest(MAASTestCase):
@@ -266,7 +252,7 @@ class TestConfigResolveDn(MAASTestCase):
266 test_dn = make_dn()252 test_dn = make_dn()
267 fields = {"cookie": api.cookie, "dn": test_dn}253 fields = {"cookie": api.cookie, "dn": test_dn}
268 api.config_resolve_dn(test_dn)254 api.config_resolve_dn(test_dn)
269 self.assertThat(mock, MockCalledOnceWith("configResolveDn", fields))255 mock.assert_called_once_with("configResolveDn", fields)
270256
271257
272class TestGetServers(MAASTestCase):258class TestGetServers(MAASTestCase):
@@ -292,7 +278,7 @@ class TestGetServers(MAASTestCase):
292 api = make_api()278 api = make_api()
293 mock = self.patch(api, "config_resolve_class")279 mock = self.patch(api, "config_resolve_class")
294 get_servers(api, uuid)280 get_servers(api, uuid)
295 self.assertThat(mock, MockCalledOnceWith("computeItem", ANY))281 mock.assert_called_once_with("computeItem", ANY)
296282
297283
298class TestProbeLanBootOptions(MAASTestCase):284class TestProbeLanBootOptions(MAASTestCase):
@@ -309,16 +295,11 @@ class TestProbeLanBootOptions(MAASTestCase):
309 )295 )
310 mock_config_resolve_children.return_value = fake_result296 mock_config_resolve_children.return_value = fake_result
311 self.assertEqual(1, len(probe_lan_boot_options(api, server)))297 self.assertEqual(1, len(probe_lan_boot_options(api, server)))
312 self.assertThat(298 mock_config_resolve_children.assert_called_once_with(
313 mock_config_resolve_children,299 sentinel.profile_get
314 MockCalledOnceWith(sentinel.profile_get),
315 )
316 self.assertThat(
317 mock_service_profile.get, MockCalledOnceWith("operBootPolicyName")
318 )
319 self.assertThat(
320 mock_get_service_profile, MockCalledOnceWith(api, server)
321 )300 )
301 mock_service_profile.get.assert_called_once_with("operBootPolicyName")
302 mock_get_service_profile.assert_called_once_with(api, server)
322303
323304
324class TestGetChildren(MAASTestCase):305class TestGetChildren(MAASTestCase):
@@ -340,7 +321,7 @@ class TestGetChildren(MAASTestCase):
340 in_element = Element("test", {"dn": parent_dn})321 in_element = Element("test", {"dn": parent_dn})
341 class_id = search_class322 class_id = search_class
342 get_children(api, in_element, class_id)323 get_children(api, in_element, class_id)
343 self.assertThat(mock, MockCalledOnceWith(parent_dn, search_class))324 mock.assert_called_once_with(parent_dn, search_class)
344325
345326
346class TestGetMacs(MAASTestCase):327class TestGetMacs(MAASTestCase):
@@ -359,12 +340,11 @@ class TestGetMacs(MAASTestCase):
359340
360 mock.side_effect = fake_get_children341 mock.side_effect = fake_get_children
361 macs = get_macs(api, server)342 macs = get_macs(api, server)
362 self.assertThat(343 mock.assert_has_calls(
363 mock,344 [
364 MockCallsMatch(
365 call(api, server, "adaptorUnit"),345 call(api, server, "adaptorUnit"),
366 call(api, adaptor, "adaptorHostEthIf"),346 call(api, adaptor, "adaptorHostEthIf"),
367 ),347 ]
368 )348 )
369 self.assertEqual([mac], macs)349 self.assertEqual([mac], macs)
370350
@@ -374,7 +354,7 @@ class TestProbeServers(MAASTestCase):
374 api = make_api()354 api = make_api()
375 mock = self.patch(ucsm, "get_servers")355 mock = self.patch(ucsm, "get_servers")
376 probe_servers(api)356 probe_servers(api)
377 self.assertThat(mock, MockCalledOnceWith(api))357 mock.assert_called_once_with(api)
378358
379 def test_returns_results(self):359 def test_returns_results(self):
380 servers = [{"uuid": factory.make_UUID()}]360 servers = [{"uuid": factory.make_UUID()}]
@@ -415,7 +395,7 @@ class TestGetServerPowerControl(MAASTestCase):
415 dn = make_dn()395 dn = make_dn()
416 server = Element("computeItem", {"assignedToDn": dn})396 server = Element("computeItem", {"assignedToDn": dn})
417 power_control = get_server_power_control(api, server)397 power_control = get_server_power_control(api, server)
418 self.assertThat(mock, MockCalledOnceWith(dn, "lsPower"))398 mock.assert_called_once_with(dn, "lsPower")
419 self.assertEqual("lsPower", power_control.tag)399 self.assertEqual("lsPower", power_control.tag)
420400
421401
@@ -427,7 +407,7 @@ class TestSetServerPowerControl(MAASTestCase):
427 config_conf_mo_mock = self.patch(api, "config_conf_mo")407 config_conf_mo_mock = self.patch(api, "config_conf_mo")
428 state = "state"408 state = "state"
429 set_server_power_control(api, power_control, state)409 set_server_power_control(api, power_control, state)
430 self.assertThat(config_conf_mo_mock, MockCalledOnceWith(power_dn, ANY))410 config_conf_mo_mock.assert_called_once_with(power_dn, ANY)
431 power_change = config_conf_mo_mock.call_args[0][1][0]411 power_change = config_conf_mo_mock.call_args[0][1][0]
432 self.assertEqual(power_change.tag, "lsPower")412 self.assertEqual(power_change.tag, "lsPower")
433 self.assertEqual({"state": state, "dn": power_dn}, power_change.attrib)413 self.assertEqual({"state": state, "dn": power_dn}, power_change.attrib)
@@ -443,9 +423,9 @@ class TestLoggedIn(MAASTestCase):
443423
444 with logged_in(url, username, password) as api:424 with logged_in(url, username, password) as api:
445 self.assertEqual(mock.return_value, api)425 self.assertEqual(mock.return_value, api)
446 self.assertThat(api.login, MockCalledOnceWith())426 api.login()
447427
448 self.assertThat(mock.return_value.logout, MockCalledOnceWith())428 mock.return_value.logout.assert_called_once_with()
449429
450430
451class TestValidGetPowerCommand(MAASTestCase):431class TestValidGetPowerCommand(MAASTestCase):
@@ -498,10 +478,9 @@ class TestPowerControlUCSM(MAASTestCase):
498 ucsm, "set_server_power_control"478 ucsm, "set_server_power_control"
499 )479 )
500 power_control_ucsm("url", "username", "password", uuid, "off")480 power_control_ucsm("url", "username", "password", uuid, "off")
501 self.assertThat(get_servers_mock, MockCalledOnceWith(api, uuid))481 get_servers_mock.assert_called_once_with(api, uuid)
502 self.assertThat(482 set_server_power_control_mock.assert_called_once_with(
503 set_server_power_control_mock,483 api, power_control, state
504 MockCalledOnceWith(api, power_control, state),
505 )484 )
506485
507486
@@ -517,8 +496,8 @@ class TestUCSMPowerState(MAASTestCase):
517 get_servers_mock.return_value = [make_server("off")]496 get_servers_mock.return_value = [make_server("off")]
518497
519 power_state = power_state_ucsm(url, username, password, uuid)498 power_state = power_state_ucsm(url, username, password, uuid)
520 self.expectThat(get_servers_mock, MockCalledOnceWith(api, uuid))499 get_servers_mock.assert_called_once_with(api, uuid)
521 self.expectThat(power_state, Equals("off"))500 self.assertEqual(power_state, "off")
522501
523 def test_power_state_get_on(self):502 def test_power_state_get_on(self):
524 url = factory.make_name("url")503 url = factory.make_name("url")
@@ -531,8 +510,8 @@ class TestUCSMPowerState(MAASTestCase):
531 get_servers_mock.return_value = [make_server("on")]510 get_servers_mock.return_value = [make_server("on")]
532511
533 power_state = power_state_ucsm(url, username, password, uuid)512 power_state = power_state_ucsm(url, username, password, uuid)
534 self.expectThat(get_servers_mock, MockCalledOnceWith(api, uuid))513 get_servers_mock.assert_called_once_with(api, uuid)
535 self.expectThat(power_state, Equals("on"))514 self.assertEqual(power_state, "on")
536515
537 def test_power_state_error_on_unknown_state(self):516 def test_power_state_error_on_unknown_state(self):
538 url = factory.make_name("url")517 url = factory.make_name("url")
@@ -576,23 +555,18 @@ class TestProbeAndEnlistUCSM(MAASTestCase):
576 yield deferToThread(555 yield deferToThread(
577 probe_and_enlist_ucsm, user, url, username, password, True, domain556 probe_and_enlist_ucsm, user, url, username, password, True, domain
578 )557 )
579 self.expectThat(558 set_lan_boot_default_mock.assert_called_once_with(api, server_element)
580 set_lan_boot_default_mock, MockCalledOnceWith(api, server_element)559 probe_servers_mock.assert_called_once_with(api)
581 )
582 self.expectThat(probe_servers_mock, MockCalledOnceWith(api))
583 params = {560 params = {
584 "power_address": url,561 "power_address": url,
585 "power_user": username,562 "power_user": username,
586 "power_pass": password,563 "power_pass": password,
587 "uuid": server[0]["uuid"],564 "uuid": server[0]["uuid"],
588 }565 }
589 self.expectThat(566 create_node_mock.assert_called_once_with(
590 create_node_mock,567 server[1], "amd64", "ucsm", params, domain
591 MockCalledOnceWith(server[1], "amd64", "ucsm", params, domain),
592 )
593 self.expectThat(
594 commission_node_mock, MockCalledOnceWith(system_id, user)
595 )568 )
569 commission_node_mock.assert_called_once_with(system_id, user)
596570
597571
598class TestGetServiceProfile(MAASTestCase):572class TestGetServiceProfile(MAASTestCase):
@@ -605,7 +579,7 @@ class TestGetServiceProfile(MAASTestCase):
605 "configResolveDn", "lsServer", "outConfig"579 "configResolveDn", "lsServer", "outConfig"
606 )580 )
607 service_profile = get_service_profile(api, server)581 service_profile = get_service_profile(api, server)
608 self.assertThat(mock, MockCalledOnceWith(test_dn))582 mock.assert_called_once_with(test_dn)
609 self.assertEqual(mock.return_value[0], service_profile)583 self.assertEqual(mock.return_value[0], service_profile)
610584
611585
@@ -646,7 +620,7 @@ class TestsForStripRoKeys(MAASTestCase):
646 attributes = {key: "DC" for key in RO_KEYS}620 attributes = {key: "DC" for key in RO_KEYS}
647621
648 elements = [622 elements = [
649 Element("Element%d" % i, attributes)623 Element(f"Element{i}", attributes)
650 for i in range(random.randint(0, 10))624 for i in range(random.randint(0, 10))
651 ]625 ]
652626
@@ -667,7 +641,7 @@ class TestMakePolicyChange(MAASTestCase):
667 mock.return_value = boot_profile_response[0]641 mock.return_value = boot_profile_response[0]
668 change = make_policy_change(boot_profile_response)642 change = make_policy_change(boot_profile_response)
669 self.assertIsNone(change)643 self.assertIsNone(change)
670 self.assertThat(mock, MockCalledOnceWith(boot_profile_response))644 mock.assert_called_once_with(boot_profile_response)
671645
672 def test_change_lan_to_top_priority(self):646 def test_change_lan_to_top_priority(self):
673 boot_profile_response = Element("outConfigs")647 boot_profile_response = Element("outConfigs")
@@ -694,7 +668,7 @@ class TestSetLanBootDefault(MAASTestCase):
694 self.patch(ucsm, "make_policy_change").return_value = None668 self.patch(ucsm, "make_policy_change").return_value = None
695 config_conf_mo = self.patch(api, "config_conf_mo")669 config_conf_mo = self.patch(api, "config_conf_mo")
696 set_lan_boot_default(api, server)670 set_lan_boot_default(api, server)
697 self.assertThat(config_conf_mo, MockNotCalled())671 config_conf_mo.assert_not_called()
698672
699 def test_with_change(self):673 def test_with_change(self):
700 api = make_api()674 api = make_api()
@@ -707,6 +681,4 @@ class TestSetLanBootDefault(MAASTestCase):
707 self.patch(ucsm, "make_policy_change").return_value = test_change681 self.patch(ucsm, "make_policy_change").return_value = test_change
708 config_conf_mo = self.patch(api, "config_conf_mo")682 config_conf_mo = self.patch(api, "config_conf_mo")
709 set_lan_boot_default(api, server)683 set_lan_boot_default(api, server)
710 self.assertThat(684 config_conf_mo.assert_called_once_with(test_dn, [test_change])
711 config_conf_mo, MockCalledOnceWith(test_dn, [test_change])
712 )
diff --git a/src/provisioningserver/drivers/hardware/tests/test_virsh.py b/src/provisioningserver/drivers/hardware/tests/test_virsh.py
index 0711efa..5c124a0 100644
--- a/src/provisioningserver/drivers/hardware/tests/test_virsh.py
+++ b/src/provisioningserver/drivers/hardware/tests/test_virsh.py
@@ -11,13 +11,11 @@ from unittest.mock import call
1111
12from lxml import etree12from lxml import etree
13import pexpect13import pexpect
14from testtools.testcase import ExpectedException
15from twisted.internet.defer import inlineCallbacks14from twisted.internet.defer import inlineCallbacks
16from twisted.internet.threads import deferToThread15from twisted.internet.threads import deferToThread
1716
18from maastesting import get_testing_timeout17from maastesting import get_testing_timeout
19from maastesting.factory import factory18from maastesting.factory import factory
20from maastesting.matchers import MockCalledOnceWith, MockCallsMatch
21from maastesting.testcase import MAASTestCase, MAASTwistedRunTest19from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
22from provisioningserver.drivers.hardware import virsh20from provisioningserver.drivers.hardware import virsh
23from provisioningserver.utils.arch import KERNEL_TO_DEBIAN_ARCHITECTURES21from provisioningserver.utils.arch import KERNEL_TO_DEBIAN_ARCHITECTURES
@@ -130,7 +128,7 @@ class TestVirshSSH(MAASTestCase):
130 conn = self.configure_virshssh_pexpect(virsh_outputs)128 conn = self.configure_virshssh_pexpect(virsh_outputs)
131 mock_sendline = self.patch(conn, "sendline")129 mock_sendline = self.patch(conn, "sendline")
132 conn.login(poweraddr=None)130 conn.login(poweraddr=None)
133 self.assertThat(mock_sendline, MockCalledOnceWith("yes"))131 mock_sendline.assert_called_once_with("yes")
134132
135 def test_login_with_password(self):133 def test_login_with_password(self):
136 virsh_outputs = [134 virsh_outputs = [
@@ -140,7 +138,7 @@ class TestVirshSSH(MAASTestCase):
140 fake_password = factory.make_name("password")138 fake_password = factory.make_name("password")
141 mock_sendline = self.patch(conn, "sendline")139 mock_sendline = self.patch(conn, "sendline")
142 conn.login(poweraddr=None, password=fake_password)140 conn.login(poweraddr=None, password=fake_password)
143 self.assertThat(mock_sendline, MockCalledOnceWith(fake_password))141 mock_sendline.assert_called_once_with(fake_password)
144142
145 def test_login_missing_password(self):143 def test_login_missing_password(self):
146 virsh_outputs = [144 virsh_outputs = [
@@ -149,22 +147,22 @@ class TestVirshSSH(MAASTestCase):
149 conn = self.configure_virshssh_pexpect(virsh_outputs)147 conn = self.configure_virshssh_pexpect(virsh_outputs)
150 mock_close = self.patch(conn, "close")148 mock_close = self.patch(conn, "close")
151 self.assertFalse(conn.login(poweraddr=None, password=None))149 self.assertFalse(conn.login(poweraddr=None, password=None))
152 self.assertThat(mock_close, MockCalledOnceWith())150 mock_close.assert_called_once_with()
153151
154 def test_login_invalid(self):152 def test_login_invalid(self):
155 virsh_outputs = [factory.make_string()]153 virsh_outputs = [factory.make_string()]
156 conn = self.configure_virshssh_pexpect(virsh_outputs)154 conn = self.configure_virshssh_pexpect(virsh_outputs)
157 mock_close = self.patch(conn, "close")155 mock_close = self.patch(conn, "close")
158 self.assertFalse(conn.login(poweraddr=None))156 self.assertFalse(conn.login(poweraddr=None))
159 self.assertThat(mock_close, MockCalledOnceWith())157 mock_close.assert_called_once_with()
160158
161 def test_logout(self):159 def test_logout(self):
162 conn = self.configure_virshssh_pexpect()160 conn = self.configure_virshssh_pexpect()
163 mock_sendline = self.patch(conn, "sendline")161 mock_sendline = self.patch(conn, "sendline")
164 mock_close = self.patch(conn, "close")162 mock_close = self.patch(conn, "close")
165 conn.logout()163 conn.logout()
166 self.assertThat(mock_sendline, MockCalledOnceWith("quit"))164 mock_sendline.assert_called_once_with("quit")
167 self.assertThat(mock_close, MockCalledOnceWith())165 mock_close.assert_called_once_with()
168166
169 def test_prompt(self):167 def test_prompt(self):
170 virsh_outputs = ["virsh # "]168 virsh_outputs = ["virsh # "]
@@ -185,8 +183,8 @@ class TestVirshSSH(MAASTestCase):
185 mock_sendline = self.patch(conn, "sendline")183 mock_sendline = self.patch(conn, "sendline")
186 mock_prompt = self.patch(conn, "prompt")184 mock_prompt = self.patch(conn, "prompt")
187 output = conn.run(cmd)185 output = conn.run(cmd)
188 self.assertThat(mock_sendline, MockCalledOnceWith(expected))186 mock_sendline.assert_called_once_with(expected)
189 self.assertThat(mock_prompt, MockCalledOnceWith())187 mock_prompt.assert_called_once_with()
190 self.assertEqual("\n".join(names), output)188 self.assertEqual("\n".join(names), output)
191189
192 def test_list(self):190 def test_list(self):
@@ -242,11 +240,8 @@ class TestVirshSSH(MAASTestCase):
242 c_utf8_environment = get_env_with_locale()240 c_utf8_environment = get_env_with_locale()
243 mock_spawn = self.patch(pexpect.spawn, "__init__")241 mock_spawn = self.patch(pexpect.spawn, "__init__")
244 self.configure_virshssh("")242 self.configure_virshssh("")
245 self.assertThat(243 mock_spawn.assert_called_once_with(
246 mock_spawn,244 None, timeout=30, maxread=2000, env=c_utf8_environment
247 MockCalledOnceWith(
248 None, timeout=30, maxread=2000, env=c_utf8_environment
249 ),
250 )245 )
251246
252247
@@ -359,15 +354,12 @@ class TestVirsh(MAASTestCase):
359354
360 # Check that login was called with the provided poweraddr and355 # Check that login was called with the provided poweraddr and
361 # password.356 # password.
362 self.expectThat(357 mock_login.assert_called_once_with(poweraddr, fake_password)
363 mock_login, MockCalledOnceWith(poweraddr, fake_password)
364 )
365358
366 # Check that the create command had the correct parameters for359 # Check that the create command had the correct parameters for
367 # each machine.360 # each machine.
368 self.expectThat(361 mock_create_node.assert_has_calls(
369 mock_create_node,362 [
370 MockCallsMatch(
371 call(363 call(
372 fake_macs[0],364 fake_macs[0],
373 fake_arch,365 fake_arch,
@@ -408,24 +400,25 @@ class TestVirsh(MAASTestCase):
408 domain,400 domain,
409 machines[4],401 machines[4],
410 ),402 ),
411 ),403 ]
412 )404 )
413405
414 # The first and last machine should have poweroff called on it, as it406 # The first and last machine should have poweroff called on it, as it
415 # was initial in the on state.407 # was initial in the on state.
416 self.expectThat(408 mock_poweroff.assert_has_calls([call(machines[0]), call(machines[3])])
417 mock_poweroff, MockCallsMatch(call(machines[0]), call(machines[3]))
418 )
419409
420 self.assertThat(mock_logout, MockCalledOnceWith())410 mock_logout.assert_called_once_with()
421 self.expectThat(411 mock_commission_node.assert_has_calls(
422 mock_commission_node,412 [
423 MockCallsMatch(
424 call(system_id, user),413 call(system_id, user),
414 call().wait(30),
425 call(system_id, user),415 call(system_id, user),
416 call().wait(30),
426 call(system_id, user),417 call(system_id, user),
418 call().wait(30),
427 call(system_id, user),419 call(system_id, user),
428 ),420 call().wait(30),
421 ]
429 )422 )
430423
431 @inlineCallbacks424 @inlineCallbacks
@@ -434,7 +427,9 @@ class TestVirsh(MAASTestCase):
434 poweraddr = factory.make_name("poweraddr")427 poweraddr = factory.make_name("poweraddr")
435 mock_login = self.patch(virsh.VirshSSH, "login")428 mock_login = self.patch(virsh.VirshSSH, "login")
436 mock_login.return_value = False429 mock_login.return_value = False
437 with ExpectedException(virsh.VirshError):430 with self.assertRaisesRegex(
431 virsh.VirshError, r"^Failed to login to virsh console\.$"
432 ):
438 yield deferToThread(433 yield deferToThread(
439 virsh.probe_virsh_and_enlist,434 virsh.probe_virsh_and_enlist,
440 user,435 user,
@@ -469,9 +464,9 @@ class TestVirshPowerControl(MAASTestCase):
469 machine = factory.make_name("machine")464 machine = factory.make_name("machine")
470 virsh.power_control_virsh(poweraddr, machine, "on")465 virsh.power_control_virsh(poweraddr, machine, "on")
471466
472 self.assertThat(mock_login, MockCalledOnceWith(poweraddr, None))467 mock_login.assert_called_once_with(poweraddr, None)
473 self.assertThat(mock_state, MockCalledOnceWith(machine))468 mock_state.assert_called_once_with(machine)
474 self.assertThat(mock_poweron, MockCalledOnceWith(machine))469 mock_poweron.assert_called_once_with(machine)
475470
476 def test_power_control_off(self):471 def test_power_control_off(self):
477 mock_login = self.patch(virsh.VirshSSH, "login")472 mock_login = self.patch(virsh.VirshSSH, "login")
@@ -484,9 +479,9 @@ class TestVirshPowerControl(MAASTestCase):
484 machine = factory.make_name("machine")479 machine = factory.make_name("machine")
485 virsh.power_control_virsh(poweraddr, machine, "off")480 virsh.power_control_virsh(poweraddr, machine, "off")
486481
487 self.assertThat(mock_login, MockCalledOnceWith(poweraddr, None))482 mock_login.assert_called_once_with(poweraddr, None)
488 self.assertThat(mock_state, MockCalledOnceWith(machine))483 mock_state.assert_called_once_with(machine)
489 self.assertThat(mock_poweroff, MockCalledOnceWith(machine))484 mock_poweroff.assert_called_once_with(machine)
490485
491 def test_power_control_bad_domain(self):486 def test_power_control_bad_domain(self):
492 mock_login = self.patch(virsh.VirshSSH, "login")487 mock_login = self.patch(virsh.VirshSSH, "login")
diff --git a/src/provisioningserver/drivers/hardware/tests/test_vmware.py b/src/provisioningserver/drivers/hardware/tests/test_vmware.py
index 433b452..a52a93e 100644
--- a/src/provisioningserver/drivers/hardware/tests/test_vmware.py
+++ b/src/provisioningserver/drivers/hardware/tests/test_vmware.py
@@ -7,8 +7,6 @@
77
8import random8import random
99
10from testtools import ExpectedException
11from testtools.matchers import Equals, Is, IsInstance, Not
12from twisted.internet.defer import inlineCallbacks10from twisted.internet.defer import inlineCallbacks
13from twisted.internet.threads import deferToThread11from twisted.internet.threads import deferToThread
1412
@@ -16,10 +14,6 @@ from maastesting import get_testing_timeout
16from maastesting.factory import factory14from maastesting.factory import factory
17from maastesting.testcase import MAASTestCase, MAASTwistedRunTest15from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
18from provisioningserver.drivers.hardware import vmware16from provisioningserver.drivers.hardware import vmware
19from provisioningserver.drivers.hardware.vmware import (
20 VMwarePyvmomiAPI,
21 VMwareVMNotFound,
22)
23from provisioningserver.utils.twisted import asynchronous17from provisioningserver.utils.twisted import asynchronous
2418
2519
@@ -53,8 +47,7 @@ class FakeVmomiVMRuntime:
5347
5448
55class FakeVmomiVMConfigHardwareDevice:49class FakeVmomiVMConfigHardwareDevice:
56 def __init__(self):50 pass
57 pass
5851
5952
60class FakeVmomiNic(FakeVmomiVMConfigHardwareDevice):53class FakeVmomiNic(FakeVmomiVMConfigHardwareDevice):
@@ -246,35 +239,36 @@ class TestVMwarePyvmomi(MAASTestCase):
246239
247 def test_api_connection(self):240 def test_api_connection(self):
248 mock_vmomi_api = self.configure_vmomi_api(servers=0)241 mock_vmomi_api = self.configure_vmomi_api(servers=0)
249 api = VMwarePyvmomiAPI(242 api = vmware.VMwarePyvmomiAPI(
250 factory.make_hostname(),243 factory.make_hostname(),
251 factory.make_username(),244 factory.make_username(),
252 factory.make_username(),245 factory.make_username(),
253 )246 )
254 api.connect()247 api.connect()
255 self.expectThat(248 self.assertIsInstance(api.service_instance, FakeVmomiServiceInstance)
256 api.service_instance, IsInstance(FakeVmomiServiceInstance)249 self.assertTrue(api.is_connected())
257 )
258 self.expectThat(api.is_connected(), Equals(True))
259 api.disconnect()250 api.disconnect()
260 self.expectThat(mock_vmomi_api.SmartConnect.called, Equals(True))251 self.assertTrue(mock_vmomi_api.SmartConnect.called)
261 self.expectThat(mock_vmomi_api.Disconnect.called, Equals(True))252 self.assertTrue(mock_vmomi_api.Disconnect.called)
262253
263 def test_api_failed_connection(self):254 def test_api_failed_connection(self):
264 mock_vmomi_api = self.patch(vmware, "vmomi_api")255 mock_vmomi_api = self.patch(vmware, "vmomi_api")
265 mock_vmomi_api.SmartConnect.return_value = None256 mock_vmomi_api.SmartConnect.return_value = None
266 api = VMwarePyvmomiAPI(257 api = vmware.VMwarePyvmomiAPI(
267 factory.make_hostname(),258 factory.make_hostname(),
268 factory.make_username(),259 factory.make_username(),
269 factory.make_username(),260 factory.make_username(),
270 )261 )
271 with ExpectedException(vmware.VMwareAPIConnectionFailed):262 with self.assertRaisesRegex(
263 vmware.VMwareAPIConnectionFailed,
264 "^Could not connect to VMware service API$",
265 ):
272 api.connect()266 api.connect()
273 self.expectThat(api.service_instance, Is(None))267 self.assertIsNone(api.service_instance)
274 self.expectThat(api.is_connected(), Equals(False))268 self.assertFalse(api.is_connected())
275 api.disconnect()269 api.disconnect()
276 self.expectThat(mock_vmomi_api.SmartConnect.called, Equals(True))270 self.assertTrue(mock_vmomi_api.SmartConnect.called)
277 self.expectThat(mock_vmomi_api.Disconnect.called, Equals(True))271 self.assertTrue(mock_vmomi_api.Disconnect.called)
278272
279 def test_get_vmware_servers_empty(self):273 def test_get_vmware_servers_empty(self):
280 self.configure_vmomi_api(servers=0)274 self.configure_vmomi_api(servers=0)
@@ -285,7 +279,7 @@ class TestVMwarePyvmomi(MAASTestCase):
285 port=8443,279 port=8443,
286 protocol="https",280 protocol="https",
287 )281 )
288 self.expectThat(servers, Equals({}))282 self.assertEqual(servers, {})
289283
290 def test_get_vmware_servers(self):284 def test_get_vmware_servers(self):
291 self.configure_vmomi_api(servers=10)285 self.configure_vmomi_api(servers=10)
@@ -294,7 +288,7 @@ class TestVMwarePyvmomi(MAASTestCase):
294 factory.make_username(),288 factory.make_username(),
295 factory.make_username(),289 factory.make_username(),
296 )290 )
297 self.expectThat(servers, Not(Equals({})))291 self.assertNotEqual(servers, {})
298292
299 def test_get_server_by_instance_uuid(self):293 def test_get_server_by_instance_uuid(self):
300 mock_vmomi_api = self.configure_vmomi_api(294 mock_vmomi_api = self.configure_vmomi_api(
@@ -336,7 +330,10 @@ class TestVMwarePyvmomi(MAASTestCase):
336 mock_vmomi_api = self.configure_vmomi_api(330 mock_vmomi_api = self.configure_vmomi_api(
337 servers=1, has_instance_uuid=True, has_uuid=True331 servers=1, has_instance_uuid=True, has_uuid=True
338 )332 )
339 with ExpectedException(VMwareVMNotFound):333 with self.assertRaisesRegex(
334 vmware.VMwareVMNotFound,
335 "^Failed to find VM; need a UUID or a VM name for power control$",
336 ):
340 vmware._find_vm_by_uuid_or_name(mock_vmomi_api, None, None)337 vmware._find_vm_by_uuid_or_name(mock_vmomi_api, None, None)
341338
342 def test_power_control_missing_server_raises_VMwareVMNotFound(self):339 def test_power_control_missing_server_raises_VMwareVMNotFound(self):
@@ -346,7 +343,10 @@ class TestVMwarePyvmomi(MAASTestCase):
346 host = factory.make_hostname()343 host = factory.make_hostname()
347 username = factory.make_username()344 username = factory.make_username()
348 password = factory.make_username()345 password = factory.make_username()
349 with ExpectedException(VMwareVMNotFound):346 with self.assertRaisesRegex(
347 vmware.VMwareVMNotFound,
348 "^Failed to find VM; need a UUID or a VM name for power control$",
349 ):
350 vmware.power_control_vmware(350 vmware.power_control_vmware(
351 host, username, password, None, None, "on"351 host, username, password, None, None, "on"
352 )352 )
@@ -358,7 +358,10 @@ class TestVMwarePyvmomi(MAASTestCase):
358 host = factory.make_hostname()358 host = factory.make_hostname()
359 username = factory.make_username()359 username = factory.make_username()
360 password = factory.make_username()360 password = factory.make_username()
361 with ExpectedException(VMwareVMNotFound):361 with self.assertRaisesRegex(
362 vmware.VMwareVMNotFound,
363 "^Failed to find VM; need a UUID or a VM name for power control$",
364 ):
362 vmware.power_query_vmware(host, username, password, None, None)365 vmware.power_query_vmware(host, username, password, None, None)
363366
364 def test_power_control(self):367 def test_power_control(self):
@@ -399,7 +402,7 @@ class TestVMwarePyvmomi(MAASTestCase):
399 state = vmware.power_query_vmware(402 state = vmware.power_query_vmware(
400 host, username, password, vm_name, uuid403 host, username, password, vm_name, uuid
401 )404 )
402 self.expectThat(state, Equals("on"))405 self.assertEqual(state, "on")
403406
404 # turn off a set of VMs, then verify they are off407 # turn off a set of VMs, then verify they are off
405 for uuid in instance_uuids:408 for uuid in instance_uuids:
@@ -410,9 +413,9 @@ class TestVMwarePyvmomi(MAASTestCase):
410 state = vmware.power_query_vmware(413 state = vmware.power_query_vmware(
411 host, username, password, vm_name, uuid414 host, username, password, vm_name, uuid
412 )415 )
413 self.expectThat(state, Equals("off"))416 self.assertEqual(state, "off")
414417
415 self.expectThat(servers, Not(Equals({})))418 self.assertNotEqual(servers, {})
416419
417 @inlineCallbacks420 @inlineCallbacks
418 def test_probe_and_enlist(self):421 def test_probe_and_enlist(self):
diff --git a/src/provisioningserver/drivers/osystem/tests/test_centos.py b/src/provisioningserver/drivers/osystem/tests/test_centos.py
index aabc7f9..ccc1b4d 100644
--- a/src/provisioningserver/drivers/osystem/tests/test_centos.py
+++ b/src/provisioningserver/drivers/osystem/tests/test_centos.py
@@ -6,8 +6,6 @@
66
7from itertools import product7from itertools import product
88
9from testtools.matchers import Equals
10
11from maastesting.factory import factory9from maastesting.factory import factory
12from maastesting.testcase import MAASTestCase10from maastesting.testcase import MAASTestCase
13from provisioningserver.drivers.osystem.centos import (11from provisioningserver.drivers.osystem.centos import (
@@ -53,4 +51,4 @@ class TestCentOS(MAASTestCase):
53 }51 }
54 osystem = CentOS()52 osystem = CentOS()
55 for name, title in name_titles.items():53 for name, title in name_titles.items():
56 self.expectThat(osystem.get_release_title(name), Equals(title))54 self.assertEqual(osystem.get_release_title(name), title)
diff --git a/src/provisioningserver/drivers/osystem/tests/test_esxi.py b/src/provisioningserver/drivers/osystem/tests/test_esxi.py
index 8b60360..cea57d1 100644
--- a/src/provisioningserver/drivers/osystem/tests/test_esxi.py
+++ b/src/provisioningserver/drivers/osystem/tests/test_esxi.py
@@ -6,8 +6,6 @@
66
7from itertools import product7from itertools import product
88
9from testtools.matchers import Equals
10
11from maastesting.factory import factory9from maastesting.factory import factory
12from maastesting.testcase import MAASTestCase10from maastesting.testcase import MAASTestCase
13from provisioningserver.drivers.osystem import BOOT_IMAGE_PURPOSE11from provisioningserver.drivers.osystem import BOOT_IMAGE_PURPOSE
@@ -47,4 +45,4 @@ class TestESXi(MAASTestCase):
47 }45 }
48 osystem = ESXi()46 osystem = ESXi()
49 for name, title in name_titles.items():47 for name, title in name_titles.items():
50 self.expectThat(osystem.get_release_title(name), Equals(title))48 self.assertEqual(osystem.get_release_title(name), title)
diff --git a/src/provisioningserver/drivers/osystem/tests/test_rhel.py b/src/provisioningserver/drivers/osystem/tests/test_rhel.py
index 709aee9..fc2acd7 100644
--- a/src/provisioningserver/drivers/osystem/tests/test_rhel.py
+++ b/src/provisioningserver/drivers/osystem/tests/test_rhel.py
@@ -6,8 +6,6 @@
66
7from itertools import product7from itertools import product
88
9from testtools.matchers import Equals
10
11from maastesting.factory import factory9from maastesting.factory import factory
12from maastesting.testcase import MAASTestCase10from maastesting.testcase import MAASTestCase
13from provisioningserver.drivers.osystem.rhel import (11from provisioningserver.drivers.osystem.rhel import (
@@ -51,4 +49,4 @@ class TestRHEL(MAASTestCase):
51 }49 }
52 osystem = RHELOS()50 osystem = RHELOS()
53 for name, title in name_titles.items():51 for name, title in name_titles.items():
54 self.expectThat(osystem.get_release_title(name), Equals(title))52 self.assertEqual(osystem.get_release_title(name), title)
diff --git a/src/provisioningserver/tests/test_monkey.py b/src/provisioningserver/tests/test_monkey.py
index 3c38d49..7ddc0ff 100644
--- a/src/provisioningserver/tests/test_monkey.py
+++ b/src/provisioningserver/tests/test_monkey.py
@@ -5,7 +5,6 @@
55
66
7from testtools.deferredruntest import assert_fails_with7from testtools.deferredruntest import assert_fails_with
8from testtools.matchers import Equals
9from twisted.internet.defer import Deferred8from twisted.internet.defer import Deferred
10from twisted.internet.threads import deferToThread9from twisted.internet.threads import deferToThread
1110
@@ -38,58 +37,62 @@ class TestAugmentDeferToThreadPool(MAASTestCase):
3837
39class TestPatchedURI(MAASTestCase):38class TestPatchedURI(MAASTestCase):
40 def test_parses_URL_with_hostname(self):39 def test_parses_URL_with_hostname(self):
41 hostname = factory.make_name("host").encode("ascii")40 hostname = factory.make_name("host")
42 path = factory.make_name("path").encode("ascii")41 path = factory.make_name("path")
43 uri = get_patched_URI().fromBytes(b"http://%s/%s" % (hostname, path))42 uri = get_patched_URI().fromBytes(
44 self.expectThat(uri.host, Equals(hostname))43 f"http://{hostname}/{path}".encode("utf-8")
45 self.expectThat(uri.path, Equals(b"/%s" % path))44 )
46 self.expectThat(uri.port, Equals(80))45 self.assertEqual(uri.host, hostname.encode("utf-8"))
46 self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
47 self.assertEqual(uri.port, 80)
4748
48 def test_parses_URL_with_hostname_and_port(self):49 def test_parses_URL_with_hostname_and_port(self):
49 hostname = factory.make_name("host").encode("ascii")50 hostname = factory.make_name("host")
50 port = factory.pick_port()51 port = factory.pick_port()
51 path = factory.make_name("path").encode("ascii")52 path = factory.make_name("path")
52 uri = get_patched_URI().fromBytes(53 uri = get_patched_URI().fromBytes(
53 b"http://%s:%d/%s" % (hostname, port, path)54 f"http://{hostname}:{port}/{path}".encode("utf-8")
54 )55 )
55 self.expectThat(uri.host, Equals(hostname))56 self.assertEqual(uri.host, hostname.encode("utf-8"))
56 self.expectThat(uri.path, Equals(b"/%s" % path))57 self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
57 self.expectThat(uri.port, Equals(port))58 self.assertEqual(uri.port, port)
5859
59 def test_parses_URL_with_IPv4_address(self):60 def test_parses_URL_with_IPv4_address(self):
60 ip = factory.make_ipv4_address().encode("ascii")61 ip = factory.make_ipv4_address()
61 path = factory.make_name("path").encode("ascii")62 path = factory.make_name("path").encode("ascii")
62 uri = get_patched_URI().fromBytes(b"http://%s/%s" % (ip, path))63 uri = get_patched_URI().fromBytes(
63 self.expectThat(uri.host, Equals(ip))64 f"http://{ip}/{path}".encode("utf-8")
64 self.expectThat(uri.path, Equals(b"/%s" % path))65 )
65 self.expectThat(uri.port, Equals(80))66 self.assertEqual(uri.host, ip.encode("utf-8"))
67 self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
68 self.assertEqual(uri.port, 80)
6669
67 def test_parses_URL_with_IPv4_address_and_port(self):70 def test_parses_URL_with_IPv4_address_and_port(self):
68 ip = factory.make_ipv4_address().encode("ascii")71 ip = factory.make_ipv4_address()
69 port = factory.pick_port()72 port = factory.pick_port()
70 path = factory.make_name("path").encode("ascii")73 path = factory.make_name("path")
71 uri = get_patched_URI().fromBytes(74 uri = get_patched_URI().fromBytes(
72 b"http://%s:%d/%s" % (ip, port, path)75 f"http://{ip}:{port}/{path}".encode("utf-8")
73 )76 )
74 self.expectThat(uri.host, Equals(ip))77 self.assertEqual(uri.host, ip.encode("utf-8"))
75 self.expectThat(uri.path, Equals(b"/%s" % path))78 self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
76 self.expectThat(uri.port, Equals(port))79 self.assertEqual(uri.port, port)
7780
78 def test_parses_URL_with_IPv6_address(self):81 def test_parses_URL_with_IPv6_address(self):
79 ip = factory.make_ipv6_address().encode("ascii")82 ip = factory.make_ipv6_address()
80 path = factory.make_name("path").encode("ascii")83 path = factory.make_name("path")
81 uri = get_patched_URI().fromBytes(b"http://[%s]/%s" % (ip, path))84 uri = get_patched_URI().fromBytes(f"http://[{ip}]/{path}".encode())
82 self.expectThat(uri.host, Equals(b"%s" % ip))85 self.assertEqual(uri.host, ip.encode("utf-8"))
83 self.expectThat(uri.path, Equals(b"/%s" % path))86 self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
84 self.expectThat(uri.port, Equals(80))87 self.assertEqual(uri.port, 80)
8588
86 def test_parses_URL_with_IPv6_address_and_port(self):89 def test_parses_URL_with_IPv6_address_and_port(self):
87 ip = factory.make_ipv6_address().encode("ascii")90 ip = factory.make_ipv6_address()
88 port = factory.pick_port()91 port = factory.pick_port()
89 path = factory.make_name("path").encode("ascii")92 path = factory.make_name("path")
90 uri = get_patched_URI().fromBytes(93 uri = get_patched_URI().fromBytes(
91 b"http://[%s]:%d/%s" % (ip, port, path)94 f"http://[{ip}]:{port}/{path}".encode()
92 )95 )
93 self.expectThat(uri.host, Equals(b"%s" % ip))96 self.assertEqual(uri.host, ip.encode("utf-8"))
94 self.expectThat(uri.path, Equals(b"/%s" % path))97 self.assertEqual(uri.path, f"/{path}".encode("utf-8"))
95 self.expectThat(uri.port, Equals(port))98 self.assertEqual(uri.port, port)
diff --git a/src/provisioningserver/utils/tests/test_events.py b/src/provisioningserver/utils/tests/test_events.py
index c9a677f..c3c64bb 100644
--- a/src/provisioningserver/utils/tests/test_events.py
+++ b/src/provisioningserver/utils/tests/test_events.py
@@ -6,8 +6,6 @@
66
7from unittest.mock import MagicMock, sentinel7from unittest.mock import MagicMock, sentinel
88
9from testtools.matchers import IsInstance
10
11from maastesting.factory import factory9from maastesting.factory import factory
12from maastesting.testcase import MAASTestCase10from maastesting.testcase import MAASTestCase
13from provisioningserver.utils.events import Event, EventGroup11from provisioningserver.utils.events import Event, EventGroup
@@ -64,4 +62,4 @@ class TestEventGroup(MAASTestCase):
64 events = [factory.make_name("event") for _ in range(3)]62 events = [factory.make_name("event") for _ in range(3)]
65 group = EventGroup(*events)63 group = EventGroup(*events)
66 for event in events:64 for event in events:
67 self.expectThat(getattr(group, event), IsInstance(Event))65 self.assertIsInstance(getattr(group, event), Event)
diff --git a/src/provisioningserver/utils/tests/test_text.py b/src/provisioningserver/utils/tests/test_text.py
index 5e6f949..c585619 100644
--- a/src/provisioningserver/utils/tests/test_text.py
+++ b/src/provisioningserver/utils/tests/test_text.py
@@ -8,7 +8,6 @@ from itertools import repeat
8import string8import string
99
10import hypothesis.strategies10import hypothesis.strategies
11from testtools.matchers import Equals
1211
13from maastesting.factory import factory12from maastesting.factory import factory
14from maastesting.testcase import MAASTestCase13from maastesting.testcase import MAASTestCase
@@ -111,9 +110,9 @@ class TestNormalizeToCommaListScenarios(MAASTestCase):
111110
112 def test_scenarios(self):111 def test_scenarios(self):
113 unquoted = normalise_to_comma_list(self.test_input)112 unquoted = normalise_to_comma_list(self.test_input)
114 self.expectThat(unquoted, Equals(self.unquoted))113 self.assertEqual(unquoted, self.unquoted)
115 quoted = normalise_to_comma_list(self.test_input, quoted=True)114 quoted = normalise_to_comma_list(self.test_input, quoted=True)
116 self.expectThat(quoted, Equals(self.quoted))115 self.assertEqual(quoted, self.quoted)
117116
118117
119class TestSplitStringList(MAASTestCase):118class TestSplitStringList(MAASTestCase):

Subscribers

People subscribed via source and target branches