Skip to content

Commit 6b70903

Browse files
committed
test(vpcgw): harden destroy checks with RetryContext
1 parent e3f2b53 commit 6b70903

File tree

1 file changed

+103
-116
lines changed

1 file changed

+103
-116
lines changed
Lines changed: 103 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package vpcgwtestfuncs
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
vpcgwSDK "github.com/scaleway/scaleway-sdk-go/api/vpcgw/v1"
@@ -14,136 +17,120 @@ import (
1417

1518
func IsGatewayNetworkDestroyed(tt *acctest.TestTools) resource.TestCheckFunc {
1619
return func(state *terraform.State) error {
17-
for _, rs := range state.RootModule().Resources {
18-
if rs.Type != "scaleway_vpc_gateway_network" {
19-
continue
20-
}
21-
22-
vpcgwNetworkAPI, zone, ID, err := vpcgw.NewAPIWithZoneAndIDv2(tt.Meta, rs.Primary.ID)
23-
if err != nil {
24-
return err
25-
}
26-
27-
_, err = vpcgwNetworkAPI.GetGatewayNetwork(&v2.GetGatewayNetworkRequest{
28-
GatewayNetworkID: ID,
29-
Zone: zone,
30-
})
31-
32-
if err == nil {
33-
return fmt.Errorf(
34-
"VPC gateway network %s still exists",
35-
rs.Primary.ID,
36-
)
37-
}
38-
39-
// Unexpected api error we return it
40-
if !httperrors.Is404(err) {
41-
return err
42-
}
43-
}
44-
45-
return nil
20+
ctx := context.Background()
21+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
22+
for _, rs := range state.RootModule().Resources {
23+
if rs.Type != "scaleway_vpc_gateway_network" {
24+
continue
25+
}
26+
api, zone, id, err := vpcgw.NewAPIWithZoneAndIDv2(tt.Meta, rs.Primary.ID)
27+
if err != nil {
28+
return retry.NonRetryableError(err)
29+
}
30+
_, err = api.GetGatewayNetwork(&v2.GetGatewayNetworkRequest{
31+
GatewayNetworkID: id,
32+
Zone: zone,
33+
})
34+
switch {
35+
case err == nil:
36+
return retry.RetryableError(fmt.Errorf("VPC gateway network (%s) still exists", rs.Primary.ID))
37+
case httperrors.Is404(err):
38+
continue
39+
default:
40+
return retry.NonRetryableError(err)
41+
}
42+
}
43+
return nil
44+
})
4645
}
4746
}
4847

4948
func IsGatewayDestroyed(tt *acctest.TestTools) resource.TestCheckFunc {
5049
return func(state *terraform.State) error {
51-
for _, rs := range state.RootModule().Resources {
52-
if rs.Type != "scaleway_vpc_public_gateway" {
53-
continue
54-
}
55-
56-
vpcgwAPI, zone, ID, err := vpcgw.NewAPIWithZoneAndIDv2(tt.Meta, rs.Primary.ID)
57-
if err != nil {
58-
return err
59-
}
60-
61-
_, err = vpcgwAPI.GetGateway(&v2.GetGatewayRequest{
62-
GatewayID: ID,
63-
Zone: zone,
64-
})
65-
66-
if err == nil {
67-
return fmt.Errorf(
68-
"VPC public gateway %s still exists",
69-
rs.Primary.ID,
70-
)
71-
}
72-
73-
// Unexpected api error we return it
74-
if !httperrors.Is404(err) {
75-
return err
76-
}
77-
}
78-
79-
return nil
50+
ctx := context.Background()
51+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
52+
for _, rs := range state.RootModule().Resources {
53+
if rs.Type != "scaleway_vpc_public_gateway" {
54+
continue
55+
}
56+
api, zone, id, err := vpcgw.NewAPIWithZoneAndIDv2(tt.Meta, rs.Primary.ID)
57+
if err != nil {
58+
return retry.NonRetryableError(err)
59+
}
60+
_, err = api.GetGateway(&v2.GetGatewayRequest{
61+
GatewayID: id,
62+
Zone: zone,
63+
})
64+
switch {
65+
case err == nil:
66+
return retry.RetryableError(fmt.Errorf("VPC public gateway (%s) still exists", rs.Primary.ID))
67+
case httperrors.Is404(err):
68+
continue
69+
default:
70+
return retry.NonRetryableError(err)
71+
}
72+
}
73+
return nil
74+
})
8075
}
8176
}
8277

