diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py index 5229d3430..42fc7132b 100644 --- a/netbox/ipam/tests/test_api.py +++ b/netbox/ipam/tests/test_api.py @@ -7,6 +7,7 @@ from rest_framework import status from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site from ipam.choices import * from ipam.models import * +from tenancy.models import Tenant from utilities.testing import APITestCase, APIViewTestCases, disable_warnings @@ -23,20 +24,6 @@ class AppTest(APITestCase): class ASNTest(APIViewTestCases.APIViewTestCase): model = ASN brief_fields = ['display', 'id', 'name', 'prefix_count', 'rd', 'url'] - create_data = [ - { - 'name': 'VRF 4', - 'rd': '65000:4', - }, - { - 'name': 'VRF 5', - 'rd': '65000:5', - }, - { - 'name': 'VRF 6', - 'rd': '65000:6', - }, - ] bulk_update_data = { 'description': 'New description', } @@ -44,12 +31,46 @@ class ASNTest(APIViewTestCases.APIViewTestCase): @classmethod def setUpTestData(cls): - vrfs = ( - VRF(name='VRF 1', rd='65000:1'), - VRF(name='VRF 2', rd='65000:2'), - VRF(name='VRF 3'), # No RD + rirs = [ + RIR.objects.create(name='RFC 6996', slug='rfc-6996', description='Private Use', is_private=True), + RIR.objects.create(name='RFC 7300', slug='rfc-7300', description='IANA Use', is_private=True), + ] + sites = [ + Site.objects.create(name='Site 1', slug='site-1'), + Site.objects.create(name='Site 2', slug='site-2') + ] + tenants = [ + Tenant.objects.create(name='Tenant 1', slug='tenant-1'), + Tenant.objects.create(name='Tenant 2', slug='tenant-2'), + ] + + asns = ( + ASN(asn=64513, rir=rirs[0], tenant=tenants[0]), + ASN(asn=65534, rir=rirs[0], tenant=tenants[1]), + ASN(asn=4200000000, rir=rirs[0], tenant=tenants[0]), + ASN(asn=4200002301, rir=rirs[1], tenant=tenants[1]), ) - VRF.objects.bulk_create(vrfs) + ASN.objects.bulk_create(asns) + + asns[0].sites.set([sites[0]]) + asns[1].sites.set([sites[1]]) + asns[2].sites.set([sites[0]]) + asns[3].sites.set([sites[1]]) + + cls.create_data = [ + { + 'asn': 64512, + 'rir': rirs[0].pk, + }, + { + 'asn': 65543, + 'rir': rirs[0].pk, + }, + { + 'asn': 4294967294, + 'rir': rirs[0].pk, + }, + ] class VRFTest(APIViewTestCases.APIViewTestCase): diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index ff9dbfece..602fdd0f9 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -9,6 +9,81 @@ from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMac from tenancy.models import Tenant, TenantGroup +class ASNTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = ASN.objects.all() + filterset = ASNFilterSet + + @classmethod + def setUpTestData(cls): + + rirs = [ + RIR.objects.create(name='RFC 6996', slug='rfc-6996', description='Private Use', is_private=True), + RIR.objects.create(name='RFC 7300', slug='rfc-7300', description='IANA Use', is_private=True), + ] + sites = [ + Site.objects.create(name='Site 1', slug='site-1'), + Site.objects.create(name='Site 2', slug='site-2'), + Site.objects.create(name='Site 3', slug='site-3') + ] + tenants = [ + Tenant.objects.create(name='Tenant 1', slug='tenant-1'), + Tenant.objects.create(name='Tenant 2', slug='tenant-2'), + Tenant.objects.create(name='Tenant 3', slug='tenant-3'), + Tenant.objects.create(name='Tenant 4', slug='tenant-4'), + Tenant.objects.create(name='Tenant 5', slug='tenant-5'), + ] + + asns = ( + ASN(asn=64513, rir=rirs[0], tenant=tenants[0]), + ASN(asn=64514, rir=rirs[0], tenant=tenants[1]), + ASN(asn=64515, rir=rirs[0], tenant=tenants[2]), + ASN(asn=64516, rir=rirs[0], tenant=tenants[3]), + ASN(asn=65535, rir=rirs[1], tenant=tenants[5]), + ASN(asn=4200000000, rir=rirs[0], tenant=tenants[0]), + ASN(asn=4200000001, rir=rirs[0], tenant=tenants[1]), + ASN(asn=4200000002, rir=rirs[0], tenant=tenants[2]), + ASN(asn=4200000003, rir=rirs[0], tenant=tenants[3]), + ASN(asn=4200002301, rir=rirs[1], tenant=tenants[5]), + ) + ASN.objects.bulk_create(asns) + + asns[0].sites.set([sites[0]]) + asns[1].sites.set([sites[1]]) + asns[2].sites.set([sites[2]]) + asns[3].sites.set([sites[0]]) + asns[4].sites.set([sites[1]]) + asns[5].sites.set([sites[0]]) + asns[6].sites.set([sites[1]]) + asns[7].sites.set([sites[2]]) + asns[8].sites.set([sites[0]]) + asns[9].sites.set([sites[1]]) + + def test_asn(self): + params = {'asn': ['64512', '65535']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_tenant(self): + tenants = Tenant.objects.all()[:2] + params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + params = {'tenant': [tenants[0].slug, tenants[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + + def test_rir(self): + rirs = RIR.objects.all()[:1] + params = {'rir_id': [rirs[0].pk, rirs[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'rir': [rirs[0].slug, rirs[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_site(self): + sites = Site.objects.all()[:2] + params = {'site_id': [sites[0].pk, sites[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) + params = {'site': [sites[0].slug, sites[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) + + class VRFTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VRF.objects.all() filterset = VRFFilterSet diff --git a/netbox/ipam/tests/test_views.py b/netbox/ipam/tests/test_views.py index 2a0bfdf32..3bd22b112 100644 --- a/netbox/ipam/tests/test_views.py +++ b/netbox/ipam/tests/test_views.py @@ -9,6 +9,61 @@ from tenancy.models import Tenant from utilities.testing import ViewTestCases, create_tags +class ASNTestCase(ViewTestCases.PrimaryObjectViewTestCase): + model = ASN + + @classmethod + def setUpTestData(cls): + + rirs = [ + RIR.objects.create(name='RFC 6996', slug='rfc-6996', description='Private Use', is_private=True), + RIR.objects.create(name='RFC 7300', slug='rfc-7300', description='IANA Use', is_private=True), + ] + sites = [ + Site.objects.create(name='Site 1', slug='site-1'), + Site.objects.create(name='Site 2', slug='site-2') + ] + tenants = [ + Tenant.objects.create(name='Tenant 1', slug='tenant-1'), + Tenant.objects.create(name='Tenant 2', slug='tenant-2'), + ] + + asns = ( + ASN(asn=64513, rir=rirs[0], tenant=tenants[0]), + ASN(asn=65535, rir=rirs[1], tenant=tenants[1]), + ASN(asn=4200000000, rir=rirs[0], tenant=tenants[0]), + ASN(asn=4200002301, rir=rirs[1], tenant=tenants[1]), + ) + ASN.objects.bulk_create(asns) + + asns[0].sites.set([sites[0]]) + asns[1].sites.set([sites[1]]) + asns[2].sites.set([sites[0]]) + asns[3].sites.set([sites[1]]) + + tags = create_tags('Alpha', 'Bravo', 'Charlie') + + cls.form_data = { + 'asn': 64512, + 'rir': rirs[0].pk, + 'tenant': tenants[0], + 'site': sites[0], + 'description': 'A new ASN', + } + + cls.csv_data = ( + "asn,rir", + "64533,RFC 6996", + "64523,RFC 6996", + "64513,RFC 6996", + ) + + cls.bulk_edit_data = { + 'rir': rirs[1].pk, + 'description': 'Next description', + } + + class VRFTestCase(ViewTestCases.PrimaryObjectViewTestCase): model = VRF