Skip to content

Commit e85bebd

Browse files
committed
test(k8s): harden destroy checks with RetryContext
1 parent 0c09058 commit e85bebd

File tree

6 files changed

+16287
-2408
lines changed

6 files changed

+16287
-2408
lines changed

internal/services/k8s/cluster_test.go

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package k8s_test
22

33
import (
4+
"context"
45
"fmt"
56
"strings"
67
"testing"
8+
"time"
79

10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
811
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
912
"github.com/hashicorp/terraform-plugin-testing/terraform"
1013
k8sSDK "github.com/scaleway/scaleway-sdk-go/api/k8s/v1"
@@ -545,33 +548,36 @@ func TestAccCluster_TypeChange(t *testing.T) {
545548

546549
func testAccCheckK8SClusterDestroy(tt *acctest.TestTools) resource.TestCheckFunc {
547550
return func(state *terraform.State) error {
548-
for _, rs := range state.RootModule().Resources {
549-
if rs.Type != "scaleway_k8s_cluster" {
550-
continue
551+
ctx := context.Background()
552+
553+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
554+
for _, rs := range state.RootModule().Resources {
555+
if rs.Type != "scaleway_k8s_cluster" {
556+
continue
557+
}
558+
559+
api, region, clusterID, err := k8s.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
560+
if err != nil {
561+
return retry.NonRetryableError(err)
562+
}
563+
564+
_, err = api.GetCluster(&k8sSDK.GetClusterRequest{
565+
Region: region,
566+
ClusterID: clusterID,
567+
})
568+
569+
switch {
570+
case err == nil:
571+
return retry.RetryableError(fmt.Errorf("k8s cluster (%s) still exists", rs.Primary.ID))
572+
case httperrors.Is404(err):
573+
continue
574+
default:
575+
return retry.NonRetryableError(err)
576+
}
551577
}
552578

553-
k8sAPI, region, clusterID, err := k8s.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
554-
if err != nil {
555-
return err
556-
}
557-
558-
_, err = k8sAPI.WaitForCluster(&k8sSDK.WaitForClusterRequest{
559-
Region: region,
560-
ClusterID: clusterID,
561-
})
562-
563-
// If no error resource still exist
564-
if err == nil {
565-
return fmt.Errorf("cluster (%s) still exists", rs.Primary.ID)
566-
}
567-
568-
// Unexpected api error we return it
569-
if !httperrors.Is404(err) {
570-
return err
571-
}
572-
}
573-
574-
return nil
579+
return nil
580+
})
575581
}
576582
}
577583

internal/services/k8s/pool_test.go

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package k8s_test
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67
"strings"
78
"testing"
9+
"time"
810

11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
912
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
1013
"github.com/hashicorp/terraform-plugin-testing/terraform"
1114
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
@@ -677,25 +680,28 @@ func testAccCheckK8SPoolDestroy(tt *acctest.TestTools, n string) resource.TestCh
677680
return nil
678681
}
679682

680-
k8sAPI, region, poolID, err := k8s.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
681-
if err != nil {
682-
return err
683-
}
683+
ctx := context.Background()
684684

685-
_, err = k8sAPI.WaitForPool(&k8sSDK.WaitForPoolRequest{
686-
Region: region,
687-
PoolID: poolID,
688-
})
689-
// If no error resource still exist
690-
if err == nil {
691-
return fmt.Errorf("pool (%s) still exists", rs.Primary.ID)
692-
}
693-
// Unexpected api error we return it
694-
if !httperrors.Is404(err) {
695-
return err
696-
}
685+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
686+
api, region, poolID, err := k8s.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
687+
if err != nil {
688+
return retry.NonRetryableError(err)
689+
}
697690

698-
return nil
691+
_, err = api.GetPool(&k8sSDK.GetPoolRequest{
692+
Region: region,
693+
PoolID: poolID,
694+
})
695+
696+
switch {
697+
case err == nil:
698+
return retry.RetryableError(fmt.Errorf("k8s pool (%s) still exists", rs.Primary.ID))
699+
case httperrors.Is404(err):
700+
return nil
701+
default:
702+
return retry.NonRetryableError(err)
703+
}
704+
})
699705
}
700706
}
701707

0 commit comments

Comments
 (0)