Skip to content

Commit 35e8be0

Browse files
committed
test(rdb): harden destroy checks with RetryContext
1 parent 31c2519 commit 35e8be0

File tree

5 files changed

+3903
-3358
lines changed

5 files changed

+3903
-3358
lines changed

internal/services/rdb/testdata/data-source-acl-basic.cassette.yaml

Lines changed: 439 additions & 586 deletions
Large diffs are not rendered by default.

internal/services/rdb/testdata/data-source-privilege-basic.cassette.yaml

Lines changed: 1067 additions & 1067 deletions
Large diffs are not rendered by default.

internal/services/rdb/testdata/privilege-basic.cassette.yaml

Lines changed: 1654 additions & 1311 deletions
Large diffs are not rendered by default.

internal/services/rdb/testdata/user-basic.cassette.yaml

Lines changed: 716 additions & 373 deletions
Large diffs are not rendered by default.

internal/services/rdb/testfuncs/checks.go

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package rdbtestfuncs
22

33
import (
4+
"context"
45
"fmt"
6+
"time"
57

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
69
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
710
"github.com/hashicorp/terraform-plugin-testing/terraform"
811
rdbSDK "github.com/scaleway/scaleway-sdk-go/api/rdb/v1"
@@ -13,33 +16,36 @@ import (
1316

1417
func IsInstanceDestroyed(tt *acctest.TestTools) resource.TestCheckFunc {
1518
return func(state *terraform.State) error {
16-
for _, rs := range state.RootModule().Resources {
17-
if rs.Type != "scaleway_rdb_instance" {
18-
continue
19-
}
19+
ctx := context.Background()
2020

21-
rdbAPI, region, ID, err := rdb.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
22-
if err != nil {
23-
return err
24-
}
21+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
22+
for _, rs := range state.RootModule().Resources {
23+
if rs.Type != "scaleway_rdb_instance" {
24+
continue
25+
}
2526

26-
_, err = rdbAPI.GetInstance(&rdbSDK.GetInstanceRequest{
27-
InstanceID: ID,
28-
Region: region,
29-
})
27+
api, region, id, err := rdb.NewAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
28+
if err != nil {
29+
return retry.NonRetryableError(err)
30+
}
3031

31-
// If no error resource still exist
32-
if err == nil {
33-
return fmt.Errorf("instance (%s) still exists", rs.Primary.ID)
34-
}
32+
_, err = api.GetInstance(&rdbSDK.GetInstanceRequest{
33+
InstanceID: id,
34+
Region: region,
35+
})
3536

36-
// Unexpected api error we return it
37-
if !httperrors.Is404(err) {
38-
return err
37+
switch {
38+
case err == nil:
39+
return retry.RetryableError(fmt.Errorf("rdb instance (%s) still exists", rs.Primary.ID))
40+
case httperrors.Is404(err):
41+
continue
42+
default:
43+
return retry.NonRetryableError(err)
44+
}
3945
}
40-
}
4146

42-
return nil
47+
return nil
48+
})
4349
}
4450
}
4551

0 commit comments

Comments
 (0)