Exemple #1
0
    def test_get_child_ranges(self):
        prefix = Prefix(prefix='192.168.0.16/28')
        prefix.save()
        ranges = IPRange.objects.bulk_create((
            IPRange(start_address=IPNetwork('192.168.0.1/24'),
                    end_address=IPNetwork('192.168.0.10/24'),
                    size=10),  # No overlap
            IPRange(start_address=IPNetwork('192.168.0.11/24'),
                    end_address=IPNetwork('192.168.0.17/24'),
                    size=7),  # Partial overlap
            IPRange(start_address=IPNetwork('192.168.0.18/24'),
                    end_address=IPNetwork('192.168.0.23/24'),
                    size=6),  # Full overlap
            IPRange(start_address=IPNetwork('192.168.0.24/24'),
                    end_address=IPNetwork('192.168.0.30/24'),
                    size=7),  # Full overlap
            IPRange(start_address=IPNetwork('192.168.0.31/24'),
                    end_address=IPNetwork('192.168.0.40/24'),
                    size=10),  # Partial overlap
        ))

        child_ranges = prefix.get_child_ranges()

        self.assertEqual(len(child_ranges), 2)
        self.assertEqual(child_ranges[0], ranges[2])
        self.assertEqual(child_ranges[1], ranges[3])
Exemple #2
0
 def test_duplicate_vrf(self):
     vrf = VRF.objects.create(name='Test', rd='1:1', enforce_unique=False)
     Prefix.objects.create(vrf=vrf,
                           prefix=netaddr.IPNetwork('192.0.2.0/24'))
     duplicate_prefix = Prefix(vrf=vrf,
                               prefix=netaddr.IPNetwork('192.0.2.0/24'))
     self.assertIsNone(duplicate_prefix.clean())
Exemple #3
0
    def test_get_child_prefixes(self):
        vrfs = VRF.objects.bulk_create((
            VRF(name='VRF 1'),
            VRF(name='VRF 2'),
            VRF(name='VRF 3'),
        ))
        prefixes = Prefix.objects.bulk_create((
            Prefix(prefix=netaddr.IPNetwork('10.0.0.0/16'),
                   status=PrefixStatusChoices.STATUS_CONTAINER),
            Prefix(prefix=netaddr.IPNetwork('10.0.0.0/24'), vrf=None),
            Prefix(prefix=netaddr.IPNetwork('10.0.1.0/24'), vrf=vrfs[0]),
            Prefix(prefix=netaddr.IPNetwork('10.0.2.0/24'), vrf=vrfs[1]),
            Prefix(prefix=netaddr.IPNetwork('10.0.3.0/24'), vrf=vrfs[2]),
        ))
        child_prefix_pks = {p.pk for p in prefixes[0].get_child_prefixes()}

        # Global container should return all children
        self.assertSetEqual(
            child_prefix_pks,
            {prefixes[1].pk, prefixes[2].pk, prefixes[3].pk, prefixes[4].pk})

        prefixes[0].vrf = vrfs[0]
        prefixes[0].save()
        child_prefix_pks = {p.pk for p in prefixes[0].get_child_prefixes()}

        # VRF container is limited to its own VRF
        self.assertSetEqual(child_prefix_pks, {prefixes[2].pk})
Exemple #4
0
    def setUpTestData(cls):

        prefixes = (
            Prefix(prefix=IPNetwork('192.168.1.0/24')),
            Prefix(prefix=IPNetwork('192.168.2.0/24')),
            Prefix(prefix=IPNetwork('192.168.3.0/24')),
        )
        Prefix.objects.bulk_create(prefixes)
Exemple #5
0
 def test_get_utilization_container(self):
     prefixes = (
         Prefix(prefix=IPNetwork('10.0.0.0/24'),
                status=PrefixStatusChoices.STATUS_CONTAINER),
         Prefix(prefix=IPNetwork('10.0.0.0/26')),
         Prefix(prefix=IPNetwork('10.0.0.128/26')),
     )
     Prefix.objects.bulk_create(prefixes)
     self.assertEqual(prefixes[0].get_utilization(), 50)  # 50% utilization
