1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #11470: Validation and user friendly message on invalid address query param (#11858)

* Fixes #11470: Validation and user friendly message on invalid address query param

* Update invalid input handling to return empty set instead of raising exception
This commit is contained in:
rmanyari
2023-03-01 14:49:40 -07:00
committed by GitHub
parent 189668fbfb
commit 6640fc9eb7
2 changed files with 48 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ from ipam.models import *
from utilities.testing import ChangeLoggedFilterSetTests, create_test_device, create_test_virtualmachine
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
from tenancy.models import Tenant, TenantGroup
from rest_framework import serializers
class ASNTestCase(TestCase, ChangeLoggedFilterSetTests):
@@ -851,6 +852,26 @@ class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'address': ['2001:db8::1/64', '2001:db8::1/65']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
# Check for valid edge cases. Note that Postgres inet type
# only accepts netmasks in the int form, so the filterset
# casts netmasks in the xxx.xxx.xxx.xxx format.
params = {'address': ['24']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
params = {'address': ['10.0.0.1/255.255.255.0']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
params = {'address': ['10.0.0.1/255.255.255.0', '10.0.0.1/25']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
# Check for invalid input.
params = {'address': ['/24']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
params = {'address': ['10.0.0.1/255.255.999.0']} # Invalid netmask
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
# Check for partially invalid input.
params = {'address': ['10.0.0.1', '/24', '10.0.0.10/24']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_mask_length(self):
params = {'mask_length': '24'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)