8378
func IsDHCPDestroyed(tt *acctest.TestTools) resource.TestCheckFunc {
8479
return func(state *terraform.State) error {
85-
for _, rs := range state.RootModule().Resources {
86-
if rs.Type != "scaleway_vpc_public_gateway_dhcp" {
87-
continue
88-
}
89-
90-
vpcgwAPI, zone, ID, err := vpcgw.NewAPIWithZoneAndID(tt.Meta, rs.Primary.ID)
91-
if err != nil {
92-
return err
93-
}
94-
95-
_, err = vpcgwAPI.GetDHCP(&vpcgwSDK.GetDHCPRequest{
96-
DHCPID: ID,
97-
Zone: zone,
98-
})
99-
100-
if err == nil {
101-
return fmt.Errorf(
102-
"VPC public gateway DHCP config %s still exists",
103-
rs.Primary.ID,
104-
)
105-
}
106-
107-
// Unexpected api error we return it
108-
if !httperrors.Is404(err) {
109-
return err
110-
}
111-
}
112-
113-
return nil
80+
ctx := context.Background()
81+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
82+
for _, rs := range state.RootModule().Resources {
83+
if rs.Type != "scaleway_vpc_public_gateway_dhcp" {
84+
continue
85+
}
86+
api, zone, id, err := vpcgw.NewAPIWithZoneAndID(tt.Meta, rs.Primary.ID) // v1 API helper
87+
if err != nil {
88+
return retry.NonRetryableError(err)
89+
}
90+
_, err = api.GetDHCP(&vpcgwSDK.GetDHCPRequest{
91+
DHCPID: id,
92+
Zone: zone,
93+
})
94+
switch {
95+
case err == nil:
96+
return retry.RetryableError(fmt.Errorf("VPC public gateway DHCP config (%s) still exists", rs.Primary.ID))
97+
case httperrors.Is404(err):
98+
continue
99+
default:
100+
return retry.NonRetryableError(err)
101+
}
102+
}
103+
return nil
104+
})
114105
}
115106
}
116107

117108
func IsIPDestroyed(tt *acctest.TestTools) resource.TestCheckFunc {
118109
return func(state *terraform.State) error {
119-
for _, rs := range state.RootModule().Resources {
120-
if rs.Type != "scaleway_vpc_public_gateway_ip" {
121-
continue
122-
}
123-
124-
vpcgwAPI, zone, ID, err := vpcgw.NewAPIWithZoneAndIDv2(tt.Meta, rs.Primary.ID)
125-
if err != nil {
126-
return err
127-
}
128-
129-
_, err = vpcgwAPI.GetIP(&v2.GetIPRequest{
130-
IPID: ID,
131-
Zone: zone,
132-
})
133-
134-
if err == nil {
135-
return fmt.Errorf(
136-
"VPC public gateway ip %s still exists",
137-
rs.Primary.ID,
138-
)
139-
}
140-
141-
// Unexpected api error we return it
142-
if !httperrors.Is404(err) {
143-
return err
144-
}
145-
}
146-
147-
return nil
110+
ctx := context.Background()
111+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
112+
for _, rs := range state.RootModule().Resources {
113+
if rs.Type != "scaleway_vpc_public_gateway_ip" {
114+
continue
115+
}
116+
api, zone, id, err := vpcgw.NewAPIWithZoneAndIDv2(tt.Meta, rs.Primary.ID)
117+
if err != nil {
118+
return retry.NonRetryableError(err)
119+
}
120+
_, err = api.GetIP(&v2.GetIPRequest{
121+
IPID: id,
122+
Zone: zone,
123+
})
124+
switch {
125+
case err == nil:
126+
return retry.RetryableError(fmt.Errorf("VPC public gateway ip (%s) still exists", rs.Primary.ID))
127+
case httperrors.Is404(err):
128+
continue
129+
default:
130+
return retry.NonRetryableError(err)
131+
}
132+
}
133+
return nil
134+
})
148135
}
149136
}

0 commit comments

Comments
 (0)