~rvb/maas/transaction-1.7-bug-1409852

« back to all changes in this revision

Viewing changes to src/maasserver/models/tests/test_staticipaddress.py

merged upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
57
57
 
58
58
    def test_allocate_new_sets_user(self):
59
59
        low, high = factory.make_ip_range()
60
 
        user = factory.make_user()
 
60
        user = factory.make_User()
61
61
        ipaddress = StaticIPAddress.objects.allocate_new(
62
62
            low, high, alloc_type=IPADDRESS_TYPE.USER_RESERVED, user=user)
63
63
        self.assertEqual(user, ipaddress.user)
64
64
 
65
65
    def test_allocate_new_with_user_disallows_wrong_alloc_types(self):
66
66
        low, high = factory.make_ip_range()
67
 
        user = factory.make_user()
 
67
        user = factory.make_User()
68
68
        alloc_type = factory.pick_enum(
69
69
            IPADDRESS_TYPE, but_not=[IPADDRESS_TYPE.USER_RESERVED])
70
70
        self.assertRaises(
83
83
        # addresses.  See https://bugs.launchpad.net/maas/+bug/1338452
84
84
        low = "10.0.0.98"
85
85
        high = "10.0.0.100"
86
 
        factory.make_staticipaddress("10.0.0.99")
 
86
        factory.make_StaticIPAddress("10.0.0.99")
87
87
        ipaddress = StaticIPAddress.objects.allocate_new(low, high)
88
88
        self.assertEqual(ipaddress.ip, "10.0.0.98")
89
89
 
135
135
            unicode(error))
136
136
 
137
137
    def test_deallocate_by_node_removes_addresses(self):
138
 
        node = factory.make_node()
 
138
        node = factory.make_Node()
139
139
        [mac1, mac2] = [
140
 
            factory.make_mac_address(node=node) for _ in range(2)]
141
 
        factory.make_staticipaddress(mac=mac1)
142
 
        factory.make_staticipaddress(mac=mac2)
 
140
            factory.make_MACAddress(node=node) for _ in range(2)]
 
141
        factory.make_StaticIPAddress(mac=mac1)
 
142
        factory.make_StaticIPAddress(mac=mac2)
143
143
        StaticIPAddress.objects.deallocate_by_node(node)
144
144
        # Check the DB is cleared.
145
145
        self.assertEqual([], list(StaticIPAddress.objects.all()))
147
147
        self.assertEqual([], list(node.static_ip_addresses()))
148
148
 
149
149
    def test_deallocate_by_node_returns_deallocated_ips(self):
150
 
        node = factory.make_node()
 
150
        node = factory.make_Node()
151
151
        [mac1, mac2] = [
152
 
            factory.make_mac_address(node=node) for _ in range(2)]
153
 
        ip1 = factory.make_staticipaddress(mac=mac1)
154
 
        ip2 = factory.make_staticipaddress(mac=mac2)
 
152
            factory.make_MACAddress(node=node) for _ in range(2)]
 
153
        ip1 = factory.make_StaticIPAddress(mac=mac1)
 
154
        ip2 = factory.make_StaticIPAddress(mac=mac2)
155
155
        observed = StaticIPAddress.objects.deallocate_by_node(node)
156
156
        self.assertItemsEqual(
157
157
            [ip1.ip.format(), ip2.ip.format()],
159
159
            )
160
160
 
161
161
    def test_deallocate_by_node_ignores_other_nodes(self):
162
 
        node1 = factory.make_node()
163
 
        mac1 = factory.make_mac_address(node=node1)
164
 
        factory.make_staticipaddress(mac=mac1)
165
 
        node2 = factory.make_node()
166
 
        mac2 = factory.make_mac_address(node=node2)
167
 
        ip2 = factory.make_staticipaddress(mac=mac2)
 
162
        node1 = factory.make_Node()
 
163
        mac1 = factory.make_MACAddress(node=node1)
 
164
        factory.make_StaticIPAddress(mac=mac1)
 
165
        node2 = factory.make_Node()
 
166
        mac2 = factory.make_MACAddress(node=node2)
 
167
        ip2 = factory.make_StaticIPAddress(mac=mac2)
168
168
 
169
169
        StaticIPAddress.objects.deallocate_by_node(node1)
170
170
        self.assertItemsEqual([ip2.ip], node2.static_ip_addresses())
171
171
 
172
172
    def test_deallocate_only_deletes_auto_types(self):
173
 
        node = factory.make_node()
