Update path validation tests for single-position rear port scenarios

This commit is contained in:
Jeremy Stretch 2020-05-08 11:17:09 -04:00 committed by Sander Steffann
parent 1d33d7d205
commit 6fc7c6a7d0

View File

@ -370,9 +370,13 @@ class CableTestCase(TestCase):
self.patch_pannel = Device.objects.create( self.patch_pannel = Device.objects.create(
device_type=devicetype, device_role=devicerole, name='TestPatchPannel', site=site 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.rear_port1 = RearPort.objects.create(device=self.patch_pannel, name='RP1', type='8p8c')
self.front_port = FrontPort.objects.create( self.front_port1 = FrontPort.objects.create(
device=self.patch_pannel, name='F1', type=1000, rear_port=self.rear_port 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): def test_cable_creation(self):
@ -426,7 +430,7 @@ class CableTestCase(TestCase):
""" """
A cable cannot connect a front port to its corresponding rear port 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): with self.assertRaises(ValidationError):
cable.clean() cable.clean()
@ -439,6 +443,23 @@ class CableTestCase(TestCase):
with self.assertRaises(ValidationError): with self.assertRaises(ValidationError):
cable.clean() 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): def test_cable_cannot_terminate_to_a_virtual_inteface(self):
""" """
A cable cannot terminate to a virtual interface 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 3', site=site),
Device(device_type=devicetype, device_role=devicerole, name='Panel 4', 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 5', site=site),
Device(device_type=devicetype, device_role=devicerole, name='Panel 6', site=site),
) )
Device.objects.bulk_create(patch_panels) Device.objects.bulk_create(patch_panels)
@ -557,27 +579,26 @@ class CablePathTestCase(TestCase):
self.assertIsNone(endpoint_a.connection_status) self.assertIsNone(endpoint_a.connection_status)
self.assertIsNone(endpoint_b.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 1 2
[Device 1] ----- [Panel 1] ----- [Device 2] [Device 1] ----- [Panel 5] ----- [Device 2]
Iface1 FP1 RP1 Iface1 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( cable1 = Cable(
termination_a=Interface.objects.get(device__name='Device 1', name='Interface 1'), 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.full_clean()
cable1.save() cable1.save()
cable2 = Cable( cable2 = Cable(
termination_b=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_a=Interface.objects.get(device__name='Device 2', name='Interface 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.full_clean()
cable2.save() cable2.save()
@ -682,7 +703,7 @@ class CablePathTestCase(TestCase):
def test_connection_via_nested_one_on_one_port(self): 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: Test two connections via patched rear ports:
Device 1 <---> Device 2 Device 1 <---> Device 2
@ -1147,31 +1168,31 @@ class CablePathTestCase(TestCase):
def test_connection_via_patched_circuit(self): def test_connection_via_patched_circuit(self):
""" """
1 2 3 4 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 Iface1 FP1 RP1 A Z RP1 FP1 Iface1
""" """
# Create cables # Create cables
cable1 = Cable( cable1 = Cable(
termination_a=Interface.objects.get(device__name='Device 1', name='Interface 1'), 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.full_clean()
cable1.save() cable1.save()
cable2 = Cable( 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') termination_b=CircuitTermination.objects.get(term_side='A')
) )
cable2.full_clean() cable2.full_clean()
cable2.save() cable2.save()
cable3 = Cable( cable3 = Cable(
termination_a=CircuitTermination.objects.get(term_side='Z'), 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.full_clean()
cable3.save() cable3.save()
cable4 = Cable( 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') termination_b=Interface.objects.get(device__name='Device 2', name='Interface 1')
) )
cable4.full_clean() cable4.full_clean()