Skip to content

Commit 020607c

Browse files
CENG-507: Add sleep timeout for control/upstream tests to battle flakes
1 parent fe85251 commit 020607c

File tree

4 files changed

+58
-13
lines changed

4 files changed

+58
-13
lines changed

cloudsmith/resource_entitlement_control.go

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,33 @@ import (
44
"context"
55
"fmt"
66
"strings"
7+
"time"
78

89
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1011
)
1112

13+
// waitForEntitlementControlEnabledResource polls until the entitlement token's enabled state matches wantEnabled or times out.
14+
func waitForEntitlementControlEnabledResource(pc *providerConfig, namespace, repository, identifier string, wantEnabled bool, timeoutSec int) error {
15+
deadline := time.Now().Add(time.Duration(timeoutSec) * time.Second)
16+
for {
17+
req := pc.APIClient.EntitlementsApi.EntitlementsRead(pc.Auth, namespace, repository, identifier)
18+
entitlement, resp, err := pc.APIClient.EntitlementsApi.EntitlementsReadExecute(req)
19+
if resp != nil {
20+
defer resp.Body.Close()
21+
}
22+
if err == nil {
23+
if entitlement.GetIsActive() == wantEnabled {
24+
return nil
25+
}
26+
}
27+
if time.Now().After(deadline) {
28+
return fmt.Errorf("timeout waiting for entitlement control enabled=%v", wantEnabled)
29+
}
30+
time.Sleep(1 * time.Second)
31+
}
32+
}
33+
1234
func entitlementControlImport(ctx context.Context, d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) {
1335
idParts := strings.Split(d.Id(), ".")
1436
if len(idParts) != 3 {
@@ -46,6 +68,9 @@ func entitlementControlCreate(d *schema.ResourceData, m interface{}) error {
4668
}
4769

4870
d.SetId(identifier)
71+
if err := waitForEntitlementControlEnabledResource(pc, namespace, repository, identifier, enabled, 15); err != nil {
72+
return err
73+
}
4974
return entitlementControlRead(d, m)
5075
}
5176

@@ -89,7 +114,10 @@ func entitlementControlUpdate(d *schema.ResourceData, m interface{}) error {
89114
return err
90115
}
91116
}
92-
117+
// Wait for the entitlement to reach the desired state
118+
if err := waitForEntitlementControlEnabledResource(pc, namespace, repository, d.Id(), enabled, 30); err != nil {
119+
return err
120+
}
93121
return entitlementControlRead(d, m)
94122
}
95123

@@ -104,7 +132,10 @@ func entitlementControlDelete(d *schema.ResourceData, m interface{}) error {
104132
if err != nil {
105133
return err
106134
}
107-
135+
// Wait for the entitlement to be disabled
136+
if err := waitForEntitlementControlEnabledResource(pc, namespace, repository, d.Id(), false, 30); err != nil {
137+
return err
138+
}
108139
return nil
109140
}
110141

cloudsmith/resource_repository_upstream_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,11 +1377,11 @@ func testAccRepositoryUpstreamCheckDestroy(resourceName string) resource.TestChe
13771377
}
13781378
}
13791379

1380-
// waitForIsActiveTrue waits up to 2 minutes for the resource's is_active attribute to become "true", checking every 10 seconds.
1380+
// waitForIsActiveTrue waits up to 4 minutes for the resource's is_active attribute to become "true", checking every 10 seconds.
13811381
func waitForIsActiveTrue(resourceName string) resource.TestCheckFunc {
13821382
return func(s *terraform.State) error {
13831383
const (
1384-
maxWait = 2 * time.Minute
1384+
maxWait = 4 * time.Minute
13851385
interval = 10 * time.Second
13861386
)
13871387
start := time.Now()

cloudsmith/resource_saml_auth.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -162,19 +162,34 @@ func setSAMLAuthFields(d *schema.ResourceData, organization string, samlAuth *cl
162162
return err
163163
}
164164

165-
// Handle inline metadata - only set if non-empty
166-
if inlineMetadata := samlAuth.GetSamlMetadataInline(); inlineMetadata != "" {
165+
inlineMetadata := samlAuth.GetSamlMetadataInline()
166+
url, hasURL := samlAuth.GetSamlMetadataUrlOk()
167+
168+
if inlineMetadata != "" {
167169
if err := setField("saml_metadata_inline", inlineMetadata); err != nil {
168170
return err
169171
}
172+
if err := setField("saml_metadata_url", ""); err != nil {
173+
return err
174+
}
175+
} else if hasURL && url != nil && *url != "" {
176+
if err := setField("saml_metadata_url", url); err != nil {
177+
return err
178+
}
179+
if err := setField("saml_metadata_inline", ""); err != nil {
180+
return err
181+
}
182+
} else {
183+
// Neither present, clear both
184+
if err := setField("saml_metadata_inline", ""); err != nil {
185+
return err
186+
}
187+
if err := setField("saml_metadata_url", ""); err != nil {
188+
return err
189+
}
170190
}
171191

172-
// Handle URL metadata with null handling
173-
url, hasURL := samlAuth.GetSamlMetadataUrlOk()
174-
if !hasURL || url == nil || *url == "" {
175-
return setField("saml_metadata_url", nil)
176-
}
177-
return setField("saml_metadata_url", url)
192+
return nil
178193
}
179194

180195
// generateSAMLAuthID creates a unique identifier for the SAML authentication resource

cloudsmith/resource_saml_auth_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ func TestAccSAMLAuth_basic(t *testing.T) {
2424
resource.TestCheckResourceAttr("cloudsmith_saml_auth.test", "saml_auth_enabled", "true"),
2525
resource.TestCheckResourceAttr("cloudsmith_saml_auth.test", "saml_auth_enforced", "false"),
2626
resource.TestCheckResourceAttr("cloudsmith_saml_auth.test", "saml_metadata_url", "https://test.idp.example.com/metadata.xml"),
27-
resource.TestCheckNoResourceAttr("cloudsmith_saml_auth.test", "saml_metadata_inline"),
2827
),
2928
},
3029
{

0 commit comments

Comments
 (0)