174
 
        mac = factory.make_mac_address(node=node)
 
173
        node = factory.make_Node()
 
174
        mac = factory.make_MACAddress(node=node)
175
175
        alloc_types = map_enum(IPADDRESS_TYPE).values()
176
176
        for alloc_type in alloc_types:
177
 
            factory.make_staticipaddress(mac=mac, alloc_type=alloc_type)
 
177
            factory.make_StaticIPAddress(mac=mac, alloc_type=alloc_type)
178
178
 
179
179
        StaticIPAddress.objects.deallocate_by_node(node)
180
180
        types_without_auto = set(alloc_types)
184
184
            [ip.alloc_type for ip in StaticIPAddress.objects.all()])
185
185
 
186
186
    def test_delete_by_node_removes_addresses(self):
187
 
        node = factory.make_node()
 
187
        node = factory.make_Node()
188
188
        [mac1, mac2] = [
189
 
            factory.make_mac_address(node=node) for _ in range(2)]
190
 
        factory.make_staticipaddress(mac=mac1)
191
 
        factory.make_staticipaddress(mac=mac2)
 
189
            factory.make_MACAddress(node=node) for _ in range(2)]
 
190
        factory.make_StaticIPAddress(mac=mac1)
 
191
        factory.make_StaticIPAddress(mac=mac2)
192
192
        StaticIPAddress.objects.delete_by_node(node)
193
193
        # Check the DB is cleared.
194
194
        self.assertEqual([], list(StaticIPAddress.objects.all()))
196
196
        self.assertEqual([], list(node.static_ip_addresses()))
197
197
 
198
198
    def test_delete_by_node_returns_deallocated_ips(self):
199
 
        node = factory.make_node()
 
199
        node = factory.make_Node()
200
200
        [mac1, mac2] = [
201
 
            factory.make_mac_address(node=node) for _ in range(2)]
202
 
        ip1 = factory.make_staticipaddress(mac=mac1)
203
 
        ip2 = factory.make_staticipaddress(mac=mac2)
 
201
            factory.make_MACAddress(node=node) for _ in range(2)]
 
202
        ip1 = factory.make_StaticIPAddress(mac=mac1)
 
203
        ip2 = factory.make_StaticIPAddress(mac=mac2)
204
204
        observed = StaticIPAddress.objects.delete_by_node(node)
205
205
        self.assertItemsEqual(
206
206
            [ip1.ip.format(), ip2.ip.format()],
208
208
            )
209
209
 
210
210
    def test_delete_by_node_ignores_other_nodes(self):
211
 
        node1 = factory.make_node()
212
 
        mac1 = factory.make_mac_address(node=node1)
213
 
        factory.make_staticipaddress(mac=mac1)
214
 
        other_node = factory.make_node()
215
 
        other_mac = factory.make_mac_address(node=other_node)
216
 
        other_ip = factory.make_staticipaddress(mac=other_mac)
 
211
        node1 = factory.make_Node()
 
212
        mac1 = factory.make_MACAddress(node=node1)
 
213
        factory.make_StaticIPAddress(mac=mac1)
 
214
        other_node = factory.make_Node()
 
215
        other_mac = factory.make_MACAddress(node=other_node)
 
216
        other_ip = factory.make_StaticIPAddress(mac=other_mac)
217
217
 
218
218
        StaticIPAddress.objects.delete_by_node(node1)
219
219
        self.assertItemsEqual([other_ip.ip], other_node.static_ip_addresses())
220
220
 
221
221
    def test_delete_by_node_deletes_all_types(self):
222
 
        node = factory.make_node()
223
 
        mac = factory.make_mac_address(node=node)
 
222
        node = factory.make_Node()
 
223
        mac = factory.make_MACAddress(node=node)
224
224
        alloc_types = map_enum(IPADDRESS_TYPE).values()
225
225
        for alloc_type in alloc_types:
226
 
            factory.make_staticipaddress(mac=mac, alloc_type=alloc_type)
 
226
            factory.make_StaticIPAddress(mac=mac, alloc_type=alloc_type)
227
227
 
228
228
        StaticIPAddress.objects.delete_by_node(node)
229
229
        self.assertItemsEqual([], StaticIPAddress.objects.all())
233
233
    """Tests for get_hostname_ip_mapping()."""
234
234
 
235
235
    def test_get_hostname_ip_mapping_returns_mapping(self):
236
 
        nodegroup = factory.make_node_group()
 
236
        nodegroup = factory.make_NodeGroup()
237
237
        expected_mapping = {}
