Skip to content

Commit 78eb90e

Browse files
trentrosenbaumburythehammer
authored andcommitted
expands qpf test
1 parent c579845 commit 78eb90e

File tree

1 file changed

+20
-46
lines changed

1 file changed

+20
-46
lines changed

provider/resource_rediscloud_pro_database_qpf_test.go

Lines changed: 20 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
package provider
22

33
import (
4-
"context"
54
"fmt"
65
"os"
76
"regexp"
8-
"strconv"
97
"testing"
108

11-
"github.com/RedisLabs/rediscloud-go-api/redis"
129
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
1310
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
14-
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1511
)
1612

1713
// Generates the base Terraform config for a Pro Subscription with QPF
18-
func proSubscriptionQPFBoilerplate(name, cloudAccountName string) string {
14+
func proSubscriptionQPFBoilerplate(name, cloudAccountName, qpf string) string {
1915
return fmt.Sprintf(`
2016
data "rediscloud_payment_method" "card" {
2117
card_type = "Visa"
@@ -54,15 +50,15 @@ resource "rediscloud_subscription" "example" {
5450
quantity = 1
5551
replication = false
5652
support_oss_cluster_api = false
57-
query_performance_factor = "2x"
53+
query_performance_factor = "%s"
5854
modules = ["RediSearch"]
5955
}
60-
}`, cloudAccountName, name)
56+
}`, cloudAccountName, name, qpf)
6157
}
6258

6359
// Generates Terraform configuration for the database
64-
func formatDatabaseConfig(name, cloudAccountName, password string, extraConfig string) string {
65-
return proSubscriptionQPFBoilerplate(name, cloudAccountName) + fmt.Sprintf(`
60+
func formatDatabaseConfig(name, cloudAccountName, password, qpf, extraConfig string) string {
61+
return proSubscriptionQPFBoilerplate(name, cloudAccountName, qpf) + fmt.Sprintf(`
6662
resource "rediscloud_subscription_database" "example" {
6763
subscription_id = rediscloud_subscription.example.id
6864
name = "example"
@@ -80,7 +76,7 @@ resource "rediscloud_subscription_database" "example" {
8076
client_ssl_certificate = ""
8177
periodic_backup_path = ""
8278
enable_default_user = true
83-
query_performance_factor = "2x"
79+
query_performance_factor = "%s"
8480
8581
alert {
8682
name = "dataset-size"
@@ -93,7 +89,7 @@ resource "rediscloud_subscription_database" "example" {
9389
}
9490
9591
%s
96-
}`, password, extraConfig)
92+
}`, password, qpf, extraConfig)
9793
}
9894

9995
// Generic test helper for error cases
@@ -116,52 +112,30 @@ func TestAccResourceRedisCloudProDatabase_qpf(t *testing.T) {
116112
password := acctest.RandString(20)
117113
testCloudAccountName := os.Getenv("AWS_TEST_CLOUD_ACCOUNT_NAME")
118114

119-
var subId int
120-
121115
resource.ParallelTest(t, resource.TestCase{
122116
PreCheck: func() { testAccPreCheck(t); testAccAwsPreExistingCloudAccountPreCheck(t) },
123117
ProviderFactories: providerFactories,
124118
CheckDestroy: testAccCheckProSubscriptionDestroy,
125119
Steps: []resource.TestStep{
126120
{
127-
Config: formatDatabaseConfig(name, testCloudAccountName, password, `modules = [{ name = "RediSearch" }]`),
121+
Config: formatDatabaseConfig(name, testCloudAccountName, password, "4x", `modules = [{ name = "RediSearch" }]`),
128122
Check: resource.ComposeAggregateTestCheckFunc(
129123
resource.TestCheckResourceAttr("rediscloud_subscription_database.example", "name", "example"),
130124
resource.TestCheckResourceAttr("rediscloud_subscription_database.example", "protocol", "redis"),
131125
resource.TestCheckResourceAttr("rediscloud_subscription_database.example", "dataset_size_in_gb", "3"),
132-
resource.TestCheckResourceAttr("rediscloud_subscription_database.example", "query_performance_factor", "2x"),
126+
resource.TestCheckResourceAttr("rediscloud_subscription_database.example", "query_performance_factor", "4x"),
133127
resource.TestCheckResourceAttr("rediscloud_subscription_database.example", "tags.market", "emea"),
134128
resource.TestCheckResourceAttr("rediscloud_subscription_database.example", "tags.material", "cardboard"),
129+
),
130+
},
135131

136-
func(s *terraform.State) error {
137-
r := s.RootModule().Resources["rediscloud_subscription.example"]
138-
139-
var err error
140-
subId, err = strconv.Atoi(r.Primary.ID)
141-
if err != nil {
142-
return fmt.Errorf("couldn't parse the subscription ID: %s", redis.StringValue(&r.Primary.ID))
143-
}
144-
145-
client := testProvider.Meta().(*apiClient)
146-
sub, err := client.client.Subscription.Get(context.TODO(), subId)
147-
if err != nil {
148-
return err
149-
}
150-
151-
if redis.StringValue(sub.Name) != name {
152-
return fmt.Errorf("unexpected name value: %s", redis.StringValue(sub.Name))
153-
}
154-
155-
listDb := client.client.Database.List(context.TODO(), subId)
156-
if !listDb.Next() {
157-
return fmt.Errorf("no database found: %s", listDb.Err())
158-
}
159-
if listDb.Err() != nil {
160-
return listDb.Err()
161-
}
162-
163-
return nil
164-
},
132+
// Test plan to ensure query_performance_factor change forces a new resource
133+
{
134+
Config: formatDatabaseConfig(name, testCloudAccountName, password, "2x", `modules = [{ name = "RediSearch" }]`),
135+
PlanOnly: true, // Runs terraform plan without applying
136+
ExpectNonEmptyPlan: true, // Ensures that a change is detected
137+
Check: resource.ComposeTestCheckFunc(
138+
resource.TestCheckResourceAttr("rediscloud_subscription_database.example", "query_performance_factor", "2x"),
165139
),
166140
},
167141
},
@@ -173,7 +147,7 @@ func TestAccResourceRedisCloudProDatabase_missingModule(t *testing.T) {
173147
password := acctest.RandString(20)
174148
testCloudAccountName := os.Getenv("AWS_TEST_CLOUD_ACCOUNT_NAME")
175149

176-
config := formatDatabaseConfig(name, testCloudAccountName, password, "")
150+
config := formatDatabaseConfig(name, testCloudAccountName, password, "4x", "")
177151

178152
testErrorCase(t, config, regexp.MustCompile("query_performance_factor\" requires the \"modules\" key to be explicitly defined in HCL"))
179153
}
@@ -183,7 +157,7 @@ func TestAccResourceRedisCloudProDatabase_missingRediSearchModule(t *testing.T)
183157
password := acctest.RandString(20)
184158
testCloudAccountName := os.Getenv("AWS_TEST_CLOUD_ACCOUNT_NAME")
185159

186-
config := formatDatabaseConfig(name, testCloudAccountName, password, `modules = [{ name = "RediBloom" }]`)
160+
config := formatDatabaseConfig(name, testCloudAccountName, password, "4x", `modules = [{ name = "RediBloom" }]`)
187161

188162
testErrorCase(t, config, regexp.MustCompile("query_performance_factor\" requires the \"modules\" list to contain \"RediSearch"))
189163
}

0 commit comments

Comments
 (0)