diff --git a/.github/workflows/migration-tests.yml b/.github/workflows/migration-tests.yml index 65d78b1266..88bdfbea27 100644 --- a/.github/workflows/migration-tests.yml +++ b/.github/workflows/migration-tests.yml @@ -66,6 +66,7 @@ jobs: encryption: ${{ steps.filter.outputs.encryption == 'true' || env.mustTrigger == 'true' }} serverless: ${{ steps.filter.outputs.serverless == 'true' || env.mustTrigger == 'true' }} data_lake: ${{ steps.filter.outputs.data_lake == 'true' || env.mustTrigger == 'true' }} + cluster_outage_simulation: ${{ steps.filter.outputs.cluster_outage_simulation == 'true' || env.mustTrigger == 'true' }} steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd @@ -132,6 +133,8 @@ jobs: - 'internal/service/privatelinkendpointserviceserverless/*.go' data_lake: - 'internal/service/datalakepipeline/*.go' + cluster_outage_simulation: + - 'internal/service/clusteroutagesimulation/*.go' project: needs: [ change-detection, get-provider-version ] @@ -281,12 +284,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 with: go-version-file: 'go.mod' - - uses: hashicorp/setup-terraform@v3 + - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 with: terraform_version: ${{ env.terraform_version }} terraform_wrapper: false @@ -310,12 +313,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 with: go-version-file: 'go.mod' - - uses: hashicorp/setup-terraform@v3 + - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 with: terraform_version: ${{ env.terraform_version }} terraform_wrapper: false @@ -335,12 +338,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 with: go-version-file: 'go.mod' - - uses: hashicorp/setup-terraform@v3 + - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 with: terraform_version: ${{ env.terraform_version }} terraform_wrapper: false @@ -362,12 +365,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 with: go-version-file: 'go.mod' - - uses: hashicorp/setup-terraform@v3 + - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 with: terraform_version: ${{ env.terraform_version }} terraform_wrapper: false @@ -395,12 +398,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 with: go-version-file: 'go.mod' - - uses: hashicorp/setup-terraform@v3 + - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 with: terraform_version: ${{ env.terraform_version }} terraform_wrapper: false @@ -419,12 +422,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 with: go-version-file: 'go.mod' - - uses: hashicorp/setup-terraform@v3 + - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 with: terraform_version: ${{ env.terraform_version }} terraform_wrapper: false @@ -443,12 +446,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 with: go-version-file: 'go.mod' - - uses: hashicorp/setup-terraform@v3 + - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 with: terraform_version: ${{ env.terraform_version }} terraform_wrapper: false @@ -461,3 +464,27 @@ jobs: MONGODB_ATLAS_LAST_VERSION: ${{ needs.get-provider-version.outputs.provider_version }} TEST_REGEX: "^TestAccMigrationcDataLake" run: make testacc + cluster_outage_simulation: + needs: [ change-detection, get-provider-version ] + if: ${{ needs.change-detection.outputs.cluster_outage_simulation == 'true' || inputs.test_group == 'cluster_outage_simulation' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - name: Set up Go + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 + with: + go-version-file: 'go.mod' + - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 + with: + terraform_version: ${{ env.terraform_version }} + terraform_wrapper: false + - name: Migration Tests + env: + MONGODB_ATLAS_PUBLIC_KEY: ${{ secrets.MONGODB_ATLAS_PUBLIC_KEY_CLOUD_DEV }} + MONGODB_ATLAS_PRIVATE_KEY: ${{ secrets.MONGODB_ATLAS_PRIVATE_KEY_CLOUD_DEV }} + MONGODB_ATLAS_ORG_ID: ${{ vars.MONGODB_ATLAS_ORG_ID_CLOUD_DEV }} + MONGODB_ATLAS_BASE_URL: ${{ vars.MONGODB_ATLAS_BASE_URL }} + MONGODB_ATLAS_LAST_VERSION: ${{ needs.get-provider-version.outputs.provider_version }} + TEST_REGEX: "^TestAccMigrationOutageSimulationCluster" + run: make testacc diff --git a/internal/service/clusteroutagesimulation/data_source_cluster_outage_simulation.go b/internal/service/clusteroutagesimulation/data_source_cluster_outage_simulation.go index 79e67b8f95..5afa0c3c8c 100644 --- a/internal/service/clusteroutagesimulation/data_source_cluster_outage_simulation.go +++ b/internal/service/clusteroutagesimulation/data_source_cluster_outage_simulation.go @@ -12,7 +12,7 @@ import ( func DataSource() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceMongoDBAtlasClusterOutageSimulationRead, + ReadContext: dataSourceRead, Schema: map[string]*schema.Schema{ "project_id": { Type: schema.TypeString, @@ -58,8 +58,8 @@ func DataSource() *schema.Resource { } } -func dataSourceMongoDBAtlasClusterOutageSimulationRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { - conn := meta.(*config.MongoDBClient).Atlas +func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { + connV2 := meta.(*config.MongoDBClient).AtlasV2 projectID, projectIDOk := d.GetOk("project_id") clusterName, clusterNameOk := d.GetOk("cluster_name") @@ -68,7 +68,7 @@ func dataSourceMongoDBAtlasClusterOutageSimulationRead(ctx context.Context, d *s return diag.Errorf("project_id and cluster_name must be configured") } - outageSimulation, _, err := conn.ClusterOutageSimulation.GetOutageSimulation(ctx, projectID.(string), clusterName.(string)) + outageSimulation, _, err := connV2.ClusterOutageSimulationApi.GetOutageSimulation(ctx, projectID.(string), clusterName.(string)).Execute() if err != nil { return diag.FromErr(fmt.Errorf(errorClusterOutageSimulationRead, projectID, clusterName, err)) } diff --git a/internal/service/clusteroutagesimulation/data_source_cluster_outage_simulation_test.go b/internal/service/clusteroutagesimulation/data_source_cluster_outage_simulation_test.go index 1e8dc962a9..2153d017ef 100644 --- a/internal/service/clusteroutagesimulation/data_source_cluster_outage_simulation_test.go +++ b/internal/service/clusteroutagesimulation/data_source_cluster_outage_simulation_test.go @@ -21,10 +21,10 @@ func TestAccOutageSimulationClusterDS_SingleRegion_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acc.PreCheckBasic(t) }, ProtoV6ProviderFactories: acc.TestAccProviderV6Factories, - CheckDestroy: testAccCheckMongoDBAtlasClusterOutageSimulationDestroy, + CheckDestroy: checkDestroy, Steps: []resource.TestStep{ { - Config: testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigDSSingleRegion(projectName, orgID, clusterName), + Config: dataSourceConfigSingleRegion(projectName, orgID, clusterName), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "cluster_name", clusterName), resource.TestCheckResourceAttrSet(dataSourceName, "project_id"), @@ -49,10 +49,10 @@ func TestAccOutageSimulationClusterDS_MultiRegion_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acc.PreCheckBasic(t) }, ProtoV6ProviderFactories: acc.TestAccProviderV6Factories, - CheckDestroy: testAccCheckMongoDBAtlasClusterOutageSimulationDestroy, + CheckDestroy: checkDestroy, Steps: []resource.TestStep{ { - Config: testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigDSMultiRegion(projectName, orgID, clusterName), + Config: dataSourceConfigMultiRegion(projectName, orgID, clusterName), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "cluster_name", clusterName), resource.TestCheckResourceAttrSet(dataSourceName, "project_id"), @@ -66,17 +66,17 @@ func TestAccOutageSimulationClusterDS_MultiRegion_basic(t *testing.T) { }) } -func testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigDSSingleRegion(projectName, orgID, clusterName string) string { +func dataSourceConfigSingleRegion(projectName, orgID, clusterName string) string { return fmt.Sprintf(` resource "mongodbatlas_project" "outage_project" { - name = "%s" - org_id = "%s" + name = %[1]q + org_id = %[2]q } resource "mongodbatlas_cluster" "atlas_cluster" { project_id = mongodbatlas_project.outage_project.id provider_name = "AWS" - name = "%s" + name = %[3]q backing_provider_name = "AWS" provider_region_name = "US_EAST_1" provider_instance_size_name = "M10" @@ -101,16 +101,16 @@ func testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigDSSingleRegion(pr `, projectName, orgID, clusterName) } -func testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigDSMultiRegion(projectName, orgID, clusterName string) string { +func dataSourceConfigMultiRegion(projectName, orgID, clusterName string) string { return fmt.Sprintf(` resource "mongodbatlas_project" "outage_project" { - name = "%s" - org_id = "%s" + name = %[1]q + org_id = %[2]q } resource "mongodbatlas_cluster" "atlas_cluster" { project_id = mongodbatlas_project.outage_project.id - name = "%s" + name = %[3]q cluster_type = "REPLICASET" provider_name = "AWS" diff --git a/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation.go b/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation.go index 0d879083e4..3268c75e0e 100644 --- a/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation.go +++ b/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation.go @@ -12,8 +12,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion" "github.com/mongodb/terraform-provider-mongodbatlas/internal/config" - "github.com/mwielbut/pointy" - matlas "go.mongodb.org/atlas/mongodbatlas" + "go.mongodb.org/atlas-sdk/v20231115006/admin" ) const ( @@ -26,10 +25,10 @@ const ( func Resource() *schema.Resource { return &schema.Resource{ - CreateContext: resourceMongoDBClusterOutageSimulationCreate, - ReadContext: resourceMongoDBAClusterOutageSimulationRead, - UpdateContext: resourceMongoDBClusterOutageSimulationUpdate, - DeleteContext: resourceMongoDBAtlasClusterOutageSimulationDelete, + CreateContext: resourceCreate, + ReadContext: resourceRead, + UpdateContext: resourceUpdate, + DeleteContext: resourceDelete, Timeouts: &schema.ResourceTimeout{ Delete: schema.DefaultTimeout(25 * time.Minute), }, @@ -79,17 +78,17 @@ func Resource() *schema.Resource { } } -func resourceMongoDBClusterOutageSimulationCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { - conn := meta.(*config.MongoDBClient).Atlas +func resourceCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { + connV2 := meta.(*config.MongoDBClient).AtlasV2 projectID := d.Get("project_id").(string) clusterName := d.Get("cluster_name").(string) - requestBody := &matlas.ClusterOutageSimulationRequest{ + requestBody := admin.ClusterOutageSimulation{ OutageFilters: newOutageFilters(d), } - _, _, err := conn.ClusterOutageSimulation.StartOutageSimulation(ctx, projectID, clusterName, requestBody) + _, _, err := connV2.ClusterOutageSimulationApi.StartOutageSimulation(ctx, projectID, clusterName, &requestBody).Execute() if err != nil { return diag.FromErr(fmt.Errorf(errorClusterOutageSimulationCreate, projectID, clusterName, err)) } @@ -98,7 +97,7 @@ func resourceMongoDBClusterOutageSimulationCreate(ctx context.Context, d *schema stateConf := &retry.StateChangeConf{ Pending: []string{"START_REQUESTED", "STARTING"}, Target: []string{"SIMULATING"}, - Refresh: resourceClusterOutageSimulationRefreshFunc(ctx, clusterName, projectID, conn), + Refresh: resourceRefreshFunc(ctx, clusterName, projectID, connV2), Timeout: timeout, MinTimeout: 1 * time.Minute, Delay: 3 * time.Minute, @@ -114,31 +113,31 @@ func resourceMongoDBClusterOutageSimulationCreate(ctx context.Context, d *schema "cluster_name": clusterName, })) - return resourceMongoDBAClusterOutageSimulationRead(ctx, d, meta) + return resourceRead(ctx, d, meta) } -func newOutageFilters(d *schema.ResourceData) []matlas.ClusterOutageSimulationOutageFilter { - outageFilters := make([]matlas.ClusterOutageSimulationOutageFilter, len(d.Get("outage_filters").([]any))) +func newOutageFilters(d *schema.ResourceData) *[]admin.AtlasClusterOutageSimulationOutageFilter { + outageFilters := make([]admin.AtlasClusterOutageSimulationOutageFilter, len(d.Get("outage_filters").([]any))) for k, v := range d.Get("outage_filters").([]any) { a := v.(map[string]any) - outageFilters[k] = matlas.ClusterOutageSimulationOutageFilter{ - CloudProvider: pointy.String(a["cloud_provider"].(string)), - RegionName: pointy.String(a["region_name"].(string)), - Type: pointy.String(defaultOutageFilterType), + outageFilters[k] = admin.AtlasClusterOutageSimulationOutageFilter{ + CloudProvider: conversion.StringPtr(a["cloud_provider"].(string)), + RegionName: conversion.StringPtr(a["region_name"].(string)), + Type: conversion.StringPtr(defaultOutageFilterType), } } - return outageFilters + return &outageFilters } -func resourceMongoDBAClusterOutageSimulationRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { - conn := meta.(*config.MongoDBClient).Atlas +func resourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { + connV2 := meta.(*config.MongoDBClient).AtlasV2 ids := conversion.DecodeStateID(d.Id()) projectID := ids["project_id"] clusterName := ids["cluster_name"] - outageSimulation, resp, err := conn.ClusterOutageSimulation.GetOutageSimulation(ctx, projectID, clusterName) + outageSimulation, resp, err := connV2.ClusterOutageSimulationApi.GetOutageSimulation(ctx, projectID, clusterName).Execute() if err != nil { if resp != nil && resp.StatusCode == http.StatusNotFound { @@ -160,14 +159,14 @@ func resourceMongoDBAClusterOutageSimulationRead(ctx context.Context, d *schema. return nil } -func resourceMongoDBAtlasClusterOutageSimulationDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { - conn := meta.(*config.MongoDBClient).Atlas +func resourceDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { + connV2 := meta.(*config.MongoDBClient).AtlasV2 ids := conversion.DecodeStateID(d.Id()) projectID := ids["project_id"] clusterName := ids["cluster_name"] - _, _, err := conn.ClusterOutageSimulation.EndOutageSimulation(ctx, projectID, clusterName) + _, _, err := connV2.ClusterOutageSimulationApi.EndOutageSimulation(ctx, projectID, clusterName).Execute() if err != nil { return diag.FromErr(fmt.Errorf(errorClusterOutageSimulationDelete, projectID, clusterName, err)) } @@ -177,7 +176,7 @@ func resourceMongoDBAtlasClusterOutageSimulationDelete(ctx context.Context, d *s stateConf := &retry.StateChangeConf{ Pending: []string{"RECOVERY_REQUESTED", "RECOVERING", "COMPLETE"}, Target: []string{"DELETED"}, - Refresh: resourceClusterOutageSimulationRefreshFunc(ctx, clusterName, projectID, conn), + Refresh: resourceRefreshFunc(ctx, clusterName, projectID, connV2), Timeout: d.Timeout(schema.TimeoutDelete), MinTimeout: 30 * time.Second, Delay: 1 * time.Minute, @@ -191,13 +190,13 @@ func resourceMongoDBAtlasClusterOutageSimulationDelete(ctx context.Context, d *s return nil } -func resourceMongoDBClusterOutageSimulationUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { +func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { return diag.FromErr(fmt.Errorf("updating a Cluster Outage Simulation is not supported")) } -func resourceClusterOutageSimulationRefreshFunc(ctx context.Context, clusterName, projectID string, client *matlas.Client) retry.StateRefreshFunc { +func resourceRefreshFunc(ctx context.Context, clusterName, projectID string, client *admin.APIClient) retry.StateRefreshFunc { return func() (any, string, error) { - outageSimulation, resp, err := client.ClusterOutageSimulation.GetOutageSimulation(ctx, projectID, clusterName) + outageSimulation, resp, err := client.ClusterOutageSimulationApi.GetOutageSimulation(ctx, projectID, clusterName).Execute() if err != nil { if resp.StatusCode == 404 { @@ -214,24 +213,24 @@ func resourceClusterOutageSimulationRefreshFunc(ctx context.Context, clusterName } } -func convertOutageSimulationToSchema(outageSimulation *matlas.ClusterOutageSimulation, d *schema.ResourceData) error { - if err := d.Set("state", outageSimulation.State); err != nil { +func convertOutageSimulationToSchema(outageSimulation *admin.ClusterOutageSimulation, d *schema.ResourceData) error { + if err := d.Set("state", outageSimulation.GetState()); err != nil { return fmt.Errorf(errorClusterOutageSimulationSetting, "state", err) } - if err := d.Set("start_request_date", outageSimulation.StartRequestDate); err != nil { + if err := d.Set("start_request_date", conversion.TimePtrToStringPtr(outageSimulation.StartRequestDate)); err != nil { return fmt.Errorf(errorClusterOutageSimulationSetting, "start_request_date", err) } - if err := d.Set("simulation_id", outageSimulation.ID); err != nil { + if err := d.Set("simulation_id", outageSimulation.GetId()); err != nil { return fmt.Errorf(errorClusterOutageSimulationSetting, "simulation_id", err) } - if err := d.Set("project_id", outageSimulation.GroupID); err != nil { + if err := d.Set("project_id", outageSimulation.GetGroupId()); err != nil { return fmt.Errorf(errorClusterOutageSimulationSetting, "project_id", err) } - if err := d.Set("cluster_name", outageSimulation.ClusterName); err != nil { + if err := d.Set("cluster_name", outageSimulation.GetClusterName()); err != nil { return fmt.Errorf(errorClusterOutageSimulationSetting, "cluster_name", err) } - if outageFilters := convertOutageFiltersToSchema(outageSimulation.OutageFilters, d); outageFilters != nil { + if outageFilters := convertOutageFiltersToSchema(outageSimulation.GetOutageFilters(), d); outageFilters != nil { if err := d.Set("outage_filters", outageFilters); err != nil { return fmt.Errorf(errorClusterOutageSimulationSetting, "outage_filters", err) } @@ -239,13 +238,13 @@ func convertOutageSimulationToSchema(outageSimulation *matlas.ClusterOutageSimul return nil } -func convertOutageFiltersToSchema(outageFilters []matlas.ClusterOutageSimulationOutageFilter, d *schema.ResourceData) []map[string]any { +func convertOutageFiltersToSchema(outageFilters []admin.AtlasClusterOutageSimulationOutageFilter, d *schema.ResourceData) []map[string]any { outageFilterList := make([]map[string]any, 0) for _, v := range outageFilters { outageFilterList = append(outageFilterList, map[string]any{ - "cloud_provider": v.CloudProvider, - "region_name": v.RegionName, - "type": v.Type, + "cloud_provider": v.GetCloudProvider(), + "region_name": v.GetRegionName(), + "type": v.GetType(), }) } return outageFilterList diff --git a/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation_migration_test.go b/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation_migration_test.go new file mode 100644 index 0000000000..bd583ec6c2 --- /dev/null +++ b/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation_migration_test.go @@ -0,0 +1,70 @@ +package clusteroutagesimulation_test + +import ( + "os" + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/mig" +) + +func TestAccMigrationOutageSimulationCluster_SingleRegion_basic(t *testing.T) { + var ( + resourceName = "mongodbatlas_cluster_outage_simulation.test_outage" + orgID = os.Getenv("MONGODB_ATLAS_ORG_ID") + projectName = acctest.RandomWithPrefix("test-acc-project") + clusterName = acctest.RandomWithPrefix("test-acc-cluster") + config = configSingleRegion(projectName, orgID, clusterName) + ) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { mig.PreCheckBasic(t) }, + CheckDestroy: checkDestroy, + Steps: []resource.TestStep{ + { + ExternalProviders: mig.ExternalProviders(), + Config: config, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "cluster_name", clusterName), + resource.TestCheckResourceAttrSet(resourceName, "project_id"), + resource.TestCheckResourceAttrSet(resourceName, "outage_filters.#"), + resource.TestCheckResourceAttrSet(resourceName, "start_request_date"), + resource.TestCheckResourceAttrSet(resourceName, "simulation_id"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + ), + }, + mig.TestStep(config), + }, + }) +} + +func TestAccMigrationOutageSimulationCluster_MultiRegion_basic(t *testing.T) { + var ( + resourceName = "mongodbatlas_cluster_outage_simulation.test_outage" + orgID = os.Getenv("MONGODB_ATLAS_ORG_ID") + projectName = acctest.RandomWithPrefix("test-acc-project") + clusterName = acctest.RandomWithPrefix("test-acc-cluster") + config = configMultiRegion(projectName, orgID, clusterName) + ) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { mig.PreCheckBasic(t) }, + CheckDestroy: checkDestroy, + Steps: []resource.TestStep{ + { + ExternalProviders: mig.ExternalProviders(), + Config: config, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "cluster_name", clusterName), + resource.TestCheckResourceAttrSet(resourceName, "project_id"), + resource.TestCheckResourceAttrSet(resourceName, "outage_filters.#"), + resource.TestCheckResourceAttrSet(resourceName, "start_request_date"), + resource.TestCheckResourceAttrSet(resourceName, "simulation_id"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + ), + }, + mig.TestStep(config), + }, + }) +} diff --git a/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation_test.go b/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation_test.go index 6f392f047e..1998b5768f 100644 --- a/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation_test.go +++ b/internal/service/clusteroutagesimulation/resource_cluster_outage_simulation_test.go @@ -24,10 +24,10 @@ func TestAccOutageSimulationCluster_SingleRegion_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acc.PreCheckBasic(t) }, ProtoV6ProviderFactories: acc.TestAccProviderV6Factories, - CheckDestroy: testAccCheckMongoDBAtlasClusterOutageSimulationDestroy, + CheckDestroy: checkDestroy, Steps: []resource.TestStep{ { - Config: testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigSingleRegion(projectName, orgID, clusterName), + Config: configSingleRegion(projectName, orgID, clusterName), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "cluster_name", clusterName), resource.TestCheckResourceAttrSet(dataSourceName, "project_id"), @@ -52,10 +52,10 @@ func TestAccOutageSimulationCluster_MultiRegion_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acc.PreCheckBasic(t) }, ProtoV6ProviderFactories: acc.TestAccProviderV6Factories, - CheckDestroy: testAccCheckMongoDBAtlasClusterOutageSimulationDestroy, + CheckDestroy: checkDestroy, Steps: []resource.TestStep{ { - Config: testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigMultiRegion(projectName, orgID, clusterName), + Config: configMultiRegion(projectName, orgID, clusterName), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "cluster_name", clusterName), resource.TestCheckResourceAttrSet(dataSourceName, "project_id"), @@ -69,17 +69,17 @@ func TestAccOutageSimulationCluster_MultiRegion_basic(t *testing.T) { }) } -func testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigSingleRegion(projectName, orgID, clusterName string) string { +func configSingleRegion(projectName, orgID, clusterName string) string { return fmt.Sprintf(` resource "mongodbatlas_project" "outage_project" { - name = "%s" - org_id = "%s" + name = %[1]q + org_id = %[2]q } resource "mongodbatlas_cluster" "atlas_cluster" { project_id = mongodbatlas_project.outage_project.id provider_name = "AWS" - name = "%s" + name = %[3]q backing_provider_name = "AWS" provider_region_name = "US_EAST_1" provider_instance_size_name = "M10" @@ -96,16 +96,16 @@ func testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigSingleRegion(proj `, projectName, orgID, clusterName) } -func testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigMultiRegion(projectName, orgID, clusterName string) string { +func configMultiRegion(projectName, orgID, clusterName string) string { return fmt.Sprintf(` resource "mongodbatlas_project" "outage_project" { - name = "%s" - org_id = "%s" + name = %[1]q + org_id = %[2]q } resource "mongodbatlas_cluster" "atlas_cluster" { project_id = mongodbatlas_project.outage_project.id - name = "%s" + name = %[3]q cluster_type = "REPLICASET" provider_name = "AWS" @@ -149,13 +149,13 @@ func testAccDataSourceMongoDBAtlasClusterOutageSimulationConfigMultiRegion(proje `, projectName, orgID, clusterName) } -func testAccCheckMongoDBAtlasClusterOutageSimulationDestroy(s *terraform.State) error { +func checkDestroy(s *terraform.State) error { for _, rs := range s.RootModule().Resources { if rs.Type != "mongodbatlas_cluster_outage_simulation" { continue } ids := conversion.DecodeStateID(rs.Primary.ID) - _, _, err := acc.Conn().ClusterOutageSimulation.GetOutageSimulation(context.Background(), ids["project_id"], ids["cluster_name"]) + _, _, err := acc.ConnV2().ClusterOutageSimulationApi.GetOutageSimulation(context.Background(), ids["project_id"], ids["cluster_name"]).Execute() if err == nil { return fmt.Errorf("cluster outage simulation for project (%s) and cluster (%s) still exists", ids["project_id"], ids["cluster_name"]) }