238
238
        for i in range(3):
239
239
            node = factory.make_node_with_mac_attached_to_nodegroupinterface(
240
240
                nodegroup=nodegroup)
241
 
            staticip = factory.make_staticipaddress(mac=node.get_primary_mac())
 
241
            staticip = factory.make_StaticIPAddress(mac=node.get_primary_mac())
242
242
            expected_mapping[node.hostname] = [staticip.ip]
243
243
        mapping = StaticIPAddress.objects.get_hostname_ip_mapping(nodegroup)
244
244
        self.assertEqual(expected_mapping, mapping)
245
245
 
246
246
    def test_get_hostname_ip_mapping_strips_out_domain(self):
247
 
        nodegroup = factory.make_node_group()
 
247
        nodegroup = factory.make_NodeGroup()
248
248
        hostname = factory.make_name('hostname')
249
249
        domain = factory.make_name('domain')
250
250
        node = factory.make_node_with_mac_attached_to_nodegroupinterface(
251
251
            nodegroup=nodegroup, hostname="%s.%s" % (hostname, domain))
252
 
        staticip = factory.make_staticipaddress(mac=node.get_primary_mac())
 
252
        staticip = factory.make_StaticIPAddress(mac=node.get_primary_mac())
253
253
        mapping = StaticIPAddress.objects.get_hostname_ip_mapping(nodegroup)
254
254
        self.assertEqual({hostname: [staticip.ip]}, mapping)
255
255
 
256
256
    def test_get_hostname_ip_mapping_picks_mac_with_static_address(self):
257
257
        node = factory.make_node_with_mac_attached_to_nodegroupinterface(
258
258
            hostname=factory.make_name('host'))
259
 
        second_mac = factory.make_mac_address(node=node)
260
 
        staticip = factory.make_staticipaddress(mac=second_mac)
 
259
        second_mac = factory.make_MACAddress(node=node)
 
260
        staticip = factory.make_StaticIPAddress(mac=second_mac)
261
261
        mapping = StaticIPAddress.objects.get_hostname_ip_mapping(
262
262
            node.nodegroup)
263
263
        self.assertEqual({node.hostname: [staticip.ip]}, mapping)
264
264
 
265
265
    def test_get_hostname_ip_mapping_considers_given_nodegroup(self):
266
 
        nodegroup = factory.make_node_group()
 
266
        nodegroup = factory.make_NodeGroup()
267
267
        node = factory.make_node_with_mac_attached_to_nodegroupinterface(
268
268
            nodegroup=nodegroup)
269
 
        factory.make_staticipaddress(mac=node.get_primary_mac())
270
 
        another_nodegroup = factory.make_node_group()
 
269
        factory.make_StaticIPAddress(mac=node.get_primary_mac())
 
270
        another_nodegroup = factory.make_NodeGroup()
271
271
        mapping = StaticIPAddress.objects.get_hostname_ip_mapping(
272
272
            another_nodegroup)
273
273
        self.assertEqual({}, mapping)
275
275
    def test_get_hostname_ip_mapping_picks_oldest_mac_with_static_ip(self):
276
276
        node = factory.make_node_with_mac_attached_to_nodegroupinterface(
277
277
            hostname=factory.make_name('host'))
278
 
        newer_mac = factory.make_mac_address(node=node)
279
 
        factory.make_staticipaddress(mac=newer_mac)
