@@ -624,3 +624,138 @@ func TestClusterStore_ClusterNodeOperations(t *testing.T) {
624624 require .NoError (t , err )
625625 require .Nil (t , deletedOwnership )
626626}
627+
628+ func TestClusterStore_DeleteClusterNodeByID_NotLastNode (t * testing.T ) {
629+ db := tests .InitTestDB ()
630+ defer db .Close ()
631+ ctx := context .TODO ()
632+
633+ store := database .NewClusterInfoStoreWithDB (db )
634+
635+ cluster , err := store .Add (ctx , "config-delete-not-last" , "region-1" , types .ConnectModeKubeConfig )
636+ require .NoError (t , err )
637+
638+ node1 := & database.ClusterNode {
639+ ClusterID : cluster .ClusterID ,
640+ Name : "node-1" ,
641+ Status : "Ready" ,
642+ }
643+ _ , err = db .Core .NewInsert ().Model (node1 ).Exec (ctx )
644+ require .NoError (t , err )
645+
646+ node2 := & database.ClusterNode {
647+ ClusterID : cluster .ClusterID ,
648+ Name : "node-2" ,
649+ Status : "Ready" ,
650+ }
651+ _ , err = db .Core .NewInsert ().Model (node2 ).Exec (ctx )
652+ require .NoError (t , err )
653+
654+ ownership := database.ClusterNodeOwnership {
655+ ClusterNodeID : node1 .ID ,
656+ ClusterID : cluster .ClusterID ,
657+ Namespace : "ns-1" ,
658+ }
659+ err = store .AddNodeOwnership (ctx , ownership )
660+ require .NoError (t , err )
661+
662+ sr := & database.SpaceResource {
663+ Name : "resource-1" ,
664+ Resources : "{}" ,
665+ ClusterID : cluster .ClusterID ,
666+ }
667+ _ , err = db .Core .NewInsert ().Model (sr ).Exec (ctx )
668+ require .NoError (t , err )
669+
670+ err = store .DeleteClusterNodeByID (ctx , node1 .ID )
671+ require .NoError (t , err )
672+
673+ _ , err = store .GetClusterNodeByID (ctx , node1 .ID )
674+ require .Error (t , err )
675+
676+ fetchedOwnership , err := store .GetNodeOwnership (ctx , node1 .ID )
677+ require .NoError (t , err )
678+ require .Nil (t , fetchedOwnership )
679+
680+ nodes , err := store .FindNodeByClusterID (ctx , cluster .ClusterID )
681+ require .NoError (t , err )
682+ require .Len (t , nodes , 1 )
683+ require .Equal (t , node2 .ID , nodes [0 ].ID )
684+
685+ existingCluster , err := store .ByClusterID (ctx , cluster .ClusterID )
686+ require .NoError (t , err )
687+ require .Equal (t , cluster .ClusterID , existingCluster .ClusterID )
688+
689+ var remainingSR []database.SpaceResource
690+ err = db .Core .NewSelect ().Model (& remainingSR ).Where ("cluster_id = ?" , cluster .ClusterID ).Scan (ctx )
691+ require .NoError (t , err )
692+ require .Len (t , remainingSR , 1 )
693+ }
694+
695+ func TestClusterStore_DeleteClusterNodeByID_LastNode (t * testing.T ) {
696+ db := tests .InitTestDB ()
697+ defer db .Close ()
698+ ctx := context .TODO ()
699+
700+ store := database .NewClusterInfoStoreWithDB (db )
701+
702+ cluster , err := store .Add (ctx , "config-delete-last" , "region-1" , types .ConnectModeKubeConfig )
703+ require .NoError (t , err )
704+
705+ node := & database.ClusterNode {
706+ ClusterID : cluster .ClusterID ,
707+ Name : "node-only" ,
708+ Status : "Ready" ,
709+ }
710+ _ , err = db .Core .NewInsert ().Model (node ).Exec (ctx )
711+ require .NoError (t , err )
712+
713+ ownership := database.ClusterNodeOwnership {
714+ ClusterNodeID : node .ID ,
715+ ClusterID : cluster .ClusterID ,
716+ Namespace : "ns-1" ,
717+ }
718+ err = store .AddNodeOwnership (ctx , ownership )
719+ require .NoError (t , err )
720+
721+ sr := & database.SpaceResource {
722+ Name : "resource-1" ,
723+ Resources : "{}" ,
724+ ClusterID : cluster .ClusterID ,
725+ }
726+ _ , err = db .Core .NewInsert ().Model (sr ).Exec (ctx )
727+ require .NoError (t , err )
728+
729+ err = store .DeleteClusterNodeByID (ctx , node .ID )
730+ require .NoError (t , err )
731+
732+ _ , err = store .GetClusterNodeByID (ctx , node .ID )
733+ require .Error (t , err )
734+
735+ fetchedOwnership , err := store .GetNodeOwnership (ctx , node .ID )
736+ require .NoError (t , err )
737+ require .Nil (t , fetchedOwnership )
738+
739+ nodes , err := store .FindNodeByClusterID (ctx , cluster .ClusterID )
740+ require .NoError (t , err )
741+ require .Len (t , nodes , 0 )
742+
743+ _ , err = store .ByClusterID (ctx , cluster .ClusterID )
744+ require .Error (t , err )
745+
746+ var remainingSR []database.SpaceResource
747+ err = db .Core .NewSelect ().Model (& remainingSR ).Where ("cluster_id = ?" , cluster .ClusterID ).Scan (ctx )
748+ require .NoError (t , err )
749+ require .Len (t , remainingSR , 0 )
750+ }
751+
752+ func TestClusterStore_DeleteClusterNodeByID_NonExistentNode (t * testing.T ) {
753+ db := tests .InitTestDB ()
754+ defer db .Close ()
755+ ctx := context .TODO ()
756+
757+ store := database .NewClusterInfoStoreWithDB (db )
758+
759+ err := store .DeleteClusterNodeByID (ctx , 99999 )
760+ require .Error (t , err )
761+ }
0 commit comments