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])
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())
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})
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)
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
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})
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)
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', }
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), ])
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'))
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)
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))
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
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%
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)
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)
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)
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)
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)
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())
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)
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)
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)