Exemple #6
0
    def test_get_duplicates(self):
        prefixes = Prefix.objects.bulk_create((
            Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')),
            Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')),
            Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')),
        ))
        duplicate_prefix_pks = [p.pk for p in prefixes[0].get_duplicates()]

        self.assertSetEqual(set(duplicate_prefix_pks),
                            {prefixes[1].pk, prefixes[2].pk})
Exemple #7
0
    def test_prefix_complex_ordering(self):
        """
        This function tests a complex ordering of interwoven prefixes and vrfs.  This is the current expected ordering of VRFs
        This includes the testing of the Container status.

        The proper ordering, to get proper containerization should be:
            None:10.0.0.0/8
            None:10.0.0.0/16
            VRF A:10.0.0.0/24
            VRF A:10.0.1.0/24
            VRF A:10.0.1.0/25
            None:10.1.0.0/16
            VRF A:10.1.0.0/24
            VRF A:10.1.1.0/24
            None: 192.168.0.0/16
        """
        # Setup VRFs
        vrfa, vrfb, vrfc = self.vrfs

        # Setup Prefixes
        prefixes = [
            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('10.0.0.0/8')),
            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('10.0.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('10.1.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.0.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.1.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.1.0/25')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.0.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.1.0/24')),
        ]
        Prefix.objects.bulk_create(prefixes)

        # Test
        self._compare(Prefix.objects.all(), prefixes)
Exemple #8
0
    def setUpTestData(cls):

        sites = (
            Site(name='Site 1', slug='site-1'),
            Site(name='Site 2', slug='site-2'),
        )
        Site.objects.bulk_create(sites)

        vrfs = (
            VRF(name='VRF 1', rd='65000:1'),
            VRF(name='VRF 2', rd='65000:2'),
        )
        VRF.objects.bulk_create(vrfs)

        roles = (
            Role(name='Role 1', slug='role-1'),
            Role(name='Role 2', slug='role-2'),
        )

        Prefix.objects.bulk_create([
            Prefix(prefix=IPNetwork('10.1.0.0/16'), vrf=vrfs[0], site=sites[0], role=roles[0]),
            Prefix(prefix=IPNetwork('10.2.0.0/16'), vrf=vrfs[0], site=sites[0], role=roles[0]),
            Prefix(prefix=IPNetwork('10.3.0.0/16'), vrf=vrfs[0], site=sites[0], role=roles[0]),
        ])

        cls.form_data = {
            'prefix': IPNetwork('192.0.2.0/24'),
            'site': sites[1].pk,
            'vrf': vrfs[1].pk,
            'tenant': None,
            'vlan': None,
            'status': PrefixStatusChoices.STATUS_RESERVED,
            'role': roles[1].pk,
            'is_pool': True,
            'description': 'A new prefix',
            'tags': 'Alpha,Bravo,Charlie',
        }

        cls.csv_data = (
            "vrf,prefix,status",
            "VRF 1,10.4.0.0/16,Active",
            "VRF 1,10.5.0.0/16,Active",
            "VRF 1,10.6.0.0/16,Active",
        )

        cls.bulk_edit_data = {
            'site': sites[1].pk,
            'vrf': vrfs[1].pk,
            'tenant': None,
            'status': PrefixStatusChoices.STATUS_RESERVED,
            'role': roles[1].pk,
            'is_pool': False,
            'description': 'New description',
        }
