@@ -10,6 +10,7 @@ import (
10
10
11
11
awstypes "github.com/aws/aws-sdk-go-v2/service/elasticache/types"
12
12
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
13
+ "github.com/hashicorp/terraform-plugin-testing/plancheck"
13
14
"github.com/hashicorp/terraform-plugin-testing/terraform"
14
15
"github.com/hashicorp/terraform-provider-aws/internal/acctest"
15
16
"github.com/hashicorp/terraform-provider-aws/internal/retry"
@@ -52,6 +53,8 @@ func TestAccElastiCacheUserGroup_update(t *testing.T) {
52
53
var userGroup awstypes.UserGroup
53
54
rName := acctest .RandomWithPrefix (t , "tf-acc" )
54
55
resourceName := "aws_elasticache_user_group.test"
56
+ user1ResourceName := "aws_elasticache_user.test1"
57
+ user2ResourceName := "aws_elasticache_user.test2"
55
58
56
59
acctest .ParallelTest (ctx , t , resource.TestCase {
57
60
PreCheck : func () { acctest .PreCheck (ctx , t ) },
@@ -76,7 +79,105 @@ func TestAccElastiCacheUserGroup_update(t *testing.T) {
76
79
resource .TestCheckResourceAttr (resourceName , "user_group_id" , rName ),
77
80
resource .TestCheckResourceAttr (resourceName , names .AttrEngine , "redis" ),
78
81
),
82
+ ConfigPlanChecks : resource.ConfigPlanChecks {
83
+ PreApply : []plancheck.PlanCheck {
84
+ plancheck .ExpectResourceAction (resourceName , plancheck .ResourceActionUpdate ),
85
+ plancheck .ExpectResourceAction (user1ResourceName , plancheck .ResourceActionNoop ),
86
+ plancheck .ExpectResourceAction (user2ResourceName , plancheck .ResourceActionNoop ),
87
+ },
88
+ },
79
89
},
90
+ {
91
+ Config : testAccUserGroupConfig_basic (rName ),
92
+ Check : resource .ComposeTestCheckFunc (
93
+ testAccCheckUserGroupExists (ctx , t , resourceName , & userGroup ),
94
+ resource .TestCheckResourceAttr (resourceName , "user_ids.#" , "1" ),
95
+ resource .TestCheckResourceAttr (resourceName , "user_group_id" , rName ),
96
+ resource .TestCheckResourceAttr (resourceName , names .AttrEngine , "redis" ),
97
+ ),
98
+ ConfigPlanChecks : resource.ConfigPlanChecks {
99
+ PreApply : []plancheck.PlanCheck {
100
+ plancheck .ExpectResourceAction (resourceName , plancheck .ResourceActionUpdate ),
101
+ plancheck .ExpectResourceAction (user1ResourceName , plancheck .ResourceActionNoop ),
102
+ plancheck .ExpectResourceAction (user2ResourceName , plancheck .ResourceActionNoop ),
103
+ },
104
+ },
105
+ },
106
+ },
107
+ })
108
+ }
109
+
110
+ func TestAccElastiCacheUserGroup_rotate (t * testing.T ) {
111
+ ctx := acctest .Context (t )
112
+ var userGroup awstypes.UserGroup
113
+ rName := acctest .RandomWithPrefix (t , "tf-acc" )
114
+ resourceName := "aws_elasticache_user_group.test"
115
+ user1ResourceName := "aws_elasticache_user.test1"
116
+ user2ResourceName := "aws_elasticache_user.test2"
117
+
118
+ acctest .ParallelTest (ctx , t , resource.TestCase {
119
+ PreCheck : func () { acctest .PreCheck (ctx , t ) },
120
+ ErrorCheck : acctest .ErrorCheck (t , names .ElastiCacheServiceID ),
121
+ ProtoV5ProviderFactories : acctest .ProtoV5ProviderFactories ,
122
+ CheckDestroy : testAccCheckUserGroupDestroy (ctx , t ),
123
+ Steps : []resource.TestStep {
124
+ {
125
+ Config : testAccUserGroupConfig_basic (rName ),
126
+ Check : resource .ComposeTestCheckFunc (
127
+ testAccCheckUserGroupExists (ctx , t , resourceName , & userGroup ),
128
+ resource .TestCheckResourceAttr (resourceName , "user_ids.#" , "1" ),
129
+ resource .TestCheckResourceAttr (resourceName , "user_group_id" , rName ),
130
+ resource .TestCheckResourceAttr (resourceName , names .AttrEngine , "redis" ),
131
+ ),
132
+ },
133
+ {
134
+ Config : testAccUserGroupConfig_rotate (rName ),
135
+ Check : resource .ComposeTestCheckFunc (
136
+ testAccCheckUserGroupExists (ctx , t , resourceName , & userGroup ),
137
+ resource .TestCheckResourceAttr (resourceName , "user_ids.#" , "2" ),
138
+ resource .TestCheckResourceAttr (resourceName , "user_group_id" , rName ),
139
+ resource .TestCheckResourceAttr (resourceName , names .AttrEngine , "redis" ),
140
+ ),
141
+ ConfigPlanChecks : resource.ConfigPlanChecks {
142
+ PreApply : []plancheck.PlanCheck {
143
+ plancheck .ExpectResourceAction (resourceName , plancheck .ResourceActionUpdate ),
144
+ plancheck .ExpectResourceAction (user1ResourceName , plancheck .ResourceActionNoop ),
145
+ plancheck .ExpectResourceAction (user2ResourceName , plancheck .ResourceActionReplace ),
146
+ },
147
+ },
148
+ },
149
+ {
150
+ Config : testAccUserGroupConfig_basic (rName ),
151
+ Check : resource .ComposeTestCheckFunc (
152
+ testAccCheckUserGroupExists (ctx , t , resourceName , & userGroup ),
153
+ resource .TestCheckResourceAttr (resourceName , "user_ids.#" , "1" ),
154
+ resource .TestCheckResourceAttr (resourceName , "user_group_id" , rName ),
155
+ resource .TestCheckResourceAttr (resourceName , names .AttrEngine , "redis" ),
156
+ ),
157
+ ConfigPlanChecks : resource.ConfigPlanChecks {
158
+ PreApply : []plancheck.PlanCheck {
159
+ plancheck .ExpectResourceAction (resourceName , plancheck .ResourceActionUpdate ),
160
+ plancheck .ExpectResourceAction (user1ResourceName , plancheck .ResourceActionNoop ),
161
+ plancheck .ExpectResourceAction (user2ResourceName , plancheck .ResourceActionReplace ),
162
+ },
163
+ },
164
+ },
165
+ },
166
+ })
167
+ }
168
+
169
+ func TestAccElastiCacheUserGroup_engineValkey (t * testing.T ) {
170
+ ctx := acctest .Context (t )
171
+ var userGroup awstypes.UserGroup
172
+ rName := acctest .RandomWithPrefix (t , "tf-acc" )
173
+ resourceName := "aws_elasticache_user_group.test"
174
+
175
+ acctest .ParallelTest (ctx , t , resource.TestCase {
176
+ PreCheck : func () { acctest .PreCheck (ctx , t ) },
177
+ ErrorCheck : acctest .ErrorCheck (t , names .ElastiCacheServiceID ),
178
+ ProtoV5ProviderFactories : acctest .ProtoV5ProviderFactories ,
179
+ CheckDestroy : testAccCheckUserGroupDestroy (ctx , t ),
180
+ Steps : []resource.TestStep {
80
181
{
81
182
Config : testAccUserGroupConfig_basic (rName ),
82
183
Check : resource .ComposeTestCheckFunc (
@@ -168,6 +269,11 @@ func TestAccElastiCacheUserGroup_disappears(t *testing.T) {
168
269
acctest .CheckResourceDisappears (ctx , acctest .Provider , tfelasticache .ResourceUserGroup (), resourceName ),
169
270
),
170
271
ExpectNonEmptyPlan : true ,
272
+ ConfigPlanChecks : resource.ConfigPlanChecks {
273
+ PostApplyPostRefresh : []plancheck.PlanCheck {
274
+ plancheck .ExpectResourceAction (resourceName , plancheck .ResourceActionCreate ),
275
+ },
276
+ },
171
277
},
172
278
},
173
279
})
@@ -246,6 +352,32 @@ resource "aws_elasticache_user_group" "test" {
246
352
` , rName ))
247
353
}
248
354
355
+ func testAccUserGroupConfig_rotate (rName string ) string {
356
+ return acctest .ConfigCompose (acctest .ConfigAvailableAZsNoOptIn (), fmt .Sprintf (`
357
+ resource "aws_elasticache_user" "test1" {
358
+ user_id = "%[1]s-1"
359
+ user_name = "default"
360
+ access_string = "on ~app::* -@all +@read +@hash +@bitmap +@geo -setbit -bitfield -hset -hsetnx -hmset -hincrby -hincrbyfloat -hdel -bitop -geoadd -georadius -georadiusbymember"
361
+ engine = "REDIS"
362
+ passwords = ["password123456789"]
363
+ }
364
+
365
+ resource "aws_elasticache_user" "test2" {
366
+ user_id = "%[1]s-3"
367
+ user_name = "username1"
368
+ access_string = "on ~app::* -@all +@read +@hash +@bitmap +@geo -setbit -bitfield -hset -hsetnx -hmset -hincrby -hincrbyfloat -hdel -bitop -geoadd -georadius -georadiusbymember"
369
+ engine = "REDIS"
370
+ passwords = ["password123456789"]
371
+ }
372
+
373
+ resource "aws_elasticache_user_group" "test" {
374
+ user_group_id = %[1]q
375
+ engine = "REDIS"
376
+ user_ids = [aws_elasticache_user.test1.user_id, aws_elasticache_user.test2.user_id]
377
+ }
378
+ ` , rName ))
379
+ }
380
+
249
381
func testAccUserGroupConfig_multiple (rName string ) string {
250
382
return acctest .ConfigCompose (acctest .ConfigAvailableAZsNoOptIn (), fmt .Sprintf (`
251
383
resource "aws_elasticache_user" "test1" {
@@ -282,6 +414,14 @@ resource "aws_elasticache_user" "test1" {
282
414
passwords = ["password123456789"]
283
415
}
284
416
417
+ resource "aws_elasticache_user" "test2" {
418
+ user_id = "%[1]s-2"
419
+ user_name = "username1"
420
+ access_string = "on ~app::* -@all +@read +@hash +@bitmap +@geo -setbit -bitfield -hset -hsetnx -hmset -hincrby -hincrbyfloat -hdel -bitop -geoadd -georadius -georadiusbymember"
421
+ engine = "REDIS"
422
+ passwords = ["password123456789"]
423
+ }
424
+
285
425
resource "aws_elasticache_user_group" "test" {
286
426
user_group_id = %[1]q
287
427
engine = "VALKEY"
0 commit comments