Merge lp:~jtv/maas/stub-model-factories into lp:~maas-committers/maas/trunk
- stub-model-factories
- Merge into trunk
Proposed by
Jeroen T. Vermeulen
Status: | Merged |
---|---|
Approved by: | Jeroen T. Vermeulen |
Approved revision: | no longer in the source branch. |
Merged at revision: | 2905 |
Proposed branch: | lp:~jtv/maas/stub-model-factories |
Merge into: | lp:~maas-committers/maas/trunk |
Diff against target: |
742 lines (+174/-122) 4 files modified
src/maasserver/testing/api.py (+3/-3) src/maasserver/testing/factory.py (+131/-79) src/maasserver/testing/testcase.py (+1/-1) src/maasserver/testing/tests/test_factory.py (+39/-39) |
To merge this branch: | bzr merge lp:~jtv/maas/stub-model-factories |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raphaël Badin (community) | Approve | ||
Review via email: mp+233460@code.launchpad.net |
Commit message
New naming scheme for test factories for model classes: test_ModelClass instead of test_model_class. This will let us draw a clear line between e.g. “create a MAC address” (make_mac_address) and “create a MACAddress model object” (make_MACAddress).
Compatibility stubs ensure that existing code still works. After that, we can update our existing tests at leisure without breaking people's pending branches. And then we can rename those remaining few getRandom* factories.
Description of the change
I had some time to wait for machines to boot etc. The scheme was agreed with Julian.
Jeroen
To post a comment you must log in.
Revision history for this message
Jeroen T. Vermeulen (jtv) wrote : | # |
Well said. Thanks.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/maasserver/testing/api.py' |
2 | --- src/maasserver/testing/api.py 2014-07-18 17:05:57 +0000 |
3 | +++ src/maasserver/testing/api.py 2014-09-05 05:59:07 +0000 |
4 | @@ -41,7 +41,7 @@ |
5 | class ExampleTest(MultipleUsersScenarios, MAASServerTestCase): |
6 | scenarios = [ |
7 | ('anon', dict(userfactory=lambda: AnonymousUser())), |
8 | - ('user', dict(userfactory=factory.make_user)), |
9 | + ('user', dict(userfactory=factory.make_User)), |
10 | ('admin', dict(userfactory=factory.make_admin)), |
11 | ] |
12 | |
13 | @@ -81,7 +81,7 @@ |
14 | |
15 | def setUp(self): |
16 | super(APITestCase, self).setUp() |
17 | - self.logged_in_user = factory.make_user( |
18 | + self.logged_in_user = factory.make_User( |
19 | username='test', password='test') |
20 | self.client = OAuthAuthenticatedClient(self.logged_in_user) |
21 | |
22 | @@ -99,7 +99,7 @@ |
23 | def log_in_as_normal_user(client): |
24 | """Log `client` in as a normal user.""" |
25 | password = factory.make_string() |
26 | - user = factory.make_user(password=password) |
27 | + user = factory.make_User(password=password) |
28 | client.login(username=user.username, password=password) |
29 | return user |
30 | |
31 | |
32 | === modified file 'src/maasserver/testing/factory.py' |
33 | --- src/maasserver/testing/factory.py 2014-09-05 03:28:57 +0000 |
34 | +++ src/maasserver/testing/factory.py 2014-09-05 05:59:07 +0000 |
35 | @@ -223,7 +223,7 @@ |
36 | finally: |
37 | NODE_TRANSITIONS[None] = valid_initial_states |
38 | |
39 | - def make_node(self, mac=False, hostname=None, status=None, |
40 | + def make_Node(self, mac=False, hostname=None, status=None, |
41 | architecture="i386/generic", updated=None, |
42 | created=None, nodegroup=None, routers=None, zone=None, |
43 | power_type=None, networks=None, sortable_name=False, |
44 | @@ -244,11 +244,11 @@ |
45 | if status is None: |
46 | status = NODE_STATUS.DEFAULT |
47 | if nodegroup is None: |
48 | - nodegroup = self.make_node_group() |
49 | + nodegroup = self.make_NodeGroup() |
50 | if routers is None: |
51 | routers = [self.make_MAC()] |
52 | if zone is None: |
53 | - zone = self.make_zone() |
54 | + zone = self.make_Zone() |
55 | if power_type is None: |
56 | power_type = 'ether_wake' |
57 | if power_state is None: |
58 | @@ -267,7 +267,7 @@ |
59 | if networks is not None: |
60 | node.networks.add(*networks) |
61 | if mac: |
62 | - self.make_mac_address(node=node) |
63 | + self.make_MACAddress(node=node) |
64 | |
65 | # Update the 'updated'/'created' fields with a call to 'update' |
66 | # preventing a call to save() from overriding the values. |
67 | @@ -277,6 +277,8 @@ |
68 | Node.objects.filter(id=node.id).update(created=created) |
69 | return reload_object(node) |
70 | |
71 | + make_node = make_Node # DEPRECATED |
72 | + |
73 | def get_interface_fields(self, name=None, ip=None, router_ip=None, |
74 | network=None, subnet_mask=None, broadcast_ip=None, |
75 | ip_range_low=None, ip_range_high=None, |
76 | @@ -346,12 +348,12 @@ |
77 | management=management, |
78 | interface=interface) |
79 | |
80 | - def make_node_group(self, name=None, uuid=None, cluster_name=None, |
81 | - dhcp_key=None, ip=None, router_ip=None, network=None, |
82 | - subnet_mask=None, broadcast_ip=None, ip_range_low=None, |
83 | - ip_range_high=None, interface=None, management=None, |
84 | - status=None, maas_url='', static_ip_range_low=None, |
85 | - static_ip_range_high=None, **kwargs): |
86 | + def make_NodeGroup(self, name=None, uuid=None, cluster_name=None, |
87 | + dhcp_key=None, ip=None, router_ip=None, network=None, |
88 | + subnet_mask=None, broadcast_ip=None, ip_range_low=None, |
89 | + ip_range_high=None, interface=None, management=None, |
90 | + status=None, maas_url='', static_ip_range_low=None, |
91 | + static_ip_range_high=None, **kwargs): |
92 | """Create a :class:`NodeGroup`. |
93 | |
94 | If `management` is set (to a `NODEGROUPINTERFACE_MANAGEMENT` value), |
95 | @@ -385,9 +387,11 @@ |
96 | static_ip_range_low=static_ip_range_low, |
97 | static_ip_range_high=static_ip_range_high) |
98 | interface_settings.update(kwargs) |
99 | - self.make_node_group_interface(cluster, **interface_settings) |
100 | + self.make_NodeGroupInterface(cluster, **interface_settings) |
101 | return cluster |
102 | |
103 | + make_node_group = make_NodeGroup # DEPRECATED |
104 | + |
105 | def make_unrenamable_nodegroup_with_node(self): |
106 | """Create a `NodeGroup` that can't be renamed, and `Node`. |
107 | |
108 | @@ -400,21 +404,21 @@ |
109 | :return: tuple: (`NodeGroup`, `Node`). |
110 | """ |
111 | name = self.make_name('original-name') |
112 | - nodegroup = self.make_node_group( |
113 | + nodegroup = self.make_NodeGroup( |
114 | name=name, status=NODEGROUP_STATUS.ACCEPTED) |
115 | - factory.make_node_group_interface( |
116 | + factory.make_NodeGroupInterface( |
117 | nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS) |
118 | - node = self.make_node( |
119 | + node = self.make_Node( |
120 | nodegroup=nodegroup, status=NODE_STATUS.ALLOCATED) |
121 | return nodegroup, node |
122 | |
123 | - def make_node_group_interface(self, nodegroup, name=None, ip=None, |
124 | - router_ip=None, network=None, |
125 | - subnet_mask=None, broadcast_ip=None, |
126 | - ip_range_low=None, ip_range_high=None, |
127 | - interface=None, management=None, |
128 | - static_ip_range_low=None, |
129 | - static_ip_range_high=None, **kwargs): |
130 | + def make_NodeGroupInterface(self, nodegroup, name=None, ip=None, |
131 | + router_ip=None, network=None, |
132 | + subnet_mask=None, broadcast_ip=None, |
133 | + ip_range_low=None, ip_range_high=None, |
134 | + interface=None, management=None, |
135 | + static_ip_range_low=None, |
136 | + static_ip_range_high=None, **kwargs): |
137 | interface_settings = self.get_interface_fields( |
138 | name=name, ip=ip, router_ip=router_ip, network=network, |
139 | subnet_mask=subnet_mask, broadcast_ip=broadcast_ip, |
140 | @@ -428,10 +432,13 @@ |
141 | interface.save() |
142 | return interface |
143 | |
144 | + make_node_group_interface = make_NodeGroupInterface # DEPRECATED |
145 | + |
146 | def make_node_commission_result(self, node=None, name=None, |
147 | script_result=None, data=None): |
148 | + """Create a `NodeResult` as one would see from commissioning a node.""" |
149 | if node is None: |
150 | - node = self.make_node() |
151 | + node = self.make_Node() |
152 | if name is None: |
153 | name = "ncrname-" + self.make_string(92) |
154 | if data is None: |
155 | @@ -446,8 +453,9 @@ |
156 | |
157 | def make_node_install_result(self, node=None, name=None, |
158 | script_result=None, data=None): |
159 | + """Create a `NodeResult` as one would see from installing a node.""" |
160 | if node is None: |
161 | - node = self.make_node() |
162 | + node = self.make_Node() |
163 | if name is None: |
164 | name = "ncrname-" + self.make_string(92) |
165 | if data is None: |
166 | @@ -464,11 +472,11 @@ |
167 | """Generate a random MAC address, in the form of a MAC object.""" |
168 | return MAC(self.getRandomMACAddress()) |
169 | |
170 | - def make_mac_address(self, address=None, node=None, networks=None, |
171 | - **kwargs): |
172 | - """Create a MACAddress model object.""" |
173 | + def make_MACAddress(self, address=None, node=None, networks=None, |
174 | + **kwargs): |
175 | + """Create a `MACAddress` model object.""" |
176 | if node is None: |
177 | - node = self.make_node() |
178 | + node = self.make_Node() |
179 | if address is None: |
180 | address = self.getRandomMACAddress() |
181 | mac = MACAddress(mac_address=MAC(address), node=node, **kwargs) |
182 | @@ -477,6 +485,8 @@ |
183 | mac.networks.add(*networks) |
184 | return mac |
185 | |
186 | + make_mac_address = make_MACAddress # DEPRECATED |
187 | + |
188 | def make_node_with_mac_attached_to_nodegroupinterface( |
189 | self, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP, |
190 | network=None, disable_ipv4=False, **kwargs): |
191 | @@ -487,17 +497,17 @@ |
192 | """ |
193 | nodegroup = kwargs.pop("nodegroup", None) |
194 | if nodegroup is None: |
195 | - nodegroup = self.make_node_group() |
196 | - node = self.make_node( |
197 | + nodegroup = self.make_NodeGroup() |
198 | + node = self.make_Node( |
199 | mac=True, nodegroup=nodegroup, disable_ipv4=disable_ipv4, **kwargs) |
200 | - ngi = self.make_node_group_interface( |
201 | + ngi = self.make_NodeGroupInterface( |
202 | nodegroup, network=network, management=management) |
203 | mac = node.get_primary_mac() |
204 | mac.cluster_interface = ngi |
205 | mac.save() |
206 | return node |
207 | |
208 | - def make_staticipaddress(self, ip=None, alloc_type=IPADDRESS_TYPE.AUTO, |
209 | + def make_StaticIPAddress(self, ip=None, alloc_type=IPADDRESS_TYPE.AUTO, |
210 | mac=None, user=None): |
211 | """Create and return a StaticIPAddress model object. |
212 | |
213 | @@ -513,10 +523,12 @@ |
214 | mac_address=mac, ip_address=ipaddress).save() |
215 | return ipaddress |
216 | |
217 | - def make_dhcp_lease(self, nodegroup=None, ip=None, mac=None): |
218 | + make_staticipaddress = make_StaticIPAddress # DEPRECATED |
219 | + |
220 | + def make_DHCPLease(self, nodegroup=None, ip=None, mac=None): |
221 | """Create a :class:`DHCPLease`.""" |
222 | if nodegroup is None: |
223 | - nodegroup = self.make_node_group() |
224 | + nodegroup = self.make_NodeGroup() |
225 | if ip is None: |
226 | ip = self.getRandomIPAddress() |
227 | if mac is None: |
228 | @@ -525,10 +537,12 @@ |
229 | lease.save() |
230 | return lease |
231 | |
232 | + make_dhcp_lease = make_DHCPLease # DEPRECATED |
233 | + |
234 | def make_email(self): |
235 | return '%s@example.com' % self.make_string(10) |
236 | |
237 | - def make_user(self, username=None, password='test', email=None): |
238 | + def make_User(self, username=None, password='test', email=None): |
239 | if username is None: |
240 | username = self.make_username() |
241 | if email is None: |
242 | @@ -536,14 +550,18 @@ |
243 | return User.objects.create_user( |
244 | username=username, password=password, email=email) |
245 | |
246 | - def make_sshkey(self, user, key_string=None): |
247 | + make_user = make_User # DEPRECATED |
248 | + |
249 | + def make_SSHKey(self, user, key_string=None): |
250 | if key_string is None: |
251 | key_string = get_data('data/test_rsa0.pub') |
252 | key = SSHKey(key=key_string, user=user) |
253 | key.save() |
254 | return key |
255 | |
256 | - def make_tag(self, name=None, definition=None, comment='', |
257 | + make_sshkey = make_SSHKey # DEPRECATED |
258 | + |
259 | + def make_Tag(self, name=None, definition=None, comment='', |
260 | kernel_opts=None, created=None, updated=None): |
261 | if name is None: |
262 | name = self.make_name('tag') |
263 | @@ -562,6 +580,8 @@ |
264 | Tag.objects.filter(id=tag.id).update(created=created) |
265 | return reload_object(tag) |
266 | |
267 | + make_tag = make_Tag # DEPRECATED |
268 | + |
269 | def make_user_with_keys(self, n_keys=2, user=None, **kwargs): |
270 | """Create a user with n `SSHKey`. If user is not None, use this user |
271 | instead of creating one. |
272 | @@ -574,7 +594,7 @@ |
273 | "add more keys in src/maasserver/tests/data/." |
274 | % MAX_PUBLIC_KEYS) |
275 | if user is None: |
276 | - user = self.make_user(**kwargs) |
277 | + user = self.make_User(**kwargs) |
278 | keys = [] |
279 | for i in range(n_keys): |
280 | key_string = get_data('data/test_rsa%d.pub' % i) |
281 | @@ -597,7 +617,7 @@ |
282 | "add more keys in src/maasserver/tests/data/." |
283 | % MAX_PUBLIC_KEYS) |
284 | if user is None: |
285 | - user = self.make_user(**kwargs) |
286 | + user = self.make_User(**kwargs) |
287 | keys = [] |
288 | for i in range(n_keys): |
289 | key_string = get_data('data/test_x509_%d.pem' % i) |
290 | @@ -614,10 +634,12 @@ |
291 | return User.objects.create_superuser( |
292 | username, password=password, email=email) |
293 | |
294 | - def make_file_storage(self, filename=None, content=None, owner=None): |
295 | + def make_FileStorage(self, filename=None, content=None, owner=None): |
296 | fake_file = self.make_file_upload(filename, content) |
297 | return FileStorage.objects.save_file(fake_file.name, fake_file, owner) |
298 | |
299 | + make_file_storage = make_FileStorage # DEPRECATED |
300 | + |
301 | def make_oauth_header(self, **kwargs): |
302 | """Fake an OAuth authorization header. |
303 | |
304 | @@ -638,10 +660,10 @@ |
305 | return "OAuth " + ", ".join([ |
306 | '%s="%s"' % (key, value) for key, value in items.items()]) |
307 | |
308 | - def make_boot_image(self, osystem=None, architecture=None, |
309 | - subarchitecture=None, release=None, purpose=None, |
310 | - nodegroup=None, label=None, supported_subarches=None, |
311 | - xinstall_path=None, xinstall_type=None): |
312 | + def make_BootImage(self, osystem=None, architecture=None, |
313 | + subarchitecture=None, release=None, purpose=None, |
314 | + nodegroup=None, label=None, supported_subarches=None, |
315 | + xinstall_path=None, xinstall_type=None): |
316 | if osystem is None: |
317 | osystem = self.make_name('os') |
318 | if architecture is None: |
319 | @@ -653,7 +675,7 @@ |
320 | if purpose is None: |
321 | purpose = self.make_name('purpose') |
322 | if nodegroup is None: |
323 | - nodegroup = self.make_node_group() |
324 | + nodegroup = self.make_NodeGroup() |
325 | if label is None: |
326 | label = self.make_name('label') |
327 | if supported_subarches is None: |
328 | @@ -675,6 +697,8 @@ |
329 | xinstall_type=xinstall_type, |
330 | ) |
331 | |
332 | + make_boot_image = make_BootImage # DEPRECATED |
333 | + |
334 | def make_boot_images_for_node_with_purposes(self, node, purposes): |
335 | osystem = node.get_osystem() |
336 | series = node.get_distro_series() |
337 | @@ -688,14 +712,14 @@ |
338 | xinstall_path = None |
339 | xinstall_type = None |
340 | images.append( |
341 | - self.make_boot_image( |
342 | + self.make_BootImage( |
343 | osystem=osystem, architecture=arch, |
344 | subarchitecture=subarch, release=series, purpose=purpose, |
345 | nodegroup=node.nodegroup, xinstall_path=xinstall_path, |
346 | xinstall_type=xinstall_type)) |
347 | return images |
348 | |
349 | - def make_commissioning_script(self, name=None, content=None): |
350 | + def make_CommissioningScript(self, name=None, content=None): |
351 | if name is None: |
352 | name = self.make_name('script') |
353 | if content is None: |
354 | @@ -703,9 +727,11 @@ |
355 | return CommissioningScript.objects.create( |
356 | name=name, content=Bin(content)) |
357 | |
358 | - def make_download_progress(self, nodegroup=None, filename=None, |
359 | - size=NO_VALUE, bytes_downloaded=NO_VALUE, |
360 | - error=None): |
361 | + make_commissioning_script = make_CommissioningScript # DEPRECATED |
362 | + |
363 | + def make_DownloadProgress(self, nodegroup=None, filename=None, |
364 | + size=NO_VALUE, bytes_downloaded=NO_VALUE, |
365 | + error=None): |
366 | """Create a `DownloadProgress` in some poorly-defined state. |
367 | |
368 | If you have specific wishes about the object's state, you'll want to |
369 | @@ -715,7 +741,7 @@ |
370 | known. The default picks either a random number, or None. |
371 | """ |
372 | if nodegroup is None: |
373 | - nodegroup = self.make_node_group() |
374 | + nodegroup = self.make_NodeGroup() |
375 | if filename is None: |
376 | filename = self.make_name('download') |
377 | if size is NO_VALUE: |
378 | @@ -741,10 +767,12 @@ |
379 | nodegroup=nodegroup, filename=filename, size=size, |
380 | bytes_downloaded=bytes_downloaded) |
381 | |
382 | + make_download_progress = make_DownloadProgress # DEPRECATED |
383 | + |
384 | def make_download_progress_initial(self, nodegroup=None, filename=None, |
385 | size=NO_VALUE): |
386 | """Create a `DownloadProgress` as reported before a download.""" |
387 | - return self.make_download_progress( |
388 | + return self.make_DownloadProgress( |
389 | nodegroup=nodegroup, filename=filename, size=size, |
390 | bytes_downloaded=None, error='') |
391 | |
392 | @@ -753,7 +781,7 @@ |
393 | """Create a `DownloadProgress` indicating success.""" |
394 | if size is None: |
395 | size = random.randint(0, 1000000000) |
396 | - return self.make_download_progress( |
397 | + return self.make_DownloadProgress( |
398 | nodegroup=nodegroup, filename=filename, size=size, |
399 | bytes_downloaded=size, error='') |
400 | |
401 | @@ -773,7 +801,7 @@ |
402 | else: |
403 | max_size = size |
404 | bytes_downloaded = random.randint(0, max_size - 1) |
405 | - return self.make_download_progress( |
406 | + return self.make_DownloadProgress( |
407 | nodegroup=nodegroup, filename=filename, size=size, |
408 | bytes_downloaded=bytes_downloaded, error='') |
409 | |
410 | @@ -787,7 +815,7 @@ |
411 | nodegroup=nodegroup, filename=filename, size=size, |
412 | bytes_downloaded=bytes_downloaded, error=error) |
413 | |
414 | - def make_zone(self, name=None, description=None, nodes=None, |
415 | + def make_Zone(self, name=None, description=None, nodes=None, |
416 | sortable_name=False): |
417 | """Create a physical `Zone`. |
418 | |
419 | @@ -809,6 +837,8 @@ |
420 | zone.node_set.add(*nodes) |
421 | return zone |
422 | |
423 | + make_zone = make_Zone |
424 | + |
425 | def make_vlan_tag(self, allow_none=False, but_not=None): |
426 | """Create a random VLAN tag. |
427 | |
428 | @@ -832,7 +862,7 @@ |
429 | raise maastesting.factory.TooManyRandomRetries( |
430 | "Could not find an available VLAN tag.") |
431 | |
432 | - def make_network(self, name=None, network=None, vlan_tag=NO_VALUE, |
433 | + def make_Network(self, name=None, network=None, vlan_tag=NO_VALUE, |
434 | description=None, sortable_name=False, |
435 | disjoint_from=None, default_gateway=None): |
436 | """Create a `Network`. |
437 | @@ -881,7 +911,9 @@ |
438 | network.save() |
439 | return network |
440 | |
441 | - def make_networks(self, number, with_vlans=True, **kwargs): |
442 | + make_network = make_Network # DEPRECATED |
443 | + |
444 | + def make_Networks(self, number, with_vlans=True, **kwargs): |
445 | """Create multiple networks. |
446 | |
447 | This avoids accidentally clashing VLAN tags. |
448 | @@ -905,12 +937,14 @@ |
449 | networks = [] |
450 | for tag in vlan_tags: |
451 | networks.append( |
452 | - self.make_network( |
453 | + self.make_Network( |
454 | vlan_tag=tag, disjoint_from=networks, **kwargs)) |
455 | return networks |
456 | |
457 | - def make_boot_source(self, url=None, keyring_filename=None, |
458 | - keyring_data=None): |
459 | + make_networks = make_Networks # DEPRECATED |
460 | + |
461 | + def make_BootSource(self, url=None, keyring_filename=None, |
462 | + keyring_data=None): |
463 | """Create a new `BootSource`.""" |
464 | if url is None: |
465 | url = "http://%s.com" % self.make_name('source-url') |
466 | @@ -927,12 +961,14 @@ |
467 | boot_source.save() |
468 | return boot_source |
469 | |
470 | - def make_boot_source_selection(self, boot_source=None, os=None, |
471 | - release=None, arches=None, subarches=None, |
472 | - labels=None): |
473 | + make_boot_source = make_BootSource # DEPRECATED |
474 | + |
475 | + def make_BootSourceSelection(self, boot_source=None, os=None, |
476 | + release=None, arches=None, subarches=None, |
477 | + labels=None): |
478 | """Create a `BootSourceSelection`.""" |
479 | if boot_source is None: |
480 | - boot_source = self.make_boot_source() |
481 | + boot_source = self.make_BootSource() |
482 | if os is None: |
483 | os = self.make_name('os') |
484 | if release is None: |
485 | @@ -955,8 +991,10 @@ |
486 | boot_source_selection.save() |
487 | return boot_source_selection |
488 | |
489 | - def make_license_key(self, osystem=None, distro_series=None, |
490 | - license_key=None): |
491 | + make_boot_source_selection = make_BootSourceSelection # DEPRECATED |
492 | + |
493 | + def make_LicenseKey(self, osystem=None, distro_series=None, |
494 | + license_key=None): |
495 | if osystem is None: |
496 | osystem = factory.make_name('osystem') |
497 | if distro_series is None: |
498 | @@ -968,7 +1006,9 @@ |
499 | distro_series=distro_series, |
500 | license_key=license_key) |
501 | |
502 | - def make_event_type(self, name=None, level=None, description=None): |
503 | + make_license_key = make_LicenseKey # DEPRECATED |
504 | + |
505 | + def make_EventType(self, name=None, level=None, description=None): |
506 | if name is None: |
507 | name = self.make_name('name', size=20) |
508 | if description is None: |
509 | @@ -979,14 +1019,18 @@ |
510 | return EventType.objects.create( |
511 | name=name, description=description, level=level) |
512 | |
513 | - def make_event(self, node=None, type=None): |
514 | + make_event_type = make_EventType # DEPRECATED |
515 | + |
516 | + def make_Event(self, node=None, type=None): |
517 | if node is None: |
518 | - node = self.make_node() |
519 | + node = self.make_Node() |
520 | if type is None: |
521 | - type = self.make_event_type() |
522 | + type = self.make_EventType() |
523 | return Event.objects.create(node=node, type=type) |
524 | |
525 | - def make_large_file(self, content=None, size=512): |
526 | + make_event = make_Event # DEPRECATED |
527 | + |
528 | + def make_LargeFile(self, content=None, size=512): |
529 | """Create `LargeFile`. |
530 | |
531 | :param content: Data to store in large file object. |
532 | @@ -1006,8 +1050,10 @@ |
533 | return LargeFile.objects.create( |
534 | sha256=sha256, total_size=size, content=largeobject) |
535 | |
536 | - def make_boot_resource(self, rtype=None, name=None, architecture=None, |
537 | - extra=None): |
538 | + make_large_file = make_LargeFile # DEPRECATED |
539 | + |
540 | + def make_BootResource(self, rtype=None, name=None, architecture=None, |
541 | + extra=None): |
542 | if rtype is None: |
543 | rtype = self.pick_enum(BOOT_RESOURCE_TYPE) |
544 | if name is None: |
545 | @@ -1029,7 +1075,9 @@ |
546 | return BootResource.objects.create( |
547 | rtype=rtype, name=name, architecture=architecture, extra=extra) |
548 | |
549 | - def make_boot_resource_set(self, resource, version=None, label=None): |
550 | + make_boot_resource = make_BootResource # DEPRECATED |
551 | + |
552 | + def make_BootResourceSet(self, resource, version=None, label=None): |
553 | if version is None: |
554 | version = self.make_name('version') |
555 | if label is None: |
556 | @@ -1037,8 +1085,10 @@ |
557 | return BootResourceSet.objects.create( |
558 | resource=resource, version=version, label=label) |
559 | |
560 | - def make_boot_resource_file(self, resource_set, largefile, filename=None, |
561 | - filetype=None, extra=None): |
562 | + make_boot_resource_set = make_BootResourceSet # DEPRECATED |
563 | + |
564 | + def make_BootResourceFile(self, resource_set, largefile, filename=None, |
565 | + filetype=None, extra=None): |
566 | if filename is None: |
567 | filename = self.make_name('name') |
568 | if filetype is None: |
569 | @@ -1052,20 +1102,22 @@ |
570 | resource_set=resource_set, largefile=largefile, filename=filename, |
571 | filetype=filetype, extra=extra) |
572 | |
573 | + make_boot_resource_file = make_BootResourceFile # DEPRECATED |
574 | + |
575 | def make_boot_resource_file_with_content( |
576 | self, resource_set, filename=None, filetype=None, extra=None, |
577 | content=None, size=512): |
578 | - largefile = self.make_large_file(content=content, size=size) |
579 | - return self.make_boot_resource_file( |
580 | + largefile = self.make_LargeFile(content=content, size=size) |
581 | + return self.make_BootResourceFile( |
582 | resource_set, largefile, filename=filename, filetype=filetype, |
583 | extra=extra) |
584 | |
585 | def make_usable_boot_resource( |
586 | self, rtype=None, name=None, architecture=None, |
587 | extra=None, version=None, label=None): |
588 | - resource = self.make_boot_resource( |
589 | + resource = self.make_BootResource( |
590 | rtype=rtype, name=name, architecture=architecture, extra=extra) |
591 | - resource_set = self.make_boot_resource_set( |
592 | + resource_set = self.make_BootResourceSet( |
593 | resource, version=version, label=label) |
594 | filetypes = COMMISSIONABLE_SET.union(INSTALL_SET) |
595 | filetypes.add(random.choice(XINSTALL_TYPES)) |
596 | |
597 | === modified file 'src/maasserver/testing/testcase.py' |
598 | --- src/maasserver/testing/testcase.py 2014-09-03 06:24:38 +0000 |
599 | +++ src/maasserver/testing/testcase.py 2014-09-05 05:59:07 +0000 |
600 | @@ -84,7 +84,7 @@ |
601 | if as_admin: |
602 | user = factory.make_admin(password=password) |
603 | else: |
604 | - user = factory.make_user(password=password) |
605 | + user = factory.make_User(password=password) |
606 | self.client.login(username=user.username, password=password) |
607 | self.logged_in_user = user |
608 | |
609 | |
610 | === modified file 'src/maasserver/testing/tests/test_factory.py' |
611 | --- src/maasserver/testing/tests/test_factory.py 2014-08-13 21:49:35 +0000 |
612 | +++ src/maasserver/testing/tests/test_factory.py 2014-09-05 05:59:07 +0000 |
613 | @@ -84,46 +84,46 @@ |
614 | self.assertEqual( |
615 | 10, factory.pick_choice(options, but_not=but_not)) |
616 | |
617 | - def test_make_node_creates_nodegroup_if_none_given(self): |
618 | + def test_make_Node_creates_nodegroup_if_none_given(self): |
619 | existing_nodegroup_ids = set( |
620 | nodegroup.id for nodegroup in NodeGroup.objects.all()) |
621 | - new_node = factory.make_node() |
622 | + new_node = factory.make_Node() |
623 | self.assertIsNotNone(new_node.nodegroup) |
624 | self.assertNotIn(new_node.nodegroup.id, existing_nodegroup_ids) |
625 | |
626 | - def test_make_node_uses_given_nodegroup(self): |
627 | - nodegroup = factory.make_node_group() |
628 | + def test_make_Node_uses_given_nodegroup(self): |
629 | + nodegroup = factory.make_NodeGroup() |
630 | self.assertEqual( |
631 | - nodegroup, factory.make_node(nodegroup=nodegroup).nodegroup) |
632 | - |
633 | - def test_make_zone_returns_physical_zone(self): |
634 | - self.assertIsNotNone(factory.make_zone()) |
635 | - |
636 | - def test_make_zone_assigns_name(self): |
637 | - name = factory.make_zone().name |
638 | + nodegroup, factory.make_Node(nodegroup=nodegroup).nodegroup) |
639 | + |
640 | + def test_make_Zone_returns_physical_zone(self): |
641 | + self.assertIsNotNone(factory.make_Zone()) |
642 | + |
643 | + def test_make_Zone_assigns_name(self): |
644 | + name = factory.make_Zone().name |
645 | self.assertIsNotNone(name) |
646 | self.assertNotEqual(0, len(name)) |
647 | |
648 | - def test_make_zone_returns_unique_zone(self): |
649 | - self.assertNotEqual(factory.make_zone(), factory.make_zone()) |
650 | + def test_make_Zone_returns_unique_zone(self): |
651 | + self.assertNotEqual(factory.make_Zone(), factory.make_Zone()) |
652 | |
653 | - def test_make_zone_adds_nodes(self): |
654 | - node = factory.make_node() |
655 | - zone = factory.make_zone(nodes=[node]) |
656 | + def test_make_Zone_adds_nodes(self): |
657 | + node = factory.make_Node() |
658 | + zone = factory.make_Zone(nodes=[node]) |
659 | node = reload_object(node) |
660 | self.assertEqual(zone, node.zone) |
661 | |
662 | - def test_make_zone_does_not_add_other_nodes(self): |
663 | - previous_zone = factory.make_zone() |
664 | - node = factory.make_node(zone=previous_zone) |
665 | - factory.make_zone(nodes=[factory.make_node()]) |
666 | + def test_make_Zone_does_not_add_other_nodes(self): |
667 | + previous_zone = factory.make_Zone() |
668 | + node = factory.make_Node(zone=previous_zone) |
669 | + factory.make_Zone(nodes=[factory.make_Node()]) |
670 | node = reload_object(node) |
671 | self.assertEqual(previous_zone, node.zone) |
672 | |
673 | - def test_make_zone_adds_no_nodes_by_default(self): |
674 | - previous_zone = factory.make_zone() |
675 | - node = factory.make_node(zone=previous_zone) |
676 | - factory.make_zone() |
677 | + def test_make_Zone_adds_no_nodes_by_default(self): |
678 | + previous_zone = factory.make_Zone() |
679 | + node = factory.make_Node(zone=previous_zone) |
680 | + factory.make_Zone() |
681 | node = reload_object(node) |
682 | self.assertEqual(previous_zone, node.zone) |
683 | |
684 | @@ -144,43 +144,43 @@ |
685 | for _ in range(1000) |
686 | }) |
687 | |
688 | - def test_make_network_lowers_names_if_sortable_name(self): |
689 | - networks = factory.make_networks(10, sortable_name=True) |
690 | + def test_make_Networks_lowers_names_if_sortable_name(self): |
691 | + networks = factory.make_Networks(10, sortable_name=True) |
692 | self.assertEqual( |
693 | [network.name.lower() for network in networks], |
694 | [network.name for network in networks]) |
695 | |
696 | - def test_make_networks_generates_desired_number_of_networks(self): |
697 | + def test_make_Networks_generates_desired_number_of_networks(self): |
698 | number = random.randint(1, 20) |
699 | - networks = factory.make_networks(number) |
700 | + networks = factory.make_Networks(number) |
701 | self.assertEqual(number, len(networks)) |
702 | self.assertIsInstance(networks[0], Network) |
703 | self.assertIsInstance(networks[-1], Network) |
704 | |
705 | - def test_make_networks_passes_on_keyword_arguments(self): |
706 | + def test_make_Networks_passes_on_keyword_arguments(self): |
707 | description = factory.make_string() |
708 | - [network] = factory.make_networks(1, description=description) |
709 | + [network] = factory.make_Networks(1, description=description) |
710 | self.assertEqual(description, network.description) |
711 | |
712 | - def test_make_networks_includes_VLANs_by_default(self): |
713 | + def test_make_Networks_includes_VLANs_by_default(self): |
714 | class FakeNetwork: |
715 | def __init__(self, vlan_tag, *args, **kwargs): |
716 | self.vlan_tag = vlan_tag |
717 | - self.patch(factory, 'make_network', FakeNetwork) |
718 | + self.patch(factory, 'make_Network', FakeNetwork) |
719 | self.patch(random, 'randint', FakeRandInt(random.randint, 0, 1)) |
720 | - networks = factory.make_networks(100) |
721 | + networks = factory.make_Networks(100) |
722 | self.assertEqual({None, 1}, {network.vlan_tag for network in networks}) |
723 | |
724 | - def test_make_networks_excludes_VLANs_if_not_with_vlans(self): |
725 | + def test_make_Networks_excludes_VLANs_if_not_with_vlans(self): |
726 | class FakeNetwork: |
727 | def __init__(self, vlan_tag, *args, **kwargs): |
728 | self.vlan_tag = vlan_tag |
729 | - self.patch(factory, 'make_network', FakeNetwork) |
730 | + self.patch(factory, 'make_Network', FakeNetwork) |
731 | self.patch(random, 'randint', FakeRandInt(random.randint, 0, 1)) |
732 | - networks = factory.make_networks(100, with_vlans=False) |
733 | + networks = factory.make_Networks(100, with_vlans=False) |
734 | self.assertEqual({None}, {network.vlan_tag for network in networks}) |
735 | |
736 | - def test_make_networks_gives_up_if_random_tags_keep_clashing(self): |
737 | - self.patch(factory, 'make_network') |
738 | + def test_make_Networks_gives_up_if_random_tags_keep_clashing(self): |
739 | + self.patch(factory, 'make_Network') |
740 | self.patch(random, 'randint', lambda *args: 1) |
741 | - self.assertRaises(TooManyRandomRetries, factory.make_networks, 2) |
742 | + self.assertRaises(TooManyRandomRetries, factory.make_Networks, 2) |
A nice improvement… and a pretty mechanical change. Let's just make sure we follow up on this and remove the compatibility stubs soon.