Exemple #9
0
    def setUpTestData(cls):

        regions = (
            Region(name='Test Region 1', slug='test-region-1'),
            Region(name='Test Region 2', slug='test-region-2'),
            Region(name='Test Region 3', slug='test-region-3'),
        )
        # Can't use bulk_create for models with MPTT fields
        for r in regions:
            r.save()

        sites = (
            Site(name='Test Site 1', slug='test-site-1', region=regions[0]),
            Site(name='Test Site 2', slug='test-site-2', region=regions[1]),
            Site(name='Test Site 3', slug='test-site-3', region=regions[2]),
        )
        Site.objects.bulk_create(sites)

        vrfs = (
            VRF(name='VRF 1', rd='65000:100'),
            VRF(name='VRF 2', rd='65000:200'),
            VRF(name='VRF 3', rd='65000:300'),
        )
        VRF.objects.bulk_create(vrfs)

        vlans = (
            VLAN(vid=1, name='VLAN 1'),
            VLAN(vid=2, name='VLAN 2'),
            VLAN(vid=3, name='VLAN 3'),
        )
        VLAN.objects.bulk_create(vlans)

        roles = (
            Role(name='Role 1', slug='role-1'),
            Role(name='Role 2', slug='role-2'),
            Role(name='Role 3', slug='role-3'),
        )
        Role.objects.bulk_create(roles)

        prefixes = (
            Prefix(family=4, prefix='10.0.0.0/24', site=None, vrf=None, vlan=None, role=None, is_pool=True),
            Prefix(family=4, prefix='10.0.1.0/24', site=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0]),
            Prefix(family=4, prefix='10.0.2.0/24', site=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED),
            Prefix(family=4, prefix='10.0.3.0/24', site=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED),
            Prefix(family=6, prefix='2001:db8::/64', site=None, vrf=None, vlan=None, role=None, is_pool=True),
            Prefix(family=6, prefix='2001:db8:0:1::/64', site=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0]),
            Prefix(family=6, prefix='2001:db8:0:2::/64', site=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED),
            Prefix(family=6, prefix='2001:db8:0:3::/64', site=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED),
            Prefix(family=4, prefix='10.0.0.0/16'),
            Prefix(family=6, prefix='2001:db8::/32'),
        )
        Prefix.objects.bulk_create(prefixes)
    def setUp(self):
        user = create_test_user(permissions=['ipam.view_prefix'])
        self.client = Client()
        self.client.force_login(user)

        site = Site(name='Site 1', slug='site-1')
        site.save()

        Prefix.objects.bulk_create([
            Prefix(family=4, prefix=IPNetwork('10.1.0.0/16'), site=site),
            Prefix(family=4, prefix=IPNetwork('10.2.0.0/16'), site=site),
            Prefix(family=4, prefix=IPNetwork('10.3.0.0/16'), site=site),
        ])
Exemple #11
0
    def test_get_first_available_prefix(self):

        prefixes = Prefix.objects.bulk_create((
            Prefix(prefix=netaddr.IPNetwork('10.0.0.0/16')),  # Parent prefix
            Prefix(prefix=netaddr.IPNetwork('10.0.0.0/24')),
            Prefix(prefix=netaddr.IPNetwork('10.0.1.0/24')),
            Prefix(prefix=netaddr.IPNetwork('10.0.2.0/24')),
        ))
        self.assertEqual(prefixes[0].get_first_available_prefix(),
                         netaddr.IPNetwork('10.0.3.0/24'))

        Prefix.objects.create(prefix=netaddr.IPNetwork('10.0.3.0/24'))
        self.assertEqual(prefixes[0].get_first_available_prefix(),
                         netaddr.IPNetwork('10.0.4.0/22'))
Exemple #12
0
 def test_duplicate_vrf_unique(self):
     vrf = VRF.objects.create(name='Test', rd='1:1', enforce_unique=True)
     Prefix.objects.create(vrf=vrf,
                           prefix=netaddr.IPNetwork('192.0.2.0/24'))
     duplicate_prefix = Prefix(vrf=vrf,
                               prefix=netaddr.IPNetwork('192.0.2.0/24'))
     self.assertRaises(ValidationError, duplicate_prefix.clean)
