def test_duplicate_vrf(self): vrf = VRF.objects.create(name="Test", rd="1:1", enforce_unique=False) IPAddress.objects.create(vrf=vrf, address=netaddr.IPNetwork("192.0.2.1/24")) duplicate_ip = IPAddress(vrf=vrf, address=netaddr.IPNetwork("192.0.2.1/24")) self.assertIsNone(duplicate_ip.clean())
def test_get_first_available_ip(self): parent_prefix = Prefix.objects.create( prefix=netaddr.IPNetwork("10.0.0.0/24")) IPAddress.objects.bulk_create(( IPAddress(address=netaddr.IPNetwork("10.0.0.1/24")), IPAddress(address=netaddr.IPNetwork("10.0.0.2/24")), IPAddress(address=netaddr.IPNetwork("10.0.0.3/24")), )) self.assertEqual(parent_prefix.get_first_available_ip(), "10.0.0.4/24") IPAddress.objects.create(address=netaddr.IPNetwork("10.0.0.4/24")) self.assertEqual(parent_prefix.get_first_available_ip(), "10.0.0.5/24")
def test_duplicate_vrf_unique(self): vrf = VRF.objects.create(name="Test", rd="1:1", enforce_unique=True) IPAddress.objects.create(vrf=vrf, address=netaddr.IPNetwork("192.0.2.1/24")) duplicate_ip = IPAddress(vrf=vrf, address=netaddr.IPNetwork("192.0.2.1/24")) self.assertRaises(ValidationError, duplicate_ip.clean)
def test_get_available_ips(self): parent_prefix = Prefix.objects.create( prefix=netaddr.IPNetwork("10.0.0.0/28")) IPAddress.objects.bulk_create(( IPAddress(address=netaddr.IPNetwork("10.0.0.1/26")), IPAddress(address=netaddr.IPNetwork("10.0.0.3/26")), IPAddress(address=netaddr.IPNetwork("10.0.0.5/26")), IPAddress(address=netaddr.IPNetwork("10.0.0.7/26")), IPAddress(address=netaddr.IPNetwork("10.0.0.9/26")), IPAddress(address=netaddr.IPNetwork("10.0.0.11/26")), IPAddress(address=netaddr.IPNetwork("10.0.0.13/26")), )) missing_ips = netaddr.IPSet([ "10.0.0.2/32", "10.0.0.4/32", "10.0.0.6/32", "10.0.0.8/32", "10.0.0.10/32", "10.0.0.12/32", "10.0.0.14/32", ]) available_ips = parent_prefix.get_available_ips() self.assertEqual(available_ips, missing_ips)
def test_address_initial(self): """Ensure initial kwargs for address is passed in.""" with mock.patch( "nautobot.utilities.forms.forms.forms.ModelForm.__init__" ) as mock_init: ip_none = IPAddress() AddressFieldMixin(initial=self.initial, instance=ip_none) mock_init.assert_called_with(initial=self.initial, instance=ip_none)
def test_not_null_assigned_object_type_and_null_assigned_object_id(self): site = Site.objects.create(name="Test Site 1", slug="test-site-1") manufacturer = Manufacturer.objects.create(name="Test Manufacturer 1", slug="test-manufacturer-1") devicetype = DeviceType.objects.create( manufacturer=manufacturer, model="Test Device Type 1", slug="test-device-type-1", ) devicerole = DeviceRole.objects.create(name="Test Device Role 1", slug="test-device-role-1", color="ff0000") device_status = Status.objects.get_for_model(Device).get(slug="active") device = Device.objects.create( device_type=devicetype, device_role=devicerole, name="TestDevice1", site=site, status=device_status, ) interface = Interface.objects.create(device=device, name="eth0") ipaddress_1 = IPAddress( address=netaddr.IPNetwork("192.0.2.1/24"), role=IPAddressRoleChoices.ROLE_VIP, assigned_object_id=interface.id, ) self.assertRaises(ValidationError, ipaddress_1.clean) # Test IPAddress.clean() raises no exception if assigned_object_id and assigned_object_type # are both provided ipaddress_2 = IPAddress( address=netaddr.IPNetwork("192.0.2.1/24"), role=IPAddressRoleChoices.ROLE_VIP, assigned_object_id=interface.id, assigned_object_type=ContentType.objects.get_for_model(Interface), ) self.assertIsNone(ipaddress_2.clean())
def test_get_utilization(self): # Container Prefix prefix = Prefix.objects.create(prefix=netaddr.IPNetwork("10.0.0.0/24"), status=Prefix.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(), (128, 256)) # IPv4 Non-container Prefix /24 prefix.status = self.statuses.get(slug="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) ]) # Create IPAddress objects for network and broadcast addresses IPAddress.objects.bulk_create( (IPAddress(address=netaddr.IPNetwork("10.0.0.0/32")), IPAddress(address=netaddr.IPNetwork("10.0.0.255/32")))) self.assertEqual(prefix.get_utilization(), (32, 254)) # Change prefix to a pool, network and broadcast address will count toward numerator and denominator in utilization prefix.is_pool = True prefix.save() self.assertEqual(prefix.get_utilization(), (34, 256)) # IPv4 Non-container Prefix /31, network and broadcast addresses count toward utilization prefix = Prefix.objects.create(prefix="10.0.1.0/31") IPAddress.objects.bulk_create( (IPAddress(address=netaddr.IPNetwork("10.0.1.0/32")), IPAddress(address=netaddr.IPNetwork("10.0.1.1/32")))) self.assertEqual(prefix.get_utilization(), (2, 2)) # IPv6 Non-container Prefix, network and broadcast addresses count toward utilization prefix = Prefix.objects.create(prefix="aaaa::/124") IPAddress.objects.bulk_create( (IPAddress(address=netaddr.IPNetwork("aaaa::0/128")), IPAddress(address=netaddr.IPNetwork("aaaa::f/128")))) self.assertEqual(prefix.get_utilization(), (2, 16))
def test_get_utilization(self): # Container Prefix prefix = Prefix.objects.create(prefix=netaddr.IPNetwork("10.0.0.0/24"), status=Prefix.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(), (128, 256)) # Non-container Prefix prefix.status = self.statuses.get(slug="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(), (32, 254))
def test_duplicate_global_unique(self): IPAddress.objects.create(address=netaddr.IPNetwork("192.0.2.1/24")) duplicate_ip = IPAddress(address=netaddr.IPNetwork("192.0.2.1/24")) self.assertRaises(ValidationError, duplicate_ip.clean)
def test_duplicate_global(self): IPAddress.objects.create(address=netaddr.IPNetwork("192.0.2.1/24")) duplicate_ip = IPAddress(address=netaddr.IPNetwork("192.0.2.1/24")) self.assertIsNone(duplicate_ip.clean())