Merge ~adam-collard/maas:no-assertItemsEqual-provisioningserver into maas:master

Proposed by Adam Collard
Status: Merged
Approved by: Adam Collard
Approved revision: 3ad3aed755c86da7791f007adc5b542db21d4f33
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~adam-collard/maas:no-assertItemsEqual-provisioningserver
Merge into: maas:master
Diff against target: 1997 lines (+195/-251)
54 files modified
src/maasserver/api/tests/test_raid.py (+6/-6)
src/maasserver/models/tests/test_node.py (+6/-9)
src/provisioningserver/boot/tests/test_tftppath.py (+15/-15)
src/provisioningserver/dhcp/tests/test_config.py (+2/-2)
src/provisioningserver/dns/tests/test_zoneconfig.py (+13/-13)
src/provisioningserver/drivers/hardware/tests/test_ucsm.py (+1/-56)
src/provisioningserver/drivers/hardware/tests/test_virsh.py (+2/-2)
src/provisioningserver/drivers/osystem/tests/test_base.py (+5/-5)
src/provisioningserver/drivers/osystem/tests/test_bootloader.py (+1/-1)
src/provisioningserver/drivers/osystem/tests/test_ubuntucore.py (+1/-1)
src/provisioningserver/drivers/osystem/tests/test_windows.py (+4/-4)
src/provisioningserver/drivers/pod/tests/test_lxd.py (+2/-2)
src/provisioningserver/drivers/pod/tests/test_registry.py (+2/-2)
src/provisioningserver/drivers/pod/tests/test_virsh.py (+15/-15)
src/provisioningserver/drivers/power/tests/test_amt.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_apc.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_dli.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_eaton.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_hmc.py (+1/-1)
src/provisioningserver/drivers/power/tests/test_ipmi.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_manual.py (+1/-1)
src/provisioningserver/drivers/power/tests/test_moonshot.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_mscm.py (+1/-1)
src/provisioningserver/drivers/power/tests/test_msftocs.py (+1/-1)
src/provisioningserver/drivers/power/tests/test_nova.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_openbmc.py (+1/-1)
src/provisioningserver/drivers/power/tests/test_recs.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_redfish.py (+1/-1)
src/provisioningserver/drivers/power/tests/test_registry.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_seamicro.py (+3/-3)
src/provisioningserver/drivers/power/tests/test_ucsm.py (+2/-2)
src/provisioningserver/drivers/power/tests/test_vmware.py (+4/-4)
src/provisioningserver/drivers/power/tests/test_webhook.py (+1/-1)
src/provisioningserver/drivers/power/tests/test_wedge.py (+1/-1)
src/provisioningserver/drivers/tests/test_base.py (+1/-1)
src/provisioningserver/import_images/tests/test_boot_image_mapping.py (+5/-5)
src/provisioningserver/import_images/tests/test_boot_resources.py (+2/-2)
src/provisioningserver/import_images/tests/test_cleanup.py (+5/-5)
src/provisioningserver/import_images/tests/test_download_descriptions.py (+10/-10)
src/provisioningserver/import_images/tests/test_product_mapping.py (+1/-1)
src/provisioningserver/rackdservices/tests/test_tftp.py (+1/-1)
src/provisioningserver/tests/test_config.py (+1/-1)
src/provisioningserver/tests/test_events.py (+1/-1)
src/provisioningserver/tests/test_service_monitor.py (+3/-3)
src/provisioningserver/tests/test_tags.py (+1/-1)
src/provisioningserver/tests/test_upgrade_cluster.py (+3/-3)
src/provisioningserver/utils/tests/test_arp.py (+8/-8)
src/provisioningserver/utils/tests/test_enum.py (+2/-2)
src/provisioningserver/utils/tests/test_events.py (+7/-8)
src/provisioningserver/utils/tests/test_ipaddr.py (+2/-2)
src/provisioningserver/utils/tests/test_network.py (+7/-7)
src/provisioningserver/utils/tests/test_ps.py (+6/-6)
src/provisioningserver/utils/tests/test_registry.py (+2/-2)
src/provisioningserver/utils/tests/test_utils.py (+17/-14)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Approve
MAAS Lander Needs Fixing
Review via email: mp+408726@code.launchpad.net

Commit message

[provisioningserver] Replace defunct assertItemsEqual

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

UNIT TESTS
-b no-assertItemsEqual-provisioningserver lp:~adam-collard/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/11004/console
COMMIT: 24be81a9f8d74ef6c496957501136ea4a806f5a9

review: Needs Fixing
7ee71e1... by Adam Collard

Fix order sensitive test

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

UNIT TESTS
-b no-assertItemsEqual-provisioningserver lp:~adam-collard/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/11007/console
COMMIT: 7ee71e19649a6df044dc2210dd8399209cbc0d28

review: Needs Fixing
Revision history for this message
Alberto Donato (ack) wrote :

minor nits inline

it seems some tests are failing because of expected ordering, though

3ad3aed... by Adam Collard

Address feedback from ack

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

UNIT TESTS
-b no-assertItemsEqual-provisioningserver lp:~adam-collard/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/11009/console
COMMIT: 3ad3aed755c86da7791f007adc5b542db21d4f33

