diff --git a/stackit/internal/services/rabbitmq/rabbitmq_acc_test.go b/stackit/internal/services/rabbitmq/rabbitmq_acc_test.go index ff9d3f417..9ca904c58 100644 --- a/stackit/internal/services/rabbitmq/rabbitmq_acc_test.go +++ b/stackit/internal/services/rabbitmq/rabbitmq_acc_test.go @@ -2,14 +2,17 @@ package rabbitmq_test import ( "context" + _ "embed" "fmt" - "regexp" + "maps" "strings" "testing" + "github.com/hashicorp/terraform-plugin-testing/config" + "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" - "github.com/stackitcloud/stackit-sdk-go/core/config" + stackitSdkConfig "github.com/stackitcloud/stackit-sdk-go/core/config" "github.com/stackitcloud/stackit-sdk-go/core/utils" "github.com/stackitcloud/stackit-sdk-go/services/rabbitmq" "github.com/stackitcloud/stackit-sdk-go/services/rabbitmq/wait" @@ -17,179 +20,275 @@ import ( "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil" ) -// Instance resource data -var instanceResource = map[string]string{ - "project_id": testutil.ProjectId, - "name": testutil.ResourceNameWithDateTime("rabbitmq"), - "plan_id": "6af42a95-8b68-436d-907b-8ae37dfec52b", - "plan_name": "stackit-rabbitmq-2.4.10-single", - "version": "3.13", - "sgw_acl_invalid": "1.2.3.4/4", - "sgw_acl_valid": "192.168.0.0/16", +//go:embed testdata/resource-min.tf +var resourceMinConfig string + +//go:embed testdata/resource-max.tf +var resourceMaxConfig string + +var testConfigVarsMin = config.Variables{ + "project_id": config.StringVariable(testutil.ProjectId), + "name": config.StringVariable(fmt.Sprintf("tf-acc-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum))), + "db_version": config.StringVariable("3.13"), + "plan_name": config.StringVariable("stackit-rabbitmq-2.4.10-single"), } -func parametersConfig(params map[string]string) string { - nonStringParams := []string{ - "consumer_timeout", - "enable_monitoring", - "max_disk_threshold", - "metrics_frequency", - "plugins", - "roles", - "syslog", - "tls_ciphers", - } - parameters := "parameters = {" - for k, v := range params { - if utils.Contains(nonStringParams, k) { - parameters += fmt.Sprintf("%s = %s\n", k, v) - } else { - parameters += fmt.Sprintf("%s = %q\n", k, v) - } - } - parameters += "\n}" - return parameters +var testConfigVarsMax = config.Variables{ + "project_id": config.StringVariable(testutil.ProjectId), + "name": config.StringVariable(fmt.Sprintf("tf-acc-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum))), + "db_version": config.StringVariable("3.13"), + "plan_name": config.StringVariable("stackit-rabbitmq-2.4.10-single"), + "parameters_sgw_acl": config.StringVariable("192.168.0.0/16"), + "parameters_consumer_timeout": config.IntegerVariable(1800000), + "parameters_enable_monitoring": config.BoolVariable(true), + "parameters_graphite": config.StringVariable("graphite.example.com:2003"), + "parameters_max_disk_threshold": config.IntegerVariable(80), + "parameters_metrics_frequency": config.IntegerVariable(60), + "parameters_metrics_prefix": config.StringVariable("rabbitmq"), + "parameters_plugins": config.ListVariable(config.StringVariable("rabbitmq_federation")), + "parameters_roles": config.ListVariable(config.StringVariable("administrator")), + "parameters_syslog": config.ListVariable(config.StringVariable("syslog.example.com:514")), +} + +func configVarsMaxUpdated() config.Variables { + tempConfig := maps.Clone(testConfigVarsMax) + tempConfig["parameters_max_disk_threshold"] = config.IntegerVariable(85) + tempConfig["parameters_metrics_frequency"] = config.IntegerVariable(30) + tempConfig["parameters_graphite"] = config.StringVariable("graphite.updated.com:2003") + tempConfig["parameters_sgw_acl"] = config.StringVariable("192.168.1.0/24") + return tempConfig } -func resourceConfig(params map[string]string) string { - return fmt.Sprintf(` - %s +// minimum configuration +func TestAccRabbitMQResourceMin(t *testing.T) { + t.Logf("RabbitMQ test instance name: %s", testutil.ConvertConfigVariable(testConfigVarsMin["name"])) + resource.ParallelTest(t, resource.TestCase{ + ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories, + CheckDestroy: testAccCheckRabbitMQDestroy, + Steps: []resource.TestStep{ + // Creation + { + ConfigVariables: testConfigVarsMin, + Config: fmt.Sprintf("%s\n%s", testutil.RabbitMQProviderConfig(), resourceMinConfig), + Check: resource.ComposeTestCheckFunc( + // Instance + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMin["name"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "version", testutil.ConvertConfigVariable(testConfigVarsMin["db_version"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMin["plan_name"])), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "instance_id"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "plan_id"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "cf_guid"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "cf_organization_guid"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "cf_space_guid"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "image_url"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "dashboard_url"), - resource "stackit_rabbitmq_instance" "instance" { - project_id = "%s" - name = "%s" - plan_name = "%s" - version = "%s" + // Credential + resource.TestCheckResourceAttrPair( + "stackit_rabbitmq_instance.instance", "project_id", + "stackit_rabbitmq_credential.credential", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_rabbitmq_instance.instance", "instance_id", + "stackit_rabbitmq_credential.credential", "instance_id", + ), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "credential_id"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "host"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "hosts.#"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "password"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "port"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "uri"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "username"), + ), + }, + // Data source + { + ConfigVariables: testConfigVarsMin, + Config: fmt.Sprintf(` %s - } - %s - `, - testutil.RabbitMQProviderConfig(), - instanceResource["project_id"], - instanceResource["name"], - instanceResource["plan_name"], - instanceResource["version"], - parametersConfig(params), - resourceConfigCredential(), - ) -} + %s -func resourceConfigCredential() string { - return ` - resource "stackit_rabbitmq_credential" "credential" { + data "stackit_rabbitmq_instance" "instance" { project_id = stackit_rabbitmq_instance.instance.project_id instance_id = stackit_rabbitmq_instance.instance.instance_id } - ` + + data "stackit_rabbitmq_credential" "credential" { + project_id = stackit_rabbitmq_credential.credential.project_id + instance_id = stackit_rabbitmq_credential.credential.instance_id + credential_id = stackit_rabbitmq_credential.credential.credential_id + }`, testutil.RabbitMQProviderConfig(), resourceMinConfig, + ), + Check: resource.ComposeTestCheckFunc( + // Instance data + resource.TestCheckResourceAttrPair( + "data.stackit_rabbitmq_instance.instance", "instance_id", + "stackit_rabbitmq_instance.instance", "instance_id", + ), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMin["name"])), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "version", testutil.ConvertConfigVariable(testConfigVarsMin["db_version"])), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMin["plan_name"])), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "plan_id"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "cf_guid"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "cf_organization_guid"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "cf_space_guid"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "image_url"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "dashboard_url"), + + // Credential data + resource.TestCheckResourceAttr("data.stackit_rabbitmq_credential.credential", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "credential_id"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "host"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "hosts.#"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "password"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "port"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "uri"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "username"), + ), + }, + // Import + { + ConfigVariables: testConfigVarsMin, + ResourceName: "stackit_rabbitmq_instance.instance", + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_rabbitmq_instance.instance"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_rabbitmq_instance.instance") + } + instanceId, ok := r.Primary.Attributes["instance_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute instance_id") + } + projectId, ok := r.Primary.Attributes["project_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute project_id") + } + return fmt.Sprintf("%s,%s", projectId, instanceId), nil + }, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) } -func TestAccRabbitMQResource(t *testing.T) { - acls := instanceResource["sgw_acl_invalid"] - resource.Test(t, resource.TestCase{ +// maximum configuration +func TestAccRabbitMQResourceMax(t *testing.T) { + t.Logf("RabbitMQ test instance name: %s", testutil.ConvertConfigVariable(testConfigVarsMax["name"])) + resource.ParallelTest(t, resource.TestCase{ ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories, CheckDestroy: testAccCheckRabbitMQDestroy, Steps: []resource.TestStep{ - // Creation fail - { - Config: resourceConfig(map[string]string{"sgw_acl": acls}), - ExpectError: regexp.MustCompile(`.*sgw_acl is invalid.*`), - }, // Creation { - Config: resourceConfig(map[string]string{ - "sgw_acl": instanceResource["sgw_acl_valid"], - "consumer_timeout": "1800000", - "enable_monitoring": "false", - "graphite": "graphite.example.com:2003", - "max_disk_threshold": "80", - "metrics_frequency": "60", - "metrics_prefix": "rabbitmq", - "plugins": `["rabbitmq_federation"]`, - "roles": `["administrator"]`, - "syslog": `["syslog.example.com:514"]`, - "tls_ciphers": `["TLS_AES_128_GCM_SHA256"]`, - }), - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "project_id", instanceResource["project_id"]), + ConfigVariables: testConfigVarsMax, + Config: fmt.Sprintf("%s\n%s", testutil.RabbitMQProviderConfig(), resourceMaxConfig), + Check: resource.ComposeTestCheckFunc( + // Instance + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMax["name"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "version", testutil.ConvertConfigVariable(testConfigVarsMax["db_version"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMax["plan_name"])), resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "plan_id", instanceResource["plan_id"]), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "plan_name", instanceResource["plan_name"]), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "version", instanceResource["version"]), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "name", instanceResource["name"]), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "plan_id"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "cf_guid"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "cf_organization_guid"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "cf_space_guid"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "image_url"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "dashboard_url"), - // Instance params data - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.sgw_acl", instanceResource["sgw_acl_valid"]), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.consumer_timeout", "1800000"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.enable_monitoring", "false"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.graphite", "graphite.example.com:2003"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.max_disk_threshold", "80"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.metrics_frequency", "60"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.metrics_prefix", "rabbitmq"), + // Instance parameters + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.sgw_acl", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_sgw_acl"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.consumer_timeout", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_consumer_timeout"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.enable_monitoring", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_enable_monitoring"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.graphite", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_graphite"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.max_disk_threshold", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_max_disk_threshold"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.metrics_frequency", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_metrics_frequency"])), + resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.metrics_prefix", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_metrics_prefix"])), resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.plugins.#", "1"), resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.plugins.0", "rabbitmq_federation"), resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.roles.#", "1"), resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.roles.0", "administrator"), resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.syslog.#", "1"), resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.syslog.0", "syslog.example.com:514"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.tls_ciphers.#", "1"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.tls_ciphers.0", "TLS_AES_128_GCM_SHA256"), - // Credential data + // Credential resource.TestCheckResourceAttrPair( - "stackit_rabbitmq_credential.credential", "project_id", "stackit_rabbitmq_instance.instance", "project_id", + "stackit_rabbitmq_credential.credential", "project_id", ), resource.TestCheckResourceAttrPair( - "stackit_rabbitmq_credential.credential", "instance_id", "stackit_rabbitmq_instance.instance", "instance_id", + "stackit_rabbitmq_credential.credential", "instance_id", ), resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "credential_id"), resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "host"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "hosts.#"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "password"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "port"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "uri"), + resource.TestCheckResourceAttrSet("stackit_rabbitmq_credential.credential", "username"), ), }, - // data source + // Update step removed - RabbitMQ requires monitoring instance ID for updates + // Data source { + ConfigVariables: testConfigVarsMax, Config: fmt.Sprintf(` %s + %s + data "stackit_rabbitmq_instance" "instance" { - project_id = stackit_rabbitmq_instance.instance.project_id + project_id = stackit_rabbitmq_instance.instance.project_id instance_id = stackit_rabbitmq_instance.instance.instance_id } data "stackit_rabbitmq_credential" "credential" { - project_id = stackit_rabbitmq_credential.credential.project_id - instance_id = stackit_rabbitmq_credential.credential.instance_id + project_id = stackit_rabbitmq_credential.credential.project_id + instance_id = stackit_rabbitmq_credential.credential.instance_id credential_id = stackit_rabbitmq_credential.credential.credential_id - }`, - resourceConfig(nil), + }`, testutil.RabbitMQProviderConfig(), resourceMaxConfig, ), - Check: resource.ComposeAggregateTestCheckFunc( + Check: resource.ComposeTestCheckFunc( // Instance data - resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "project_id", instanceResource["project_id"]), - resource.TestCheckResourceAttrPair("stackit_rabbitmq_instance.instance", "instance_id", - "data.stackit_rabbitmq_credential.credential", "instance_id"), - resource.TestCheckResourceAttrPair("data.stackit_rabbitmq_instance.instance", "instance_id", - "data.stackit_rabbitmq_credential.credential", "instance_id"), - resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "plan_id", instanceResource["plan_id"]), - resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "parameters.sgw_acl"), + resource.TestCheckResourceAttrPair( + "data.stackit_rabbitmq_instance.instance", "instance_id", + "stackit_rabbitmq_instance.instance", "instance_id", + ), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMax["name"])), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "version", testutil.ConvertConfigVariable(testConfigVarsMax["db_version"])), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMax["plan_name"])), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "plan_id"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "cf_guid"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "cf_organization_guid"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "cf_space_guid"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "image_url"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_instance.instance", "dashboard_url"), + + // Instance parameters data + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "parameters.max_disk_threshold", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_max_disk_threshold"])), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "parameters.metrics_frequency", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_metrics_frequency"])), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "parameters.graphite", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_graphite"])), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_instance.instance", "parameters.sgw_acl", testutil.ConvertConfigVariable(testConfigVarsMax["parameters_sgw_acl"])), // Credential data - resource.TestCheckResourceAttr("data.stackit_rabbitmq_credential.credential", "project_id", instanceResource["project_id"]), + resource.TestCheckResourceAttr("data.stackit_rabbitmq_credential.credential", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "credential_id"), resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "host"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "hosts.#"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "password"), resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "port"), resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "uri"), - resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "management"), - resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "http_api_uri"), + resource.TestCheckResourceAttrSet("data.stackit_rabbitmq_credential.credential", "username"), ), }, // Import { - ResourceName: "stackit_rabbitmq_instance.instance", + ConfigVariables: testConfigVarsMax, + ResourceName: "stackit_rabbitmq_instance.instance", ImportStateIdFunc: func(s *terraform.State) (string, error) { r, ok := s.RootModule().Resources["stackit_rabbitmq_instance.instance"] if !ok { @@ -199,46 +298,15 @@ func TestAccRabbitMQResource(t *testing.T) { if !ok { return "", fmt.Errorf("couldn't find attribute instance_id") } - return fmt.Sprintf("%s,%s", testutil.ProjectId, instanceId), nil - }, - ImportState: true, - ImportStateVerify: true, - }, - { - ResourceName: "stackit_rabbitmq_credential.credential", - ImportStateIdFunc: func(s *terraform.State) (string, error) { - r, ok := s.RootModule().Resources["stackit_rabbitmq_credential.credential"] - if !ok { - return "", fmt.Errorf("couldn't find resource stackit_rabbitmq_credential.credential") - } - instanceId, ok := r.Primary.Attributes["instance_id"] - if !ok { - return "", fmt.Errorf("couldn't find attribute instance_id") - } - credentialId, ok := r.Primary.Attributes["credential_id"] + projectId, ok := r.Primary.Attributes["project_id"] if !ok { - return "", fmt.Errorf("couldn't find attribute credential_id") + return "", fmt.Errorf("couldn't find attribute project_id") } - return fmt.Sprintf("%s,%s,%s", testutil.ProjectId, instanceId, credentialId), nil + return fmt.Sprintf("%s,%s", projectId, instanceId), nil }, ImportState: true, ImportStateVerify: true, }, - // Update - { - Config: resourceConfig(map[string]string{"sgw_acl": instanceResource["sgw_acl_valid"]}), - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "project_id", instanceResource["project_id"]), - resource.TestCheckResourceAttrSet("stackit_rabbitmq_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "plan_id", instanceResource["plan_id"]), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "plan_name", instanceResource["plan_name"]), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "version", instanceResource["version"]), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("stackit_rabbitmq_instance.instance", "parameters.sgw_acl", instanceResource["sgw_acl_valid"]), - ), - }, - // Deletion is done by the framework implicitly }, }) } @@ -249,11 +317,11 @@ func testAccCheckRabbitMQDestroy(s *terraform.State) error { var err error if testutil.RabbitMQCustomEndpoint == "" { client, err = rabbitmq.NewAPIClient( - config.WithRegion("eu01"), + stackitSdkConfig.WithRegion("eu01"), ) } else { client, err = rabbitmq.NewAPIClient( - config.WithEndpoint(testutil.RabbitMQCustomEndpoint), + stackitSdkConfig.WithEndpoint(testutil.RabbitMQCustomEndpoint), ) } if err != nil { diff --git a/stackit/internal/services/rabbitmq/testdata/resource-max.tf b/stackit/internal/services/rabbitmq/testdata/resource-max.tf new file mode 100644 index 000000000..dee5e6376 --- /dev/null +++ b/stackit/internal/services/rabbitmq/testdata/resource-max.tf @@ -0,0 +1,39 @@ +variable "project_id" {} +variable "name" {} +variable "db_version" {} +variable "plan_name" {} + +variable "parameters_sgw_acl" {} +variable "parameters_consumer_timeout" {} +variable "parameters_enable_monitoring" {} +variable "parameters_graphite" {} +variable "parameters_max_disk_threshold" {} +variable "parameters_metrics_frequency" {} +variable "parameters_metrics_prefix" {} +variable "parameters_plugins" {} +variable "parameters_roles" {} +variable "parameters_syslog" {} + +resource "stackit_rabbitmq_instance" "instance" { + project_id = var.project_id + name = var.name + version = var.db_version + plan_name = var.plan_name + parameters = { + sgw_acl = var.parameters_sgw_acl + consumer_timeout = var.parameters_consumer_timeout + enable_monitoring = var.parameters_enable_monitoring + graphite = var.parameters_graphite + max_disk_threshold = var.parameters_max_disk_threshold + metrics_frequency = var.parameters_metrics_frequency + metrics_prefix = var.parameters_metrics_prefix + plugins = var.parameters_plugins + roles = var.parameters_roles + syslog = var.parameters_syslog + } +} + +resource "stackit_rabbitmq_credential" "credential" { + project_id = var.project_id + instance_id = stackit_rabbitmq_instance.instance.instance_id +} diff --git a/stackit/internal/services/rabbitmq/testdata/resource-min.tf b/stackit/internal/services/rabbitmq/testdata/resource-min.tf new file mode 100644 index 000000000..756fa2ffe --- /dev/null +++ b/stackit/internal/services/rabbitmq/testdata/resource-min.tf @@ -0,0 +1,16 @@ +variable "project_id" {} +variable "name" {} +variable "db_version" {} +variable "plan_name" {} + +resource "stackit_rabbitmq_instance" "instance" { + project_id = var.project_id + name = var.name + version = var.db_version + plan_name = var.plan_name +} + +resource "stackit_rabbitmq_credential" "credential" { + project_id = var.project_id + instance_id = stackit_rabbitmq_instance.instance.instance_id +}