Skip to content

Commit 335774a

Browse files
committed
test: testing the essentials database
1 parent 3ee23c8 commit 335774a

File tree

7 files changed

+105
-83
lines changed

7 files changed

+105
-83
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ terraform.tfplan
66
terraform.tfstate
77
bin/
88
dist/
9+
terraform-plugin-dir/
910
.envrc
1011
modules-dev/
1112
/pkg/

docs/data-sources/rediscloud_database.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ data "rediscloud_database" "example" {
3434
## Argument Reference
3535

3636
* `subscription_id` - (Required) ID of the subscription that the database belongs to
37-
* `db_id` - (Optional) The id of the database to filter returned databases
37+
* `db_id` - (Optional) The ID of the database to filter returned databases
3838
* `name` - (Optional) The name of the database to filter returned databases
3939
* `protocol` - (Optional) The protocol of the database to filter returned databases
4040
* `region` - (Optional) The region of the database to filter returned databases

docs/data-sources/rediscloud_essentials_database.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ data "rediscloud_essentials_database" "example" {
3333
## Argument Reference
3434

3535
* `subscription_id` - (Required) ID of the subscription that the database belongs to
36-
* `db_id` - (Optional) The id of the database to filter returned databases
36+
* `db_id` - (Optional) The ID of the database to filter returned databases
3737
* `name` - (Optional) The name of the database to filter returned databases
3838

3939
## Attribute Reference
Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,39 @@
1-
terraform {
2-
required_providers {
3-
rediscloud = {
4-
source = "RedisLabs/rediscloud"
5-
}
6-
}
7-
}
8-
9-
variable "subscription_id" {
10-
type = number
1+
locals {
2+
subscription_name = "%s"
3+
database_name = "%s"
4+
redis_version = "%s"
5+
password = "%s"
116
}
127

13-
variable "database_name" {
14-
type = string
8+
data "rediscloud_payment_method" "card" {
9+
card_type = "Visa"
10+
last_four_numbers = "5556"
1511
}
1612

17-
variable "redis_version" {
18-
type = string
13+
data "rediscloud_essentials_plan" "example" {
14+
name = "Single-Zone_1GB"
15+
cloud_provider = "AWS"
16+
region = "us-east-1"
1917
}
2018

21-
variable "password" {
22-
type = string
23-
sensitive = true
19+
resource "rediscloud_essentials_subscription" "example" {
20+
name = local.subscription_name
21+
plan_id = data.rediscloud_essentials_plan.example.id
22+
payment_method_id = data.rediscloud_payment_method.card.id
2423
}
2524

2625
resource "rediscloud_essentials_database" "example" {
27-
subscription_id = var.subscription_id
28-
name = var.database_name
26+
subscription_id = rediscloud_essentials_subscription.example.id
27+
name = local.database_name
2928
protocol = "redis"
30-
redis_version = var.redis_version
29+
redis_version = local.redis_version
3130
replication = false
3231
data_persistence = "none"
3332

34-
password = var.password
33+
password = local.password
3534

3635
alert {
3736
name = "throughput-higher-than"
3837
value = 80
3938
}
4039
}
41-
42-
output "database_id" {
43-
value = rediscloud_essentials_database.example.db_id
44-
}
45-
46-
output "redis_version" {
47-
value = rediscloud_essentials_database.example.redis_version
48-
}
49-
50-
output "public_endpoint" {
51-
value = rediscloud_essentials_database.example.public_endpoint
52-
}
Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,39 @@
1-
terraform {
2-
required_providers {
3-
rediscloud = {
4-
source = "RedisLabs/rediscloud"
5-
}
6-
}
7-
}
8-
9-
variable "subscription_id" {
10-
type = number
1+
locals {
2+
subscription_name = "%s"
3+
database_name = "%s"
4+
redis_version = "%s"
5+
password = "%s"
116
}
127

13-
variable "database_name" {
14-
type = string
8+
data "rediscloud_payment_method" "card" {
9+
card_type = "Visa"
10+
last_four_numbers = "5556"
1511
}
1612

17-
variable "redis_version" {
18-
type = string
13+
data "rediscloud_essentials_plan" "example" {
14+
name = "Single-Zone_1GB"
15+
cloud_provider = "AWS"
16+
region = "us-east-1"
1917
}
2018

21-
variable "password" {
22-
type = string
23-
sensitive = true
19+
resource "rediscloud_essentials_subscription" "example" {
20+
name = local.subscription_name
21+
plan_id = data.rediscloud_essentials_plan.example.id
22+
payment_method_id = data.rediscloud_payment_method.card.id
2423
}
2524

2625
resource "rediscloud_essentials_database" "example" {
27-
subscription_id = var.subscription_id
28-
name = var.database_name
26+
subscription_id = rediscloud_essentials_subscription.example.id
27+
name = local.database_name
2928
protocol = "redis"
30-
redis_version = var.redis_version # This will be updated during test
29+
redis_version = local.redis_version
3130
replication = false
3231
data_persistence = "aof-every-write"
3332

34-
password = var.password
33+
password = local.password
3534

3635
alert {
3736
name = "throughput-higher-than"
3837
value = 85
3938
}
4039
}
41-
42-
output "database_id" {
43-
value = rediscloud_essentials_database.example.db_id
44-
}
45-
46-
output "redis_version" {
47-
value = rediscloud_essentials_database.example.redis_version
48-
}
49-
50-
output "public_endpoint" {
51-
value = rediscloud_essentials_database.example.public_endpoint
52-
}

provider/resource_rediscloud_essentials_database.go

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -618,14 +618,9 @@ func resourceRedisCloudEssentialsDatabaseUpdate(ctx context.Context, d *schema.R
618618

619619
// Only perform upgrade if both versions are non-empty (prevents unnecessary upgrades on creation)
620620
if originalVersion.(string) != "" && newVersion.(string) != "" {
621-
if upgradeDiags, unlocked := upgradeRedisVersionEssentials(ctx, api, subId, databaseId, newVersion.(string)); upgradeDiags != nil {
622-
if !unlocked {
623-
utils.SubscriptionMutex.Unlock(subId)
624-
}
625-
return append(diag.Diagnostics{}, upgradeDiags...)
621+
if upgradeDiags := upgradeRedisVersionEssentials(ctx, api, subId, databaseId, newVersion.(string)); upgradeDiags != nil {
622+
return upgradeDiags
626623
}
627-
// Lock again since the upgrade function unlocked it
628-
utils.SubscriptionMutex.Lock(subId)
629624
}
630625
}
631626

@@ -764,33 +759,30 @@ func resourceRedisCloudEssentialsDatabaseDelete(ctx context.Context, d *schema.R
764759
return diags
765760
}
766761

767-
func upgradeRedisVersionEssentials(ctx context.Context, api *client.ApiClient, subId int, dbId int, newVersion string) (diag.Diagnostics, bool) {
762+
func upgradeRedisVersionEssentials(ctx context.Context, api *client.ApiClient, subId int, dbId int, newVersion string) diag.Diagnostics {
768763
log.Printf("[INFO] Requesting Redis version change to %s...", newVersion)
769764

770765
upgrade := fixedDatabases.UpgradeRedisVersion{
771766
TargetRedisVersion: redis.String(newVersion),
772767
}
773768

774769
if err := api.Client.FixedDatabases.UpgradeRedisVersion(ctx, subId, dbId, upgrade); err != nil {
775-
utils.SubscriptionMutex.Unlock(subId)
776-
return diag.Errorf("failed to change Redis version to %s: %v", newVersion, err), true
770+
return diag.Errorf("failed to change Redis version to %s: %v", newVersion, err)
777771
}
778772

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

781775
// Wait for database to be active
782776
if err := waitForEssentialsDatabaseToBeActive(ctx, subId, dbId, api); err != nil {
783-
utils.SubscriptionMutex.Unlock(subId)
784-
return diag.FromErr(err), true
777+
return diag.FromErr(err)
785778
}
786779

787780
// Wait for subscription to be active
788781
if err := waitForEssentialsSubscriptionToBeActive(ctx, subId, api); err != nil {
789-
utils.SubscriptionMutex.Unlock(subId)
790-
return diag.FromErr(err), true
782+
return diag.FromErr(err)
791783
}
792784

793-
return nil, false
785+
return nil
794786
}
795787

796788
func waitForEssentialsDatabaseToBeActive(ctx context.Context, subId, id int, api *client.ApiClient) error {

provider/resource_rediscloud_essentials_database_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,49 @@ func TestAccResourceRedisCloudEssentialsDatabase_RedisVersion(t *testing.T) {
368368
})
369369
}
370370

371+
// Test redis_version upgrade - ensures version can be upgraded after database creation
372+
func TestAccResourceRedisCloudEssentialsDatabase_RedisVersionUpgrade(t *testing.T) {
373+
utils.AccRequiresEnvVar(t, "EXECUTE_TESTS")
374+
375+
subscriptionName := acctest.RandomWithPrefix(testResourcePrefix)
376+
databaseName := subscriptionName + "-db"
377+
password := "test-password-123!"
378+
379+
const resourceName = "rediscloud_essentials_database.example"
380+
381+
resource.Test(t, resource.TestCase{
382+
PreCheck: func() { testAccPreCheck(t) },
383+
ProviderFactories: providerFactories,
384+
CheckDestroy: testAccCheckEssentialsSubscriptionDestroy,
385+
Steps: []resource.TestStep{
386+
// Step 1: Create database with Redis 7.2
387+
{
388+
Config: getEssentialsDatabaseConfigWithVersion(t, subscriptionName, databaseName, password, "7.2"),
389+
Check: resource.ComposeAggregateTestCheckFunc(
390+
resource.TestMatchResourceAttr(resourceName, "id", regexp.MustCompile("^\\d+/\\d+$")),
391+
resource.TestCheckResourceAttrSet(resourceName, "subscription_id"),
392+
resource.TestCheckResourceAttrSet(resourceName, "db_id"),
393+
resource.TestCheckResourceAttr(resourceName, "name", databaseName),
394+
resource.TestCheckResourceAttr(resourceName, "redis_version", "7.2"),
395+
resource.TestCheckResourceAttr(resourceName, "data_persistence", "none"),
396+
),
397+
},
398+
// Step 2: Upgrade to Redis 7.4 with updated data_persistence
399+
{
400+
Config: getEssentialsDatabaseConfigWithVersionUpdated(t, subscriptionName, databaseName, password, "7.4"),
401+
Check: resource.ComposeAggregateTestCheckFunc(
402+
resource.TestMatchResourceAttr(resourceName, "id", regexp.MustCompile("^\\d+/\\d+$")),
403+
resource.TestCheckResourceAttr(resourceName, "name", databaseName),
404+
resource.TestCheckResourceAttr(resourceName, "redis_version", "7.4"),
405+
resource.TestCheckResourceAttr(resourceName, "data_persistence", "aof-every-write"),
406+
// Verify database is still active and accessible
407+
resource.TestCheckResourceAttrSet(resourceName, "public_endpoint"),
408+
),
409+
},
410+
},
411+
})
412+
}
413+
371414
const testAccResourceRedisCloudEssentialsDatabaseDisableDefaultUserCreate = `
372415
373416
data "rediscloud_payment_method" "card" {
@@ -452,6 +495,18 @@ resource "rediscloud_essentials_database" "example" {
452495
}
453496
`
454497

498+
// Helper function to load basic essentials database config with version
499+
func getEssentialsDatabaseConfigWithVersion(t *testing.T, subscriptionName, databaseName, password, redisVersion string) string {
500+
content := utils.GetTestConfig(t, "./essentials/testdata/essentials_database_basic.tf")
501+
return fmt.Sprintf(content, subscriptionName, databaseName, redisVersion, password)
502+
}
503+
504+
// Helper function to load updated essentials database config with new version
505+
func getEssentialsDatabaseConfigWithVersionUpdated(t *testing.T, subscriptionName, databaseName, password, redisVersion string) string {
506+
content := utils.GetTestConfig(t, "./essentials/testdata/essentials_database_updated_version.tf")
507+
return fmt.Sprintf(content, subscriptionName, databaseName, redisVersion, password)
508+
}
509+
455510
const testAccResourceRedisCloudEssentialsDatabaseRedisVersion = `
456511
457512
data "rediscloud_payment_method" "card" {

0 commit comments

Comments
 (0)