review: Needs Fixing
Revision history for this message
Alberto Donato (ack) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/api/tests/test_raid.py b/src/maasserver/api/tests/test_raid.py
2index e174cfd..832d9f5 100644
3--- a/src/maasserver/api/tests/test_raid.py
4+++ b/src/maasserver/api/tests/test_raid.py
5@@ -231,7 +231,7 @@ class TestRaidsAPI(APITestCase.ForUser):
6 (10 * PART_SIZE) - RAID_SUPERBLOCK_OVERHEAD, parsed_device["size"]
7 )
8 self.assertEqual(uuid4, parsed_device["uuid"])
9- self.assertEqual(block_devices, parsed_block_devices)
10+ self.assertCountEqual(block_devices, parsed_block_devices)
11 self.assertCountEqual(partitions, parsed_partitions)
12 self.assertEqual([], parsed_block_device_spares)
13 self.assertEqual([], parsed_partition_spares)
14@@ -323,7 +323,7 @@ class TestRaidsAPI(APITestCase.ForUser):
15 PART_SIZE - RAID_SUPERBLOCK_OVERHEAD, parsed_device["size"]
16 )
17 self.assertEqual(uuid4, parsed_device["uuid"])
18- self.assertEqual(block_devices, parsed_block_devices)
19+ self.assertCountEqual(block_devices, parsed_block_devices)
20 self.assertCountEqual(partitions, parsed_partitions)
21 self.assertEqual([], parsed_block_device_spares)
22 self.assertEqual([], parsed_partition_spares)
23@@ -379,7 +379,7 @@ class TestRaidsAPI(APITestCase.ForUser):
24 PART_SIZE - RAID_SUPERBLOCK_OVERHEAD, parsed_device["size"]
25 )
26 self.assertEqual(uuid4, parsed_device["uuid"])
27- self.assertEqual(block_devices, parsed_block_devices)
28+ self.assertCountEqual(block_devices, parsed_block_devices)
29 self.assertCountEqual(partitions, parsed_partitions)
30 self.assertEqual(spare_devices, parsed_block_device_spares)
31 self.assertEqual(spare_partitions, parsed_partition_spares)
32@@ -438,7 +438,7 @@ class TestRaidsAPI(APITestCase.ForUser):
33 (7 * large_partitions[0].size) - RAID_SUPERBLOCK_OVERHEAD,
34 parsed_device["size"],
35 )
36- self.assertEqual(block_devices, parsed_block_devices)
37+ self.assertCountEqual(block_devices, parsed_block_devices)
38 self.assertCountEqual(partitions, parsed_partitions)
39 self.assertEqual(spare_devices, parsed_block_device_spares)
40 self.assertEqual(spare_partitions, parsed_partition_spares)
41@@ -498,7 +498,7 @@ class TestRaidsAPI(APITestCase.ForUser):
42 (6 * large_partitions[0].size) - RAID_SUPERBLOCK_OVERHEAD,
43 parsed_device["size"],
44 )
45- self.assertEqual(block_devices, parsed_block_devices)
46+ self.assertCountEqual(block_devices, parsed_block_devices)
47 self.assertCountEqual(partitions, parsed_partitions)
48 self.assertEqual(spare_devices, parsed_block_device_spares)
49 self.assertEqual(spare_partitions, parsed_partition_spares)
50@@ -558,7 +558,7 @@ class TestRaidsAPI(APITestCase.ForUser):
51 (4 * large_partitions[0].size) - RAID_SUPERBLOCK_OVERHEAD,
52 parsed_device["size"],
53 )
54- self.assertEqual(block_devices, parsed_block_devices)
55+ self.assertCountEqual(block_devices, parsed_block_devices)
56 self.assertCountEqual(partitions, parsed_partitions)
57 self.assertEqual(spare_devices, parsed_block_device_spares)
58 self.assertEqual(spare_partitions, parsed_partition_spares)
59diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py
60index 0b31991..61c2069 100644
61--- a/src/maasserver/models/tests/test_node.py
62+++ b/src/maasserver/models/tests/test_node.py
63@@ -324,9 +324,8 @@ class TestNodeGetLatestScriptResults(MAASServerTestCase):
64 factory.make_ScriptResult(script=script, script_set=script_set)
65 )
66
67- self.assertEqual(
68- sorted(latest_script_results, key=lambda x: x.name),
69- list(node.get_latest_script_results),
70+ self.assertCountEqual(
71+ latest_script_results, node.get_latest_script_results
72 )
73
74 def test_get_latest_script_results_storage(self):
75@@ -403,9 +402,8 @@ class TestNodeGetLatestScriptResults(MAASServerTestCase):
76 if script.script_type == SCRIPT_TYPE.COMMISSIONING:
77 latest_script_results.append(script_result)
78
79- self.assertEqual(
80- sorted(latest_script_results, key=lambda x: x.name),
81- list(node.get_latest_commissioning_script_results),
82+ self.assertCountEqual(
83+ latest_script_results, node.get_latest_commissioning_script_results
84 )
85
86 def test_get_latest_testing_script_results(self):
87@@ -428,9 +426,8 @@ class TestNodeGetLatestScriptResults(MAASServerTestCase):
88 if script.script_type == SCRIPT_TYPE.TESTING:
89 latest_script_results.append(script_result)
90
91- self.assertEqual(
92- sorted(latest_script_results, key=lambda x: x.name),
93- list(node.get_latest_testing_script_results),
94+ self.assertCountEqual(
95+ latest_script_results, node.get_latest_testing_script_results
96 )
97
98 def test_get_latest_installation_script_results(self):
99diff --git a/src/provisioningserver/boot/tests/test_tftppath.py b/src/provisioningserver/boot/tests/test_tftppath.py
100index b3e0f81..1242688 100644
101--- a/src/provisioningserver/boot/tests/test_tftppath.py
102+++ b/src/provisioningserver/boot/tests/test_tftppath.py
103@@ -148,7 +148,7 @@ class TestTFTPPath(MAASTestCase):
104 self.make_image_dir(params, self.tftproot)
105 purposes = ["install", "commissioning", "xinstall"]
106 make_osystem(self, params["osystem"], purposes)
107- self.assertItemsEqual(
108+ self.assertCountEqual(
109 [make_image(params, purpose) for purpose in purposes],
110 list_boot_images(self.tftproot),
111 )
112@@ -159,7 +159,7 @@ class TestTFTPPath(MAASTestCase):
113 for param in params:
114 self.make_image_dir(param, self.tftproot)
115 make_osystem(self, param["osystem"], purposes)
116- self.assertItemsEqual(
117+ self.assertCountEqual(
118 [
119 make_image(param, purpose)
120 for param in params
121@@ -178,7 +178,7 @@ class TestTFTPPath(MAASTestCase):
122 make_osystem(self, params["osystem"], purposes)
123 # The API requires "supported_subarches".
124 expected_metadata = dict(supported_subarches=metadata["subarches"])
125- self.assertItemsEqual(
126+ self.assertCountEqual(
127 [
128 make_image(params, purpose, expected_metadata)
129 for purpose in purposes
130@@ -190,7 +190,7 @@ class TestTFTPPath(MAASTestCase):
131 params = [make_boot_image_storage_params() for counter in range(3)]
132 for param in params:
133 self.make_image_dir(param, self.tftproot)
134- self.assertItemsEqual([], list_boot_images(self.tftproot))
135+ self.assertEqual([], list_boot_images(self.tftproot))
136
137 def test_is_visible_subdir_ignores_regular_files(self):
138 plain_file = self.make_file()
139@@ -213,14 +213,14 @@ class TestTFTPPath(MAASTestCase):
140 self.assertTrue(is_visible_subdir(base_dir, subdir))
141
142 def test_list_subdirs_lists_empty_directory(self):
143- self.assertItemsEqual([], list_subdirs(self.make_dir()))
144+ self.assertEqual([], list_subdirs(self.make_dir()))
145
146 def test_list_subdirs_lists_subdirs(self):
147 base_dir = self.make_dir()
148 factory.make_file(base_dir, factory.make_name("plain-file"))
149 subdir = factory.make_name("subdir")
150 os.makedirs(os.path.join(base_dir, subdir))
151- self.assertItemsEqual([subdir], list_subdirs(base_dir))
152+ self.assertEqual([subdir], list_subdirs(base_dir))
153
154 def test_extend_path_finds_path_extensions(self):
155 base_dir = self.make_dir()
156@@ -229,7 +229,7 @@ class TestTFTPPath(MAASTestCase):
157 ]
158 for subdir in subdirs:
159 os.makedirs(os.path.join(base_dir, subdir))
160- self.assertItemsEqual(
161+ self.assertCountEqual(
162 [[os.path.basename(base_dir), subdir] for subdir in subdirs],
163 extend_path(
164 os.path.dirname(base_dir), [os.path.basename(base_dir)]
165@@ -246,7 +246,7 @@ class TestTFTPPath(MAASTestCase):
166 )
167
168 def test_extend_path_stops_if_no_subdirs_found(self):
169- self.assertItemsEqual([], extend_path(self.make_dir(), []))
170+ self.assertCountEqual([], extend_path(self.make_dir(), []))
171
172 def test_drill_down_follows_directory_tree(self):
173 base_dir = self.make_dir()
174@@ -257,7 +257,7 @@ class TestTFTPPath(MAASTestCase):
175 ]
176 for subdir in subdirs:
177 os.makedirs(os.path.join(base_dir, lower_dir, subdir))
178- self.assertItemsEqual(
179+ self.assertCountEqual(
180 [[lower_dir, subdir] for subdir in subdirs],
181 drill_down(base_dir, [[lower_dir]]),
182 )
183@@ -270,7 +270,7 @@ class TestTFTPPath(MAASTestCase):
184 relevant_subdir = factory.make_name("subdir")
185 os.makedirs(os.path.join(base_dir, irrelevant_dir, irrelevant_subdir))
186 os.makedirs(os.path.join(base_dir, relevant_dir, relevant_subdir))
187- self.assertEqual(
188+ self.assertCountEqual(
189 [[relevant_dir, relevant_subdir]],
190 drill_down(base_dir, [[relevant_dir]]),
191 )
192@@ -391,7 +391,7 @@ class TestTFTPPath(MAASTestCase):
193
194 params = extract_image_params(path, "")
195
196- self.assertItemsEqual(
197+ self.assertCountEqual(
198 [
199 {
200 "osystem": osystem,
201@@ -458,7 +458,7 @@ class TestTFTPPath(MAASTestCase):
202
203 params = extract_image_params(path, maas_meta)
204
205- self.assertItemsEqual(
206+ self.assertCountEqual(
207 [
208 {
209 "osystem": osystem,
210@@ -504,7 +504,7 @@ class TestTFTPPath(MAASTestCase):
211
212 params = extract_image_params(path, "")
213
214- self.assertItemsEqual(
215+ self.assertCountEqual(
216 [
217 {
218 "osystem": "bootloader",
219@@ -537,7 +537,7 @@ class TestTFTPPath(MAASTestCase):
220
221 params = extract_image_params(path, "")
222
223- self.assertItemsEqual(
224+ self.assertCountEqual(
225 [
226 {
227 "osystem": osystem,
228@@ -604,7 +604,7 @@ class TestTFTPPath(MAASTestCase):
229
230 params = extract_image_params(path, maas_meta)
231
232- self.assertItemsEqual(
233+ self.assertCountEqual(
234 [
235 {
236 "osystem": osystem,
237diff --git a/src/provisioningserver/dhcp/tests/test_config.py b/src/provisioningserver/dhcp/tests/test_config.py
238index fdbbb53..1b4f654 100644
239--- a/src/provisioningserver/dhcp/tests/test_config.py
240+++ b/src/provisioningserver/dhcp/tests/test_config.py
241@@ -344,7 +344,7 @@ class TestGetConfig(MAASTestCase):
242 )
243 for server in server_line.split(", ")
244 ]
245- self.assertItemsEqual(ntp_servers_expected, ntp_servers_observed)
246+ self.assertCountEqual(ntp_servers_expected, ntp_servers_observed)
247
248 def test_renders_without_ntp_servers_set(self):
249 params = make_sample_params(self, ipv6=self.ipv6)
250@@ -373,7 +373,7 @@ class TestGetConfig(MAASTestCase):
251 )
252 for server in server_line.split(", ")
253 ]
254- self.assertItemsEqual(ntp_servers_expected, ntp_servers_observed)
255+ self.assertCountEqual(ntp_servers_expected, ntp_servers_observed)
256
257 def test_renders_router_ip_if_present(self):
258 params = make_sample_params(self, ipv6=self.ipv6)
259diff --git a/src/provisioningserver/dns/tests/test_zoneconfig.py b/src/provisioningserver/dns/tests/test_zoneconfig.py
260index 97c8f95..767b947 100644
261--- a/src/provisioningserver/dns/tests/test_zoneconfig.py
262+++ b/src/provisioningserver/dns/tests/test_zoneconfig.py
263@@ -136,7 +136,7 @@ class TestDNSForwardZoneConfig(MAASTestCase):
264 ]
265 expect = [(n, t, ip) for n, t, ip in expected]
266 actual = DNSForwardZoneConfig.get_A_mapping(combined_mapping, ns_ttl)
267- self.assertItemsEqual(expect, actual)
268+ self.assertCountEqual(expect, actual)
269
270 def test_get_aaaa_mapping_returns_ipv6_mapping(self):
271 ttl = random.randint(10, 300)
272@@ -163,7 +163,7 @@ class TestDNSForwardZoneConfig(MAASTestCase):
273 ipv4_mapping.items(), ipv6_mapping.items()
274 )
275 }
276- self.assertItemsEqual(
277+ self.assertCountEqual(
278 [
279 (n, info.ttl, ip)
280 for n, info in ipv6_mapping.items()
281@@ -489,7 +489,7 @@ class TestDNSReverseZoneConfig(MAASTestCase):
282 # And that the zone names chosen for each element are correct.
283 for net in range(len(expected)):
284 for zi in range(len(expected[net][1])):
285- self.assertItemsEqual(
286+ self.assertCountEqual(
287 expected[net][1][zi].zone_name,
288 results[net][1][zi].zone_name,
289 )
290@@ -589,7 +589,7 @@ class TestDNSReverseZoneConfig(MAASTestCase):
291 "%s.%s" % (hostname, name): HostnameIPMapping(None, 30, {ip})
292 for hostname, ip in hosts.items()
293 }
294- self.assertItemsEqual(
295+ self.assertCountEqual(
296 expected, DNSReverseZoneConfig.get_PTR_mapping(mapping, network)
297 )
298
299@@ -617,7 +617,7 @@ class TestDNSReverseZoneConfig(MAASTestCase):
300 factory.make_string(): HostnameIPMapping(None, 30, ["192.70.0.2"]),
301 }
302 mapping.update(extra_mapping)
303- self.assertItemsEqual(
304+ self.assertCountEqual(
305 expected, DNSReverseZoneConfig.get_PTR_mapping(mapping, network)
306 )
307
308@@ -756,7 +756,7 @@ class TestDNSReverseZoneConfig_GetGenerateDirectives(MAASTestCase):
309 ("0-255", "$.1.168.192.in-addr.arpa.", "192-168-1-$.domain."),
310 ("0-128", "$.2.168.192.in-addr.arpa.", "192-168-2-$.domain."),
311 ]
312- self.assertItemsEqual(
313+ self.assertCountEqual(
314 expected_directives,
315 DNSReverseZoneConfig.get_GENERATE_directives(
316 ip_range,
317@@ -826,7 +826,7 @@ class TestDNSReverseZoneConfig_GetGenerateDirectives(MAASTestCase):
318 network, domain, DomainInfo(network, reverse)
319 )
320 self.expectThat(directives, HasLength(1))
321- self.assertItemsEqual(expected_generate_directives, directives)
322+ self.assertCountEqual(expected_generate_directives, directives)
323
324 def test_returns_single_entry_for_tiny_network(self):
325 network = IPNetwork("%s/28" % factory.make_ipv4_address())
326@@ -841,7 +841,7 @@ class TestDNSReverseZoneConfig_GetGenerateDirectives(MAASTestCase):
327 network, domain, DomainInfo(network, reverse)
328 )
329 self.expectThat(directives, HasLength(1))
330- self.assertItemsEqual(expected_generate_directives, directives)
331+ self.assertCountEqual(expected_generate_directives, directives)
332
333 def test_returns_single_entry_for_weird_small_range(self):
334 ip_range = IPRange("10.0.0.1", "10.0.0.255")
335@@ -867,7 +867,7 @@ class TestDNSReverseZoneConfig_GetGenerateDirectives(MAASTestCase):
336 network, domain, DomainInfo(network, reverse)
337 )
338 self.expectThat(directives, HasLength(256))
339- self.assertItemsEqual(expected_generate_directives, directives)
340+ self.assertCountEqual(expected_generate_directives, directives)
341
342 def test_ignores_network_larger_than_slash_16(self):
343 network = IPNetwork("%s/15" % factory.make_ipv4_address())
344@@ -939,7 +939,7 @@ class TestDNSForwardZoneConfig_GetGenerateDirectives(MAASTestCase):
345 ("0-255", "192-168-1-$", "192.168.1.$"),
346 ("0-128", "192-168-2-$", "192.168.2.$"),
347 ]
348- self.assertItemsEqual(
349+ self.assertCountEqual(
350 expected_directives,
351 DNSForwardZoneConfig.get_GENERATE_directives(ip_range),
352 )
353@@ -982,7 +982,7 @@ class TestDNSForwardZoneConfig_GetGenerateDirectives(MAASTestCase):
354 expected_directives = self.get_expected_generate_directives(network)
355 directives = DNSForwardZoneConfig.get_GENERATE_directives(network)
356 self.expectThat(directives, HasLength(1))
357- self.assertItemsEqual(expected_directives, directives)
358+ self.assertCountEqual(expected_directives, directives)
359
360 def test_returns_single_entry_for_tiny_network(self):
361 network = IPNetwork("%s/31" % factory.make_ipv4_address())
362@@ -990,7 +990,7 @@ class TestDNSForwardZoneConfig_GetGenerateDirectives(MAASTestCase):
363 expected_directives = self.get_expected_generate_directives(network)
364 directives = DNSForwardZoneConfig.get_GENERATE_directives(network)
365 self.assertEqual(1, len(expected_directives))
366- self.assertItemsEqual(expected_directives, directives)
367+ self.assertCountEqual(expected_directives, directives)
368
369 def test_returns_two_entries_for_slash_23_network(self):
370 network = IPNetwork("%s/23" % factory.make_ipv4_address())
371@@ -998,7 +998,7 @@ class TestDNSForwardZoneConfig_GetGenerateDirectives(MAASTestCase):
372 expected_directives = self.get_expected_generate_directives(network)
373 directives = DNSForwardZoneConfig.get_GENERATE_directives(network)
374 self.assertEqual(2, len(expected_directives))
375- self.assertItemsEqual(expected_directives, directives)
376+ self.assertCountEqual(expected_directives, directives)
377
378 def test_dtrt_for_larger_networks(self):
379 # For every other network size that we're not explicitly
380diff --git a/src/provisioningserver/drivers/hardware/tests/test_ucsm.py b/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
381index 571fe68..9493407 100644
382--- a/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
383+++ b/src/provisioningserver/drivers/hardware/tests/test_ucsm.py
384@@ -1,9 +1,6 @@
385 # Copyright 2014-2016 Canonical Ltd. This software is licensed under the
386 # GNU Affero General Public License version 3 (see the file LICENSE).
387
388-"""Tests for ``provisioningserver.drivers.hardware.ucsm``."""
389-
390-
391 from io import StringIO
392 from itertools import permutations
393 import random
394@@ -86,8 +83,6 @@ def make_server(power_state=None):
395
396
397 class TestUCSMXMLAPIError(MAASTestCase):
398- """Tests for ``UCSM_XML_API_Error``."""
399-
400 def test_includes_code_and_msg(self):
401 def raise_error():
402 raise UCSM_XML_API_Error("bad", 4224)
403@@ -99,8 +94,6 @@ class TestUCSMXMLAPIError(MAASTestCase):
404
405
406 class TestMakeRequestData(MAASTestCase):
407- """Tests for ``make_request_data``."""
408-
409 def test_no_children(self):
410 fields = {"hello": "there"}
411 request_data = make_request_data("foo", fields)
412@@ -115,7 +108,7 @@ class TestMakeRequestData(MAASTestCase):
413 request_data = make_request_data("foo", fields, children)
414 root = XML(request_data)
415 self.assertEqual("foo", root.tag)
416- self.assertItemsEqual(children_tags, (e.tag for e in root))
417+ self.assertEqual(children_tags, [e.tag for e in root])
418
419 def test_no_fields(self):
420 request_data = make_request_data("foo")
421@@ -124,8 +117,6 @@ class TestMakeRequestData(MAASTestCase):
422
423
424 class TestParseResonse(MAASTestCase):
425- """Tests for ``parse_response``."""
426-
427 def test_no_error(self):
428 xml = "<foo/>"
429 response = parse_response(xml)
430@@ -137,8 +128,6 @@ class TestParseResonse(MAASTestCase):
431
432
433 class TestLogin(MAASTestCase):
434- """"Tests for ``UCSM_XML_API.login``."""
435-
436 def test_login_assigns_cookie(self):
437 cookie = "chocolate chip"
438 api, mock = make_api_patch_call(self)
439@@ -156,8 +145,6 @@ class TestLogin(MAASTestCase):
440
441
442 class TestLogout(MAASTestCase):
443- """"Tests for ``UCSM_XML_API.logout``."""
444-
445 def test_logout_clears_cookie(self):
446 api = make_api()
447 self.patch(api, "_call")
448@@ -173,8 +160,6 @@ class TestLogout(MAASTestCase):
449
450
451 class TestConfigResolveClass(MAASTestCase):
452- """"Tests for ``UCSM_XML_API.config_resolve_class``."""
453-
454 def test_no_filters(self):
455 class_id = make_class()
456 api, mock = make_api_patch_call(self)
457@@ -200,8 +185,6 @@ class TestConfigResolveClass(MAASTestCase):
458
459
460 class TestConfigResolveChildren(MAASTestCase):
461- """"Tests for ``UCSM_XML_API.config_resolve_children``."""
462-
463 def test_parameters(self):
464 dn = make_dn()
465 class_id = make_class()
466@@ -229,8 +212,6 @@ class TestConfigResolveChildren(MAASTestCase):
467
468
469 class TestConfigConfMo(MAASTestCase):
470- """"Tests for ``UCSM_XML_API.config_conf_mo``."""
471-
472 def test_parameters(self):
473 dn = make_dn()
474 config_items = [Element("hi")]
475@@ -243,8 +224,6 @@ class TestConfigConfMo(MAASTestCase):
476
477
478 class TestCall(MAASTestCase):
479- """"Tests for ``UCSM_XML_API._call``."""
480-
481 def test_call(self):
482 name = "method"
483 fields = {1: 2}
484@@ -267,8 +246,6 @@ class TestCall(MAASTestCase):
485
486
487 class TestSendRequest(MAASTestCase):
488- """"Tests for ``UCSM_XML_API._send_request``."""
489-
490 def test_send_request(self):
491 request_data = "foo"
492 api = make_api()
493@@ -283,8 +260,6 @@ class TestSendRequest(MAASTestCase):
494
495
496 class TestConfigResolveDn(MAASTestCase):
497- """Tests for ``UCSM_XML_API.config_resolve_dn``."""
498-
499 def test_parameters(self):
500 api, mock = make_api_patch_call(self)
501 test_dn = make_dn()
502@@ -294,8 +269,6 @@ class TestConfigResolveDn(MAASTestCase):
503
504
505 class TestGetServers(MAASTestCase):
506- """Tests for ``get_servers``."""
507-
508 def test_uses_uuid(self):
509 uuid = factory.make_UUID()
510 api = make_api()
511@@ -322,8 +295,6 @@ class TestGetServers(MAASTestCase):
512
513
514 class TestProbeLanBootOptions(MAASTestCase):
515- """Tests for ``probe_lan_boot_options``."""
516-
517 def test_returns_result(self):
518 api = make_api()
519 server = sentinel.server
520@@ -350,8 +321,6 @@ class TestProbeLanBootOptions(MAASTestCase):
521
522
523 class TestGetChildren(MAASTestCase):
524- """Tests for ``get_children``."""
525-
526 def test_returns_result(self):
527 search_class = make_class()
528 api = make_api()
529@@ -374,8 +343,6 @@ class TestGetChildren(MAASTestCase):
530
531
532 class TestGetMacs(MAASTestCase):
533- """Tests for ``get_macs``."""
534-
535 def test_gets_adaptors(self):
536 adaptor = "adaptor"
537 server = make_server()
538@@ -402,8 +369,6 @@ class TestGetMacs(MAASTestCase):
539
540
541 class TestProbeServers(MAASTestCase):
542- """Tests for ``probe_servers``."""
543-
544 def test_uses_api(self):
545 api = make_api()
546 mock = self.patch(ucsm, "get_servers")
547@@ -441,8 +406,6 @@ class TestProbeServers(MAASTestCase):
548
549
550 class TestGetServerPowerControl(MAASTestCase):
551- """Tests for ``get_server_power_control``."""
552-
553 def test_get_server_power_control(self):
554 api = make_api()
555 mock = self.patch(api, "config_resolve_children")
556@@ -456,8 +419,6 @@ class TestGetServerPowerControl(MAASTestCase):
557
558
559 class TestSetServerPowerControl(MAASTestCase):
560- """Tests for ``set_server_power_control``."""
561-
562 def test_set_server_power_control(self):
563 api = make_api()
564 power_dn = make_dn()
565@@ -472,8 +433,6 @@ class TestSetServerPowerControl(MAASTestCase):
566
567
568 class TestLoggedIn(MAASTestCase):
569- """Tests for ``logged_in``."""
570-
571 def test_logged_in(self):
572 mock = self.patch(ucsm, "UCSM_XML_API")
573 url = "url"
574@@ -521,8 +480,6 @@ class TestInvalidGetPowerCommand(MAASTestCase):
575
576
577 class TestPowerControlUCSM(MAASTestCase):
578- """Tests for ``power_control_ucsm``."""
579-
580 def test_power_control_ucsm(self):
581 uuid = factory.make_UUID()
582 api = Mock()
583@@ -548,8 +505,6 @@ class TestPowerControlUCSM(MAASTestCase):
584
585
586 class TestUCSMPowerState(MAASTestCase):
587- """Tests for `power_state_ucsm`."""
588-
589 def test_power_state_get_off(self):
590 url = factory.make_name("url")
591 username = factory.make_name("username")
592@@ -594,7 +549,6 @@ class TestUCSMPowerState(MAASTestCase):
593
594
595 class TestProbeAndEnlistUCSM(MAASTestCase):
596- """Tests for ``probe_and_enlist_ucsm``."""
597
598 run_tests_with = MAASTwistedRunTest.make_factory(timeout=5)
599
600@@ -640,8 +594,6 @@ class TestProbeAndEnlistUCSM(MAASTestCase):
601
602
603 class TestGetServiceProfile(MAASTestCase):
604- """Tests for ``get_service_profile.``"""
605-
606 def test_get_service_profile(self):
607 test_dn = make_dn()
608 server = Element("computeBlade", {"assignedToDn": test_dn})
609@@ -676,7 +628,6 @@ def make_boot_order_scenarios(size):
610
611
612 class TestGetFirstBooter(MAASTestCase):
613- """Tests for ``get_first_booter.``"""
614
615 scenarios, minimum = make_boot_order_scenarios(3)
616
617@@ -690,8 +641,6 @@ class TestGetFirstBooter(MAASTestCase):
618
619
620 class TestsForStripRoKeys(MAASTestCase):
621- """Tests for ``strip_ro_keys.``"""
622-
623 def test_strip_ro_keys(self):
624 attributes = {key: "DC" for key in RO_KEYS}
625
626@@ -709,8 +658,6 @@ class TestsForStripRoKeys(MAASTestCase):
627
628
629 class TestMakePolicyChange(MAASTestCase):
630- """Tests for ``make_policy_change``."""
631-
632 def test_lan_already_top_priority(self):
633 boot_profile_response = make_fake_result(
634 "configResolveChildren", "lsbootLan"
635@@ -738,8 +685,6 @@ class TestMakePolicyChange(MAASTestCase):
636
637
638 class TestSetLanBootDefault(MAASTestCase):
639- """Tets for ``set_lan_boot_default.``"""
640-
641 def test_no_change(self):
642 api = make_api()
643 server = make_server()
644diff --git a/src/provisioningserver/drivers/hardware/tests/test_virsh.py b/src/provisioningserver/drivers/hardware/tests/test_virsh.py
645index 6abcc41..c665a06 100644
646--- a/src/provisioningserver/drivers/hardware/tests/test_virsh.py
647+++ b/src/provisioningserver/drivers/hardware/tests/test_virsh.py
648@@ -191,14 +191,14 @@ class TestVirshSSH(MAASTestCase):
649 names = [factory.make_name("machine") for _ in range(3)]
650 conn = self.configure_virshssh("\n".join(names))
651 expected = conn.list()
652- self.assertItemsEqual(names, expected)
653+ self.assertEqual(names, expected)
654
655 def test_list_dom_prefix(self):
656 prefix = "dom_prefix"
657 names = [prefix + factory.make_name("machine") for _ in range(3)]
658 conn = self.configure_virshssh("\n".join(names), dom_prefix=prefix)
659 expected = conn.list()
660- self.assertItemsEqual(names, expected)
661+ self.assertEqual(names, expected)
662
663 def test_get_state(self):
664 state = factory.make_name("state")
665diff --git a/src/provisioningserver/drivers/osystem/tests/test_base.py b/src/provisioningserver/drivers/osystem/tests/test_base.py
666index 1ec1654..851b714 100644
667--- a/src/provisioningserver/drivers/osystem/tests/test_base.py
668+++ b/src/provisioningserver/drivers/osystem/tests/test_base.py
669@@ -55,7 +55,7 @@ class TestOperatingSystem(MAASTestCase):
670 def test_format_release_choices(self):
671 osystem = self.make_usable_osystem()
672 releases = osystem.get_supported_releases()
673- self.assertItemsEqual(
674+ self.assertCountEqual(
675 [(release, release) for release in releases],
676 osystem.format_release_choices(releases),
677 )
678@@ -72,7 +72,7 @@ class TestOperatingSystem(MAASTestCase):
679 osystem = self.make_usable_osystem()
680 images = self.configure_list_boot_images_for(osystem)
681 releases = {image["release"] for image in images}
682- self.assertItemsEqual(releases, osystem.gen_supported_releases())
683+ self.assertCountEqual(releases, osystem.gen_supported_releases())
684
685 def test_get_xinstall_parameters(self):
686 # The base OperatingSystems class should only look for root-tgz,
687@@ -90,7 +90,7 @@ class TestOperatingSystem(MAASTestCase):
688 for fname in ["squashfs", "root-tgz", "root-dd"]:
689 factory.make_file(dir_path, fname)
690 self.useFixture(ClusterConfigurationFixture(tftp_root=tmpdir))
691- self.assertItemsEqual(
692+ self.assertEqual(
693 ("root-tgz", "tgz"),
694 osystem.get_xinstall_parameters(arch, subarch, release, label),
695 )
696@@ -265,7 +265,7 @@ class TestFindImage(MAASTestCase):
697 if self.fname:
698 factory.make_file(dir_path, self.fname)
699 self.useFixture(ClusterConfigurationFixture(tftp_root=tmpdir))
700- self.assertItemsEqual(
701+ self.assertEqual(
702 self.expected,
703 osystem._find_image(
704 arch,
705@@ -286,7 +286,7 @@ class TestOperatingSystemRegistry(MAASTestCase):
706 self.useFixture(RegistryFixture())
707
708 def test_operating_system_registry(self):
709- self.assertItemsEqual([], OperatingSystemRegistry)
710+ self.assertEqual([], list(OperatingSystemRegistry))
711 OperatingSystemRegistry.register_item("resource", sentinel.resource)
712 self.assertIn(
713 sentinel.resource, (item for name, item in OperatingSystemRegistry)
714diff --git a/src/provisioningserver/drivers/osystem/tests/test_bootloader.py b/src/provisioningserver/drivers/osystem/tests/test_bootloader.py
715index b834670..c240f72 100644
716--- a/src/provisioningserver/drivers/osystem/tests/test_bootloader.py
717+++ b/src/provisioningserver/drivers/osystem/tests/test_bootloader.py
718@@ -22,7 +22,7 @@ class TestCustomOS(MAASTestCase):
719
720 def test_get_boot_image_purposes(self):
721 osystem = BootLoaderOS()
722- self.assertItemsEqual(
723+ self.assertEqual(
724 [BOOT_IMAGE_PURPOSE.BOOTLOADER],
725 osystem.get_boot_image_purposes(
726 factory.make_name("arch"),
727diff --git a/src/provisioningserver/drivers/osystem/tests/test_ubuntucore.py b/src/provisioningserver/drivers/osystem/tests/test_ubuntucore.py
728index 956b245..50d05ea 100644
729--- a/src/provisioningserver/drivers/osystem/tests/test_ubuntucore.py
730+++ b/src/provisioningserver/drivers/osystem/tests/test_ubuntucore.py
731@@ -61,7 +61,7 @@ class TestUbuntuCoreOS(MAASTestCase):
732
733 def test_get_xinstall_parameters_default(self):
734 osystem = UbuntuCoreOS()
735- self.assertItemsEqual(
736+ self.assertEqual(
737 ("root-dd.xz", "dd-xz"),
738 osystem.get_xinstall_parameters(
739 factory.make_name("arch"),
740diff --git a/src/provisioningserver/drivers/osystem/tests/test_windows.py b/src/provisioningserver/drivers/osystem/tests/test_windows.py
741index 92f7e9a..fb439b7 100644
742--- a/src/provisioningserver/drivers/osystem/tests/test_windows.py
743+++ b/src/provisioningserver/drivers/osystem/tests/test_windows.py
744@@ -25,7 +25,7 @@ class TestWindowsOS(MAASTestCase):
745 subarch = factory.make_name("subarch")
746 release = factory.make_name("release")
747 label = factory.make_name("label")
748- self.assertItemsEqual(
749+ self.assertEqual(
750 [BOOT_IMAGE_PURPOSE.XINSTALL],
751 osystem.get_boot_image_purposes(arch, subarch, release, label),
752 )
753@@ -112,16 +112,16 @@ class TestWindowsOS(MAASTestCase):
754 node = self.make_node()
755 token = self.make_token()
756 url = factory.make_name("url")
757- required_keys = [
758+ required_keys = {
759 "maas_metadata_url",
760 "maas_oauth_consumer_secret",
761 "maas_oauth_consumer_key",
762 "maas_oauth_token_key",
763 "maas_oauth_token_secret",
764 "hostname",
765- ]
766+ }
767 preseed = osystem.compose_preseed("default", node, token, url)
768- self.assertItemsEqual(required_keys, preseed.keys())
769+ self.assertEqual(required_keys, preseed.keys())
770
771 def test_compose_preseed_uses_only_hostname(self):
772 osystem = WindowsOS()
773diff --git a/src/provisioningserver/drivers/pod/tests/test_lxd.py b/src/provisioningserver/drivers/pod/tests/test_lxd.py
774index 62d3405..7850b00 100644
775--- a/src/provisioningserver/drivers/pod/tests/test_lxd.py
776+++ b/src/provisioningserver/drivers/pod/tests/test_lxd.py
777@@ -466,7 +466,7 @@ class TestLXDPodDriver(MAASTestCase):
778 self.assertEqual(["amd64/generic"], discovered_pod.architectures)
779 self.assertEqual("lxd-server", discovered_pod.name)
780 self.assertEqual(discovered_pod.version, "4.1")
781- self.assertItemsEqual([mac_address], discovered_pod.mac_addresses)
782+ self.assertEqual([mac_address], discovered_pod.mac_addresses)
783 self.assertEqual(-1, discovered_pod.cores)
784 self.assertEqual(-1, discovered_pod.cpu_speed)
785 self.assertEqual(-1, discovered_pod.memory)
786@@ -474,7 +474,7 @@ class TestLXDPodDriver(MAASTestCase):
787 self.assertEqual(-1, discovered_pod.hints.cores)
788 self.assertEqual(-1, discovered_pod.hints.cpu_speed)
789 self.assertEqual(-1, discovered_pod.hints.local_storage)
790- self.assertItemsEqual(
791+ self.assertEqual(
792 [
793 Capabilities.COMPOSABLE,
794 Capabilities.DYNAMIC_LOCAL_STORAGE,
795diff --git a/src/provisioningserver/drivers/pod/tests/test_registry.py b/src/provisioningserver/drivers/pod/tests/test_registry.py
796index c4c9b15..b3eca04 100644
797--- a/src/provisioningserver/drivers/pod/tests/test_registry.py
798+++ b/src/provisioningserver/drivers/pod/tests/test_registry.py
799@@ -19,7 +19,7 @@ class TestPodDriverRegistry(MAASTestCase):
800 self.useFixture(RegistryFixture())
801
802 def test_registry(self):
803- self.assertItemsEqual([], PodDriverRegistry)
804+ self.assertEqual([], list(PodDriverRegistry))
805 PodDriverRegistry.register_item("driver", sentinel.driver)
806 self.assertIn(
807 sentinel.driver, (item for name, item in PodDriverRegistry)
808@@ -30,7 +30,7 @@ class TestPodDriverRegistry(MAASTestCase):
809 fake_driver_two = make_pod_driver_base()
810 PodDriverRegistry.register_item(fake_driver_one.name, fake_driver_one)
811 PodDriverRegistry.register_item(fake_driver_two.name, fake_driver_two)
812- self.assertItemsEqual(
813+ self.assertEqual(
814 [
815 {
816 "driver_type": "pod",
817diff --git a/src/provisioningserver/drivers/pod/tests/test_virsh.py b/src/provisioningserver/drivers/pod/tests/test_virsh.py
818index 79ebded..8a63418 100644
819--- a/src/provisioningserver/drivers/pod/tests/test_virsh.py
820+++ b/src/provisioningserver/drivers/pod/tests/test_virsh.py
821@@ -665,7 +665,7 @@ class TestVirshSSH(MAASTestCase):
822 expected = (("br0", "e1000"), ("br1", "e1000"))
823 conn = self.configure_virshssh("")
824 values = conn._get_column_values(SAMPLE_IFLIST, keys)
825- self.assertItemsEqual(values, expected)
826+ self.assertEqual(values, expected)
827
828 def test_get_key_value(self):
829 key = "CPU model"
830@@ -698,31 +698,31 @@ class TestVirshSSH(MAASTestCase):
831 names = [factory.make_name("machine") for _ in range(3)]
832 conn = self.configure_virshssh("\n".join(names))
833 expected = conn.list_machines()
834- self.assertItemsEqual(names, expected)
835+ self.assertEqual(names, expected)
836
837 def test_list_machines_with_dom_prefix(self):
838 prefix = "dom_prefix"
839 names = [prefix + factory.make_name("machine") for _ in range(3)]
840 conn = self.configure_virshssh("\n".join(names), dom_prefix=prefix)
841 expected = conn.list_machines()
842- self.assertItemsEqual(names, expected)
843+ self.assertEqual(names, expected)
844
845 def test_list_pools(self):
846 names = ["default", "ubuntu"]
847 conn = self.configure_virshssh(SAMPLE_POOLLIST)
848 expected = conn.list_pools()
849- self.assertItemsEqual(names, expected)
850+ self.assertEqual(names, expected)
851
852 def test_list_machine_block_devices(self):
853- block_devices = (
854+ block_devices = [
855 ("vda", "/var/lib/libvirt/images/example1.qcow2"),
856 ("vdb", "/var/lib/libvirt/images/example2.qcow2"),
857- )
858+ ]
859 conn = self.configure_virshssh(SAMPLE_DOMBLKLIST)
860 expected = conn.list_machine_block_devices(
861 factory.make_name("machine")
862 )
863- self.assertItemsEqual(block_devices, expected)
864+ self.assertEqual(block_devices, expected)
865
866 def test_get_machine_state(self):
867 state = factory.make_name("state")
868@@ -1086,13 +1086,13 @@ class TestVirshSSH(MAASTestCase):
869 self.assertEqual(architecture, discovered_machine.architecture)
870 self.assertEqual(cores, discovered_machine.cores)
871 self.assertEqual(memory, discovered_machine.memory)
872- self.assertItemsEqual(
873+ self.assertCountEqual(
874 local_storage, [bd.size for bd in discovered_machine.block_devices]
875 )
876- self.assertItemsEqual(
877+ self.assertEqual(
878 device_tags, [bd.tags for bd in discovered_machine.block_devices]
879 )
880- self.assertItemsEqual(
881+ self.assertCountEqual(
882 mac_addresses,
883 [m.mac_address for m in discovered_machine.interfaces],
884 )
885@@ -1194,13 +1194,13 @@ class TestVirshSSH(MAASTestCase):
886 self.assertEqual(architecture, discovered_machine.architecture)
887 self.assertEqual(cores, discovered_machine.cores)
888 self.assertEqual(memory, discovered_machine.memory)
889- self.assertItemsEqual(
890+ self.assertCountEqual(
891 local_storage, [bd.size for bd in discovered_machine.block_devices]
892 )
893- self.assertItemsEqual(
894+ self.assertCountEqual(
895 device_tags, [bd.tags for bd in discovered_machine.block_devices]
896 )
897- self.assertItemsEqual(
898+ self.assertCountEqual(
899 mac_addresses,
900 [m.mac_address for m in discovered_machine.interfaces],
901 )
902@@ -2570,14 +2570,14 @@ class TestVirshPodDriver(MAASTestCase):
903 mock.return_value = False
904 driver = virsh.VirshPodDriver()
905 missing = driver.detect_missing_packages()
906- self.assertItemsEqual(["libvirt-clients"], missing)
907+ self.assertEqual(["libvirt-clients"], missing)
908
909 def test_no_missing_packages(self):
910 mock = self.patch(has_command_available)
911 mock.return_value = True
912 driver = virsh.VirshPodDriver()
913 missing = driver.detect_missing_packages()
914- self.assertItemsEqual([], missing)
915+ self.assertEqual([], missing)
916
917 def make_context(self):
918 return {
919diff --git a/src/provisioningserver/drivers/power/tests/test_amt.py b/src/provisioningserver/drivers/power/tests/test_amt.py
920index c3776da..f97b3c5 100644
921--- a/src/provisioningserver/drivers/power/tests/test_amt.py
922+++ b/src/provisioningserver/drivers/power/tests/test_amt.py
923@@ -103,14 +103,14 @@ class TestAMTPowerDriver(MAASTestCase):
924 mock.return_value = False
925 driver = amt_module.AMTPowerDriver()
926 missing = driver.detect_missing_packages()
927- self.assertItemsEqual(["wsmancli"], missing)
928+ self.assertEqual(["wsmancli"], missing)
929
930 def test_no_missing_packages(self):
931 mock = self.patch(has_command_available)
932 mock.return_value = True
933 driver = amt_module.AMTPowerDriver()
934 missing = driver.detect_missing_packages()
935- self.assertItemsEqual([], missing)
936+ self.assertEqual([], missing)
937
938 def test_render_wsman_state_xml_renders_xml(self):
939 amt_power_driver = AMTPowerDriver()
940diff --git a/src/provisioningserver/drivers/power/tests/test_apc.py b/src/provisioningserver/drivers/power/tests/test_apc.py
941index 350931e..028e394 100644
942--- a/src/provisioningserver/drivers/power/tests/test_apc.py
943+++ b/src/provisioningserver/drivers/power/tests/test_apc.py
944@@ -30,14 +30,14 @@ class TestAPCPowerDriver(MAASTestCase):
945 mock.return_value = False
946 driver = apc_module.APCPowerDriver()
947 missing = driver.detect_missing_packages()
948- self.assertItemsEqual(["snmp"], missing)
949+ self.assertEqual(["snmp"], missing)
950
951 def test_no_missing_packages(self):
952 mock = self.patch(has_command_available)
953 mock.return_value = True
954 driver = apc_module.APCPowerDriver()
955 missing = driver.detect_missing_packages()
956- self.assertItemsEqual([], missing)
957+ self.assertEqual([], missing)
958
959 def patch_run_command(self, stdout="", stderr="", returncode=0):
960 mock_run_command = self.patch(apc_module.shell, "run_command")
961diff --git a/src/provisioningserver/drivers/power/tests/test_dli.py b/src/provisioningserver/drivers/power/tests/test_dli.py
962index ff43388..7fbeb69 100644
963--- a/src/provisioningserver/drivers/power/tests/test_dli.py
964+++ b/src/provisioningserver/drivers/power/tests/test_dli.py
965@@ -45,14 +45,14 @@ class TestDLIPowerDriver(MAASTestCase):
966 mock.return_value = False
967 driver = dli_module.DLIPowerDriver()
968 missing = driver.detect_missing_packages()
969- self.assertItemsEqual(["wget"], missing)
970+ self.assertEqual(["wget"], missing)
971
972 def test_no_missing_packages(self):
973 mock = self.patch(has_command_available)
974 mock.return_value = True
975 driver = dli_module.DLIPowerDriver()
976 missing = driver.detect_missing_packages()
977- self.assertItemsEqual([], missing)
978+ self.assertEqual([], missing)
979
980 def test_set_outlet_state_calls_wget(self):
981 driver = dli_module.DLIPowerDriver()
982diff --git a/src/provisioningserver/drivers/power/tests/test_eaton.py b/src/provisioningserver/drivers/power/tests/test_eaton.py
983index 900bdc9..7e8ddb2 100644
984--- a/src/provisioningserver/drivers/power/tests/test_eaton.py
985+++ b/src/provisioningserver/drivers/power/tests/test_eaton.py
986@@ -27,14 +27,14 @@ class TestEatonPowerDriver(MAASTestCase):
987 mock.return_value = False
988 driver = eaton_module.EatonPowerDriver()
989 missing = driver.detect_missing_packages()
990- self.assertItemsEqual(["snmp"], missing)
991+ self.assertEqual(["snmp"], missing)
992
993 def test_no_missing_packages(self):
994 mock = self.patch(has_command_available)
995 mock.return_value = True
996 driver = eaton_module.EatonPowerDriver()
997 missing = driver.detect_missing_packages()
998- self.assertItemsEqual([], missing)
999+ self.assertEqual([], missing)
1000
1001 def patch_run_command(self, stdout="", stderr="", returncode=0):
1002 mock_run_command = self.patch(eaton_module.shell, "run_command")
1003diff --git a/src/provisioningserver/drivers/power/tests/test_hmc.py b/src/provisioningserver/drivers/power/tests/test_hmc.py
1004index 32d7149..117f3b2 100644
1005--- a/src/provisioningserver/drivers/power/tests/test_hmc.py
1006+++ b/src/provisioningserver/drivers/power/tests/test_hmc.py
1007@@ -42,7 +42,7 @@ class TestHMCPowerDriver(MAASTestCase):
1008 # there's nothing to check for, just confirm it returns []
1009 driver = hmc_module.HMCPowerDriver()
1010 missing = driver.detect_missing_packages()
1011- self.assertItemsEqual([], missing)
1012+ self.assertEqual([], missing)
1013
1014 def test_run_hmc_command_returns_command_output(self):
1015 driver = HMCPowerDriver()
1016diff --git a/src/provisioningserver/drivers/power/tests/test_ipmi.py b/src/provisioningserver/drivers/power/tests/test_ipmi.py
1017index 7f91d0e..25c9634 100644
1018--- a/src/provisioningserver/drivers/power/tests/test_ipmi.py
1019+++ b/src/provisioningserver/drivers/power/tests/test_ipmi.py
1020@@ -134,14 +134,14 @@ class TestIPMIPowerDriver(MAASTestCase):
1021 mock.return_value = False
1022 driver = ipmi_module.IPMIPowerDriver()
1023 missing = driver.detect_missing_packages()
1024- self.assertItemsEqual(["freeipmi-tools"], missing)
1025+ self.assertEqual(["freeipmi-tools"], missing)
1026
1027 def test_no_missing_packages(self):
1028 mock = self.patch(has_command_available)
1029 mock.return_value = True
1030 driver = ipmi_module.IPMIPowerDriver()
1031 missing = driver.detect_missing_packages()
1032- self.assertItemsEqual([], missing)
1033+ self.assertEqual([], missing)
1034
1035 def test_finds_power_address_from_mac_address(self):
1036 context = make_context()
1037diff --git a/src/provisioningserver/drivers/power/tests/test_manual.py b/src/provisioningserver/drivers/power/tests/test_manual.py
1038index 529c0d0..1fcf69c 100644
1039--- a/src/provisioningserver/drivers/power/tests/test_manual.py
1040+++ b/src/provisioningserver/drivers/power/tests/test_manual.py
1041@@ -13,7 +13,7 @@ class TestManualPowerDriver(MAASTestCase):
1042 def test_no_missing_packages(self):
1043 driver = manual_module.ManualPowerDriver()
1044 missing = driver.detect_missing_packages()
1045- self.assertItemsEqual([], missing)
1046+ self.assertEqual([], missing)
1047
1048 def test_power_on(self):
1049 driver = manual_module.ManualPowerDriver()
1050diff --git a/src/provisioningserver/drivers/power/tests/test_moonshot.py b/src/provisioningserver/drivers/power/tests/test_moonshot.py
1051index 05dc5d6..3f28eab 100644
1052--- a/src/provisioningserver/drivers/power/tests/test_moonshot.py
1053+++ b/src/provisioningserver/drivers/power/tests/test_moonshot.py
1054@@ -81,14 +81,14 @@ class TestMoonshotIPMIPowerDriver(MAASTestCase):
1055 mock.return_value = False
1056 driver = moonshot_module.MoonshotIPMIPowerDriver()
1057 missing = driver.detect_missing_packages()
1058- self.assertItemsEqual(["ipmitool"], missing)
1059+ self.assertEqual(["ipmitool"], missing)
1060
1061 def test_no_missing_packages(self):
1062 mock = self.patch(has_command_available)
1063 mock.return_value = True
1064 driver = moonshot_module.MoonshotIPMIPowerDriver()
1065 missing = driver.detect_missing_packages()
1066- self.assertItemsEqual([], missing)
1067+ self.assertEqual([], missing)
1068
1069 def test_issue_ipmitool_command_sets_pxe_boot(self):
1070 context = make_context()
1071diff --git a/src/provisioningserver/drivers/power/tests/test_mscm.py b/src/provisioningserver/drivers/power/tests/test_mscm.py
1072index a6e28c7..827f380 100644
1073--- a/src/provisioningserver/drivers/power/tests/test_mscm.py
1074+++ b/src/provisioningserver/drivers/power/tests/test_mscm.py
1075@@ -87,7 +87,7 @@ class TestMSCMPowerDriver(MAASTestCase):
1076 # there's nothing to check for, just confirm it returns []
1077 driver = mscm_module.MSCMPowerDriver()
1078 missing = driver.detect_missing_packages()
1079- self.assertItemsEqual([], missing)
1080+ self.assertEqual([], missing)
1081
1082 def test_run_mscm_command_returns_command_output(self):
1083 driver = MSCMPowerDriver()
1084diff --git a/src/provisioningserver/drivers/power/tests/test_msftocs.py b/src/provisioningserver/drivers/power/tests/test_msftocs.py
1085index 6500674..d0ee318 100644
1086--- a/src/provisioningserver/drivers/power/tests/test_msftocs.py
1087+++ b/src/provisioningserver/drivers/power/tests/test_msftocs.py
1088@@ -53,7 +53,7 @@ class TestMicrosoftOCSPowerDriver(MAASTestCase):
1089 # there's nothing to check for, just confirm it returns []
1090 driver = MicrosoftOCSPowerDriver()
1091 missing = driver.detect_missing_packages()
1092- self.assertItemsEqual([], missing)
1093+ self.assertEqual([], missing)
1094
1095 def test_extract_from_response_finds_element_content(self):
1096 driver = MicrosoftOCSPowerDriver()
1097diff --git a/src/provisioningserver/drivers/power/tests/test_nova.py b/src/provisioningserver/drivers/power/tests/test_nova.py
1098index 0a0ee97..4a5c19a 100644
1099--- a/src/provisioningserver/drivers/power/tests/test_nova.py
1100+++ b/src/provisioningserver/drivers/power/tests/test_nova.py
1101@@ -19,14 +19,14 @@ class TestNovaPowerDriver(MAASTestCase):
1102 mock = self.patch(driver, "try_novaapi_import")
1103 mock.return_value = False
1104 missing = driver.detect_missing_packages()
1105- self.assertItemsEqual(["python3-novaclient"], missing)
1106+ self.assertEqual(["python3-novaclient"], missing)
1107
1108 def test_no_missing_packages(self):
1109 driver = nova_module.NovaPowerDriver()
1110 mock = self.patch(driver, "try_novaapi_import")
1111 mock.return_value = True
1112 missing = driver.detect_missing_packages()
1113- self.assertItemsEqual([], missing)
1114+ self.assertEqual([], missing)
1115
1116 def make_parameters(self):
1117 system_id = factory.make_name("system_id")
1118diff --git a/src/provisioningserver/drivers/power/tests/test_openbmc.py b/src/provisioningserver/drivers/power/tests/test_openbmc.py
1119index 8f68164..f480dd8 100644
1120--- a/src/provisioningserver/drivers/power/tests/test_openbmc.py
1121+++ b/src/provisioningserver/drivers/power/tests/test_openbmc.py
1122@@ -56,7 +56,7 @@ class TestOpenBMCPowerDriver(MAASTestCase):
1123 def test_missing_packages(self):
1124 driver = OpenBMCPowerDriver()
1125 missing = driver.detect_missing_packages()
1126- self.assertItemsEqual([], missing)
1127+ self.assertEqual([], missing)
1128
1129 def test_get_url_with_ip(self):
1130 driver = OpenBMCPowerDriver()
1131diff --git a/src/provisioningserver/drivers/power/tests/test_recs.py b/src/provisioningserver/drivers/power/tests/test_recs.py
1132index a2d1625..300dd28 100644
1133--- a/src/provisioningserver/drivers/power/tests/test_recs.py
1134+++ b/src/provisioningserver/drivers/power/tests/test_recs.py
1135@@ -45,7 +45,7 @@ class TestRECSPowerDriver(MAASTestCase):
1136 mock.return_value = True
1137 driver = RECSPowerDriver()
1138 missing = driver.detect_missing_packages()
1139- self.assertItemsEqual([], missing)
1140+ self.assertEqual([], missing)
1141
1142 def make_context(self):
1143 ip = factory.make_name("power_address")
1144@@ -65,7 +65,7 @@ class TestRECSPowerDriver(MAASTestCase):
1145 def test_extract_recs_parameters_extracts_parameters(self):
1146 ip, port, username, password, node_id, context = self.make_context()
1147
1148- self.assertItemsEqual(
1149+ self.assertEqual(
1150 (ip, port, username, password, node_id),
1151 extract_recs_parameters(context),
1152 )
1153diff --git a/src/provisioningserver/drivers/power/tests/test_redfish.py b/src/provisioningserver/drivers/power/tests/test_redfish.py
1154index 22118eb..ee98c73 100644
1155--- a/src/provisioningserver/drivers/power/tests/test_redfish.py
1156+++ b/src/provisioningserver/drivers/power/tests/test_redfish.py
1157@@ -151,7 +151,7 @@ class TestRedfishPowerDriver(MAASTestCase):
1158 # there's nothing to check for, just confirm it returns []
1159 driver = RedfishPowerDriver()
1160 missing = driver.detect_missing_packages()
1161- self.assertItemsEqual([], missing)
1162+ self.assertEqual([], missing)
1163
1164 def test_get_url_with_ip(self):
1165 driver = RedfishPowerDriver()
1166diff --git a/src/provisioningserver/drivers/power/tests/test_registry.py b/src/provisioningserver/drivers/power/tests/test_registry.py
1167index c268d3d..0ff87e3 100644
1168--- a/src/provisioningserver/drivers/power/tests/test_registry.py
1169+++ b/src/provisioningserver/drivers/power/tests/test_registry.py
1170@@ -22,7 +22,7 @@ class TestPowerDriverRegistry(MAASTestCase):
1171 self.useFixture(RegistryFixture())
1172
1173 def test_registry(self):
1174- self.assertItemsEqual([], PowerDriverRegistry)
1175+ self.assertEqual([], list(PowerDriverRegistry))
1176 PowerDriverRegistry.register_item("driver", sentinel.driver)
1177 self.assertIn(
1178 sentinel.driver, (item for name, item in PowerDriverRegistry)
1179@@ -41,7 +41,7 @@ class TestPowerDriverRegistry(MAASTestCase):
1180 PowerDriverRegistry.register_item(
1181 fake_pod_driver.name, fake_pod_driver
1182 )
1183- self.assertItemsEqual(
1184+ self.assertEqual(
1185 [
1186 {
1187 "driver_type": "power",
1188diff --git a/src/provisioningserver/drivers/power/tests/test_seamicro.py b/src/provisioningserver/drivers/power/tests/test_seamicro.py
1189index e707cb7..77c7bc3 100644
1190--- a/src/provisioningserver/drivers/power/tests/test_seamicro.py
1191+++ b/src/provisioningserver/drivers/power/tests/test_seamicro.py
1192@@ -29,14 +29,14 @@ class TestSeaMicroPowerDriver(MAASTestCase):
1193 mock.return_value = False
1194 driver = seamicro_module.SeaMicroPowerDriver()
1195 missing = driver.detect_missing_packages()
1196- self.assertItemsEqual(["ipmitool"], missing)
1197+ self.assertEqual(["ipmitool"], missing)
1198
1199 def test_no_missing_packages(self):
1200 mock = self.patch(has_command_available)
1201 mock.return_value = True
1202 driver = seamicro_module.SeaMicroPowerDriver()
1203 missing = driver.detect_missing_packages()
1204- self.assertItemsEqual([], missing)
1205+ self.assertEqual([], missing)
1206
1207 def make_context(self):
1208 ip = factory.make_name("power_address")
1209@@ -56,7 +56,7 @@ class TestSeaMicroPowerDriver(MAASTestCase):
1210 power_control = choice(["ipmi", "restapi", "restapi2"])
1211 context["power_control"] = power_control
1212
1213- self.assertItemsEqual(
1214+ self.assertEqual(
1215 (ip, username, password, server_id, power_control),
1216 extract_seamicro_parameters(context),
1217 )
1218diff --git a/src/provisioningserver/drivers/power/tests/test_ucsm.py b/src/provisioningserver/drivers/power/tests/test_ucsm.py
1219index 0f1d783..e81ad16 100644
1220--- a/src/provisioningserver/drivers/power/tests/test_ucsm.py
1221+++ b/src/provisioningserver/drivers/power/tests/test_ucsm.py
1222@@ -21,7 +21,7 @@ class TestUCSMPowerDriver(MAASTestCase):
1223 # there's nothing to check for, just confirm it returns []
1224 driver = ucsm_module.UCSMPowerDriver()
1225 missing = driver.detect_missing_packages()
1226- self.assertItemsEqual([], missing)
1227+ self.assertEqual([], missing)
1228
1229 def make_parameters(self):
1230 system_id = factory.make_name("system_id")
1231@@ -48,7 +48,7 @@ class TestUCSMPowerDriver(MAASTestCase):
1232 context,
1233 ) = self.make_parameters()
1234
1235- self.assertItemsEqual(
1236+ self.assertEqual(
1237 (url, username, password, uuid), extract_ucsm_parameters(context)
1238 )
1239
1240diff --git a/src/provisioningserver/drivers/power/tests/test_vmware.py b/src/provisioningserver/drivers/power/tests/test_vmware.py
1241index ef05990..a8a0ccf 100644
1242--- a/src/provisioningserver/drivers/power/tests/test_vmware.py
1243+++ b/src/provisioningserver/drivers/power/tests/test_vmware.py
1244@@ -23,14 +23,14 @@ class TestVMwarePowerDriver(MAASTestCase):
1245 mock.return_value = False
1246 driver = vmware_module.VMwarePowerDriver()
1247 missing = driver.detect_missing_packages()
1248- self.assertItemsEqual(["python3-pyvmomi"], missing)
1249+ self.assertEqual(["python3-pyvmomi"], missing)
1250
1251 def test_no_missing_packages(self):
1252 mock = self.patch(try_pyvmomi_import)
1253 mock.return_value = True
1254 driver = vmware_module.VMwarePowerDriver()
1255 missing = driver.detect_missing_packages()
1256- self.assertItemsEqual([], missing)
1257+ self.assertEqual([], missing)
1258
1259 def make_parameters(self, has_optional=True):
1260 system_id = factory.make_name("system_id")
1261@@ -78,7 +78,7 @@ class TestVMwarePowerDriver(MAASTestCase):
1262 context,
1263 ) = self.make_parameters()
1264
1265- self.assertItemsEqual(
1266+ self.assertEqual(
1267 (host, username, password, vm_name, uuid, None, None),
1268 extract_vmware_parameters(context),
1269 )
1270@@ -96,7 +96,7 @@ class TestVMwarePowerDriver(MAASTestCase):
1271 context,
1272 ) = self.make_parameters(has_optional=False)
1273
1274- self.assertItemsEqual(
1275+ self.assertEqual(
1276 (host, username, password, vm_name, uuid, port, protocol),
1277 extract_vmware_parameters(context),
1278 )
1279diff --git a/src/provisioningserver/drivers/power/tests/test_webhook.py b/src/provisioningserver/drivers/power/tests/test_webhook.py
1280index 0ba2b43..ce974e1 100644
1281--- a/src/provisioningserver/drivers/power/tests/test_webhook.py
1282+++ b/src/provisioningserver/drivers/power/tests/test_webhook.py
1283@@ -252,7 +252,7 @@ class TestWebhookPowerDriver(MAASTestCase):
1284 self.assertThat(mock_readBody, MockNotCalled())
1285
1286 def test_missing_packages(self):
1287- self.assertItemsEqual([], self.webhook.detect_missing_packages())
1288+ self.assertEqual([], self.webhook.detect_missing_packages())
1289
1290 def test_power_on(self):
1291 mock_webhook_request = self.patch(self.webhook, "_webhook_request")
1292diff --git a/src/provisioningserver/drivers/power/tests/test_wedge.py b/src/provisioningserver/drivers/power/tests/test_wedge.py
1293index 4c2412e..21b1263 100644
1294--- a/src/provisioningserver/drivers/power/tests/test_wedge.py
1295+++ b/src/provisioningserver/drivers/power/tests/test_wedge.py
1296@@ -40,7 +40,7 @@ class TestWedgePowerDriver(MAASTestCase):
1297 # there's nothing to check for, just confirm it returns []
1298 driver = wedge_module.WedgePowerDriver()
1299 missing = driver.detect_missing_packages()
1300- self.assertItemsEqual([], missing)
1301+ self.assertEqual([], missing)
1302
1303 def test_run_wedge_command_returns_command_output(self):
1304 driver = WedgePowerDriver()
1305diff --git a/src/provisioningserver/drivers/tests/test_base.py b/src/provisioningserver/drivers/tests/test_base.py
1306index 4dc703e..a7440e7 100644
1307--- a/src/provisioningserver/drivers/tests/test_base.py
1308+++ b/src/provisioningserver/drivers/tests/test_base.py
1309@@ -400,7 +400,7 @@ class TestRegistries(MAASTestCase):
1310 self.useFixture(RegistryFixture())
1311
1312 def test_architecture_registry(self):
1313- self.assertItemsEqual([], ArchitectureRegistry)
1314+ self.assertEqual([], list(ArchitectureRegistry))
1315 ArchitectureRegistry.register_item("resource", sentinel.resource)
1316 self.assertIn(
1317 sentinel.resource, (item for name, item in ArchitectureRegistry)
1318diff --git a/src/provisioningserver/import_images/tests/test_boot_image_mapping.py b/src/provisioningserver/import_images/tests/test_boot_image_mapping.py
1319index de0938c..cd4ec66 100644
1320--- a/src/provisioningserver/import_images/tests/test_boot_image_mapping.py
1321+++ b/src/provisioningserver/import_images/tests/test_boot_image_mapping.py
1322@@ -24,13 +24,13 @@ class TestBootImageMapping(MAASTestCase):
1323 """Tests for `BootImageMapping`."""
1324
1325 def test_initially_empty(self):
1326- self.assertItemsEqual([], BootImageMapping().items())
1327+ self.assertCountEqual([], BootImageMapping().items())
1328
1329 def test_items_returns_items(self):
1330 image = make_image_spec()
1331 resource = factory.make_name("resource")
1332 image_dict = set_resource(image_spec=image, resource=resource)
1333- self.assertItemsEqual([(image, resource)], image_dict.items())
1334+ self.assertCountEqual([(image, resource)], image_dict.items())
1335
1336 def test_is_empty_returns_True_if_empty(self):
1337 self.assertTrue(BootImageMapping().is_empty())
1338@@ -45,14 +45,14 @@ class TestBootImageMapping(MAASTestCase):
1339 image = make_image_spec()
1340 resource = factory.make_name("resource")
1341 image_dict.setdefault(image, resource)
1342- self.assertItemsEqual([(image, resource)], image_dict.items())
1343+ self.assertCountEqual([(image, resource)], image_dict.items())
1344
1345 def test_setdefault_leaves_set_item_unchanged(self):
1346 image = make_image_spec()
1347 old_resource = factory.make_name("resource")
1348 image_dict = set_resource(image_spec=image, resource=old_resource)
1349 image_dict.setdefault(image, factory.make_name("newresource"))
1350- self.assertItemsEqual([(image, old_resource)], image_dict.items())
1351+ self.assertCountEqual([(image, old_resource)], image_dict.items())
1352
1353 def test_set_overwrites_item(self):
1354 image_dict = BootImageMapping()
1355@@ -60,7 +60,7 @@ class TestBootImageMapping(MAASTestCase):
1356 resource = factory.make_name("resource")
1357 image_dict.setdefault(image, factory.make_name("resource"))
1358 image_dict.set(image, resource)
1359- self.assertItemsEqual([(image, resource)], image_dict.items())
1360+ self.assertCountEqual([(image, resource)], image_dict.items())
1361
1362 def test_dump_json_is_consistent(self):
1363 image = make_image_spec()
1364diff --git a/src/provisioningserver/import_images/tests/test_boot_resources.py b/src/provisioningserver/import_images/tests/test_boot_resources.py
1365index 05e088e..b1e7c02 100644
1366--- a/src/provisioningserver/import_images/tests/test_boot_resources.py
1367+++ b/src/provisioningserver/import_images/tests/test_boot_resources.py
1368@@ -407,14 +407,14 @@ class TestMain(MAASTestCase):
1369 self.assertEqual(
1370 [label], list(meta_data[osystem][arch][subarch][kflavor][release])
1371 )
1372- self.assertItemsEqual(
1373+ self.assertEqual(
1374 [
1375 "content_id",
1376 "kflavor",
1377 "path",
1378 "product_name",
1379- "version_name",
1380 "subarches",
1381+ "version_name",
1382 ],
1383 list(meta_data[osystem][arch][subarch][kflavor][release][label]),
1384 )
1385diff --git a/src/provisioningserver/import_images/tests/test_cleanup.py b/src/provisioningserver/import_images/tests/test_cleanup.py
1386index b95e6f0..b55101a 100644
1387--- a/src/provisioningserver/import_images/tests/test_cleanup.py
1388+++ b/src/provisioningserver/import_images/tests/test_cleanup.py
1389@@ -41,14 +41,14 @@ class TestCleanup(MAASTestCase):
1390 def test_list_old_snapshots_returns_all(self):
1391 storage = self.make_dir()
1392 snapshots = [self.make_snapshot_dir(storage) for _ in range(3)]
1393- self.assertItemsEqual(snapshots, cleanup.list_old_snapshots(storage))
1394+ self.assertCountEqual(snapshots, cleanup.list_old_snapshots(storage))
1395
1396 def test_list_old_snapshots_returns_all_but_current_directory(self):
1397 storage = self.make_dir()
1398 snapshots = [self.make_snapshot_dir(storage) for _ in range(3)]
1399 current_snapshot = self.make_snapshot_dir(storage)
1400 os.symlink(current_snapshot, os.path.join(storage, "current"))
1401- self.assertItemsEqual(snapshots, cleanup.list_old_snapshots(storage))
1402+ self.assertCountEqual(snapshots, cleanup.list_old_snapshots(storage))
1403
1404 def test_cleanup_snapshots_removes_all_old_snapshots(self):
1405 storage = self.make_dir()
1406@@ -63,14 +63,14 @@ class TestCleanup(MAASTestCase):
1407
1408 def test_list_unused_cache_files_returns_empty(self):
1409 storage = self.make_dir()
1410- self.assertItemsEqual([], cleanup.list_unused_cache_files(storage))
1411+ self.assertEqual([], cleanup.list_unused_cache_files(storage))
1412
1413 def test_list_unused_cache_files_returns_all_files_nlink_equal_one(self):
1414 storage = self.make_dir()
1415 cache_nlink_1 = [self.make_cache_file(storage) for _ in range(3)]
1416 for _ in range(3):
1417 self.make_cache_file(storage, link_count=randint(1, 3))
1418- self.assertItemsEqual(
1419+ self.assertCountEqual(
1420 cache_nlink_1, cleanup.list_unused_cache_files(storage)
1421 )
1422
1423@@ -89,7 +89,7 @@ class TestCleanup(MAASTestCase):
1424 for filename in os.listdir(cache_dir)
1425 if os.path.isfile(os.path.join(cache_dir, filename))
1426 ]
1427- self.assertItemsEqual(cache_nlink_greater_than_1, remaining_cache)
1428+ self.assertCountEqual(cache_nlink_greater_than_1, remaining_cache)
1429
1430 def test_cleanup_snapshots_and_cache_calls(self):
1431 storage = self.make_dir()
1432diff --git a/src/provisioningserver/import_images/tests/test_download_descriptions.py b/src/provisioningserver/import_images/tests/test_download_descriptions.py
1433index a9cc142..564e546 100644
1434--- a/src/provisioningserver/import_images/tests/test_download_descriptions.py
1435+++ b/src/provisioningserver/import_images/tests/test_download_descriptions.py
1436@@ -457,7 +457,7 @@ class TestRepoDumper(MAASTestCase):
1437 ),
1438 sentinel.contentsource,
1439 )
1440- image_specs = [
1441+ image_specs = {
1442 make_image_spec(
1443 os=item["os"],
1444 release=item["release"],
1445@@ -466,8 +466,8 @@ class TestRepoDumper(MAASTestCase):
1446 label=item["label"],
1447 )
1448 for subarch in subarches
1449- ]
1450- self.assertItemsEqual(image_specs, list(boot_images_dict.mapping))
1451+ }
1452+ self.assertEqual(image_specs, boot_images_dict.mapping.keys())
1453
1454 def test_insert_item_sets_compat_item_specific_to_subarch(self):
1455 boot_images_dict = BootImageMapping()
1456@@ -624,7 +624,7 @@ class TestRepoDumper(MAASTestCase):
1457 ),
1458 sentinel.contentsource,
1459 )
1460- image_specs = [
1461+ image_specs = {
1462 make_image_spec(
1463 os=item["os"],
1464 release="uefi",
1465@@ -634,8 +634,8 @@ class TestRepoDumper(MAASTestCase):
1466 label=item["label"],
1467 )
1468 for subarch in item["subarches"].split(",")
1469- ]
1470- self.assertItemsEqual(image_specs, list(boot_images_dict.mapping))
1471+ }
1472+ self.assertEqual(image_specs, boot_images_dict.mapping.keys())
1473
1474 def test_insert_item_validates(self):
1475 boot_images_dict = BootImageMapping()
1476@@ -654,7 +654,7 @@ class TestRepoDumper(MAASTestCase):
1477 ),
1478 sentinel.contentsource,
1479 )
1480- self.assertItemsEqual([], list(boot_images_dict.mapping))
1481+ self.assertEqual(set(), boot_images_dict.mapping.keys())
1482
1483 def test_insert_item_doesnt_validate_when_instructed(self):
1484 boot_images_dict = BootImageMapping()
1485@@ -673,7 +673,7 @@ class TestRepoDumper(MAASTestCase):
1486 ),
1487 sentinel.contentsource,
1488 )
1489- image_specs = [
1490+ image_specs = {
1491 make_image_spec(
1492 os=item["os"],
1493 release=item["release"],
1494@@ -682,8 +682,8 @@ class TestRepoDumper(MAASTestCase):
1495 label=item["label"],
1496 )
1497 for subarch in item["subarches"].split(",")
1498- ]
1499- self.assertItemsEqual(image_specs, list(boot_images_dict.mapping))
1500+ }
1501+ self.assertEqual(image_specs, boot_images_dict.mapping.keys())
1502
1503 def test_sync_does_propagate_ioerror(self):
1504 io_error = factory.make_exception_type(bases=(IOError,))
1505diff --git a/src/provisioningserver/import_images/tests/test_product_mapping.py b/src/provisioningserver/import_images/tests/test_product_mapping.py
1506index 979b9f3..2a3eede 100644
1507--- a/src/provisioningserver/import_images/tests/test_product_mapping.py
1508+++ b/src/provisioningserver/import_images/tests/test_product_mapping.py
1509@@ -162,6 +162,6 @@ class TestMapProducts(MAASTestCase):
1510 resource["version_name"],
1511 )
1512 self.assertEqual([key], list(products_mapping.mapping))
1513- self.assertItemsEqual(
1514+ self.assertCountEqual(
1515 [image1.subarch, image2.subarch], products_mapping.get(resource)
1516 )
1517diff --git a/src/provisioningserver/rackdservices/tests/test_tftp.py b/src/provisioningserver/rackdservices/tests/test_tftp.py
1518index bd170f9..dda5c23 100644
1519--- a/src/provisioningserver/rackdservices/tests/test_tftp.py
1520+++ b/src/provisioningserver/rackdservices/tests/test_tftp.py
1521@@ -921,7 +921,7 @@ class TestTFTPService(MAASTestCase):
1522 )
1523 self.assertThat(tftp_service.getServers(), AllMatch(expected_server))
1524 # Only the interface used for each service differs.
1525- self.assertItemsEqual(
1526+ self.assertCountEqual(
1527 [svc.kwargs for svc in tftp_service.getServers()],
1528 [{"interface": interface} for interface in interfaces],
1529 )
1530diff --git a/src/provisioningserver/tests/test_config.py b/src/provisioningserver/tests/test_config.py
1531index 5995cd2..3c895d3 100644
1532--- a/src/provisioningserver/tests/test_config.py
1533+++ b/src/provisioningserver/tests/test_config.py
1534@@ -446,7 +446,7 @@ class TestConfigurationFile(MAASTestCase):
1535 pass # Write nothing to the file.
1536 config = ConfigurationFile(config_file)
1537 config.load()
1538- self.assertItemsEqual(set(config), set())
1539+ self.assertEqual(set(config), set())
1540
1541 def test_load_file_with_non_mapping_crashes(self):
1542 config_file = os.path.join(self.make_dir(), "config")
1543diff --git a/src/provisioningserver/tests/test_events.py b/src/provisioningserver/tests/test_events.py
1544index 4c614a0..6dea374 100644
1545--- a/src/provisioningserver/tests/test_events.py
1546+++ b/src/provisioningserver/tests/test_events.py
1547@@ -39,7 +39,7 @@ from provisioningserver.utils.testing import MAASIDFixture
1548 class TestEvents(MAASTestCase):
1549 def test_every_event_has_details(self):
1550 all_events = map_enum(EVENT_TYPES)
1551- self.assertItemsEqual(all_events.values(), EVENT_DETAILS.keys())
1552+ self.assertEqual(set(all_events.values()), EVENT_DETAILS.keys())
1553 self.assertThat(
1554 EVENT_DETAILS.values(), AllMatch(IsInstance(EventDetail))
1555 )
1556diff --git a/src/provisioningserver/tests/test_service_monitor.py b/src/provisioningserver/tests/test_service_monitor.py
1557index e2deee2..8147d5b 100644
1558--- a/src/provisioningserver/tests/test_service_monitor.py
1559+++ b/src/provisioningserver/tests/test_service_monitor.py
1560@@ -68,8 +68,8 @@ class TestSyslogServiceOnRack(MAASTestCase):
1561
1562 class TestGlobalServiceMonitor(MAASTestCase):
1563 def test_includes_all_services(self):
1564- self.assertItemsEqual(
1565- [
1566+ self.assertEqual(
1567+ {
1568 "http",
1569 "dhcpd",
1570 "dhcpd6",
1571@@ -77,6 +77,6 @@ class TestGlobalServiceMonitor(MAASTestCase):
1572 "ntp_rack",
1573 "proxy_rack",
1574 "syslog_rack",
1575- ],
1576+ },
1577 service_monitor._services.keys(),
1578 )
1579diff --git a/src/provisioningserver/tests/test_tags.py b/src/provisioningserver/tests/test_tags.py
1580index 9db756f..4c6f7ec 100644
1581--- a/src/provisioningserver/tests/test_tags.py
1582+++ b/src/provisioningserver/tests/test_tags.py
1583@@ -484,7 +484,7 @@ class TestGenNodeDetails(MAASTestCase):
1584 get_details_for_nodes.side_effect = lambda *args: responses.pop(0)
1585 self.fake_merge_details()
1586 node_details = tags.gen_node_details(sentinel.client, batches)
1587- self.assertItemsEqual(
1588+ self.assertCountEqual(
1589 [("s1", "merged:foo"), ("s2", "merged:bar"), ("s3", "merged:cob")],
1590 node_details,
1591 )
1592diff --git a/src/provisioningserver/tests/test_upgrade_cluster.py b/src/provisioningserver/tests/test_upgrade_cluster.py
1593index 03e0d76..e70ea46 100644
1594--- a/src/provisioningserver/tests/test_upgrade_cluster.py
1595+++ b/src/provisioningserver/tests/test_upgrade_cluster.py
1596@@ -299,7 +299,7 @@ class TestMigrateArchitecturesIntoUbuntuDirectory(MAASTestCase):
1597 upgrade_cluster.migrate_architectures_into_ubuntu_directory(
1598 self.current_dir
1599 )
1600- self.assertItemsEqual(
1601+ self.assertCountEqual(
1602 arches,
1603 list_subdirs(os.path.join(storage_dir, "current", "ubuntu")),
1604 )
1605@@ -330,7 +330,7 @@ class TestMigrateArchitecturesIntoUbuntuDirectory(MAASTestCase):
1606 upgrade_cluster.migrate_architectures_into_ubuntu_directory(
1607 self.current_dir
1608 )
1609- self.assertItemsEqual(
1610+ self.assertEqual(
1611 [move_arch],
1612 list_subdirs(os.path.join(storage_dir, "current", "ubuntu")),
1613 )
1614@@ -373,7 +373,7 @@ class TestMigrateArchitecturesIntoUbuntuDirectory(MAASTestCase):
1615 upgrade_cluster.migrate_architectures_into_ubuntu_directory(
1616 self.current_dir
1617 )
1618- self.assertItemsEqual(
1619+ self.assertEqual(
1620 [move_arch],
1621 list_subdirs(os.path.join(storage_dir, "current", "ubuntu")),
1622 )
1623diff --git a/src/provisioningserver/utils/tests/test_arp.py b/src/provisioningserver/utils/tests/test_arp.py
1624index 6565fd3..9747819 100644
1625--- a/src/provisioningserver/utils/tests/test_arp.py
1626+++ b/src/provisioningserver/utils/tests/test_arp.py
1627@@ -214,7 +214,7 @@ class TestARP(MAASTestCase):
1628 op=ARP_OPERATION.REQUEST,
1629 )
1630 )
1631- self.assertItemsEqual(
1632+ self.assertCountEqual(
1633 arp.bindings(), [(IPAddress(pkt_sender_ip), EUI(pkt_sender_mac))]
1634 )
1635
1636@@ -232,7 +232,7 @@ class TestARP(MAASTestCase):
1637 op=ARP_OPERATION.REPLY,
1638 )
1639 )
1640- self.assertItemsEqual(
1641+ self.assertCountEqual(
1642 arp.bindings(),
1643 [
1644 (IPAddress(pkt_sender_ip), EUI(pkt_sender_mac)),
1645@@ -254,7 +254,7 @@ class TestARP(MAASTestCase):
1646 op=ARP_OPERATION.REQUEST,
1647 )
1648 )
1649- self.assertItemsEqual(arp.bindings(), [])
1650+ self.assertCountEqual(arp.bindings(), [])
1651
1652 def test_bindings__skips_null_source_ip_in_reply(self):
1653 pkt_sender_mac = "01:02:03:04:05:06"
1654@@ -270,7 +270,7 @@ class TestARP(MAASTestCase):
1655 op=ARP_OPERATION.REPLY,
1656 )
1657 )
1658- self.assertItemsEqual(
1659+ self.assertCountEqual(
1660 arp.bindings(), [(IPAddress(pkt_target_ip), EUI(pkt_target_mac))]
1661 )
1662
1663@@ -288,7 +288,7 @@ class TestARP(MAASTestCase):
1664 op=ARP_OPERATION.REPLY,
1665 )
1666 )
1667- self.assertItemsEqual(
1668+ self.assertCountEqual(
1669 arp.bindings(), [(IPAddress(pkt_sender_ip), EUI(pkt_sender_mac))]
1670 )
1671
1672@@ -306,7 +306,7 @@ class TestARP(MAASTestCase):
1673 op=ARP_OPERATION.REQUEST,
1674 )
1675 )
1676- self.assertItemsEqual(arp.bindings(), [])
1677+ self.assertCountEqual(arp.bindings(), [])
1678
1679 def test_bindings__skips_null_source_eui_in_reply(self):
1680 pkt_sender_mac = "00:00:00:00:00:00"
1681@@ -322,7 +322,7 @@ class TestARP(MAASTestCase):
1682 op=ARP_OPERATION.REPLY,
1683 )
1684 )
1685- self.assertItemsEqual(
1686+ self.assertCountEqual(
1687 arp.bindings(), [(IPAddress(pkt_target_ip), EUI(pkt_target_mac))]
1688 )
1689
1690@@ -340,7 +340,7 @@ class TestARP(MAASTestCase):
1691 op=ARP_OPERATION.REPLY,
1692 )
1693 )
1694- self.assertItemsEqual(
1695+ self.assertCountEqual(
1696 arp.bindings(), [(IPAddress(pkt_sender_ip), EUI(pkt_sender_mac))]
1697 )
1698
1699diff --git a/src/provisioningserver/utils/tests/test_enum.py b/src/provisioningserver/utils/tests/test_enum.py
1700index c74dd92..99b4a6a 100644
1701--- a/src/provisioningserver/utils/tests/test_enum.py
1702+++ b/src/provisioningserver/utils/tests/test_enum.py
1703@@ -14,7 +14,7 @@ class TestEnum(MAASTestCase):
1704 ONE = 1
1705 TWO = 2
1706
1707- self.assertItemsEqual(["ONE", "TWO"], map_enum(Enum).keys())
1708+ self.assertEqual({"ONE", "TWO"}, map_enum(Enum).keys())
1709
1710 def test_map_enum_omits_private_or_special_methods(self):
1711 class Enum:
1712@@ -29,7 +29,7 @@ class TestEnum(MAASTestCase):
1713
1714 VALUE = 9
1715
1716- self.assertItemsEqual(["VALUE"], map_enum(Enum).keys())
1717+ self.assertEqual({"VALUE"}, map_enum(Enum).keys())
1718
1719 def test_map_enum_maps_values(self):
1720 class Enum:
1721diff --git a/src/provisioningserver/utils/tests/test_events.py b/src/provisioningserver/utils/tests/test_events.py
1722index 59e85bc..c9a677f 100644
1723--- a/src/provisioningserver/utils/tests/test_events.py
1724+++ b/src/provisioningserver/utils/tests/test_events.py
1725@@ -9,7 +9,6 @@ from unittest.mock import MagicMock, sentinel
1726 from testtools.matchers import IsInstance
1727
1728 from maastesting.factory import factory
1729-from maastesting.matchers import MockCalledOnceWith
1730 from maastesting.testcase import MAASTestCase
1731 from provisioningserver.utils.events import Event, EventGroup
1732
1733@@ -20,27 +19,27 @@ class TestEvent(MAASTestCase):
1734 def test_registerHandler(self):
1735 event = Event()
1736 event.registerHandler(sentinel.handler)
1737- self.assertItemsEqual([sentinel.handler], event.handlers)
1738+ self.assertEqual({sentinel.handler}, event.handlers)
1739
1740 def test_registerHandler_during_fire(self):
1741 event = Event()
1742 event.registerHandler(event.registerHandler)
1743 event.fire(sentinel.otherHandler)
1744- self.assertItemsEqual(
1745- [event.registerHandler, sentinel.otherHandler], event.handlers
1746+ self.assertEqual(
1747+ {event.registerHandler, sentinel.otherHandler}, event.handlers
1748 )
1749
1750 def test_unregisterHandler(self):
1751 event = Event()
1752 event.registerHandler(sentinel.handler)
1753 event.unregisterHandler(sentinel.handler)
1754- self.assertItemsEqual([], event.handlers)
1755+ self.assertEqual(set(), event.handlers)
1756
1757 def test_unregisterHandler_during_fire(self):
1758 event = Event()
1759 event.registerHandler(event.unregisterHandler)
1760 event.fire(event.unregisterHandler)
1761- self.assertItemsEqual([], event.handlers)
1762+ self.assertEqual(set(), event.handlers)
1763
1764 def test_fire_calls_all_handlers(self):
1765 event = Event()
1766@@ -54,8 +53,8 @@ class TestEvent(MAASTestCase):
1767 for _ in range(3)
1768 }
1769 event.fire(*args, **kwargs)
1770- self.assertThat(handler_one, MockCalledOnceWith(*args, **kwargs))
1771- self.assertThat(handler_two, MockCalledOnceWith(*args, **kwargs))
1772+ handler_one.mock_called_once_with(*args, **kwargs)
1773+ handler_two.mock_called_once_with(*args, **kwargs)
1774
1775
1776 class TestEventGroup(MAASTestCase):
1777diff --git a/src/provisioningserver/utils/tests/test_ipaddr.py b/src/provisioningserver/utils/tests/test_ipaddr.py
1778index 02663c9..adf6c59 100644
1779--- a/src/provisioningserver/utils/tests/test_ipaddr.py
1780+++ b/src/provisioningserver/utils/tests/test_ipaddr.py
1781@@ -162,7 +162,7 @@ class TestGetIPAddr(MAASTestCase):
1782 patch_get_ip_addr = self.patch(ipaddr_module, "get_ip_addr")
1783 patch_get_ip_addr.return_value = results
1784 observed = get_mac_addresses()
1785- self.assertItemsEqual(mac_addresses, observed)
1786+ self.assertCountEqual(mac_addresses, observed)
1787
1788 def test_get_mac_addresses_ignores_duplicates(self):
1789 mac_addresses = set()
1790@@ -174,7 +174,7 @@ class TestGetIPAddr(MAASTestCase):
1791 patch_get_ip_addr = self.patch(ipaddr_module, "get_ip_addr")
1792 patch_get_ip_addr.return_value = results
1793 observed = get_mac_addresses()
1794- self.assertItemsEqual(mac_addresses, observed)
1795+ self.assertCountEqual(mac_addresses, observed)
1796
1797
1798 class TestUpdateInterfaceType(FakeSysProcTestCase):
1799diff --git a/src/provisioningserver/utils/tests/test_network.py b/src/provisioningserver/utils/tests/test_network.py
1800index dfe067d..9dccf19 100644
1801--- a/src/provisioningserver/utils/tests/test_network.py
1802+++ b/src/provisioningserver/utils/tests/test_network.py
1803@@ -519,7 +519,7 @@ class TestGetAllInterfaceAddresses(MAASTestCase):
1804 for ipv4, ipv6 in ips
1805 }
1806 patch_interfaces(self, interfaces)
1807- self.assertItemsEqual(v4_ips + v6_ips, get_all_interface_addresses())
1808+ self.assertCountEqual(v4_ips + v6_ips, get_all_interface_addresses())
1809
1810
1811 class TestGetAllInterfaceAddressesWithMultipleClasses(MAASTestCase):
1812@@ -1958,7 +1958,7 @@ class TestInterfaceChildren(MAASTestCase):
1813 eth0_children = list(
1814 interface_children("eth0", interfaces, children_map)
1815 )
1816- self.assertItemsEqual(
1817+ self.assertCountEqual(
1818 eth0_children,
1819 [
1820 ("eth0.100", {"parents": ["eth0"]}),
1821@@ -1968,7 +1968,7 @@ class TestInterfaceChildren(MAASTestCase):
1822 eth1_children = list(
1823 interface_children("eth1", interfaces, children_map)
1824 )
1825- self.assertItemsEqual(
1826+ self.assertCountEqual(
1827 eth1_children,
1828 [
1829 ("eth1.100", {"parents": ["eth1"]}),
1830@@ -1997,7 +1997,7 @@ class TestGetDefaultMonitoredInterfaces(MAASTestCase):
1831 "eth0": {"parents": [], "type": "physical", "enabled": False},
1832 "eth1": {"parents": [], "type": "physical", "enabled": True},
1833 }
1834- self.assertItemsEqual(
1835+ self.assertEqual(
1836 get_default_monitored_interfaces(interfaces), ["eth1"]
1837 )
1838
1839@@ -2018,7 +2018,7 @@ class TestGetDefaultMonitoredInterfaces(MAASTestCase):
1840 "enabled": False,
1841 },
1842 }
1843- self.assertItemsEqual(
1844+ self.assertEqual(
1845 get_default_monitored_interfaces(interfaces), ["bond0"]
1846 )
1847
1848@@ -2029,7 +2029,7 @@ class TestGetDefaultMonitoredInterfaces(MAASTestCase):
1849 "br0": {"parents": ["eth0"], "type": "bridge", "enabled": True},
1850 "virbr0": {"parents": [], "type": "bridge", "enabled": True},
1851 }
1852- self.assertItemsEqual(
1853+ self.assertEqual(
1854 get_default_monitored_interfaces(interfaces),
1855 ["eth0", "eth1", "virbr0"],
1856 )
1857@@ -2039,7 +2039,7 @@ class TestGetDefaultMonitoredInterfaces(MAASTestCase):
1858 "eth0": {"parents": [], "type": "physical", "enabled": True},
1859 "eth0.100": {"parents": ["eth0"], "type": "vlan", "enabled": True},
1860 }
1861- self.assertItemsEqual(
1862+ self.assertEqual(
1863 get_default_monitored_interfaces(interfaces), ["eth0"]
1864 )
1865
1866diff --git a/src/provisioningserver/utils/tests/test_ps.py b/src/provisioningserver/utils/tests/test_ps.py
1867index ca2bbad..11e873e 100644
1868--- a/src/provisioningserver/utils/tests/test_ps.py
1869+++ b/src/provisioningserver/utils/tests/test_ps.py
1870@@ -141,7 +141,7 @@ class TestGetRunningPIDsWithCommand(MAASTestCase):
1871 proc_path = self.make_dir()
1872 self.make_init_process(proc_path)
1873 command = factory.make_name("command")
1874- pids_running_command = set(random.randint(2, 999) for _ in range(3))
1875+ pids_running_command = [random.randint(2, 999) for _ in range(3)]
1876 for pid in pids_running_command:
1877 self.make_process(proc_path, pid, command=command)
1878 pids_not_running_command = set(
1879@@ -162,7 +162,7 @@ class TestGetRunningPIDsWithCommand(MAASTestCase):
1880 ps_module, "running_in_container"
1881 )
1882 mock_running_in_container.return_value = False
1883- self.assertItemsEqual(
1884+ self.assertCountEqual(
1885 pids_running_command,
1886 get_running_pids_with_command(command, proc_path=proc_path),
1887 )
1888@@ -171,12 +171,12 @@ class TestGetRunningPIDsWithCommand(MAASTestCase):
1889 proc_path = self.make_dir()
1890 self.make_init_process(proc_path)
1891 command = factory.make_name("command")
1892- pids_running_command = set(random.randint(2, 999) for _ in range(3))
1893+ pids_running_command = [random.randint(2, 999) for _ in range(3)]
1894 for pid in pids_running_command:
1895 self.make_process(proc_path, pid, command=command)
1896 # Remove the comm file to test the exception handling.
1897 os.remove(os.path.join(proc_path, str(pid), "comm"))
1898- self.assertItemsEqual(
1899+ self.assertEqual(
1900 [], get_running_pids_with_command(command, proc_path=proc_path)
1901 )
1902
1903@@ -184,7 +184,7 @@ class TestGetRunningPIDsWithCommand(MAASTestCase):
1904 proc_path = self.make_dir()
1905 self.make_init_process(proc_path, in_container=True)
1906 command = factory.make_name("command")
1907- pids_running_command = set(random.randint(2, 999) for _ in range(3))
1908+ pids_running_command = [random.randint(2, 999) for _ in range(3)]
1909 for pid in pids_running_command:
1910 self.make_process(
1911 proc_path, pid, in_container=True, command=command
1912@@ -203,7 +203,7 @@ class TestGetRunningPIDsWithCommand(MAASTestCase):
1913 ps_module, "running_in_container"
1914 )
1915 mock_running_in_container.return_value = True
1916- self.assertItemsEqual(
1917+ self.assertCountEqual(
1918 pids_running_command,
1919 get_running_pids_with_command(command, proc_path=proc_path),
1920 )
1921diff --git a/src/provisioningserver/utils/tests/test_registry.py b/src/provisioningserver/utils/tests/test_registry.py
1922index c13a758..c56455f 100644
1923--- a/src/provisioningserver/utils/tests/test_registry.py
1924+++ b/src/provisioningserver/utils/tests/test_registry.py
1925@@ -35,12 +35,12 @@ class TestRegistry(MAASTestCase):
1926 from provisioningserver.drivers import Registry as Registry2
1927
1928 Registry2.register_item("resource2", sentinel.resource2)
1929- self.assertItemsEqual(
1930+ self.assertEqual(
1931 [
1932 ("resource1", sentinel.resource1),
1933 ("resource2", sentinel.resource2),
1934 ],
1935- Registry2,
1936+ list(Registry2),
1937 )
1938
1939 def test_getitem__(self):
1940diff --git a/src/provisioningserver/utils/tests/test_utils.py b/src/provisioningserver/utils/tests/test_utils.py
1941index c4cbeca..1a0cefe 100644
1942--- a/src/provisioningserver/utils/tests/test_utils.py
1943+++ b/src/provisioningserver/utils/tests/test_utils.py
1944@@ -154,36 +154,39 @@ class TestFlatten(MAASTestCase):
1945 self.assertThat(flatten(()), IsInstance(Iterator))
1946
1947 def test_returns_empty_when_nothing_provided(self):
1948- self.assertItemsEqual([], flatten([]))
1949- self.assertItemsEqual([], flatten(()))
1950- self.assertItemsEqual([], flatten({}))
1951- self.assertItemsEqual([], flatten(set()))
1952- self.assertItemsEqual([], flatten(([], (), {}, set())))
1953- self.assertItemsEqual([], flatten(([[]], ((),))))
1954+ self.assertEqual([], list(flatten([])))
1955+ self.assertEqual([], list(flatten(())))
1956+ self.assertEqual([], list(flatten({})))
1957+ self.assertEqual([], list(flatten(set())))
1958+ self.assertEqual([], list(flatten(([], (), {}, set()))))
1959+ self.assertEqual([], list(flatten(([[]], ((),)))))
1960
1961 def test_flattens_list(self):
1962- self.assertItemsEqual([1, 2, 3, "abc"], flatten([1, 2, 3, "abc"]))
1963+ self.assertEqual([1, 2, 3, "abc"], list(flatten([1, 2, 3, "abc"])))
1964
1965 def test_flattens_nested_lists(self):
1966- self.assertItemsEqual([1, 2, 3, "abc"], flatten([[[1, 2, 3, "abc"]]]))
1967+ self.assertEqual([1, 2, 3, "abc"], list(flatten([[[1, 2, 3, "abc"]]])))
1968
1969 def test_flattens_arbitrarily_nested_lists(self):
1970- self.assertItemsEqual(
1971+ self.assertEqual(
1972 [1, "two", "three", 4, 5, 6],
1973- flatten([[1], ["two", "three"], [4], [5, 6]]),
1974+ list(flatten([[1], ["two", "three"], [4], [5, 6]])),
1975 )
1976
1977 def test_flattens_other_iterables(self):
1978- self.assertItemsEqual(
1979- [1, 2, 3.3, 4, 5, 6], flatten([1, 2, {3.3, 4, (5, 6)}])
1980+ self.assertEqual(
1981+ [1, 2, 3.3, 4, 5, 6], list(flatten([1, 2, {3.3, 4, (5, 6)}]))
1982 )
1983
1984 def test_treats_string_like_objects_as_leaves(self):
1985 # Strings are iterable, but we know they cannot be flattened further.
1986- self.assertItemsEqual(["abcdef"], flatten("abcdef"))
1987+ self.assertEqual(["abcdef"], list(flatten("abcdef")))
1988
1989 def test_takes_star_args(self):
1990- self.assertItemsEqual("abcdef", flatten("a", "b", "c", "d", "e", "f"))
1991+ self.assertEqual(
1992+ ["a", "b", "c", "d", "e", "f"],
1993+ list(flatten("a", "b", "c", "d", "e", "f")),
1994+ )
1995
1996
1997 class TestSudo(MAASTestCase):

Subscribers

People subscribed via source and target branches