55 "fmt"
66 "os"
77 "testing"
8+ "time"
89
910 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1011 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
@@ -27,6 +28,20 @@ func TestAccEntitlementControl_basic(t *testing.T) {
2728 Config : testAccEntitlementControlConfigBasic ,
2829 Check : resource .ComposeTestCheckFunc (
2930 testAccEntitlementControlCheckExists ("cloudsmith_entitlement_control.test" ),
31+ func (s * terraform.State ) error {
32+ resourceState , ok := s .RootModule ().Resources ["cloudsmith_entitlement_control.test" ]
33+ if ! ok {
34+ return fmt .Errorf ("resource not found: %s" , "cloudsmith_entitlement_control.test" )
35+ }
36+ if resourceState .Primary .ID == "" {
37+ return fmt .Errorf ("resource id not set" )
38+ }
39+ pc := testAccProvider .Meta ().(* providerConfig )
40+ namespace := os .Getenv ("CLOUDSMITH_NAMESPACE" )
41+ repository := resourceState .Primary .Attributes ["repository" ]
42+ identifier := resourceState .Primary .ID
43+ return waitForEntitlementControlEnabled (pc , namespace , repository , identifier , true , 15 )
44+ },
3045 resource .TestCheckResourceAttr ("cloudsmith_entitlement_control.test" , "namespace" , os .Getenv ("CLOUDSMITH_NAMESPACE" )),
3146 resource .TestCheckResourceAttr ("cloudsmith_entitlement_control.test" , "enabled" , "true" ),
3247 ),
@@ -35,6 +50,20 @@ func TestAccEntitlementControl_basic(t *testing.T) {
3550 Config : testAccEntitlementControlConfigBasicUpdate ,
3651 Check : resource .ComposeTestCheckFunc (
3752 testAccEntitlementControlCheckExists ("cloudsmith_entitlement_control.test" ),
53+ func (s * terraform.State ) error {
54+ resourceState , ok := s .RootModule ().Resources ["cloudsmith_entitlement_control.test" ]
55+ if ! ok {
56+ return fmt .Errorf ("resource not found: %s" , "cloudsmith_entitlement_control.test" )
57+ }
58+ if resourceState .Primary .ID == "" {
59+ return fmt .Errorf ("resource id not set" )
60+ }
61+ pc := testAccProvider .Meta ().(* providerConfig )
62+ namespace := os .Getenv ("CLOUDSMITH_NAMESPACE" )
63+ repository := resourceState .Primary .Attributes ["repository" ]
64+ identifier := resourceState .Primary .ID
65+ return waitForEntitlementControlEnabled (pc , namespace , repository , identifier , false , 15 )
66+ },
3867 resource .TestCheckResourceAttr ("cloudsmith_entitlement_control.test" , "namespace" , os .Getenv ("CLOUDSMITH_NAMESPACE" )),
3968 resource .TestCheckResourceAttr ("cloudsmith_entitlement_control.test" , "enabled" , "false" ),
4069 ),
@@ -120,6 +149,28 @@ func testAccEntitlementControlCheckExists(resourceName string) resource.TestChec
120149 }
121150}
122151
152+ func waitForEntitlementControlEnabled (pc * providerConfig , namespace , repository , identifier string , wantEnabled bool , timeoutSec int ) error {
153+ deadline := time .Now ().Add (time .Duration (timeoutSec ) * time .Second )
154+ for {
155+ req := pc .APIClient .EntitlementsApi .EntitlementsRead (pc .Auth , namespace , repository , identifier )
156+ entitlement , resp , err := pc .APIClient .EntitlementsApi .EntitlementsReadExecute (req )
157+ if resp != nil {
158+ defer resp .Body .Close ()
159+ }
160+ if err == nil {
161+ if entitlement .GetIsActive () == wantEnabled {
162+ return nil
163+ }
164+ } else if is404 (resp ) {
165+ return fmt .Errorf ("entitlement not found while waiting for enabled=%v" , wantEnabled )
166+ }
167+ if time .Now ().After (deadline ) {
168+ return fmt .Errorf ("timeout waiting for entitlement control enabled=%v" , wantEnabled )
169+ }
170+ time .Sleep (1 * time .Second )
171+ }
172+ }
173+
123174var testAccEntitlementControlConfigBasic = fmt .Sprintf (`
124175resource "cloudsmith_repository" "test" {
125176 name = "terraform-acc-test-ent-ctrl"
0 commit comments