Exemple #13
0
    def test_get_available_prefixes(self):

        prefixes = Prefix.objects.bulk_create((
            Prefix(prefix=netaddr.IPNetwork('10.0.0.0/16')),  # Parent prefix
            Prefix(prefix=netaddr.IPNetwork('10.0.0.0/20')),
            Prefix(prefix=netaddr.IPNetwork('10.0.32.0/20')),
            Prefix(prefix=netaddr.IPNetwork('10.0.128.0/18')),
        ))
        missing_prefixes = netaddr.IPSet([
            netaddr.IPNetwork('10.0.16.0/20'),
            netaddr.IPNetwork('10.0.48.0/20'),
            netaddr.IPNetwork('10.0.64.0/18'),
            netaddr.IPNetwork('10.0.192.0/18'),
        ])
        available_prefixes = prefixes[0].get_available_prefixes()

        self.assertEqual(available_prefixes, missing_prefixes)
    def mutate_and_get_payload(cls, input, context, info):
        temp = Prefix()

        site = input.get('site')
        vrf = input.get('vrf')
        tenant = input.get('tenant')
        vlan = input.get('vlan')
        role = input.get('role')

        if not_none(vrf):
            temp.vrf = VRF.objects.get(pk=from_global_id(vrf)[1])

        if not_none(tenant):
            temp.tenant = Tenant.objects.get(pk=from_global_id(tenant)[1])

        if not_none(site):
            temp.site = Site.objects.get(pk=from_global_id(site)[1])

        if not_none(vlan):
            temp.vlan = VLAN.objects.get(pk=from_global_id(vlan)[1])

        if not_none(role):
            temp.role = Role.objects.get(pk=from_global_id(role)[1])

        fields = ['family', 'prefix', 'status', 'is_pool', 'description']

        return NewPrefix(prefix=set_and_save(fields, input, temp))
Exemple #15
0
    def create_mgmt_prefix(self, site, site_no, vlan):
        prefix_cidr = "172.30.%d.0/24" % site_no
        try:
            prefix = Prefix.objects.get(prefix=prefix_cidr)
            self.log_info("Mgmt prefix %s already present, carrying on." %
                          prefix)

            return prefix
        except Prefix.DoesNotExist:
            pass

        prefix = Prefix(site=site,
                        prefix=prefix_cidr,
                        vlan=vlan,
                        role=Role.objects.get(name='Mgmt'))

        prefix.save()
        self.log_success("Created mgmt prefix %s" % prefix)

        return prefix
Exemple #16
0
    def test_get_utilization(self):

        # Container Prefix
        prefix = Prefix.objects.create(
            prefix=netaddr.IPNetwork('10.0.0.0/24'),
            status=PrefixStatusChoices.STATUS_CONTAINER)
        Prefix.objects.bulk_create((
            Prefix(prefix=netaddr.IPNetwork('10.0.0.0/26')),
            Prefix(prefix=netaddr.IPNetwork('10.0.0.128/26')),
        ))
        self.assertEqual(prefix.get_utilization(), 50)

        # Non-container Prefix
        prefix.status = PrefixStatusChoices.STATUS_ACTIVE
        prefix.save()
        IPAddress.objects.bulk_create(
            # Create 32 IPAddresses within the Prefix
            [
                IPAddress(address=netaddr.IPNetwork('10.0.0.{}/24'.format(i)))
                for i in range(1, 33)
            ])
        self.assertEqual(prefix.get_utilization(), 12)  # ~= 12%
