|
|
@@ -370,9 +370,13 @@ class CableTestCase(TestCase):
|
|
|
self.patch_pannel = Device.objects.create(
|
|
|
device_type=devicetype, device_role=devicerole, name='TestPatchPannel', site=site
|
|
|
)
|
|
|
- self.rear_port = RearPort.objects.create(device=self.patch_pannel, name='R1', type=1000)
|
|
|
- self.front_port = FrontPort.objects.create(
|
|
|
- device=self.patch_pannel, name='F1', type=1000, rear_port=self.rear_port
|
|
|
+ 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
|
|
|
+ )
|
|
|
+ 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
|
|
|
)
|
|
|
|
|
|
def test_cable_creation(self):
|
|
|
@@ -426,7 +430,7 @@ class CableTestCase(TestCase):
|
|
|
"""
|
|
|
A cable cannot connect a front port to its corresponding rear port
|
|
|
"""
|
|
|
- cable = Cable(termination_a=self.front_port, termination_b=self.rear_port)
|
|
|
+ cable = Cable(termination_a=self.front_port1, termination_b=self.rear_port1)
|
|
|
with self.assertRaises(ValidationError):
|
|
|
cable.clean()
|
|
|
|
|
|
@@ -439,6 +443,23 @@ class CableTestCase(TestCase):
|
|
|
with self.assertRaises(ValidationError):
|
|
|
cable.clean()
|
|
|
|
|
|
+ def test_multipos_rearport_connections(self):
|
|
|
+ """
|
|
|
+ A RearPort with more than one position can only be connected to another RearPort with the same number of
|
|
|
+ positions.
|
|
|
+ """
|
|
|
+ with self.assertRaises(
|
|
|
+ ValidationError,
|
|
|
+ msg='Connecting a single-position RearPort to a multi-position RearPort should fail'
|
|
|
+ ):
|
|
|
+ Cable(termination_a=self.rear_port1, termination_b=self.rear_port2).full_clean()
|
|
|
+
|
|
|
+ with self.assertRaises(
|
|
|
+ ValidationError,
|
|
|
+ msg='Connecting a multi-position RearPort to an Interface should fail'
|
|
|
+ ):
|
|
|
+ Cable(termination_a=self.rear_port2, termination_b=self.interface1).full_clean()
|
|
|
+
|
|
|
def test_cable_cannot_terminate_to_a_virtual_inteface(self):
|
|
|
"""
|
|
|
A cable cannot terminate to a virtual interface
|
|
|
@@ -502,6 +523,7 @@ class CablePathTestCase(TestCase):
|
|
|
Device(device_type=devicetype, device_role=devicerole, name='Panel 3', site=site),
|
|
|
Device(device_type=devicetype, device_role=devicerole, name='Panel 4', site=site),
|
|
|
Device(device_type=devicetype, device_role=devicerole, name='Panel 5', site=site),
|
|
|
+ Device(device_type=devicetype, device_role=devicerole, name='Panel 6', site=site),
|
|
|
)
|
|
|
Device.objects.bulk_create(patch_panels)
|
|
|
|
|
|
@@ -557,27 +579,26 @@ class CablePathTestCase(TestCase):
|
|
|
self.assertIsNone(endpoint_a.connection_status)
|
|
|
self.assertIsNone(endpoint_b.connection_status)
|
|
|
|
|
|
- def test_connection_via_single_rear_port(self):
|
|
|
+ def test_connection_rear_port_to_interface(self):
|
|
|
"""
|
|
|
- Test a connection which passes through a single front/rear port pair.
|
|
|
+ Test a connection which passes through a single front/rear port pair, where the rear port has a single position.
|
|
|
|
|
|
1 2
|
|
|
- [Device 1] ----- [Panel 1] ----- [Device 2]
|
|
|
+ [Device 1] ----- [Panel 5] ----- [Device 2]
|
|
|
Iface1 FP1 RP1 Iface1
|
|
|
-
|
|
|
- TODO: Panel 1's rear port has multiple front ports. Should this even work?
|
|
|
"""
|
|
|
- # Create cables (FP first, RP second)
|
|
|
+ # Create cables
|
|
|
cable1 = Cable(
|
|
|
termination_a=Interface.objects.get(device__name='Device 1', name='Interface 1'),
|
|
|
- termination_b=FrontPort.objects.get(device__name='Panel 1', name='Front Port 1')
|
|
|
+ termination_b=FrontPort.objects.get(device__name='Panel 5', name='Front Port 1')
|
|
|
)
|
|
|
cable1.full_clean()
|
|
|
cable1.save()
|
|
|
cable2 = Cable(
|
|
|
- termination_b=RearPort.objects.get(device__name='Panel 1', name='Rear Port 1'),
|
|
|
- termination_a=Interface.objects.get(device__name='Device 2', name='Interface 1')
|
|
|
+ termination_a=RearPort.objects.get(device__name='Panel 5', name='Rear Port 1'),
|
|
|
+ termination_b=Interface.objects.get(device__name='Device 2', name='Interface 1')
|
|
|
)
|
|
|
+ self.assertEqual(cable2.termination_a.positions, 1) # Sanity check
|
|
|
cable2.full_clean()
|
|
|
cable2.save()
|
|
|
|
|
|
@@ -682,7 +703,7 @@ class CablePathTestCase(TestCase):
|
|
|
|
|
|
def test_connection_via_nested_one_on_one_port(self):
|
|
|
"""
|
|
|
- Test a connection which passes through a single front/rear port pair between two multi-port MUXes.
|
|
|
+ Test a connection which passes through a single front/rear port pair between two multi-position rear ports.
|
|
|
|
|
|
Test two connections via patched rear ports:
|
|
|
Device 1 <---> Device 2
|
|
|
@@ -1147,31 +1168,31 @@ class CablePathTestCase(TestCase):
|
|
|
def test_connection_via_patched_circuit(self):
|
|
|
"""
|
|
|
1 2 3 4
|
|
|
- [Device 1] ----- [Panel 1] ----- [Circuit] ----- [Panel 2] ----- [Device 2]
|
|
|
+ [Device 1] ----- [Panel 5] ----- [Circuit] ----- [Panel 6] ----- [Device 2]
|
|
|
Iface1 FP1 RP1 A Z RP1 FP1 Iface1
|
|
|
|
|
|
"""
|
|
|
# Create cables
|
|
|
cable1 = Cable(
|
|
|
termination_a=Interface.objects.get(device__name='Device 1', name='Interface 1'),
|
|
|
- termination_b=FrontPort.objects.get(device__name='Panel 1', name='Front Port 1')
|
|
|
+ termination_b=FrontPort.objects.get(device__name='Panel 5', name='Front Port 1')
|
|
|
)
|
|
|
cable1.full_clean()
|
|
|
cable1.save()
|
|
|
cable2 = Cable(
|
|
|
- termination_a=RearPort.objects.get(device__name='Panel 1', name='Rear Port 1'),
|
|
|
+ termination_a=RearPort.objects.get(device__name='Panel 5', name='Rear Port 1'),
|
|
|
termination_b=CircuitTermination.objects.get(term_side='A')
|
|
|
)
|
|
|
cable2.full_clean()
|
|
|
cable2.save()
|
|
|
cable3 = Cable(
|
|
|
termination_a=CircuitTermination.objects.get(term_side='Z'),
|
|
|
- termination_b=RearPort.objects.get(device__name='Panel 2', name='Rear Port 1')
|
|
|
+ termination_b=RearPort.objects.get(device__name='Panel 6', name='Rear Port 1')
|
|
|
)
|
|
|
cable3.full_clean()
|
|
|
cable3.save()
|
|
|
cable4 = Cable(
|
|
|
- termination_a=FrontPort.objects.get(device__name='Panel 2', name='Front Port 1'),
|
|
|
+ termination_a=FrontPort.objects.get(device__name='Panel 6', name='Front Port 1'),
|
|
|
termination_b=Interface.objects.get(device__name='Device 2', name='Interface 1')
|
|
|
)
|
|
|
cable4.full_clean()
|