|
|
@@ -695,6 +695,82 @@ class VLANGroupTest(APIViewTestCases.APIViewTestCase):
|
|
|
)
|
|
|
VLANGroup.objects.bulk_create(vlan_groups)
|
|
|
|
|
|
+ def test_list_available_vlans(self):
|
|
|
+ """
|
|
|
+ Test retrieval of all available VLANs within a group.
|
|
|
+ """
|
|
|
+ self.add_permissions('ipam.view_vlan')
|
|
|
+ vlangroup = VLANGroup.objects.first()
|
|
|
+
|
|
|
+ vlans = (
|
|
|
+ VLAN(vid=10, name='VLAN 10', group=vlangroup),
|
|
|
+ VLAN(vid=20, name='VLAN 20', group=vlangroup),
|
|
|
+ VLAN(vid=30, name='VLAN 30', group=vlangroup),
|
|
|
+ )
|
|
|
+ VLAN.objects.bulk_create(vlans)
|
|
|
+
|
|
|
+ # Retrieve all available VLANs
|
|
|
+ url = reverse('ipam-api:vlangroup-available-vlans', kwargs={'pk': vlangroup.pk})
|
|
|
+ response = self.client.get(url, **self.header)
|
|
|
+
|
|
|
+ self.assertEqual(len(response.data), 4094 - len(vlans))
|
|
|
+ available_vlans = {vlan['vid'] for vlan in response.data}
|
|
|
+ for vlan in vlans:
|
|
|
+ self.assertNotIn(vlan.vid, available_vlans)
|
|
|
+
|
|
|
+ def test_create_single_available_vlan(self):
|
|
|
+ """
|
|
|
+ Test the creation of a single available VLAN.
|
|
|
+ """
|
|
|
+ self.add_permissions('ipam.view_vlan', 'ipam.add_vlan')
|
|
|
+ vlangroup = VLANGroup.objects.first()
|
|
|
+ VLAN.objects.create(vid=1, name='VLAN 1', group=vlangroup)
|
|
|
+
|
|
|
+ data = {
|
|
|
+ "name": "First VLAN",
|
|
|
+ }
|
|
|
+ url = reverse('ipam-api:vlangroup-available-vlans', kwargs={'pk': vlangroup.pk})
|
|
|
+ response = self.client.post(url, data, format='json', **self.header)
|
|
|
+
|
|
|
+ self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
|
|
+ self.assertEqual(response.data['name'], data['name'])
|
|
|
+ self.assertEqual(response.data['group']['id'], vlangroup.pk)
|
|
|
+ self.assertEqual(response.data['vid'], 2)
|
|
|
+
|
|
|
+ def test_create_multiple_available_vlans(self):
|
|
|
+ """
|
|
|
+ Test the creation of multiple available VLANs.
|
|
|
+ """
|
|
|
+ self.add_permissions('ipam.view_vlan', 'ipam.add_vlan')
|
|
|
+ vlangroup = VLANGroup.objects.first()
|
|
|
+
|
|
|
+ vlans = (
|
|
|
+ VLAN(vid=1, name='VLAN 1', group=vlangroup),
|
|
|
+ VLAN(vid=3, name='VLAN 3', group=vlangroup),
|
|
|
+ VLAN(vid=5, name='VLAN 5', group=vlangroup),
|
|
|
+ )
|
|
|
+ VLAN.objects.bulk_create(vlans)
|
|
|
+
|
|
|
+ data = (
|
|
|
+ {"name": "First VLAN"},
|
|
|
+ {"name": "Second VLAN"},
|
|
|
+ {"name": "Third VLAN"},
|
|
|
+ )
|
|
|
+ url = reverse('ipam-api:vlangroup-available-vlans', kwargs={'pk': vlangroup.pk})
|
|
|
+ response = self.client.post(url, data, format='json', **self.header)
|
|
|
+
|
|
|
+ self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
|
|
+ self.assertEqual(len(response.data), 3)
|
|
|
+ self.assertEqual(response.data[0]['name'], data[0]['name'])
|
|
|
+ self.assertEqual(response.data[0]['group']['id'], vlangroup.pk)
|
|
|
+ self.assertEqual(response.data[0]['vid'], 2)
|
|
|
+ self.assertEqual(response.data[1]['name'], data[1]['name'])
|
|
|
+ self.assertEqual(response.data[1]['group']['id'], vlangroup.pk)
|
|
|
+ self.assertEqual(response.data[1]['vid'], 4)
|
|
|
+ self.assertEqual(response.data[2]['name'], data[2]['name'])
|
|
|
+ self.assertEqual(response.data[2]['group']['id'], vlangroup.pk)
|
|
|
+ self.assertEqual(response.data[2]['vid'], 6)
|
|
|
+
|
|
|
|
|
|
class VLANTest(APIViewTestCases.APIViewTestCase):
|
|
|
model = VLAN
|