Просмотр исходного кода

Fixes #2337: Attempting to create the next available prefix within a parent assigned to a VRF raises an AssertionError

Jeremy Stretch 7 лет назад
Родитель
Сommit
6a56ffc650
2 измененных файлов с 12 добавлено и 6 удалено
  1. 6 4
      netbox/ipam/api/views.py
  2. 6 2
      netbox/ipam/tests/test_api.py

+ 6 - 4
netbox/ipam/api/views.py

@@ -140,10 +140,11 @@ class PrefixViewSet(CustomFieldModelViewSet):
                 available_prefixes.remove(allocated_prefix)
 
             # Initialize the serializer with a list or a single object depending on what was requested
+            context = {'request': request}
             if isinstance(request.data, list):
-                serializer = serializers.PrefixSerializer(data=requested_prefixes, many=True)
+                serializer = serializers.PrefixSerializer(data=requested_prefixes, many=True, context=context)
             else:
-                serializer = serializers.PrefixSerializer(data=requested_prefixes[0])
+                serializer = serializers.PrefixSerializer(data=requested_prefixes[0], context=context)
 
             # Create the new Prefix(es)
             if serializer.is_valid():
@@ -199,10 +200,11 @@ class PrefixViewSet(CustomFieldModelViewSet):
                 requested_ip['vrf'] = prefix.vrf.pk if prefix.vrf else None
 
             # Initialize the serializer with a list or a single object depending on what was requested
+            context = {'request': request}
             if isinstance(request.data, list):
-                serializer = serializers.IPAddressSerializer(data=requested_ips, many=True)
+                serializer = serializers.IPAddressSerializer(data=requested_ips, many=True, context=context)
             else:
-                serializer = serializers.IPAddressSerializer(data=requested_ips[0])
+                serializer = serializers.IPAddressSerializer(data=requested_ips[0], context=context)
 
             # Create the new IP address(es)
             if serializer.is_valid():

+ 6 - 2
netbox/ipam/tests/test_api.py

@@ -494,7 +494,8 @@ class PrefixTest(APITestCase):
 
     def test_create_single_available_prefix(self):
 
-        prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/28'), is_pool=True)
+        vrf = VRF.objects.create(name='Test VRF 1', rd='1234')
+        prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/28'), vrf=vrf, is_pool=True)
         url = reverse('ipam-api:prefix-available-prefixes', kwargs={'pk': prefix.pk})
 
         # Create four available prefixes with individual requests
@@ -512,6 +513,7 @@ class PrefixTest(APITestCase):
             response = self.client.post(url, data, format='json', **self.header)
             self.assertHttpStatus(response, status.HTTP_201_CREATED)
             self.assertEqual(response.data['prefix'], prefixes_to_be_created[i])
+            self.assertEqual(response.data['vrf']['id'], vrf.pk)
             self.assertEqual(response.data['description'], data['description'])
 
         # Try to create one more prefix
@@ -562,7 +564,8 @@ class PrefixTest(APITestCase):
 
     def test_create_single_available_ip(self):
 
-        prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/30'), is_pool=True)
+        vrf = VRF.objects.create(name='Test VRF 1', rd='1234')
+        prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/30'), vrf=vrf, is_pool=True)
         url = reverse('ipam-api:prefix-available-ips', kwargs={'pk': prefix.pk})
 
         # Create all four available IPs with individual requests
@@ -572,6 +575,7 @@ class PrefixTest(APITestCase):
             }
             response = self.client.post(url, data, format='json', **self.header)
             self.assertHttpStatus(response, status.HTTP_201_CREATED)
+            self.assertEqual(response.data['vrf']['id'], vrf.pk)
             self.assertEqual(response.data['description'], data['description'])
 
         # Try to create one more IP