Skip to content

Commit 47c55db

Browse files
committed
test: updating test for upgrade of redis8 and fixing issues
1 parent b2e9e11 commit 47c55db

File tree

5 files changed

+112
-67
lines changed

5 files changed

+112
-67
lines changed

provider/pro/resource_rediscloud_pro_database.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,21 @@ func resourceRedisCloudProDatabaseRead(ctx context.Context, d *schema.ResourceDa
542542
return diag.FromErr(err)
543543
}
544544

545-
if err := d.Set("modules", FlattenModules(db.Modules)); err != nil {
546-
return diag.FromErr(err)
545+
// For Redis 8.0+, modules are bundled by default and returned by the API
546+
// Only set modules in state if they were explicitly defined in the config
547+
redisVersion := redis.StringValue(db.RedisVersion)
548+
if redisVersion >= "8.0" {
549+
// Only set modules if they were explicitly configured by the user
550+
if _, ok := d.GetOk("modules"); ok {
551+
if err := d.Set("modules", FlattenModules(db.Modules)); err != nil {
552+
return diag.FromErr(err)
553+
}
554+
}
555+
} else {
556+
// For Redis < 8.0, always set modules from API response
557+
if err := d.Set("modules", FlattenModules(db.Modules)); err != nil {
558+
return diag.FromErr(err)
559+
}
547560
}
548561

549562
if err := d.Set("alert", FlattenAlerts(db.Alerts)); err != nil {
@@ -841,12 +854,16 @@ func upgradeRedisVersion(ctx context.Context, api *client.ApiClient, subId int,
841854

842855
log.Printf("[INFO] Redis version change request to %s accepted by API", newVersion)
843856

844-
// wait for upgrade
845857
if err := utils.WaitForDatabaseToBeActive(ctx, subId, dbId, api); err != nil {
846858
utils.SubscriptionMutex.Unlock(subId)
847859
return diag.FromErr(err), true
848860
}
849861

862+
if err := utils.WaitForSubscriptionToBeActive(ctx, subId, api); err != nil {
863+
utils.SubscriptionMutex.Unlock(subId)
864+
return diag.FromErr(err), true
865+
}
866+
850867
return nil, false
851868
}
852869

provider/pro/testdata/pro_database_redis_8_update.tf renamed to provider/pro/testdata/pro_database_redis_7.tf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
locals {
22
rediscloud_cloud_account = "%s"
33
rediscloud_subscription_name = "%s"
4+
rediscloud_database_password = "%s"
45
}
56

67
data "rediscloud_payment_method" "card" {
@@ -53,7 +54,7 @@ resource "rediscloud_subscription_database" "example" {
5354
client_ssl_certificate = ""
5455
periodic_backup_path = ""
5556
enable_default_user = true
56-
redis_version = "8.0"
57+
redis_version = "7.2"
5758

5859
alert {
5960
name = "dataset-size"

provider/pro/testdata/pro_database_redis_8.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ resource "rediscloud_subscription_database" "example" {
5454
client_ssl_certificate = ""
5555
periodic_backup_path = ""
5656
enable_default_user = true
57-
redis_version = "7.2"
57+
redis_version = "8.0"
5858

5959
alert {
6060
name = "dataset-size"

provider/resource_rediscloud_pro_database_redis_8_test.go

Lines changed: 89 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import (
1616
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1717
)
1818

19-
// Checks CRUDI (CREATE, READ, UPDATE, IMPORT) operations on the database resource with Redis 8.
20-
func TestAccResourceRedisCloudProDatabase_Redis8_CRUDI(t *testing.T) {
19+
// checks that a redis 8 database can be provisioned
20+
func TestAccResourceRedisCloudProDatabase_Redis8(t *testing.T) {
2121

2222
utils.AccRequiresEnvVar(t, "EXECUTE_TESTS")
2323

@@ -34,9 +34,90 @@ func TestAccResourceRedisCloudProDatabase_Redis8_CRUDI(t *testing.T) {
3434
ProviderFactories: providerFactories,
3535
CheckDestroy: testAccCheckProSubscriptionDestroy,
3636
Steps: []resource.TestStep{
37-
// Test database and replica database creation with Redis 7.2
3837
{
3938
Config: getRedis8DatabaseConfig(t, testCloudAccountName, name, password),
39+
Check: resource.ComposeAggregateTestCheckFunc(
40+
resource.TestCheckResourceAttr(resourceName, "name", "example"),
41+
resource.TestCheckResourceAttr(resourceName, "protocol", "redis"),
42+
resource.TestCheckResourceAttr(resourceName, "dataset_size_in_gb", "3"),
43+
resource.TestCheckResourceAttr(resourceName, "replication", "false"),
44+
resource.TestCheckResourceAttr(resourceName, "support_oss_cluster_api", "false"),
45+
resource.TestCheckResourceAttr(resourceName, "resp_version", "resp3"),
46+
resource.TestCheckResourceAttr(resourceName, "throughput_measurement_by", "operations-per-second"),
47+
resource.TestCheckResourceAttr(resourceName, "throughput_measurement_value", "1000"),
48+
resource.TestCheckResourceAttr(resourceName, "data_persistence", "none"),
49+
resource.TestCheckResourceAttr(resourceName, "data_eviction", "allkeys-random"),
50+
resource.TestCheckResourceAttr(resourceName, "average_item_size_in_bytes", "0"),
51+
resource.TestCheckResourceAttr(resourceName, "client_ssl_certificate", ""),
52+
resource.TestCheckResourceAttr(resourceName, "periodic_backup_path", ""),
53+
resource.TestCheckResourceAttr(resourceName, "external_endpoint_for_oss_cluster_api", "false"),
54+
resource.TestCheckResourceAttr(resourceName, "password", password),
55+
resource.TestCheckResourceAttr(resourceName, "alert.#", "1"),
56+
resource.TestCheckResourceAttr(resourceName, "alert.0.name", "dataset-size"),
57+
resource.TestCheckResourceAttr(resourceName, "alert.0.value", "1"),
58+
resource.TestCheckResourceAttr(resourceName, "enable_default_user", "true"),
59+
resource.TestCheckResourceAttr(resourceName, "redis_version", "8.0"),
60+
61+
resource.TestCheckResourceAttr(resourceName, "tags.market", "emea"),
62+
resource.TestCheckResourceAttr(resourceName, "tags.material", "cardboard"),
63+
64+
// Test databases exist
65+
func(s *terraform.State) error {
66+
r := s.RootModule().Resources[subscriptionResourceName]
67+
68+
var err error
69+
subId, err = strconv.Atoi(r.Primary.ID)
70+
if err != nil {
71+
return fmt.Errorf("couldn't parse the subscription ID: %s", redis.StringValue(&r.Primary.ID))
72+
}
73+
74+
apiClient := testProvider.Meta().(*client.ApiClient)
75+
sub, err := apiClient.Client.Subscription.Get(context.TODO(), subId)
76+
if err != nil {
77+
return err
78+
}
79+
80+
if redis.StringValue(sub.Name) != name {
81+
return fmt.Errorf("unexpected name value: %s", redis.StringValue(sub.Name))
82+
}
83+
84+
listDb := apiClient.Client.Database.List(context.TODO(), subId)
85+
if listDb.Next() != true {
86+
return fmt.Errorf("no database found: %s", listDb.Err())
87+
}
88+
if listDb.Err() != nil {
89+
return listDb.Err()
90+
}
91+
92+
return nil
93+
},
94+
),
95+
},
96+
},
97+
})
98+
}
99+
100+
// Checks that users can upgrade from 7.2 to 8.0
101+
func TestAccResourceRedisCloudProDatabase_Redis8_Upgrade(t *testing.T) {
102+
103+
utils.AccRequiresEnvVar(t, "EXECUTE_TESTS")
104+
105+
name := acctest.RandomWithPrefix(testResourcePrefix)
106+
password := acctest.RandString(20)
107+
const resourceName = "rediscloud_subscription_database.example"
108+
const subscriptionResourceName = "rediscloud_subscription.example"
109+
testCloudAccountName := os.Getenv("AWS_TEST_CLOUD_ACCOUNT_NAME")
110+
111+
var subId int
112+
113+
resource.ParallelTest(t, resource.TestCase{
114+
PreCheck: func() { testAccPreCheck(t); testAccAwsPreExistingCloudAccountPreCheck(t) },
115+
ProviderFactories: providerFactories,
116+
CheckDestroy: testAccCheckProSubscriptionDestroy,
117+
Steps: []resource.TestStep{
118+
// Test database and replica database creation with Redis 7.2
119+
{
120+
Config: getRedis7DatabaseConfig(t, testCloudAccountName, name, password),
40121
Check: resource.ComposeAggregateTestCheckFunc(
41122
resource.TestCheckResourceAttr(resourceName, "name", "example"),
42123
resource.TestCheckResourceAttr(resourceName, "protocol", "redis"),
@@ -96,7 +177,7 @@ func TestAccResourceRedisCloudProDatabase_Redis8_CRUDI(t *testing.T) {
96177
},
97178
// Test database is updated successfully to Redis 8.0
98179
{
99-
Config: getRedis8DatabaseUpdateConfig(t, testCloudAccountName, name, password),
180+
Config: getRedis8DatabaseConfig(t, testCloudAccountName, name, password),
100181
Check: resource.ComposeAggregateTestCheckFunc(
101182
resource.TestCheckResourceAttr(resourceName, "redis_version", "8.0"),
102183
),
@@ -126,13 +207,13 @@ func TestAccResourceRedisCloudProDatabase_Redis8_ModulesBlocked(t *testing.T) {
126207
})
127208
}
128209

129-
func getRedis8DatabaseConfig(t *testing.T, cloudAccountName, subscriptionName, password string) string {
130-
content := utils.GetTestConfig(t, "./pro/testdata/pro_database_redis_8.tf")
210+
func getRedis7DatabaseConfig(t *testing.T, cloudAccountName, subscriptionName, password string) string {
211+
content := utils.GetTestConfig(t, "./pro/testdata/pro_database_redis_7.tf")
131212
return fmt.Sprintf(content, cloudAccountName, subscriptionName, password)
132213
}
133214

134-
func getRedis8DatabaseUpdateConfig(t *testing.T, cloudAccountName, subscriptionName, password string) string {
135-
content := utils.GetTestConfig(t, "./pro/testdata/pro_database_redis_8_update.tf")
215+
func getRedis8DatabaseConfig(t *testing.T, cloudAccountName, subscriptionName, password string) string {
216+
content := utils.GetTestConfig(t, "./pro/testdata/pro_database_redis_8.tf")
136217
return fmt.Sprintf(content, cloudAccountName, subscriptionName, password)
137218
}
138219

provider/resource_rediscloud_pro_database_upgrade_test.go

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)