mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-24 08:25:17 -06:00
Filter should match both start & end of IP range
This commit is contained in:
parent
ff4d2f2cdc
commit
2b0f0b04e8
@ -512,7 +512,7 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
|||||||
for prefix in value:
|
for prefix in value:
|
||||||
try:
|
try:
|
||||||
query = str(netaddr.IPNetwork(prefix.strip()).cidr)
|
query = str(netaddr.IPNetwork(prefix.strip()).cidr)
|
||||||
q |= Q(start_address__net_host_contained=query)
|
q |= Q(start_address__net_host_contained=query, end_address__net_host_contained=query)
|
||||||
except (AddrFormatError, ValueError):
|
except (AddrFormatError, ValueError):
|
||||||
return queryset.none()
|
return queryset.none()
|
||||||
return queryset.filter(q)
|
return queryset.filter(q)
|
||||||
|
@ -740,8 +740,6 @@ class IPRangeTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
)
|
)
|
||||||
Tenant.objects.bulk_create(tenants)
|
Tenant.objects.bulk_create(tenants)
|
||||||
|
|
||||||
Prefix.objects.create(prefix='10.0.1.0/24')
|
|
||||||
|
|
||||||
ip_ranges = (
|
ip_ranges = (
|
||||||
IPRange(start_address='10.0.1.100/24', end_address='10.0.1.199/24', size=100, vrf=None, tenant=None, role=None, status=IPRangeStatusChoices.STATUS_ACTIVE, description='foobar1'),
|
IPRange(start_address='10.0.1.100/24', end_address='10.0.1.199/24', size=100, vrf=None, tenant=None, role=None, status=IPRangeStatusChoices.STATUS_ACTIVE, description='foobar1'),
|
||||||
IPRange(start_address='10.0.2.100/24', end_address='10.0.2.199/24', size=100, vrf=vrfs[0], tenant=tenants[0], role=roles[0], status=IPRangeStatusChoices.STATUS_ACTIVE, description='foobar2'),
|
IPRange(start_address='10.0.2.100/24', end_address='10.0.2.199/24', size=100, vrf=vrfs[0], tenant=tenants[0], role=roles[0], status=IPRangeStatusChoices.STATUS_ACTIVE, description='foobar2'),
|
||||||
@ -809,9 +807,10 @@ class IPRangeTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_parent(self):
|
def test_parent(self):
|
||||||
prefix = Prefix.objects.get(prefix='10.0.1.0/24')
|
params = {'parent': ['10.0.1.0/24', '10.0.2.0/24']}
|
||||||
params = {'parent': [prefix.prefix]}
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
params = {'parent': ['10.0.1.0/25']} # Range 10.0.1.100-199 is not fully contained by 10.0.1.0/25
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
|
||||||
|
|
||||||
|
|
||||||
class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests):
|
class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests):
|
||||||
|
Loading…
Reference in New Issue
Block a user