@@ -26,6 +26,7 @@ import (
2626
2727 "github.com/go-logr/logr/testr"
2828 "github.com/google/go-cmp/cmp"
29+ "github.com/gophercloud/gophercloud/v2"
2930 "github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/volumes"
3031 "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/keypairs"
3132 "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers"
@@ -1021,3 +1022,101 @@ func TestService_ReconcileInstance(t *testing.T) {
10211022 })
10221023 }
10231024}
1025+
1026+ func TestService_DeleteInstance (t * testing.T ) {
1027+ const (
1028+ serverID = "ce96e584-7ebc-46d6-9e55-987d72e3806c"
1029+ serverName = "test-server"
1030+ )
1031+
1032+ tests := []struct {
1033+ name string
1034+ expect func (m * mock.MockComputeClientMockRecorder )
1035+ wantErr bool
1036+ }{
1037+ {
1038+ name : "Server not found after delete" ,
1039+ expect : func (m * mock.MockComputeClientMockRecorder ) {
1040+ m .DeleteServer (serverID ).Return (nil )
1041+ m .GetServer (serverID ).Return (nil , & gophercloud.ErrResourceNotFound {})
1042+ },
1043+ wantErr : false ,
1044+ },
1045+ {
1046+ name : "Server in SOFT_DELETED state" ,
1047+ expect : func (m * mock.MockComputeClientMockRecorder ) {
1048+ m .DeleteServer (serverID ).Return (nil )
1049+ m .GetServer (serverID ).Return (& servers.Server {
1050+ ID : serverID ,
1051+ Name : serverName ,
1052+ Status : "SOFT_DELETED" ,
1053+ }, nil )
1054+ },
1055+ wantErr : false ,
1056+ },
1057+ {
1058+ name : "Server in DELETED state" ,
1059+ expect : func (m * mock.MockComputeClientMockRecorder ) {
1060+ m .DeleteServer (serverID ).Return (nil )
1061+ m .GetServer (serverID ).Return (& servers.Server {
1062+ ID : serverID ,
1063+ Name : serverName ,
1064+ Status : "DELETED" ,
1065+ }, nil )
1066+ },
1067+ wantErr : false ,
1068+ },
1069+ {
1070+ name : "Delete API returns not found" ,
1071+ expect : func (m * mock.MockComputeClientMockRecorder ) {
1072+ m .DeleteServer (serverID ).Return (& gophercloud.ErrResourceNotFound {})
1073+ },
1074+ wantErr : false ,
1075+ },
1076+ {
1077+ name : "Delete API returns error" ,
1078+ expect : func (m * mock.MockComputeClientMockRecorder ) {
1079+ m .DeleteServer (serverID ).Return (errors .New ("API error" ))
1080+ },
1081+ wantErr : true ,
1082+ },
1083+ {
1084+ name : "GetServer returns error" ,
1085+ expect : func (m * mock.MockComputeClientMockRecorder ) {
1086+ m .DeleteServer (serverID ).Return (nil )
1087+ m .GetServer (serverID ).Return (nil , errors .New ("API error" ))
1088+ },
1089+ wantErr : true ,
1090+ },
1091+ }
1092+
1093+ for _ , tt := range tests {
1094+ t .Run (tt .name , func (t * testing.T ) {
1095+ mockCtrl := gomock .NewController (t )
1096+ log := testr .New (t )
1097+ mockScopeFactory := scope .NewMockScopeFactory (mockCtrl , "" )
1098+
1099+ tt .expect (mockScopeFactory .ComputeClient .EXPECT ())
1100+
1101+ s , err := NewService (scope .NewWithLogger (mockScopeFactory , log ))
1102+ if err != nil {
1103+ t .Fatalf ("Failed to create service: %v" , err )
1104+ }
1105+
1106+ instanceStatus := & InstanceStatus {
1107+ server : & servers.Server {
1108+ ID : serverID ,
1109+ Name : serverName ,
1110+ },
1111+ logger : log ,
1112+ }
1113+
1114+ eventObject := & infrav1.OpenStackMachine {}
1115+ err = s .DeleteInstance (eventObject , instanceStatus )
1116+ if (err != nil ) != tt .wantErr {
1117+ t .Errorf ("Service.DeleteInstance() error = %v, wantErr %v" , err , tt .wantErr )
1118+ return
1119+ }
1120+ })
1121+ }
1122+ }
0 commit comments