Exemple #17
0
    def setUpTestData(cls):

        cls.sites = (
            Site(name='Site 1', slug='site-1'),
            Site(name='Site 2', slug='site-2'),
            Site(name='Site 3', slug='site-3'),
        )
        Site.objects.bulk_create(cls.sites)

        cls.prefixes = (
            Prefix(prefix=IPNetwork('10.0.0.0/24'), site=cls.sites[0]),
            Prefix(prefix=IPNetwork('10.0.1.0/24'), site=cls.sites[0]),
            Prefix(prefix=IPNetwork('10.0.2.0/24'), site=cls.sites[0]),
            Prefix(prefix=IPNetwork('10.0.3.0/24'), site=cls.sites[1]),
            Prefix(prefix=IPNetwork('10.0.4.0/24'), site=cls.sites[1]),
            Prefix(prefix=IPNetwork('10.0.5.0/24'), site=cls.sites[1]),
            Prefix(prefix=IPNetwork('10.0.6.0/24'), site=cls.sites[2]),
            Prefix(prefix=IPNetwork('10.0.7.0/24'), site=cls.sites[2]),
            Prefix(prefix=IPNetwork('10.0.8.0/24'), site=cls.sites[2]),
        )
        Prefix.objects.bulk_create(cls.prefixes)
Exemple #18
0
    def test_duplicate_prefix4(self):
        # Duplicate 10.0.0.0/16
        Prefix(prefix='10.0.0.0/16').save()

        prefixes = Prefix.objects.filter(prefix__family=4)
        self.assertEqual(prefixes[0].prefix, IPNetwork('10.0.0.0/8'))
        self.assertEqual(prefixes[0]._depth, 0)
        self.assertEqual(prefixes[0]._children, 3)
        self.assertEqual(prefixes[1].prefix, IPNetwork('10.0.0.0/16'))
        self.assertEqual(prefixes[1]._depth, 1)
        self.assertEqual(prefixes[1]._children, 1)
        self.assertEqual(prefixes[2].prefix, IPNetwork('10.0.0.0/16'))
        self.assertEqual(prefixes[2]._depth, 1)
        self.assertEqual(prefixes[2]._children, 1)
        self.assertEqual(prefixes[3].prefix, IPNetwork('10.0.0.0/24'))
        self.assertEqual(prefixes[3]._depth, 2)
        self.assertEqual(prefixes[3]._children, 0)
Exemple #19
0
    def test_duplicate_prefix6(self):
        # Duplicate 2001:db8::/40
        Prefix(prefix='2001:db8::/40').save()

        prefixes = Prefix.objects.filter(prefix__family=6)
        self.assertEqual(prefixes[0].prefix, IPNetwork('2001:db8::/32'))
        self.assertEqual(prefixes[0]._depth, 0)
        self.assertEqual(prefixes[0]._children, 3)
        self.assertEqual(prefixes[1].prefix, IPNetwork('2001:db8::/40'))
        self.assertEqual(prefixes[1]._depth, 1)
        self.assertEqual(prefixes[1]._children, 1)
        self.assertEqual(prefixes[2].prefix, IPNetwork('2001:db8::/40'))
        self.assertEqual(prefixes[2]._depth, 1)
        self.assertEqual(prefixes[2]._children, 1)
        self.assertEqual(prefixes[3].prefix, IPNetwork('2001:db8::/48'))
        self.assertEqual(prefixes[3]._depth, 2)
        self.assertEqual(prefixes[3]._children, 0)
Exemple #20
0
    def setUpTestData(cls):

        prefixes = (

            # IPv4
            Prefix(prefix='10.0.0.0/8', _depth=0, _children=2),
            Prefix(prefix='10.0.0.0/16', _depth=1, _children=1),
            Prefix(prefix='10.0.0.0/24', _depth=2, _children=0),

            # IPv6
            Prefix(prefix='2001:db8::/32', _depth=0, _children=2),
            Prefix(prefix='2001:db8::/40', _depth=1, _children=1),
            Prefix(prefix='2001:db8::/48', _depth=2, _children=0),
        )
        Prefix.objects.bulk_create(prefixes)
