Skip to content

Commit 283022a

Browse files
committed
test(mongodb): harden destroy checks with RetryContext
1 parent d94eaa1 commit 283022a

File tree

3 files changed

+4171
-1272
lines changed

3 files changed

+4171
-1272
lines changed

internal/services/mongodb/instance_test.go

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package mongodb_test
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
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
mongodbSDK "github.com/scaleway/scaleway-sdk-go/api/mongodb/v1"
@@ -497,30 +500,35 @@ func isMongoDBInstancePresent(tt *acctest.TestTools, n string) resource.TestChec
497500

498501
func IsInstanceDestroyed(tt *acctest.TestTools) resource.TestCheckFunc {
499502
return func(state *terraform.State) error {
500-
for _, rs := range state.RootModule().Resources {
501-
if rs.Type != "scaleway_mongodb_instance" {
502-
continue
503-
}
504-
505-
mongodbAPI, extractRegion, ID, err := mongodb.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
506-
if err != nil {
507-
return err
508-
}
503+
ctx := context.Background()
509504

510-
_, err = mongodbAPI.GetInstance(&mongodbSDK.GetInstanceRequest{
511-
InstanceID: ID,
512-
Region: extractRegion,
513-
})
505+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
506+
for _, rs := range state.RootModule().Resources {
507+
if rs.Type != "scaleway_mongodb_instance" {
508+
continue
509+
}
514510

515-
if err == nil {
516-
return fmt.Errorf("instance (%s) still exists", rs.Primary.ID)
517-
}
511+
api, region, id, err := mongodb.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
512+
if err != nil {
513+
return retry.NonRetryableError(err)
514+
}
518515

519-
if !httperrors.Is404(err) {
520-
return err
516+
_, err = api.GetInstance(&mongodbSDK.GetInstanceRequest{
517+
InstanceID: id,
518+
Region: region,
519+
})
520+
521+
switch {
522+
case err == nil:
523+
return retry.RetryableError(fmt.Errorf("mongodb instance (%s) still exists", rs.Primary.ID))
524+
case httperrors.Is404(err):
525+
continue
526+
default:
527+
return retry.NonRetryableError(err)
528+
}
521529
}
522-
}
523530

524-
return nil
531+
return nil
532+
})
525533
}
526534
}

0 commit comments

Comments
 (0)