@@ -1031,3 +1031,92 @@ def test_vdc_duplicate_identifier(self):
10311031 vdc2 = VirtualDeviceContext (device = device , name = "VDC 2" , identifier = 1 , status = 'active' )
10321032 with self .assertRaises (ValidationError ):
10331033 vdc2 .full_clean ()
1034+
1035+
1036+ class VirtualChassisTestCase (TestCase ):
1037+
1038+ @classmethod
1039+ def setUpTestData (cls ):
1040+ site = Site .objects .create (name = 'Test Site 1' , slug = 'test-site-1' )
1041+ manufacturer = Manufacturer .objects .create (name = 'Test Manufacturer 1' , slug = 'test-manufacturer-1' )
1042+ devicetype = DeviceType .objects .create (
1043+ manufacturer = manufacturer , model = 'Test Device Type 1' , slug = 'test-device-type-1'
1044+ )
1045+ role = DeviceRole .objects .create (
1046+ name = 'Test Device Role 1' , slug = 'test-device-role-1' , color = 'ff0000'
1047+ )
1048+ Device .objects .create (
1049+ device_type = devicetype , role = role , name = 'TestDevice1' , site = site
1050+ )
1051+ Device .objects .create (
1052+ device_type = devicetype , role = role , name = 'TestDevice2' , site = site
1053+ )
1054+
1055+ def test_virtualchassis_deletion_clears_vc_position (self ):
1056+ """
1057+ Test that when a VirtualChassis is deleted, member devices have their
1058+ vc_position and vc_priority fields set to None.
1059+ """
1060+ devices = Device .objects .all ()
1061+ device1 = devices [0 ]
1062+ device2 = devices [1 ]
1063+
1064+ # Create a VirtualChassis with two member devices
1065+ vc = VirtualChassis .objects .create (name = 'Test VC' , master = device1 )
1066+
1067+ device1 .virtual_chassis = vc
1068+ device1 .vc_position = 1
1069+ device1 .vc_priority = 10
1070+ device1 .save ()
1071+
1072+ device2 .virtual_chassis = vc
1073+ device2 .vc_position = 2
1074+ device2 .vc_priority = 20
1075+ device2 .save ()
1076+
1077+ # Verify devices are members of the VC with positions set
1078+ device1 .refresh_from_db ()
1079+ device2 .refresh_from_db ()
1080+ self .assertEqual (device1 .virtual_chassis , vc )
1081+ self .assertEqual (device1 .vc_position , 1 )
1082+ self .assertEqual (device1 .vc_priority , 10 )
1083+ self .assertEqual (device2 .virtual_chassis , vc )
1084+ self .assertEqual (device2 .vc_position , 2 )
1085+ self .assertEqual (device2 .vc_priority , 20 )
1086+
1087+ # Delete the VirtualChassis
1088+ vc .delete ()
1089+
1090+ # Verify devices have vc_position and vc_priority set to None
1091+ device1 .refresh_from_db ()
1092+ device2 .refresh_from_db ()
1093+ self .assertIsNone (device1 .virtual_chassis )
1094+ self .assertIsNone (device1 .vc_position )
1095+ self .assertIsNone (device1 .vc_priority )
1096+ self .assertIsNone (device2 .virtual_chassis )
1097+ self .assertIsNone (device2 .vc_position )
1098+ self .assertIsNone (device2 .vc_priority )
1099+
1100+ def test_virtualchassis_duplicate_vc_position (self ):
1101+ """
1102+ Test that two devices cannot be assigned to the same vc_position
1103+ within the same VirtualChassis.
1104+ """
1105+ devices = Device .objects .all ()
1106+ device1 = devices [0 ]
1107+ device2 = devices [1 ]
1108+
1109+ # Create a VirtualChassis
1110+ vc = VirtualChassis .objects .create (name = 'Test VC' )
1111+
1112+ # Assign first device to vc_position 1
1113+ device1 .virtual_chassis = vc
1114+ device1 .vc_position = 1
1115+ device1 .full_clean ()
1116+ device1 .save ()
1117+
1118+ # Try to assign second device to the same vc_position
1119+ device2 .virtual_chassis = vc
1120+ device2 .vc_position = 1
1121+ with self .assertRaises (ValidationError ):
1122+ device2 .full_clean ()
0 commit comments