Exemple #21
0
    def test_get_utilization(self):
        rir = RIR.objects.create(name='RIR 1', slug='rir-1')
        aggregate = Aggregate(prefix=netaddr.IPNetwork('10.0.0.0/8'), rir=rir)
        aggregate.save()

        # 25% utilization
        Prefix.objects.bulk_create((
            Prefix(prefix=netaddr.IPNetwork('10.0.0.0/12')),
            Prefix(prefix=netaddr.IPNetwork('10.16.0.0/12')),
            Prefix(prefix=netaddr.IPNetwork('10.32.0.0/12')),
            Prefix(prefix=netaddr.IPNetwork('10.48.0.0/12')),
        ))
        self.assertEqual(aggregate.get_utilization(), 25)

        # 50% utilization
        Prefix.objects.bulk_create(
            (Prefix(prefix=netaddr.IPNetwork('10.64.0.0/10')), ))
        self.assertEqual(aggregate.get_utilization(), 50)

        # 100% utilization
        Prefix.objects.bulk_create(
            (Prefix(prefix=netaddr.IPNetwork('10.128.0.0/9')), ))
        self.assertEqual(aggregate.get_utilization(), 100)
Exemple #22
0
 def test_duplicate_global(self):
     Prefix.objects.create(prefix=netaddr.IPNetwork('192.0.2.0/24'))
     duplicate_prefix = Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24'))
     self.assertIsNone(duplicate_prefix.clean())
Exemple #23
0
    def setUpTestData(cls):

        regions = (
            Region(name='Test Region 1', slug='test-region-1'),
            Region(name='Test Region 2', slug='test-region-2'),
            Region(name='Test Region 3', slug='test-region-3'),
        )
        # Can't use bulk_create for models with MPTT fields
        for r in regions:
            r.save()

        sites = (
            Site(name='Test Site 1', slug='test-site-1', region=regions[0]),
            Site(name='Test Site 2', slug='test-site-2', region=regions[1]),
            Site(name='Test Site 3', slug='test-site-3', region=regions[2]),
        )
        Site.objects.bulk_create(sites)

        route_targets = (
            RouteTarget(name='65000:100'),
            RouteTarget(name='65000:200'),
            RouteTarget(name='65000:300'),
        )
        RouteTarget.objects.bulk_create(route_targets)

        vrfs = (
            VRF(name='VRF 1', rd='65000:100'),
            VRF(name='VRF 2', rd='65000:200'),
            VRF(name='VRF 3', rd='65000:300'),
        )
        VRF.objects.bulk_create(vrfs)
        vrfs[0].import_targets.add(route_targets[0], route_targets[1],
                                   route_targets[2])
        vrfs[1].export_targets.add(route_targets[1])
        vrfs[2].export_targets.add(route_targets[2])

        vlans = (
            VLAN(vid=1, name='VLAN 1'),
            VLAN(vid=2, name='VLAN 2'),
            VLAN(vid=3, name='VLAN 3'),
        )
        VLAN.objects.bulk_create(vlans)

        roles = (
            Role(name='Role 1', slug='role-1'),
            Role(name='Role 2', slug='role-2'),
            Role(name='Role 3', slug='role-3'),
        )
        Role.objects.bulk_create(roles)

        tenant_groups = (
            TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
            TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
            TenantGroup(name='Tenant group 3', slug='tenant-group-3'),
        )
        for tenantgroup in tenant_groups:
            tenantgroup.save()

        tenants = (
            Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
            Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
            Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
        )
        Tenant.objects.bulk_create(tenants)

        prefixes = (
            Prefix(prefix='10.0.0.0/24',
                   tenant=None,
                   site=None,
                   vrf=None,
                   vlan=None,
                   role=None,
                   is_pool=True),
            Prefix(prefix='10.0.1.0/24',
                   tenant=tenants[0],
                   site=sites[0],
                   vrf=vrfs[0],
                   vlan=vlans[0],
                   role=roles[0]),
            Prefix(prefix='10.0.2.0/24',
                   tenant=tenants[1],
                   site=sites[1],
                   vrf=vrfs[1],
                   vlan=vlans[1],
                   role=roles[1],
                   status=PrefixStatusChoices.STATUS_DEPRECATED),
            Prefix(prefix='10.0.3.0/24',
                   tenant=tenants[2],
                   site=sites[2],
                   vrf=vrfs[2],
                   vlan=vlans[2],
                   role=roles[2],
                   status=PrefixStatusChoices.STATUS_RESERVED),
            Prefix(prefix='2001:db8::/64',
                   tenant=None,
                   site=None,
                   vrf=None,
                   vlan=None,
                   role=None,
                   is_pool=True),
            Prefix(prefix='2001:db8:0:1::/64',
                   tenant=tenants[0],
                   site=sites[0],
                   vrf=vrfs[0],
                   vlan=vlans[0],
                   role=roles[0]),
            Prefix(prefix='2001:db8:0:2::/64',
                   tenant=tenants[1],
                   site=sites[1],
                   vrf=vrfs[1],
                   vlan=vlans[1],
                   role=roles[1],
                   status=PrefixStatusChoices.STATUS_DEPRECATED),
            Prefix(prefix='2001:db8:0:3::/64',
                   tenant=tenants[2],
                   site=sites[2],
                   vrf=vrfs[2],
                   vlan=vlans[2],
                   role=roles[2],
                   status=PrefixStatusChoices.STATUS_RESERVED),
            Prefix(prefix='10.0.0.0/16'),
            Prefix(prefix='2001:db8::/32'),
        )
        Prefix.objects.bulk_create(prefixes)
