11package provider
22
33import (
4- "context"
54 "fmt"
6- "strconv"
75 "testing"
86
9- "github.com/RedisLabs/rediscloud-go-api/redis"
10- "github.com/RedisLabs/rediscloud-go-api/service/databases"
11- "github.com/RedisLabs/terraform-provider-rediscloud/provider/client"
127 "github.com/RedisLabs/terraform-provider-rediscloud/provider/utils"
138 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
149 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
15- "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1610)
1711
1812// TestAccResourceRedisCloudActiveActiveDatabase_enableDefaultUser tests the enable_default_user
@@ -25,10 +19,6 @@ func TestAccResourceRedisCloudActiveActiveDatabase_enableDefaultUser(t *testing.
2519 password := acctest .RandString (20 )
2620
2721 const resourceName = "rediscloud_active_active_subscription_database.test"
28- const subscriptionResourceName = "rediscloud_active_active_subscription.test"
29-
30- var subId int
31- var dbId int
3222
3323 resource .ParallelTest (t , resource.TestCase {
3424 PreCheck : func () { testAccPreCheck (t ); testAccAwsPreExistingCloudAccountPreCheck (t ) },
@@ -46,54 +36,13 @@ func TestAccResourceRedisCloudActiveActiveDatabase_enableDefaultUser(t *testing.
4636 resource .TestCheckResourceAttr (resourceName , "global_enable_default_user" , "true" ),
4737 resource .TestCheckResourceAttr (resourceName , "override_region.#" , "2" ),
4838
49- // Capture subscription and database IDs for API verification
50- func (s * terraform.State ) error {
51- r := s .RootModule ().Resources [subscriptionResourceName ]
52- var err error
53- subId , err = strconv .Atoi (r .Primary .ID )
54- if err != nil {
55- return fmt .Errorf ("couldn't parse subscription ID: %s" , r .Primary .ID )
56- }
57-
58- dbResource := s .RootModule ().Resources [resourceName ]
59- dbIdStr := dbResource .Primary .Attributes ["db_id" ]
60- dbId , err = strconv .Atoi (dbIdStr )
61- if err != nil {
62- return fmt .Errorf ("couldn't parse database ID: %s" , dbIdStr )
63- }
64-
65- return nil
66- },
67-
68- // Verify API state - regions should inherit global (not send enableDefaultUser)
69- func (s * terraform.State ) error {
70- apiClient := testProvider .Meta ().(* client.ApiClient )
71- db , err := apiClient .Client .Database .GetActiveActive (context .TODO (), subId , dbId )
72- if err != nil {
73- return fmt .Errorf ("failed to get database from API: %w" , err )
74- }
75-
76- // Verify global setting
77- if db .GlobalEnableDefaultUser == nil || ! * db .GlobalEnableDefaultUser {
78- return fmt .Errorf ("expected GlobalEnableDefaultUser to be true, got: %v" , db .GlobalEnableDefaultUser )
79- }
80-
81- // Verify regions - they should have enableDefaultUser=true (effective value from global)
82- // What's important is that all regions show true (not false from bad override)
83- for _ , regionDb := range db .CrdbDatabases {
84- region := redis .StringValue (regionDb .Region )
85- enableDefaultUser := redis .BoolValue (regionDb .Security .EnableDefaultUser )
86- t .Logf ("Region %s: EnableDefaultUser = %v" , region , enableDefaultUser )
87-
88- // All regions should have effective value of true (from global)
89- if ! enableDefaultUser {
90- return fmt .Errorf ("region %s has enableDefaultUser=%v, expected true (inherited from global)" ,
91- region , enableDefaultUser )
92- }
93- }
94-
95- return nil
96- },
39+ // Both regions inherit global (no explicit enable_default_user set)
40+ resource .TestCheckTypeSetElemNestedAttrs (resourceName , "override_region.*" , map [string ]string {
41+ "name" : "us-east-1" ,
42+ }),
43+ resource .TestCheckTypeSetElemNestedAttrs (resourceName , "override_region.*" , map [string ]string {
44+ "name" : "us-east-2" ,
45+ }),
9746 ),
9847 },
9948
@@ -104,45 +53,18 @@ func TestAccResourceRedisCloudActiveActiveDatabase_enableDefaultUser(t *testing.
10453 subscriptionName , databaseName , password ),
10554 Check : resource .ComposeAggregateTestCheckFunc (
10655 resource .TestCheckResourceAttr (resourceName , "global_enable_default_user" , "true" ),
56+ resource .TestCheckResourceAttr (resourceName , "override_region.#" , "2" ),
10757
10858 // us-east-1: explicitly false (override)
109- // Note: Terraform state won't show enable_default_user for override_region unless we check differently
110-
111- // Verify API state
112- func (s * terraform.State ) error {
113- apiClient := testProvider .Meta ().(* client.ApiClient )
114- db , err := apiClient .Client .Database .GetActiveActive (context .TODO (), subId , dbId )
115- if err != nil {
116- return fmt .Errorf ("failed to get database from API: %w" , err )
117- }
118-
119- // Verify global is still true
120- if ! redis .BoolValue (db .GlobalEnableDefaultUser ) {
121- return fmt .Errorf ("expected GlobalEnableDefaultUser=true" )
122- }
123-
124- // Verify us-east-1 is explicitly false
125- usEast1 := findRegionInActiveActiveDB (db , "us-east-1" )
126- if usEast1 == nil {
127- return fmt .Errorf ("us-east-1 region not found" )
128- }
129- if redis .BoolValue (usEast1 .Security .EnableDefaultUser ) != false {
130- return fmt .Errorf ("us-east-1 should have enableDefaultUser=false, got: %v" ,
131- usEast1 .Security .EnableDefaultUser )
132- }
133-
134- // Verify us-east-2 inherits (true)
135- usEast2 := findRegionInActiveActiveDB (db , "us-east-2" )
136- if usEast2 == nil {
137- return fmt .Errorf ("us-east-2 region not found" )
138- }
139- if redis .BoolValue (usEast2 .Security .EnableDefaultUser ) != true {
140- return fmt .Errorf ("us-east-2 should inherit enableDefaultUser=true, got: %v" ,
141- usEast2 .Security .EnableDefaultUser )
142- }
143-
144- return nil
145- },
59+ resource .TestCheckTypeSetElemNestedAttrs (resourceName , "override_region.*" , map [string ]string {
60+ "name" : "us-east-1" ,
61+ "enable_default_user" : "false" ,
62+ }),
63+
64+ // us-east-2: inherits global (no enable_default_user set)
65+ resource .TestCheckTypeSetElemNestedAttrs (resourceName , "override_region.*" , map [string ]string {
66+ "name" : "us-east-2" ,
67+ }),
14668 ),
14769 },
14870
@@ -153,42 +75,18 @@ func TestAccResourceRedisCloudActiveActiveDatabase_enableDefaultUser(t *testing.
15375 subscriptionName , databaseName , password ),
15476 Check : resource .ComposeAggregateTestCheckFunc (
15577 resource .TestCheckResourceAttr (resourceName , "global_enable_default_user" , "false" ),
78+ resource .TestCheckResourceAttr (resourceName , "override_region.#" , "2" ),
79+
80+ // us-east-1: explicitly true (override global false)
81+ resource .TestCheckTypeSetElemNestedAttrs (resourceName , "override_region.*" , map [string ]string {
82+ "name" : "us-east-1" ,
83+ "enable_default_user" : "true" ,
84+ }),
15685
157- // Verify API state
158- func (s * terraform.State ) error {
159- apiClient := testProvider .Meta ().(* client.ApiClient )
160- db , err := apiClient .Client .Database .GetActiveActive (context .TODO (), subId , dbId )
161- if err != nil {
162- return fmt .Errorf ("failed to get database from API: %w" , err )
163- }
164-
165- // Verify global is false
166- if redis .BoolValue (db .GlobalEnableDefaultUser ) != false {
167- return fmt .Errorf ("expected GlobalEnableDefaultUser=false, got: %v" , db .GlobalEnableDefaultUser )
168- }
169-
170- // Verify us-east-1 overrides to true
171- usEast1 := findRegionInActiveActiveDB (db , "us-east-1" )
172- if usEast1 == nil {
173- return fmt .Errorf ("us-east-1 region not found" )
174- }
175- if redis .BoolValue (usEast1 .Security .EnableDefaultUser ) != true {
176- return fmt .Errorf ("us-east-1 should override to enableDefaultUser=true, got: %v" ,
177- usEast1 .Security .EnableDefaultUser )
178- }
179-
180- // Verify us-east-2 inherits false
181- usEast2 := findRegionInActiveActiveDB (db , "us-east-2" )
182- if usEast2 == nil {
183- return fmt .Errorf ("us-east-2 region not found" )
184- }
185- if redis .BoolValue (usEast2 .Security .EnableDefaultUser ) != false {
186- return fmt .Errorf ("us-east-2 should inherit enableDefaultUser=false, got: %v" ,
187- usEast2 .Security .EnableDefaultUser )
188- }
189-
190- return nil
191- },
86+ // us-east-2: inherits global false (no enable_default_user set)
87+ resource .TestCheckTypeSetElemNestedAttrs (resourceName , "override_region.*" , map [string ]string {
88+ "name" : "us-east-2" ,
89+ }),
19290 ),
19391 },
19492
@@ -199,43 +97,21 @@ func TestAccResourceRedisCloudActiveActiveDatabase_enableDefaultUser(t *testing.
19997 subscriptionName , databaseName , password ),
20098 Check : resource .ComposeAggregateTestCheckFunc (
20199 resource .TestCheckResourceAttr (resourceName , "global_enable_default_user" , "true" ),
100+ resource .TestCheckResourceAttr (resourceName , "override_region.#" , "2" ),
202101
203- // Verify API state
204- func (s * terraform.State ) error {
205- apiClient := testProvider .Meta ().(* client.ApiClient )
206- db , err := apiClient .Client .Database .GetActiveActive (context .TODO (), subId , dbId )
207- if err != nil {
208- return fmt .Errorf ("failed to get database from API: %w" , err )
209- }
210-
211- usEast1 := findRegionInActiveActiveDB (db , "us-east-1" )
212- if redis .BoolValue (usEast1 .Security .EnableDefaultUser ) != true {
213- return fmt .Errorf ("us-east-1 should be true" )
214- }
215-
216- usEast2 := findRegionInActiveActiveDB (db , "us-east-2" )
217- if redis .BoolValue (usEast2 .Security .EnableDefaultUser ) != false {
218- return fmt .Errorf ("us-east-2 should be false" )
219- }
220-
221- return nil
222- },
102+ // us-east-1: explicitly true
103+ resource .TestCheckTypeSetElemNestedAttrs (resourceName , "override_region.*" , map [string ]string {
104+ "name" : "us-east-1" ,
105+ "enable_default_user" : "true" ,
106+ }),
107+
108+ // us-east-2: explicitly false
109+ resource .TestCheckTypeSetElemNestedAttrs (resourceName , "override_region.*" , map [string ]string {
110+ "name" : "us-east-2" ,
111+ "enable_default_user" : "false" ,
112+ }),
223113 ),
224114 },
225115 },
226116 })
227117}
228-
229- // Helper function to find a specific region in the ActiveActive database API response
230- func findRegionInActiveActiveDB (db * databases.ActiveActiveDatabase , regionName string ) * databases.CrdbDatabase {
231- if db == nil {
232- return nil
233- }
234-
235- for _ , regionDb := range db .CrdbDatabases {
236- if redis .StringValue (regionDb .Region ) == regionName {
237- return regionDb
238- }
239- }
240- return nil
241- }
0 commit comments