From d4a231585ac9a25d9739552d8c9e433dbf9398af Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Thu, 17 Nov 2022 10:24:03 -0500 Subject: [PATCH] Clean up tests --- netbox/dcim/tests/test_api.py | 30 +-- netbox/dcim/tests/test_models.py | 204 ++++++++++++--------- netbox/dcim/tests/test_natural_ordering.py | 29 +-- netbox/extras/tests/test_api.py | 43 +++-- netbox/extras/tests/test_customfields.py | 3 +- netbox/extras/tests/test_models.py | 172 ++++++++++------- netbox/extras/tests/test_webhooks.py | 1 + netbox/ipam/tests/test_ordering.py | 146 +++++++-------- netbox/users/tests/test_models.py | 13 +- 9 files changed, 353 insertions(+), 288 deletions(-) diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index bd3cb3f01..672551f42 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -1954,37 +1954,37 @@ class CableTest(APIViewTestCases.APIViewTestCase): class ConnectedDeviceTest(APITestCase): - def setUp(self): - - super().setUp() - + @classmethod + def setUpTestData(cls): site = Site.objects.create(name='Site 1', slug='site-1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1', color='ff0000') - self.device1 = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site + devices = ( + Device(device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site), + Device(device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site), ) - self.device2 = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site + Device.objects.bulk_create(devices) + interfaces = ( + Interface(device=devices[0], name='eth0'), + Interface(device=devices[1], name='eth0'), + Interface(device=devices[0], name='eth1'), # Not connected ) - self.interface1 = Interface.objects.create(device=self.device1, name='eth0') - self.interface2 = Interface.objects.create(device=self.device2, name='eth0') - self.interface3 = Interface.objects.create(device=self.device1, name='eth1') # Not connected + Interface.objects.bulk_create(interfaces) - cable = Cable(a_terminations=[self.interface1], b_terminations=[self.interface2]) + cable = Cable(a_terminations=[interfaces[0]], b_terminations=[interfaces[1]]) cable.save() @override_settings(EXEMPT_VIEW_PERMISSIONS=['*']) def test_get_connected_device(self): url = reverse('dcim-api:connected-device-list') - url_params = f'?peer_device={self.device1.name}&peer_interface={self.interface1.name}' + url_params = f'?peer_device=TestDevice1&peer_interface=eth0' response = self.client.get(url + url_params, **self.header) self.assertHttpStatus(response, status.HTTP_200_OK) - self.assertEqual(response.data['name'], self.device2.name) + self.assertEqual(response.data['name'], 'TestDevice2') - url_params = f'?peer_device={self.device1.name}&peer_interface={self.interface3.name}' + url_params = f'?peer_device=TestDevice1&peer_interface=eth1' response = self.client.get(url + url_params, **self.header) self.assertHttpStatus(response, status.HTTP_404_NOT_FOUND) diff --git a/netbox/dcim/tests/test_models.py b/netbox/dcim/tests/test_models.py index a64c6d56b..e9a577648 100644 --- a/netbox/dcim/tests/test_models.py +++ b/netbox/dcim/tests/test_models.py @@ -73,7 +73,8 @@ class LocationTestCase(TestCase): class RackTestCase(TestCase): - def setUp(self): + @classmethod + def setUpTestData(cls): sites = ( Site(name='Site 1', slug='site-1'), @@ -240,30 +241,31 @@ class RackTestCase(TestCase): class DeviceTestCase(TestCase): - def setUp(self): + @classmethod + def setUpTestData(cls): - self.site = Site.objects.create(name='Test Site 1', slug='test-site-1') + site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') - self.device_type = DeviceType.objects.create( + device_type = DeviceType.objects.create( manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' ) - self.device_role = DeviceRole.objects.create( + device_role = DeviceRole.objects.create( name='Test Device Role 1', slug='test-device-role-1', color='ff0000' ) # Create DeviceType components ConsolePortTemplate( - device_type=self.device_type, + device_type=device_type, name='Console Port 1' ).save() ConsoleServerPortTemplate( - device_type=self.device_type, + device_type=device_type, name='Console Server Port 1' ).save() ppt = PowerPortTemplate( - device_type=self.device_type, + device_type=device_type, name='Power Port 1', maximum_draw=1000, allocated_draw=500 @@ -271,21 +273,21 @@ class DeviceTestCase(TestCase): ppt.save() PowerOutletTemplate( - device_type=self.device_type, + device_type=device_type, name='Power Outlet 1', power_port=ppt, feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A ).save() InterfaceTemplate( - device_type=self.device_type, + device_type=device_type, name='Interface 1', type=InterfaceTypeChoices.TYPE_1GE_FIXED, mgmt_only=True ).save() rpt = RearPortTemplate( - device_type=self.device_type, + device_type=device_type, name='Rear Port 1', type=PortTypeChoices.TYPE_8P8C, positions=8 @@ -293,7 +295,7 @@ class DeviceTestCase(TestCase): rpt.save() FrontPortTemplate( - device_type=self.device_type, + device_type=device_type, name='Front Port 1', type=PortTypeChoices.TYPE_8P8C, rear_port=rpt, @@ -301,12 +303,12 @@ class DeviceTestCase(TestCase): ).save() ModuleBayTemplate( - device_type=self.device_type, + device_type=device_type, name='Module Bay 1' ).save() DeviceBayTemplate( - device_type=self.device_type, + device_type=device_type, name='Device Bay 1' ).save() @@ -315,9 +317,9 @@ class DeviceTestCase(TestCase): Ensure that all Device components are copied automatically from the DeviceType. """ d = Device( - site=self.site, - device_type=self.device_type, - device_role=self.device_role, + site=Site.objects.first(), + device_type=DeviceType.objects.first(), + device_role=DeviceRole.objects.first(), name='Test Device 1' ) d.save() @@ -381,9 +383,9 @@ class DeviceTestCase(TestCase): def test_multiple_unnamed_devices(self): device1 = Device( - site=self.site, - device_type=self.device_type, - device_role=self.device_role, + site=Site.objects.first(), + device_type=DeviceType.objects.first(), + device_role=DeviceRole.objects.first(), name=None ) device1.save() @@ -402,9 +404,9 @@ class DeviceTestCase(TestCase): def test_device_name_case_sensitivity(self): device1 = Device( - site=self.site, - device_type=self.device_type, - device_role=self.device_role, + site=Site.objects.first(), + device_type=DeviceType.objects.first(), + device_role=DeviceRole.objects.first(), name='device 1' ) device1.save() @@ -423,9 +425,9 @@ class DeviceTestCase(TestCase): def test_device_duplicate_names(self): device1 = Device( - site=self.site, - device_type=self.device_type, - device_role=self.device_role, + site=Site.objects.first(), + device_type=DeviceType.objects.first(), + device_role=DeviceRole.objects.first(), name='Test Device 1' ) device1.save() @@ -459,7 +461,8 @@ class DeviceTestCase(TestCase): class CableTestCase(TestCase): - def setUp(self): + @classmethod + def setUpTestData(cls): site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -469,72 +472,76 @@ class CableTestCase(TestCase): devicerole = DeviceRole.objects.create( name='Test Device Role 1', slug='test-device-role-1', color='ff0000' ) - self.device1 = Device.objects.create( + device1 = Device.objects.create( device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site ) - self.device2 = Device.objects.create( + device2 = Device.objects.create( device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site ) - self.interface1 = Interface.objects.create(device=self.device1, name='eth0') - self.interface2 = Interface.objects.create(device=self.device2, name='eth0') - self.interface3 = Interface.objects.create(device=self.device2, name='eth1') - self.cable = Cable(a_terminations=[self.interface1], b_terminations=[self.interface2]) - self.cable.save() + interface1 = Interface.objects.create(device=device1, name='eth0') + interface2 = Interface.objects.create(device=device2, name='eth0') + interface3 = Interface.objects.create(device=device2, name='eth1') + Cable(a_terminations=[interface1], b_terminations=[interface2]).save() - self.power_port1 = PowerPort.objects.create(device=self.device2, name='psu1') - self.patch_pannel = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='TestPatchPannel', site=site + power_port1 = PowerPort.objects.create(device=device2, name='psu1') + patch_pannel = Device.objects.create( + device_type=devicetype, device_role=devicerole, name='TestPatchPanel', site=site ) - self.rear_port1 = RearPort.objects.create(device=self.patch_pannel, name='RP1', type='8p8c') - self.front_port1 = FrontPort.objects.create( - device=self.patch_pannel, name='FP1', type='8p8c', rear_port=self.rear_port1, rear_port_position=1 + rear_port1 = RearPort.objects.create(device=patch_pannel, name='RP1', type='8p8c') + front_port1 = FrontPort.objects.create( + device=patch_pannel, name='FP1', type='8p8c', rear_port=rear_port1, rear_port_position=1 ) - self.rear_port2 = RearPort.objects.create(device=self.patch_pannel, name='RP2', type='8p8c', positions=2) - self.front_port2 = FrontPort.objects.create( - device=self.patch_pannel, name='FP2', type='8p8c', rear_port=self.rear_port2, rear_port_position=1 + rear_port2 = RearPort.objects.create(device=patch_pannel, name='RP2', type='8p8c', positions=2) + front_port2 = FrontPort.objects.create( + device=patch_pannel, name='FP2', type='8p8c', rear_port=rear_port2, rear_port_position=1 ) - self.rear_port3 = RearPort.objects.create(device=self.patch_pannel, name='RP3', type='8p8c', positions=3) - self.front_port3 = FrontPort.objects.create( - device=self.patch_pannel, name='FP3', type='8p8c', rear_port=self.rear_port3, rear_port_position=1 + rear_port3 = RearPort.objects.create(device=patch_pannel, name='RP3', type='8p8c', positions=3) + front_port3 = FrontPort.objects.create( + device=patch_pannel, name='FP3', type='8p8c', rear_port=rear_port3, rear_port_position=1 ) - self.rear_port4 = RearPort.objects.create(device=self.patch_pannel, name='RP4', type='8p8c', positions=3) - self.front_port4 = FrontPort.objects.create( - device=self.patch_pannel, name='FP4', type='8p8c', rear_port=self.rear_port4, rear_port_position=1 + rear_port4 = RearPort.objects.create(device=patch_pannel, name='RP4', type='8p8c', positions=3) + front_port4 = FrontPort.objects.create( + device=patch_pannel, name='FP4', type='8p8c', rear_port=rear_port4, rear_port_position=1 ) - self.provider = Provider.objects.create(name='Provider 1', slug='provider-1') - provider_network = ProviderNetwork.objects.create(name='Provider Network 1', provider=self.provider) - self.circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') - self.circuit1 = Circuit.objects.create(provider=self.provider, type=self.circuittype, cid='1') - self.circuit2 = Circuit.objects.create(provider=self.provider, type=self.circuittype, cid='2') - self.circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit1, site=site, term_side='A') - self.circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit1, site=site, term_side='Z') - self.circuittermination3 = CircuitTermination.objects.create(circuit=self.circuit2, provider_network=provider_network, term_side='A') + provider = Provider.objects.create(name='Provider 1', slug='provider-1') + provider_network = ProviderNetwork.objects.create(name='Provider Network 1', provider=provider) + circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') + circuit1 = Circuit.objects.create(provider=provider, type=circuittype, cid='1') + circuit2 = Circuit.objects.create(provider=provider, type=circuittype, cid='2') + circuittermination1 = CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='A') + circuittermination2 = CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='Z') + circuittermination3 = CircuitTermination.objects.create(circuit=circuit2, provider_network=provider_network, term_side='A') def test_cable_creation(self): """ When a new Cable is created, it must be cached on either termination point. """ - self.interface1.refresh_from_db() - self.interface2.refresh_from_db() - self.assertEqual(self.interface1.cable, self.cable) - self.assertEqual(self.interface2.cable, self.cable) - self.assertEqual(self.interface1.cable_end, 'A') - self.assertEqual(self.interface2.cable_end, 'B') - self.assertEqual(self.interface1.link_peers, [self.interface2]) - self.assertEqual(self.interface2.link_peers, [self.interface1]) + interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0') + interface2 = Interface.objects.get(device__name='TestDevice2', name='eth0') + cable = Cable.objects.first() + self.assertEqual(interface1.cable, cable) + self.assertEqual(interface2.cable, cable) + self.assertEqual(interface1.cable_end, 'A') + self.assertEqual(interface2.cable_end, 'B') + self.assertEqual(interface1.link_peers, [interface2]) + self.assertEqual(interface2.link_peers, [interface1]) def test_cable_deletion(self): """ When a Cable is deleted, the `cable` field on its termination points must be nullified. The str() method should still return the PK of the string even after being nullified. """ - self.cable.delete() - self.assertIsNone(self.cable.pk) - self.assertNotEqual(str(self.cable), '#None') - interface1 = Interface.objects.get(pk=self.interface1.pk) + interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0') + interface2 = Interface.objects.get(device__name='TestDevice2', name='eth0') + cable = Cable.objects.first() + + cable.delete() + self.assertIsNone(cable.pk) + self.assertNotEqual(str(cable), '#None') + interface1 = Interface.objects.get(pk=interface1.pk) self.assertIsNone(interface1.cable) self.assertListEqual(interface1.link_peers, []) - interface2 = Interface.objects.get(pk=self.interface2.pk) + interface2 = Interface.objects.get(pk=interface2.pk) self.assertIsNone(interface2.cable) self.assertListEqual(interface2.link_peers, []) @@ -542,7 +549,10 @@ class CableTestCase(TestCase): """ The clean method should ensure that all terminations at either end of a Cable belong to the same parent object. """ - cable = Cable(a_terminations=[self.interface1], b_terminations=[self.power_port1]) + interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0') + powerport1 = PowerPort.objects.get(device__name='TestDevice2', name='psu1') + + cable = Cable(a_terminations=[interface1], b_terminations=[powerport1]) with self.assertRaises(ValidationError): cable.clean() @@ -550,7 +560,11 @@ class CableTestCase(TestCase): """ The clean method should ensure that all terminations at either end of a Cable are of the same type. """ - cable = Cable(a_terminations=[self.front_port1, self.rear_port1], b_terminations=[self.interface1]) + interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0') + frontport1 = FrontPort.objects.get(device__name='TestPatchPanel', name='FP1') + rearport1 = RearPort.objects.get(device__name='TestPatchPanel', name='RP1') + + cable = Cable(a_terminations=[frontport1, rearport1], b_terminations=[interface1]) with self.assertRaises(ValidationError): cable.clean() @@ -558,8 +572,11 @@ class CableTestCase(TestCase): """ The clean method should have a check to ensure only compatible port types can be connected by a cable """ + interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0') + powerport1 = PowerPort.objects.get(device__name='TestDevice2', name='psu1') + # An interface cannot be connected to a power port, for example - cable = Cable(a_terminations=[self.interface1], b_terminations=[self.power_port1]) + cable = Cable(a_terminations=[interface1], b_terminations=[powerport1]) with self.assertRaises(ValidationError): cable.clean() @@ -567,7 +584,10 @@ class CableTestCase(TestCase): """ Neither side of a cable can be terminated to a CircuitTermination which is attached to a ProviderNetwork """ - cable = Cable(a_terminations=[self.interface3], b_terminations=[self.circuittermination3]) + interface3 = Interface.objects.get(device__name='TestDevice2', name='eth1') + circuittermination3 = CircuitTermination.objects.get(circuit__cid='2', term_side='A') + + cable = Cable(a_terminations=[interface3], b_terminations=[circuittermination3]) with self.assertRaises(ValidationError): cable.clean() @@ -575,8 +595,11 @@ class CableTestCase(TestCase): """ A cable cannot terminate to a virtual interface """ - virtual_interface = Interface(device=self.device1, name="V1", type=InterfaceTypeChoices.TYPE_VIRTUAL) - cable = Cable(a_terminations=[self.interface2], b_terminations=[virtual_interface]) + device1 = Device.objects.get(name='TestDevice1') + interface2 = Interface.objects.get(device__name='TestDevice2', name='eth0') + + virtual_interface = Interface(device=device1, name="V1", type=InterfaceTypeChoices.TYPE_VIRTUAL) + cable = Cable(a_terminations=[interface2], b_terminations=[virtual_interface]) with self.assertRaises(ValidationError): cable.clean() @@ -584,15 +607,19 @@ class CableTestCase(TestCase): """ A cable cannot terminate to a wireless interface """ - wireless_interface = Interface(device=self.device1, name="W1", type=InterfaceTypeChoices.TYPE_80211A) - cable = Cable(a_terminations=[self.interface2], b_terminations=[wireless_interface]) + device1 = Device.objects.get(name='TestDevice1') + interface2 = Interface.objects.get(device__name='TestDevice2', name='eth0') + + wireless_interface = Interface(device=device1, name="W1", type=InterfaceTypeChoices.TYPE_80211A) + cable = Cable(a_terminations=[interface2], b_terminations=[wireless_interface]) with self.assertRaises(ValidationError): cable.clean() class VirtualDeviceContextTestCase(TestCase): - def setUp(self): + @classmethod + def setUpTestData(cls): site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -602,36 +629,41 @@ class VirtualDeviceContextTestCase(TestCase): devicerole = DeviceRole.objects.create( name='Test Device Role 1', slug='test-device-role-1', color='ff0000' ) - self.device = Device.objects.create( + Device.objects.create( device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site ) def test_vdc_and_interface_creation(self): + device = Device.objects.first() - vdc = VirtualDeviceContext(device=self.device, name="VDC 1", identifier=1, status='active') + vdc = VirtualDeviceContext(device=device, name="VDC 1", identifier=1, status='active') vdc.full_clean() vdc.save() - interface = Interface(device=self.device, name='Eth1/1', type='10gbase-t') + interface = Interface(device=device, name='Eth1/1', type='10gbase-t') interface.full_clean() interface.save() interface.vdcs.set([vdc]) def test_vdc_duplicate_name(self): - vdc1 = VirtualDeviceContext(device=self.device, name="VDC 1", identifier=1, status='active') + device = Device.objects.first() + + vdc1 = VirtualDeviceContext(device=device, name="VDC 1", identifier=1, status='active') vdc1.full_clean() vdc1.save() - vdc2 = VirtualDeviceContext(device=self.device, name="VDC 1", identifier=2, status='active') + vdc2 = VirtualDeviceContext(device=device, name="VDC 1", identifier=2, status='active') with self.assertRaises(ValidationError): vdc2.full_clean() def test_vdc_duplicate_identifier(self): - vdc1 = VirtualDeviceContext(device=self.device, name="VDC 1", identifier=1, status='active') + device = Device.objects.first() + + vdc1 = VirtualDeviceContext(device=device, name="VDC 1", identifier=1, status='active') vdc1.full_clean() vdc1.save() - vdc2 = VirtualDeviceContext(device=self.device, name="VDC 2", identifier=1, status='active') + vdc2 = VirtualDeviceContext(device=device, name="VDC 2", identifier=1, status='active') with self.assertRaises(ValidationError): vdc2.full_clean() diff --git a/netbox/dcim/tests/test_natural_ordering.py b/netbox/dcim/tests/test_natural_ordering.py index 5c42b3ab4..8edaf0a90 100644 --- a/netbox/dcim/tests/test_natural_ordering.py +++ b/netbox/dcim/tests/test_natural_ordering.py @@ -5,7 +5,8 @@ from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer, class NaturalOrderingTestCase(TestCase): - def setUp(self): + @classmethod + def setUpTestData(cls): site = Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') @@ -15,12 +16,12 @@ class NaturalOrderingTestCase(TestCase): devicerole = DeviceRole.objects.create( name='Test Device Role 1', slug='test-device-role-1', color='ff0000' ) - self.device = Device.objects.create( + Device.objects.create( device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site ) def test_interface_ordering_numeric(self): - + device = Device.objects.first() INTERFACES = [ '0', '0.0', @@ -57,16 +58,16 @@ class NaturalOrderingTestCase(TestCase): ] for name in INTERFACES: - iface = Interface(device=self.device, name=name) + iface = Interface(device=device, name=name) iface.save() self.assertListEqual( - list(Interface.objects.filter(device=self.device).values_list('name', flat=True)), + list(Interface.objects.filter(device=device).values_list('name', flat=True)), INTERFACES ) def test_interface_ordering_linux(self): - + device = Device.objects.first() INTERFACES = [ 'eth0', 'eth0.1', @@ -81,16 +82,16 @@ class NaturalOrderingTestCase(TestCase): ] for name in INTERFACES: - iface = Interface(device=self.device, name=name) + iface = Interface(device=device, name=name) iface.save() self.assertListEqual( - list(Interface.objects.filter(device=self.device).values_list('name', flat=True)), + list(Interface.objects.filter(device=device).values_list('name', flat=True)), INTERFACES ) def test_interface_ordering_junos(self): - + device = Device.objects.first() INTERFACES = [ 'xe-0/0/0', 'xe-0/0/1', @@ -134,16 +135,16 @@ class NaturalOrderingTestCase(TestCase): ] for name in INTERFACES: - iface = Interface(device=self.device, name=name) + iface = Interface(device=device, name=name) iface.save() self.assertListEqual( - list(Interface.objects.filter(device=self.device).values_list('name', flat=True)), + list(Interface.objects.filter(device=device).values_list('name', flat=True)), INTERFACES ) def test_interface_ordering_ios(self): - + device = Device.objects.first() INTERFACES = [ 'GigabitEthernet0/1', 'GigabitEthernet0/2', @@ -161,10 +162,10 @@ class NaturalOrderingTestCase(TestCase): ] for name in INTERFACES: - iface = Interface(device=self.device, name=name) + iface = Interface(device=device, name=name) iface.save() self.assertListEqual( - list(Interface.objects.filter(device=self.device).values_list('name', flat=True)), + list(Interface.objects.filter(device=device).values_list('name', flat=True)), INTERFACES ) diff --git a/netbox/extras/tests/test_api.py b/netbox/extras/tests/test_api.py index 2b4a4aa5f..b959587ce 100644 --- a/netbox/extras/tests/test_api.py +++ b/netbox/extras/tests/test_api.py @@ -611,73 +611,76 @@ class ScriptTest(APITestCase): class CreatedUpdatedFilterTest(APITestCase): - def setUp(self): - - super().setUp() - - self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') - self.location1 = Location.objects.create(site=self.site1, name='Test Location 1', slug='test-location-1') - self.rackrole1 = RackRole.objects.create(name='Test Rack Role 1', slug='test-rack-role-1', color='ff0000') - self.rack1 = Rack.objects.create( - site=self.site1, location=self.location1, role=self.rackrole1, name='Test Rack 1', u_height=42, - ) - self.rack2 = Rack.objects.create( - site=self.site1, location=self.location1, role=self.rackrole1, name='Test Rack 2', u_height=42, + @classmethod + def setUpTestData(cls): + site1 = Site.objects.create(name='Site 1', slug='site-1') + location1 = Location.objects.create(site=site1, name='Location 1', slug='location-1') + rackrole1 = RackRole.objects.create(name='Rack Role 1', slug='rack-role-1', color='ff0000') + racks = ( + Rack(site=site1, location=location1, role=rackrole1, name='Rack 1', u_height=42), + Rack(site=site1, location=location1, role=rackrole1, name='Rack 2', u_height=42) ) + Rack.objects.bulk_create(racks) - # change the created and last_updated of one - Rack.objects.filter(pk=self.rack2.pk).update( + # Change the created and last_updated of the second rack + Rack.objects.filter(pk=racks[1].pk).update( last_updated=make_aware(datetime.datetime(2001, 2, 3, 1, 2, 3, 4)), created=make_aware(datetime.datetime(2001, 2, 3)) ) def test_get_rack_created(self): + rack2 = Rack.objects.get(name='Rack 2') self.add_permissions('dcim.view_rack') url = reverse('dcim-api:rack-list') response = self.client.get('{}?created=2001-02-03'.format(url), **self.header) self.assertEqual(response.data['count'], 1) - self.assertEqual(response.data['results'][0]['id'], self.rack2.pk) + self.assertEqual(response.data['results'][0]['id'], rack2.pk) def test_get_rack_created_gte(self): + rack1 = Rack.objects.get(name='Rack 1') self.add_permissions('dcim.view_rack') url = reverse('dcim-api:rack-list') response = self.client.get('{}?created__gte=2001-02-04'.format(url), **self.header) self.assertEqual(response.data['count'], 1) - self.assertEqual(response.data['results'][0]['id'], self.rack1.pk) + self.assertEqual(response.data['results'][0]['id'], rack1.pk) def test_get_rack_created_lte(self): + rack2 = Rack.objects.get(name='Rack 2') self.add_permissions('dcim.view_rack') url = reverse('dcim-api:rack-list') response = self.client.get('{}?created__lte=2001-02-04'.format(url), **self.header) self.assertEqual(response.data['count'], 1) - self.assertEqual(response.data['results'][0]['id'], self.rack2.pk) + self.assertEqual(response.data['results'][0]['id'], rack2.pk) def test_get_rack_last_updated(self): + rack2 = Rack.objects.get(name='Rack 2') self.add_permissions('dcim.view_rack') url = reverse('dcim-api:rack-list') response = self.client.get('{}?last_updated=2001-02-03%2001:02:03.000004'.format(url), **self.header) self.assertEqual(response.data['count'], 1) - self.assertEqual(response.data['results'][0]['id'], self.rack2.pk) + self.assertEqual(response.data['results'][0]['id'], rack2.pk) def test_get_rack_last_updated_gte(self): + rack1 = Rack.objects.get(name='Rack 1') self.add_permissions('dcim.view_rack') url = reverse('dcim-api:rack-list') response = self.client.get('{}?last_updated__gte=2001-02-04%2001:02:03.000004'.format(url), **self.header) self.assertEqual(response.data['count'], 1) - self.assertEqual(response.data['results'][0]['id'], self.rack1.pk) + self.assertEqual(response.data['results'][0]['id'], rack1.pk) def test_get_rack_last_updated_lte(self): + rack2 = Rack.objects.get(name='Rack 2') self.add_permissions('dcim.view_rack') url = reverse('dcim-api:rack-list') response = self.client.get('{}?last_updated__lte=2001-02-04%2001:02:03.000004'.format(url), **self.header) self.assertEqual(response.data['count'], 1) - self.assertEqual(response.data['results'][0]['id'], self.rack2.pk) + self.assertEqual(response.data['results'][0]['id'], rack2.pk) class ContentTypeTest(APITestCase): diff --git a/netbox/extras/tests/test_customfields.py b/netbox/extras/tests/test_customfields.py index 8fa5f1e77..6ca354438 100644 --- a/netbox/extras/tests/test_customfields.py +++ b/netbox/extras/tests/test_customfields.py @@ -373,7 +373,8 @@ class CustomFieldTest(TestCase): class CustomFieldManagerTest(TestCase): - def setUp(self): + @classmethod + def setUpTestData(cls): content_type = ContentType.objects.get_for_model(Site) custom_field = CustomField(type=CustomFieldTypeChoices.TYPE_TEXT, name='text_field', default='foo') custom_field.save() diff --git a/netbox/extras/tests/test_models.py b/netbox/extras/tests/test_models.py index 4929690e7..0ac63c086 100644 --- a/netbox/extras/tests/test_models.py +++ b/netbox/extras/tests/test_models.py @@ -21,32 +21,32 @@ class ConfigContextTest(TestCase): It also ensures the various config context querysets are consistent. """ - - def setUp(self): + @classmethod + def setUpTestData(cls): manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') - self.devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') - self.devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') - self.region = Region.objects.create(name="Region") - self.sitegroup = SiteGroup.objects.create(name="Site Group") - self.site = Site.objects.create(name='Site 1', slug='site-1', region=self.region, group=self.sitegroup) - self.location = Location.objects.create(name='Location 1', slug='location-1', site=self.site) - self.platform = Platform.objects.create(name="Platform") - self.tenantgroup = TenantGroup.objects.create(name="Tenant Group") - self.tenant = Tenant.objects.create(name="Tenant", group=self.tenantgroup) - self.tag = Tag.objects.create(name="Tag", slug="tag") - self.tag2 = Tag.objects.create(name="Tag2", slug="tag2") + devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') + devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + region = Region.objects.create(name='Region') + sitegroup = SiteGroup.objects.create(name='Site Group') + site = Site.objects.create(name='Site 1', slug='site-1', region=region, group=sitegroup) + location = Location.objects.create(name='Location 1', slug='location-1', site=site) + platform = Platform.objects.create(name='Platform') + tenantgroup = TenantGroup.objects.create(name='Tenant Group') + tenant = Tenant.objects.create(name='Tenant', group=tenantgroup) + tag1 = Tag.objects.create(name='Tag', slug='tag') + tag2 = Tag.objects.create(name='Tag2', slug='tag2') - self.device = Device.objects.create( + Device.objects.create( name='Device 1', - device_type=self.devicetype, - device_role=self.devicerole, - site=self.site, - location=self.location + device_type=devicetype, + device_role=devicerole, + site=site, + location=location ) def test_higher_weight_wins(self): - + device = Device.objects.first() context1 = ConfigContext( name="context 1", weight=101, @@ -72,10 +72,10 @@ class ConfigContextTest(TestCase): "b": 456, "c": 777 } - self.assertEqual(self.device.get_config_context(), expected_data) + self.assertEqual(device.get_config_context(), expected_data) def test_name_ordering_after_weight(self): - + device = Device.objects.first() context1 = ConfigContext( name="context 1", weight=100, @@ -101,13 +101,14 @@ class ConfigContextTest(TestCase): "b": 456, "c": 789 } - self.assertEqual(self.device.get_config_context(), expected_data) + self.assertEqual(device.get_config_context(), expected_data) def test_annotation_same_as_get_for_object(self): """ - This test incorperates features from all of the above tests cases to ensure + This test incorporates features from all of the above tests cases to ensure the annotate_config_context_data() and get_for_object() queryset methods are the same. """ + device = Device.objects.first() context1 = ConfigContext( name="context 1", weight=101, @@ -142,10 +143,19 @@ class ConfigContextTest(TestCase): ) ConfigContext.objects.bulk_create([context1, context2, context3, context4]) - annotated_queryset = Device.objects.filter(name=self.device.name).annotate_config_context_data() - self.assertEqual(self.device.get_config_context(), annotated_queryset[0].get_config_context()) + annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data() + self.assertEqual(device.get_config_context(), annotated_queryset[0].get_config_context()) def test_annotation_same_as_get_for_object_device_relations(self): + region = Region.objects.first() + sitegroup = SiteGroup.objects.first() + site = Site.objects.first() + location = Location.objects.first() + platform = Platform.objects.first() + tenantgroup = TenantGroup.objects.first() + tenant = Tenant.objects.first() + tag = Tag.objects.first() + region_context = ConfigContext.objects.create( name="region", weight=100, @@ -153,7 +163,8 @@ class ConfigContextTest(TestCase): "region": 1 } ) - region_context.regions.add(self.region) + region_context.regions.add(region) + sitegroup_context = ConfigContext.objects.create( name="sitegroup", weight=100, @@ -161,7 +172,8 @@ class ConfigContextTest(TestCase): "sitegroup": 1 } ) - sitegroup_context.site_groups.add(self.sitegroup) + sitegroup_context.site_groups.add(sitegroup) + site_context = ConfigContext.objects.create( name="site", weight=100, @@ -169,7 +181,8 @@ class ConfigContextTest(TestCase): "site": 1 } ) - site_context.sites.add(self.site) + site_context.sites.add(site) + location_context = ConfigContext.objects.create( name="location", weight=100, @@ -177,7 +190,8 @@ class ConfigContextTest(TestCase): "location": 1 } ) - location_context.locations.add(self.location) + location_context.locations.add(location) + platform_context = ConfigContext.objects.create( name="platform", weight=100, @@ -185,7 +199,8 @@ class ConfigContextTest(TestCase): "platform": 1 } ) - platform_context.platforms.add(self.platform) + platform_context.platforms.add(platform) + tenant_group_context = ConfigContext.objects.create( name="tenant group", weight=100, @@ -193,7 +208,8 @@ class ConfigContextTest(TestCase): "tenant_group": 1 } ) - tenant_group_context.tenant_groups.add(self.tenantgroup) + tenant_group_context.tenant_groups.add(tenantgroup) + tenant_context = ConfigContext.objects.create( name="tenant", weight=100, @@ -201,7 +217,8 @@ class ConfigContextTest(TestCase): "tenant": 1 } ) - tenant_context.tenants.add(self.tenant) + tenant_context.tenants.add(tenant) + tag_context = ConfigContext.objects.create( name="tag", weight=100, @@ -209,23 +226,30 @@ class ConfigContextTest(TestCase): "tag": 1 } ) - tag_context.tags.add(self.tag) + tag_context.tags.add(tag) device = Device.objects.create( name="Device 2", - site=self.site, - location=self.location, - tenant=self.tenant, - platform=self.platform, - device_role=self.devicerole, - device_type=self.devicetype + site=site, + location=location, + tenant=tenant, + platform=platform, + device_role=DeviceRole.objects.first(), + device_type=DeviceType.objects.first() ) - device.tags.add(self.tag) + device.tags.add(tag) annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data() self.assertEqual(device.get_config_context(), annotated_queryset[0].get_config_context()) def test_annotation_same_as_get_for_object_virtualmachine_relations(self): + region = Region.objects.first() + sitegroup = SiteGroup.objects.first() + site = Site.objects.first() + platform = Platform.objects.first() + tenantgroup = TenantGroup.objects.first() + tenant = Tenant.objects.first() + tag = Tag.objects.first() cluster_type = ClusterType.objects.create(name="Cluster Type") cluster_group = ClusterGroup.objects.create(name="Cluster Group") cluster = Cluster.objects.create(name="Cluster", group=cluster_group, type=cluster_type) @@ -235,49 +259,49 @@ class ConfigContextTest(TestCase): weight=100, data={"region": 1} ) - region_context.regions.add(self.region) + region_context.regions.add(region) sitegroup_context = ConfigContext.objects.create( name="sitegroup", weight=100, data={"sitegroup": 1} ) - sitegroup_context.site_groups.add(self.sitegroup) + sitegroup_context.site_groups.add(sitegroup) site_context = ConfigContext.objects.create( name="site", weight=100, data={"site": 1} ) - site_context.sites.add(self.site) + site_context.sites.add(site) platform_context = ConfigContext.objects.create( name="platform", weight=100, data={"platform": 1} ) - platform_context.platforms.add(self.platform) + platform_context.platforms.add(platform) tenant_group_context = ConfigContext.objects.create( name="tenant group", weight=100, data={"tenant_group": 1} ) - tenant_group_context.tenant_groups.add(self.tenantgroup) + tenant_group_context.tenant_groups.add(tenantgroup) tenant_context = ConfigContext.objects.create( name="tenant", weight=100, data={"tenant": 1} ) - tenant_context.tenants.add(self.tenant) + tenant_context.tenants.add(tenant) tag_context = ConfigContext.objects.create( name="tag", weight=100, data={"tag": 1} ) - tag_context.tags.add(self.tag) + tag_context.tags.add(tag) cluster_type_context = ConfigContext.objects.create( name="cluster type", @@ -303,11 +327,11 @@ class ConfigContextTest(TestCase): virtual_machine = VirtualMachine.objects.create( name="VM 1", cluster=cluster, - tenant=self.tenant, - platform=self.platform, - role=self.devicerole + tenant=tenant, + platform=platform, + role=DeviceRole.objects.first() ) - virtual_machine.tags.add(self.tag) + virtual_machine.tags.add(tag) annotated_queryset = VirtualMachine.objects.filter(name=virtual_machine.name).annotate_config_context_data() self.assertEqual(virtual_machine.get_config_context(), annotated_queryset[0].get_config_context()) @@ -315,12 +339,17 @@ class ConfigContextTest(TestCase): def test_multiple_tags_return_distinct_objects(self): """ Tagged items use a generic relationship, which results in duplicate rows being returned when queried. - This is combatted by by appending distinct() to the config context querysets. This test creates a config + This is combated by appending distinct() to the config context querysets. This test creates a config context assigned to two tags and ensures objects related by those same two tags result in only a single config context record being returned. See https://github.com/netbox-community/netbox/issues/5314 """ + site = Site.objects.first() + platform = Platform.objects.first() + tenant = Tenant.objects.first() + tags = Tag.objects.all() + tag_context = ConfigContext.objects.create( name="tag", weight=100, @@ -328,19 +357,17 @@ class ConfigContextTest(TestCase): "tag": 1 } ) - tag_context.tags.add(self.tag) - tag_context.tags.add(self.tag2) + tag_context.tags.set(tags) device = Device.objects.create( name="Device 3", - site=self.site, - tenant=self.tenant, - platform=self.platform, - device_role=self.devicerole, - device_type=self.devicetype + site=site, + tenant=tenant, + platform=platform, + device_role=DeviceRole.objects.first(), + device_type=DeviceType.objects.first() ) - device.tags.add(self.tag) - device.tags.add(self.tag2) + device.tags.set(tags) annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data() self.assertEqual(ConfigContext.objects.get_for_object(device).count(), 1) @@ -357,6 +384,11 @@ class ConfigContextTest(TestCase): See https://github.com/netbox-community/netbox/issues/5387 """ + site = Site.objects.first() + platform = Platform.objects.first() + tenant = Tenant.objects.first() + tag1, tag2 = list(Tag.objects.all()) + tag_context_1 = ConfigContext.objects.create( name="tag-1", weight=100, @@ -364,7 +396,8 @@ class ConfigContextTest(TestCase): "tag": 1 } ) - tag_context_1.tags.add(self.tag) + tag_context_1.tags.add(tag1) + tag_context_2 = ConfigContext.objects.create( name="tag-2", weight=100, @@ -372,18 +405,17 @@ class ConfigContextTest(TestCase): "tag": 1 } ) - tag_context_2.tags.add(self.tag2) + tag_context_2.tags.add(tag2) device = Device.objects.create( name="Device 3", - site=self.site, - tenant=self.tenant, - platform=self.platform, - device_role=self.devicerole, - device_type=self.devicetype + site=site, + tenant=tenant, + platform=platform, + device_role=DeviceRole.objects.first(), + device_type=DeviceType.objects.first() ) - device.tags.add(self.tag) - device.tags.add(self.tag2) + device.tags.set([tag1, tag2]) annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data() self.assertEqual(ConfigContext.objects.get_for_object(device).count(), 2) diff --git a/netbox/extras/tests/test_webhooks.py b/netbox/extras/tests/test_webhooks.py index 111ec6353..19264dabb 100644 --- a/netbox/extras/tests/test_webhooks.py +++ b/netbox/extras/tests/test_webhooks.py @@ -23,6 +23,7 @@ class WebhookTest(APITestCase): def setUp(self): super().setUp() + # Ensure the queue has been cleared for each test self.queue = django_rq.get_queue('default') self.queue.empty() diff --git a/netbox/ipam/tests/test_ordering.py b/netbox/ipam/tests/test_ordering.py index 690501e53..8d69af847 100644 --- a/netbox/ipam/tests/test_ordering.py +++ b/netbox/ipam/tests/test_ordering.py @@ -9,12 +9,17 @@ import netaddr class OrderingTestBase(TestCase): vrfs = None - def setUp(self): + @classmethod + def setUpTestData(cls): """ Setup the VRFs for the class as a whole """ - self.vrfs = (VRF(name="VRF A"), VRF(name="VRF B"), VRF(name="VRF C")) - VRF.objects.bulk_create(self.vrfs) + vrfs = ( + VRF(name='VRF 1'), + VRF(name='VRF 2'), + VRF(name='VRF 3'), + ) + VRF.objects.bulk_create(vrfs) def _compare(self, queryset, objectset): """ @@ -37,10 +42,7 @@ class PrefixOrderingTestCase(OrderingTestBase): """ 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 + vrf1, vrf2, vrf3 = list(VRF.objects.all()) prefixes = ( Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/16')), Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/24')), @@ -50,37 +52,37 @@ class PrefixOrderingTestCase(OrderingTestBase): Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.4.0/24')), Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.5.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.0.0/8')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.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.2.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.3.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.4.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.0.0/16')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.1.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.2.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.3.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.4.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.0.0/16')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.1.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.2.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.3.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.4.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.0.0/8')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.0.0/16')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.0.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.1.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.2.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.3.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.4.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.0.0/16')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.1.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.2.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.3.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.4.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.0.0/16')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.1.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.2.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.3.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.4.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.0.0/12')), - Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.0.0/16')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.0.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.1.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.2.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.3.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.4.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.0.0/16')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.0.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.1.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.2.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.3.0/24')), - Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.4.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.0.0/12')), + Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.0.0/16')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.0.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.1.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.2.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.3.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.4.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.0.0/16')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.0.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.1.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.2.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.3.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.4.0/24')), ) Prefix.objects.bulk_create(prefixes) @@ -104,20 +106,17 @@ class PrefixOrderingTestCase(OrderingTestBase): VRF A:10.1.1.0/24 None: 192.168.0.0/16 """ - # Setup VRFs - vrfa, vrfb, vrfc = self.vrfs - - # Setup Prefixes + vrf1, vrf2, vrf3 = list(VRF.objects.all()) 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(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.0.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.1.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.1.0/25')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.0.0/24')), + Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.1.0/24')), ] Prefix.objects.bulk_create(prefixes) @@ -131,37 +130,34 @@ class IPAddressOrderingTestCase(OrderingTestBase): """ This function tests ordering with the inclusion of vrfs """ - # Setup VRFs - vrfa, vrfb, vrfc = self.vrfs - - # Setup Addresses + vrf1, vrf2, vrf3 = list(VRF.objects.all()) addresses = ( - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.0.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.1.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.2.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.3.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.4.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.0.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.1.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.2.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.3.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.4.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.0.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.1.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.2.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.3.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.4.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.0.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.1.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.2.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.3.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.4.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.0.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.1.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.2.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.3.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.4.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.0.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.1.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.2.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.3.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.4.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.0.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.1.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.2.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.3.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.4.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.0.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.1.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.2.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.3.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.4.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.0.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.1.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.2.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.3.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.4.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.0.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.1.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.2.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.3.1/24')), + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.4.1/24')), IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.0.1/24')), IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.1.1/24')), diff --git a/netbox/users/tests/test_models.py b/netbox/users/tests/test_models.py index 48d440278..7a2337f33 100644 --- a/netbox/users/tests/test_models.py +++ b/netbox/users/tests/test_models.py @@ -4,7 +4,8 @@ from django.test import TestCase class UserConfigTest(TestCase): - def setUp(self): + @classmethod + def setUpTestData(cls): user = User.objects.create_user(username='testuser') user.config.data = { @@ -27,10 +28,8 @@ class UserConfigTest(TestCase): } user.config.save() - self.userconfig = user.config - def test_get(self): - userconfig = self.userconfig + userconfig = User.objects.get(username='testuser').config # Retrieve root and nested values self.assertEqual(userconfig.get('a'), True) @@ -50,7 +49,7 @@ class UserConfigTest(TestCase): self.assertEqual(userconfig.get('b.foo.x.invalid', 'DEFAULT'), 'DEFAULT') def test_all(self): - userconfig = self.userconfig + userconfig = User.objects.get(username='testuser').config flattened_data = { 'a': True, 'b.foo': 101, @@ -64,7 +63,7 @@ class UserConfigTest(TestCase): self.assertEqual(userconfig.all(), flattened_data) def test_set(self): - userconfig = self.userconfig + userconfig = User.objects.get(username='testuser').config # Overwrite existing values userconfig.set('a', 'abc') @@ -93,7 +92,7 @@ class UserConfigTest(TestCase): userconfig.set('a.x', 1) def test_clear(self): - userconfig = self.userconfig + userconfig = User.objects.get(username='testuser').config # Clear existing values userconfig.clear('a')