Fixes #2337: Attempting to create the next available prefix within a parent assigned to a VRF raises an AssertionError
This commit is contained in:
@@ -140,10 +140,11 @@ class PrefixViewSet(CustomFieldModelViewSet):
|
|||||||
available_prefixes.remove(allocated_prefix)
|
available_prefixes.remove(allocated_prefix)
|
||||||
|
|
||||||
# Initialize the serializer with a list or a single object depending on what was requested
|
# Initialize the serializer with a list or a single object depending on what was requested
|
||||||
|
context = {'request': request}
|
||||||
if isinstance(request.data, list):
|
if isinstance(request.data, list):
|
||||||
serializer = serializers.PrefixSerializer(data=requested_prefixes, many=True)
|
serializer = serializers.PrefixSerializer(data=requested_prefixes, many=True, context=context)
|
||||||
else:
|
else:
|
||||||
serializer = serializers.PrefixSerializer(data=requested_prefixes[0])
|
serializer = serializers.PrefixSerializer(data=requested_prefixes[0], context=context)
|
||||||
|
|
||||||
# Create the new Prefix(es)
|
# Create the new Prefix(es)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
@@ -199,10 +200,11 @@ class PrefixViewSet(CustomFieldModelViewSet):
|
|||||||
requested_ip['vrf'] = prefix.vrf.pk if prefix.vrf else None
|
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
|
# Initialize the serializer with a list or a single object depending on what was requested
|
||||||
|
context = {'request': request}
|
||||||
if isinstance(request.data, list):
|
if isinstance(request.data, list):
|
||||||
serializer = serializers.IPAddressSerializer(data=requested_ips, many=True)
|
serializer = serializers.IPAddressSerializer(data=requested_ips, many=True, context=context)
|
||||||
else:
|
else:
|
||||||
serializer = serializers.IPAddressSerializer(data=requested_ips[0])
|
serializer = serializers.IPAddressSerializer(data=requested_ips[0], context=context)
|
||||||
|
|
||||||
# Create the new IP address(es)
|
# Create the new IP address(es)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
|
@@ -494,7 +494,8 @@ class PrefixTest(APITestCase):
|
|||||||
|
|
||||||
def test_create_single_available_prefix(self):
|
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})
|
url = reverse('ipam-api:prefix-available-prefixes', kwargs={'pk': prefix.pk})
|
||||||
|
|
||||||
# Create four available prefixes with individual requests
|
# Create four available prefixes with individual requests
|
||||||
@@ -512,6 +513,7 @@ class PrefixTest(APITestCase):
|
|||||||
response = self.client.post(url, data, format='json', **self.header)
|
response = self.client.post(url, data, format='json', **self.header)
|
||||||
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
||||||
self.assertEqual(response.data['prefix'], prefixes_to_be_created[i])
|
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'])
|
self.assertEqual(response.data['description'], data['description'])
|
||||||
|
|
||||||
# Try to create one more prefix
|
# Try to create one more prefix
|
||||||
@@ -562,7 +564,8 @@ class PrefixTest(APITestCase):
|
|||||||
|
|
||||||
def test_create_single_available_ip(self):
|
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})
|
url = reverse('ipam-api:prefix-available-ips', kwargs={'pk': prefix.pk})
|
||||||
|
|
||||||
# Create all four available IPs with individual requests
|
# 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)
|
response = self.client.post(url, data, format='json', **self.header)
|
||||||
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
||||||
|
self.assertEqual(response.data['vrf']['id'], vrf.pk)
|
||||||
self.assertEqual(response.data['description'], data['description'])
|
self.assertEqual(response.data['description'], data['description'])
|
||||||
|
|
||||||
# Try to create one more IP
|
# Try to create one more IP
|
||||||
|
Reference in New Issue
Block a user