@@ -3,6 +3,7 @@ package provider
33import (
44 "context"
55 "fmt"
6+ "time"
67
78 "github.com/gardener/machine-controller-manager/pkg/apis/machine/v1alpha1"
89 "github.com/gardener/machine-controller-manager/pkg/util/provider/driver"
@@ -33,7 +34,9 @@ var _ = Describe("DeleteMachine", func() {
3334 ctx = context .Background ()
3435 mockClient = & mock.StackitClient {}
3536 provider = & Provider {
36- client : mockClient ,
37+ client : mockClient ,
38+ pollingInterval : 10 * time .Millisecond ,
39+ pollingTimeout : 5 * time .Second ,
3740 }
3841
3942 // Create secret with projectId
@@ -87,6 +90,9 @@ var _ = Describe("DeleteMachine", func() {
8790 mockClient .DeleteServerFunc = func (_ context.Context , _ , _ , _ string ) error {
8891 return nil
8992 }
93+ mockClient .GetServerFunc = func (_ context.Context , _ , _ , _ string ) (* client.Server , error ) {
94+ return nil , fmt .Errorf ("%w: status 404" , client .ErrServerNotFound )
95+ }
9096
9197 resp , err := provider .DeleteMachine (ctx , req )
9298
@@ -103,19 +109,58 @@ var _ = Describe("DeleteMachine", func() {
103109 capturedServerID = serverID
104110 return nil
105111 }
112+ mockClient .GetServerFunc = func (_ context.Context , _ , _ , _ string ) (* client.Server , error ) {
113+ return nil , fmt .Errorf ("%w: status 404" , client .ErrServerNotFound )
114+ }
106115
107116 _ , err := provider .DeleteMachine (ctx , req )
108117
109118 Expect (err ).NotTo (HaveOccurred ())
110119 Expect (capturedProjectID ).To (Equal ("11111111-2222-3333-4444-555555555555" ))
111120 Expect (capturedServerID ).To (Equal ("550e8400-e29b-41d4-a716-446655440000" ))
112121 })
122+
123+ It ("should poll GetServer until server is deleted" , func () {
124+ getServerCallCount := 0
125+
126+ mockClient .DeleteServerFunc = func (_ context.Context , _ , _ , _ string ) error {
127+ return nil
128+ }
129+ mockClient .GetServerFunc = func (_ context.Context , _ , _ , _ string ) (* client.Server , error ) {
130+ getServerCallCount ++
131+ // First call returns server still exists, second call returns not found
132+ if getServerCallCount == 1 {
133+ return & client.Server {
134+ ID : "550e8400-e29b-41d4-a716-446655440000" ,
135+ Name : "test-machine" ,
136+ Status : "SHUTTING_DOWN" ,
137+ }, nil
138+ }
139+ return nil , fmt .Errorf ("%w: status 404" , client .ErrServerNotFound )
140+ }
141+
142+ resp , err := provider .DeleteMachine (ctx , req )
143+
144+ Expect (err ).NotTo (HaveOccurred ())
145+ Expect (resp ).NotTo (BeNil ())
146+ Expect (getServerCallCount ).To (BeNumerically (">=" , 2 ))
147+ })
113148 })
114149
115150 Context ("with missing or invalid ProviderID" , func () {
116151 It ("should still delete the machine when ProviderID is missing" , func () {
117152 machine .Spec .ProviderID = ""
118153
154+ mockClient .GetServerFunc = func (_ context.Context , _ , _ , _ string ) (* client.Server , error ) {
155+ return & client.Server {
156+ ID : "550e8400-e29b-41d4-a716-446655440000" ,
157+ Name : "test-machine" ,
158+ }, nil
159+ }
160+ mockClient .DeleteServerFunc = func (_ context.Context , _ , _ , _ string ) error {
161+ return nil
162+ }
163+
119164 _ , err := provider .DeleteMachine (ctx , req )
120165
121166 Expect (err ).ToNot (HaveOccurred ())
0 commit comments