From 22228b58f17e490ae333e27797df849d048777c4 Mon Sep 17 00:00:00 2001 From: Dan Sheppard Date: Wed, 29 Jan 2020 12:52:48 -0600 Subject: [PATCH] #4034 - Create tests for addresses --- netbox/ipam/tests/test_ordering.py | 176 ++++++++++++++++++++++++++--- 1 file changed, 162 insertions(+), 14 deletions(-) diff --git a/netbox/ipam/tests/test_ordering.py b/netbox/ipam/tests/test_ordering.py index 495f7702e..729d28d12 100644 --- a/netbox/ipam/tests/test_ordering.py +++ b/netbox/ipam/tests/test_ordering.py @@ -1,12 +1,20 @@ from django.test import TestCase -from ipam.choices import IPAddressRoleChoices, PrefixStatusChoices +from ipam.choices import IPAddressStatusChoices, PrefixStatusChoices from ipam.models import Aggregate, IPAddress, Prefix, RIR, VLAN, VLANGroup, VRF import netaddr class PrefixOrderingTestCase(TestCase): + vrfs = None + + def setUp(self): + vrfa = VRF(name="VRF A") + vrfb = VRF(name="VRF B") + vrfc = VRF(name="VRF C") + VRF.objects.bulk_create([vrfa, vrfb, vrfc]) + self.vrfs = (vrfa, vrfb, vrfc) def _create_prefix(self, prefixes): prefixobjects = [] @@ -86,10 +94,7 @@ class PrefixOrderingTestCase(TestCase): def test_prefix_vrf_ordering(self): # Setup VRFs - vrfa = VRF(name='VRF A') - vrfb = VRF(name='VRF B') - vrfs = [vrfa, vrfb] - VRF.objects.bulk_create(vrfs) + vrfa, vrfb, vrfc = self.vrfs # Setup Prefixes prefixes = ( @@ -139,10 +144,8 @@ class PrefixOrderingTestCase(TestCase): self._compare_prefix(Prefix.objects.all(), prefixes) def test_prefix_complex_ordering(self): - # Setup VRF's - vrf = VRF(name='VRF A') - vrfs = [vrf] - VRF.objects.bulk_create(vrfs) + # Setup VRFs + vrfa, vrfb, vrfc = self.vrfs # Setup Prefixes prefixes = [ @@ -150,14 +153,159 @@ class PrefixOrderingTestCase(TestCase): (PrefixStatusChoices.STATUS_CONTAINER, None, netaddr.IPNetwork('10.0.0.0/16')), (PrefixStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.1.0.0/16')), (PrefixStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.0.0/16')), - (PrefixStatusChoices.STATUS_ACTIVE, vrf, netaddr.IPNetwork('10.0.0.0/24')), - (PrefixStatusChoices.STATUS_CONTAINER, vrf, netaddr.IPNetwork('10.0.1.0/24')), - (PrefixStatusChoices.STATUS_ACTIVE, vrf, netaddr.IPNetwork('10.0.1.0/25')), - (PrefixStatusChoices.STATUS_ACTIVE, vrf, netaddr.IPNetwork('10.1.0.0/24')), - (PrefixStatusChoices.STATUS_ACTIVE, vrf, netaddr.IPNetwork('10.1.1.0/24')) + (PrefixStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.0.0/24')), + (PrefixStatusChoices.STATUS_CONTAINER, vrfa, netaddr.IPNetwork('10.0.1.0/24')), + (PrefixStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.1.0/25')), + (PrefixStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.0.0/24')), + (PrefixStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.1.0/24')) ] Prefix.objects.bulk_create(self._create_prefix(prefixes)) # Test qsprefixes, compprefixes = self._compare_complex(Prefix.objects.all(), prefixes) self.assertEquals(qsprefixes, compprefixes) + + +class IPAddressOrderingTestCase(TestCase): + vrfs = None + + def setUp(self): + vrfa = VRF(name="VRF A") + vrfb = VRF(name="VRF B") + vrfc = VRF(name="VRF C") + VRF.objects.bulk_create([vrfa, vrfb, vrfc]) + self.vrfs = (vrfa, vrfb, vrfc) + + def _create_address(self, addresses): + addressobjects = [] + for addr in addresses: + status, vrf, address = addr + family = 4 + if not netaddr.valid_ipv4(address): + family = 6 + addressobj = IPAddress(address=address, vrf=vrf, status=status, family=family) + addressobjects.append(addressobj) + + return addressobjects + + def _compare_address(self, queryset, addresses): + + for i, obj in enumerate(queryset): + status, vrf, address = addresses[i] + self.assertEqual((obj.vrf, obj.address), (vrf, address)) + + def _compare_complex(self, queryset, addresses): + qsaddress, regaddress = [], [] + for i, obj in enumerate(queryset): + qsaddress.append(obj.address) + for addr in addresses: + regaddress.append(addr[2]) + return (qsaddress, regaddress) + + + + def test_address_ordering(self): + # Setup Addresses + addresses = ( + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.0.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.0.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.0.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.0.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.0.4.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.1.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.1.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.1.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.1.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.1.4.0/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.2.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.2.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.2.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.2.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('10.2.4.1/24')), + + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.16.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.16.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.16.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.16.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.16.4.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.17.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.17.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.17.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.17.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('172.17.4.1/24')), + + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.4.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.5.1/24')) + ) + IPAddress.objects.bulk_create(self._create_address(addresses)) + + # Test + self._compare_address(IPAddress.objects.all(), addresses) + + def test_address_vrf_ordering(self): + # Setup VRFs + vrfa, vrfb, vrfc = self.vrfs + + # Setup Addresses + addresses = ( + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.4.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.4.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.2.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.2.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.2.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.2.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.2.4.1/24')), + + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.16.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.16.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.16.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.16.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.16.4.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.17.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.17.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.17.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.17.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfb, netaddr.IPNetwork('172.17.4.1/24')), + + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.2.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.3.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.4.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.5.1/24')), + ) + IPAddress.objects.bulk_create(self._create_address(addresses)) + + # Test + self._compare_address(IPAddress.objects.all(), addresses) + + def test_address_complex_ordering(self): + # Setup VRFs + vrfa, vrfb, vrfc = self.vrfs + + # Setup addresses + addresses = [ + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.0.1.1/25')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.0.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, vrfa, netaddr.IPNetwork('10.1.1.1/24')), + (IPAddressStatusChoices.STATUS_ACTIVE, None, netaddr.IPNetwork('192.168.0.1/24')), + ] + IPAddress.objects.bulk_create(self._create_address(addresses)) + + # Test + qsaddresses, compaddresses = self._compare_complex(IPAddress.objects.all(), addresses) + self.assertEquals(qsaddresses, compaddresses)