280
 
        ip_for_older_mac = factory.make_staticipaddress(
 
278
        newer_mac = factory.make_MACAddress(node=node)
 
279
        factory.make_StaticIPAddress(mac=newer_mac)
 
280
        ip_for_older_mac = factory.make_StaticIPAddress(
281
281
            mac=node.get_primary_mac())
282
282
        mapping = StaticIPAddress.objects.get_hostname_ip_mapping(
283
283
            node.nodegroup)
284
284
        self.assertEqual({node.hostname: [ip_for_older_mac.ip]}, mapping)
285
285
 
286
286
    def test_get_hostname_ip_mapping_combines_IPv4_and_IPv6_addresses(self):
287
 
        node = factory.make_node(mac=True, disable_ipv4=False)
 
287
        node = factory.make_Node(mac=True, disable_ipv4=False)
288
288
        mac = node.get_primary_mac()
289
 
        ipv4_address = factory.make_staticipaddress(
 
289
        ipv4_address = factory.make_StaticIPAddress(
290
290
            mac=mac,
291
291
            ip=factory.pick_ip_in_network(factory.getRandomNetwork()))
292
 
        ipv6_address = factory.make_staticipaddress(
 
292
        ipv6_address = factory.make_StaticIPAddress(
293
293
            mac=mac,
294
294
            ip=factory.pick_ip_in_network(factory.make_ipv6_network()))
295
295
        mapping = StaticIPAddress.objects.get_hostname_ip_mapping(
301
301
    def test_get_hostname_ip_mapping_combines_MACs_for_same_node(self):
302
302
        # A node's preferred static IPv4 and IPv6 addresses may be on
303
303
        # different MACs.
304
 
        node = factory.make_node(disable_ipv4=False)
305
 
        ipv4_address = factory.make_staticipaddress(
306
 
            mac=factory.make_mac_address(node=node),
 
304
        node = factory.make_Node(disable_ipv4=False)
 
305
        ipv4_address = factory.make_StaticIPAddress(
 
306
            mac=factory.make_MACAddress(node=node),
307
307
            ip=factory.pick_ip_in_network(factory.getRandomNetwork()))
308
 
        ipv6_address = factory.make_staticipaddress(
309
 
            mac=factory.make_mac_address(node=node),
 
308
        ipv6_address = factory.make_StaticIPAddress(
 
309
            mac=factory.make_MACAddress(node=node),
310
310
            ip=factory.pick_ip_in_network(factory.make_ipv6_network()))
311
311
        mapping = StaticIPAddress.objects.get_hostname_ip_mapping(
312
312
            node.nodegroup)
315
315
            mapping[node.hostname])
316
316
 
317
317
    def test_get_hostname_ip_mapping_skips_ipv4_if_disable_ipv4_set(self):
318
 
        node = factory.make_node(mac=True, disable_ipv4=True)
 
318
        node = factory.make_Node(mac=True, disable_ipv4=True)
319
319
        mac = node.get_primary_mac()
320
 
        factory.make_staticipaddress(
 
320
        factory.make_StaticIPAddress(
321
321
            mac=mac,
322
322
            ip=factory.pick_ip_in_network(factory.getRandomNetwork()))
323
 
        ipv6_address = factory.make_staticipaddress(
 
323
        ipv6_address = factory.make_StaticIPAddress(
324
324
            mac=mac,
325
325
            ip=factory.pick_ip_in_network(factory.make_ipv6_network()))
326
326
        mapping = StaticIPAddress.objects.get_hostname_ip_mapping(
331
331
class StaticIPAddressTest(MAASServerTestCase):
332
332
 
333
333
    def test_repr_with_valid_type(self):
334
 
        actual = "%s" % factory.make_staticipaddress(
 
334
        actual = "%s" % factory.make_StaticIPAddress(
335
335
            ip="10.0.0.1", alloc_type=IPADDRESS_TYPE.AUTO)
336
336
        self.assertEqual("<StaticIPAddress: <10.0.0.1:type=AUTO>>", actual)
337
337
 
338
338
    def test_repr_with_invalid_type(self):
339
 
        actual = "%s" % factory.make_staticipaddress(
 
339
        actual = "%s" % factory.make_StaticIPAddress(
340
340
            ip="10.0.0.1", alloc_type=99999)
341
341
        self.assertEqual("<StaticIPAddress: <10.0.0.1:type=99999>>", actual)
342
342
 
343
343
    def test_stores_to_database(self):
344
 
        ipaddress = factory.make_staticipaddress()
 
344
        ipaddress = factory.make_StaticIPAddress()
345
345
        self.assertEqual([ipaddress], list(StaticIPAddress.objects.all()))
346
346
 
347
347
    def test_invalid_address_raises_validation_error(self):
349
349
        self.assertRaises(ValidationError, ip.full_clean)
350
350
 
351
351
    def test_deallocate_removes_object(self):
352
 
        ipaddress = factory.make_staticipaddress()
 
352
        ipaddress = factory.make_StaticIPAddress()
353
353
        ipaddress.deallocate()
354
354
        self.assertEqual([], list(StaticIPAddress.objects.all()))
355
355
 
356
356
    def test_deallocate_ignores_other_objects(self):
357
 
        ipaddress = factory.make_staticipaddress()
358
 
        ipaddress2 = factory.make_staticipaddress()
 
357
        ipaddress = factory.make_StaticIPAddress()
 
358
        ipaddress2 = factory.make_StaticIPAddress()
359
359
        ipaddress.deallocate()
360
360
        self.assertEqual([ipaddress2], list(StaticIPAddress.objects.all()))