Exemple #24
0
    def test_prefix_vrf_ordering(self):
        """
        This is a very basic test, which tests both prefixes without VRFs and prefixes with VRFs
        """
        # Setup VRFs
        vrfa, vrfb, vrfc = self.vrfs

        # Setup Prefixes
        prefixes = (
            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER,
                   vrf=None,
                   family=4,
                   prefix=netaddr.IPNetwork('192.168.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=None,
                   family=4,
                   prefix=netaddr.IPNetwork('192.168.0.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=None,
                   family=4,
                   prefix=netaddr.IPNetwork('192.168.1.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=None,
                   family=4,
                   prefix=netaddr.IPNetwork('192.168.2.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=None,
                   family=4,
                   prefix=netaddr.IPNetwork('192.168.3.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=None,
                   family=4,
                   prefix=netaddr.IPNetwork('192.168.4.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=None,
                   family=4,
                   prefix=netaddr.IPNetwork('192.168.5.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.0.0.0/8')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.0.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.0.0.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.0.1.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.0.2.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.0.3.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.0.4.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.1.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.1.1.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.1.2.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.1.3.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.1.4.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.2.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.2.1.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.2.2.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.2.3.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfa,
                   family=4,
                   prefix=netaddr.IPNetwork('10.2.4.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.16.0.0/12')),
            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.16.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.16.0.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.16.1.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.16.2.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.16.3.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.16.4.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.17.0.0/16')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.17.0.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.17.1.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.17.2.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.17.3.0/24')),
            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE,
                   vrf=vrfb,
                   family=4,
                   prefix=netaddr.IPNetwork('172.17.4.0/24')),
        )

        Prefix.objects.bulk_create(prefixes)

        # Test
        self._compare(Prefix.objects.all(), prefixes)
Exemple #25
0
 def test_duplicate_global_unique(self):
     Prefix.objects.create(prefix=netaddr.IPNetwork('192.0.2.0/24'))
     duplicate_prefix = Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24'))
     self.assertRaises(ValidationError, duplicate_prefix.clean)
Exemple #26
0
 def test_duplicate_global(self):
     Prefix.objects.create(prefix=netaddr.IPNetwork('192.0.2.0/24'))
     duplicate_prefix = Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24'))
     self.assertIsNone(duplicate_prefix.clean())
Exemple #27
0
 def test_duplicate_vrf(self):
     vrf = VRF.objects.create(name='Test', rd='1:1', enforce_unique=False)
     Prefix.objects.create(vrf=vrf, prefix=netaddr.IPNetwork('192.0.2.0/24'))
     duplicate_prefix = Prefix(vrf=vrf, prefix=netaddr.IPNetwork('192.0.2.0/24'))
     self.assertIsNone(duplicate_prefix.clean())