11package provider
22
33import (
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 (`
2016data "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 (`
6662resource "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