~lamont/maas/bug-1614584

« back to all changes in this revision

Viewing changes to src/maasserver/tests/test_forms_vlan.py

  • Committer: MAAS Lander
  • Author(s): Blake Rouse
  • Date: 2016-12-06 09:06:41 UTC
  • mfrom: (5549.2.10 vlan-relay)
  • Revision ID: maas_lander-20161206090641-nx232kn8q7qs9d2l
[r=mpontillo][bug=1254807,1602412][author=blake-rouse] Support the ability for a VLAN to act as a relay for another VLAN.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
import random
9
9
 
10
10
from maasserver.forms_vlan import VLANForm
 
11
from maasserver.models.fabric import Fabric
11
12
from maasserver.models.vlan import DEFAULT_MTU
12
13
from maasserver.testing.factory import factory
13
14
from maasserver.testing.testcase import MAASServerTestCase
27
28
                ],
28
29
            }, form.errors)
29
30
 
 
31
    def test__vlans_already_using_relay_vlan_not_shown(self):
 
32
        fabric = Fabric.objects.get_default_fabric()
 
33
        relay_vlan = factory.make_VLAN()
 
34
        factory.make_VLAN(relay_vlan=relay_vlan)
 
35
        form = VLANForm(fabric=fabric, data={})
 
36
        self.assertItemsEqual(
 
37
            [fabric.get_default_vlan(), relay_vlan],
 
38
            form.fields['relay_vlan'].queryset)
 
39
 
 
40
    def test__self_vlan_not_used_in_relay_vlan_field(self):
 
41
        fabric = Fabric.objects.get_default_fabric()
 
42
        relay_vlan = fabric.get_default_vlan()
 
43
        form = VLANForm(instance=relay_vlan, data={})
 
44
        self.assertItemsEqual([], form.fields['relay_vlan'].queryset)
 
45
 
 
46
    def test__no_relay_vlans_allowed_when_dhcp_on(self):
 
47
        vlan = factory.make_VLAN(dhcp_on=True)
 
48
        factory.make_VLAN()
 
49
        form = VLANForm(instance=vlan, data={})
 
50
        self.assertItemsEqual([], form.fields['relay_vlan'].queryset)
 
51
 
30
52
    def test__creates_vlan(self):
31
53
        fabric = factory.make_Fabric()
32
54
        vlan_name = factory.make_name("vlan")
211
233
        vlan = reload_object(vlan)
212
234
        self.assertTrue(vlan.dhcp_on)
213
235
 
 
236
    def test_update_sets_relay_vlan(self):
 
237
        vlan = factory.make_VLAN()
 
238
        relay_vlan = factory.make_VLAN()
 
239
        form = VLANForm(instance=vlan, data={
 
240
            "relay_vlan": relay_vlan.id,
 
241
        })
 
242
        self.assertTrue(form.is_valid(), form.errors)
 
243
        form.save()
 
244
        vlan = reload_object(vlan)
 
245
        self.assertEquals(relay_vlan.id, vlan.relay_vlan.id)
 
246
 
 
247
    def test_update_clears_relay_vlan_when_None(self):
 
248
        relay_vlan = factory.make_VLAN()
 
249
        vlan = factory.make_VLAN(relay_vlan=relay_vlan)
 
250
        form = VLANForm(instance=vlan, data={
 
251
            "relay_vlan": None,
 
252
        })
 
253
        self.assertTrue(form.is_valid(), form.errors)
 
254
        form.save()
 
255
        vlan = reload_object(vlan)
 
256
        self.assertIsNone(vlan.relay_vlan)
 
257
 
 
258
    def test_update_clears_relay_vlan_when_empty(self):
 
259
        relay_vlan = factory.make_VLAN()
 
260
        vlan = factory.make_VLAN(relay_vlan=relay_vlan)
 
261
        form = VLANForm(instance=vlan, data={
 
262
            "relay_vlan": "",
 
263
        })
 
264
        self.assertTrue(form.is_valid(), form.errors)
 
265
        form.save()
 
266
        vlan = reload_object(vlan)
 
267
        self.assertIsNone(vlan.relay_vlan)
 
268
 
 
269
    def test_update_disables_relay_vlan_when_dhcp_turned_on(self):
 
270
        relay_vlan = factory.make_VLAN()
 
271
        vlan = factory.make_VLAN(relay_vlan=relay_vlan)
 
272
        factory.make_ipv4_Subnet_with_IPRanges(vlan=vlan)
 
273
        rack = factory.make_RackController(vlan=vlan)
 
274
        vlan.primary_rack = rack
 
275
        vlan.save()
 
276
        form = VLANForm(instance=reload_object(vlan), data={
 
277
            "dhcp_on": "true",
 
278
        })
 
279
        self.assertTrue(form.is_valid(), form.errors)
 
280
        form.save()
 
281
        vlan = reload_object(vlan)
 
282
        self.assertIsNone(vlan.relay_vlan)
 
283
 
214
284
    def test_update_validates_primary_rack_with_dhcp_on(self):
215
285
        vlan = factory.make_VLAN()
216
286
        form = VLANForm(instance=vlan, data={