def test_mount_single_device(self): device1 = Device( name="TestSwitch1", device_type=DeviceType.objects.get(manufacturer__slug="acme", slug="ff2048"), device_role=DeviceRole.objects.get(slug="switch"), site=self.site1, rack=self.rack, position=10, face=DeviceFaceChoices.FACE_REAR, ) device1.save() # Validate rack height self.assertEqual(list(self.rack.units), list(reversed(range(1, 43)))) # Validate inventory (front face) rack1_inventory_front = self.rack.get_rack_units( face=DeviceFaceChoices.FACE_FRONT) self.assertEqual(rack1_inventory_front[-10]["device"], device1) del rack1_inventory_front[-10] for u in rack1_inventory_front: self.assertIsNone(u["device"]) # Validate inventory (rear face) rack1_inventory_rear = self.rack.get_rack_units( face=DeviceFaceChoices.FACE_REAR) self.assertEqual(rack1_inventory_rear[-10]["device"], device1) del rack1_inventory_rear[-10] for u in rack1_inventory_rear: self.assertIsNone(u["device"])
def test_rack_device_outside_height(self): rack1 = Rack( name="TestRack2", facility_id="A102", site=self.site1, status=self.status, u_height=42, ) rack1.save() device1 = Device( name="TestSwitch1", device_type=DeviceType.objects.get(manufacturer__slug="acme", slug="ff2048"), device_role=DeviceRole.objects.get(slug="switch"), site=self.site1, rack=rack1, position=43, face=DeviceFaceChoices.FACE_FRONT, ) device1.save() with self.assertRaises(ValidationError): rack1.clean()
def test_device_creation(self): """ 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, name="Test Device 1", ) d.save() ConsolePort.objects.get(device=d, name="Console Port 1") ConsoleServerPort.objects.get(device=d, name="Console Server Port 1") pp = PowerPort.objects.get(device=d, name="Power Port 1", maximum_draw=1000, allocated_draw=500) PowerOutlet.objects.get( device=d, name="Power Outlet 1", power_port=pp, feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A, ) Interface.objects.get( device=d, name="Interface 1", type=InterfaceTypeChoices.TYPE_1GE_FIXED, mgmt_only=True, ) rp = RearPort.objects.get(device=d, name="Rear Port 1", type=PortTypeChoices.TYPE_8P8C, positions=8) FrontPort.objects.get( device=d, name="Front Port 1", type=PortTypeChoices.TYPE_8P8C, rear_port=rp, rear_port_position=2, ) DeviceBay.objects.get(device=d, name="Device Bay 1")
def test_multiple_unnamed_devices(self): device1 = Device( site=self.site, device_type=self.device_type, device_role=self.device_role, status=self.device_status, name="", ) device1.save() device2 = Device( site=device1.site, device_type=device1.device_type, device_role=device1.device_role, status=self.device_status, name="", ) device2.full_clean() device2.save() self.assertEqual(Device.objects.filter(name="").count(), 2)
def test_device_duplicate_names(self): device1 = Device( site=self.site, device_type=self.device_type, device_role=self.device_role, status=self.device_status, name="Test Device 1", ) device1.save() device2 = Device( site=device1.site, device_type=device1.device_type, device_role=device1.device_role, status=self.device_status, name=device1.name, ) # Two devices assigned to the same Site and no Tenant should fail validation with self.assertRaises(ValidationError): device2.full_clean() tenant = Tenant.objects.create(name="Test Tenant 1", slug="test-tenant-1") device1.tenant = tenant device1.save() device2.tenant = tenant # Two devices assigned to the same Site and the same Tenant should fail validation with self.assertRaises(ValidationError): device2.full_clean() device2.tenant = None # Two devices assigned to the same Site and different Tenants should pass validation device2.full_clean() device2.save()