From 73d97e7abae7025510616a861f9ed8913ee0cac4 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Fri, 31 Oct 2025 12:43:45 +0100 Subject: [PATCH 01/17] logic for handling unpause of cluster --- .../cluster/cmd/resource/resource.go | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/cfn-resources/cluster/cmd/resource/resource.go b/cfn-resources/cluster/cmd/resource/resource.go index ffb0b89dc..f4c189e4e 100644 --- a/cfn-resources/cluster/cmd/resource/resource.go +++ b/cfn-resources/cluster/cmd/resource/resource.go @@ -120,9 +120,19 @@ func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler return updateClusterCallback(client, currentModel, *currentModel.ProjectId) } currentModel.validateDefaultLabel() + + currentCluster, resp, err := client.Atlas20231115014.ClustersApi.GetCluster(context.Background(), *currentModel.ProjectId, *currentModel.Name).Execute() + if pe := util.HandleClusterError(err, resp); pe != nil { + return *pe, nil + } + + // handle unpausing update + if pe, _ := handleUnpausingUpdate(client, currentCluster, currentModel); pe != nil { + return *pe, nil + } + adminCluster, errEvent := setClusterRequest(currentModel) if len(adminCluster.GetReplicationSpecs()) > 0 { - currentCluster, _, _ := client.Atlas20231115014.ClustersApi.GetCluster(context.Background(), *currentModel.ProjectId, *currentModel.Name).Execute() if currentCluster != nil { adminCluster.ReplicationSpecs = AddReplicationSpecIDs(currentCluster.GetReplicationSpecs(), adminCluster.GetReplicationSpecs()) } @@ -150,6 +160,26 @@ func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler return event, nil } +func handleUnpausingUpdate(client *util.MongoDBClient, currentCluster *admin20231115014.AdvancedClusterDescription, currentModel *Model) (*handler.ProgressEvent, error) { + if (currentCluster.Paused != nil && *currentCluster.Paused) && (currentModel.Paused == nil || !*currentModel.Paused) { + cluster, resp, err := client.Atlas20231115014.ClustersApi.UpdateCluster(context.Background(), *currentModel.ProjectId, *currentModel.Name, + &admin20231115014.AdvancedClusterDescription{Paused: admin20231115014.PtrBool(false)}).Execute() + if pe := util.HandleClusterError(err, resp); pe != nil { + return pe, nil + } + // returns InProgress event directly, if any other changes are made they will not be performed as part of this update operation + event := handler.ProgressEvent{ + OperationStatus: handler.InProgress, + Message: fmt.Sprintf("Unpausing Cluster %s", *cluster.StateName), + ResourceModel: currentModel, + CallbackDelaySeconds: callBackSeconds, + CallbackContext: callbackContext, + } + return &event, nil + } + return nil, nil +} + // Delete handles the Delete event from the Cloudformation service. func Delete(req handler.Request, prevModel *Model, currentModel *Model) (handler.ProgressEvent, error) { client, setupErr := setupRequest(req, currentModel, createReadUpdateDeleteRequiredFields) From 16ffc234fb1e887eacd17d5ddaf82c470f39d3cd Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Fri, 31 Oct 2025 19:12:56 +0100 Subject: [PATCH 02/17] adding e2e test replicating pause and unpause --- .github/workflows/e2e-testing.yaml | 2 +- .../e2e/cluster/cluster_pause.json.template | 41 ++++ .../test/e2e/cluster/cluster_pause_test.go | 216 ++++++++++++++++++ 3 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 cfn-resources/test/e2e/cluster/cluster_pause.json.template create mode 100644 cfn-resources/test/e2e/cluster/cluster_pause_test.go diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index 308f3b5c7..03f313454 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -63,7 +63,7 @@ jobs: MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action run: | cd cfn-resources/test/e2e/cluster - go test -timeout 90m -v cluster_test.go + go test -timeout 90m -v cluster_test.go cluster_pause_test.go flex-cluster: diff --git a/cfn-resources/test/e2e/cluster/cluster_pause.json.template b/cfn-resources/test/e2e/cluster/cluster_pause.json.template new file mode 100644 index 000000000..86080aaf4 --- /dev/null +++ b/cfn-resources/test/e2e/cluster/cluster_pause.json.template @@ -0,0 +1,41 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Minimal template to exercise pausing/unpausing a single REPLICASET cluster", + "Resources": { + "Cluster": { + "Type": "{{ .ResourceTypeName }}", + "Properties": { + "Name": "{{ .Name }}", + "ProjectId": "{{ .ProjectID }}", + "Profile": "{{ .Profile }}", + "ClusterType": "REPLICASET", + "Paused": "{{ .Paused }}", + "ReplicationSpecs": [ + { + "NumShards": 1, + "AdvancedRegionConfigs": [ + { + "RegionName": "US_EAST_1", + "Priority": 7, + "ProviderName": "AWS", + "ElectableSpecs": { + "EbsVolumeType": "STANDARD", + "InstanceSize": "M10", + "NodeCount": 3 + } + } + ] + } + ] + } + } + }, + "Outputs": { + "MongoDBAtlasClusterID": { + "Description": "Cluster Id", + "Value": { "Fn::GetAtt": ["Cluster", "Id"] } + } + } +} + + diff --git a/cfn-resources/test/e2e/cluster/cluster_pause_test.go b/cfn-resources/test/e2e/cluster/cluster_pause_test.go new file mode 100644 index 000000000..57bb038fe --- /dev/null +++ b/cfn-resources/test/e2e/cluster/cluster_pause_test.go @@ -0,0 +1,216 @@ +// Copyright 2024 MongoDB Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package cluster_test + +import ( + ctx "context" + "os" + "testing" + + "github.com/aws/aws-sdk-go-v2/service/cloudformation" + "github.com/mongodb/mongodbatlas-cloudformation-resources/test/e2e/utility" + "github.com/stretchr/testify/assert" + admin20231115014 "go.mongodb.org/atlas-sdk/v20231115014/admin" +) + +type pauseTestContext struct { + cfnClient *cloudformation.Client + atlasClient20231115014 *admin20231115014.APIClient + resourceCtx utility.ResourceContext + template string + clusterTmplObj pauseTestCluster +} + +type pauseTestCluster struct { + ResourceTypeName string + Name string + Profile string + ProjectID string + Paused string +} + +const ( + pauseResourceDirectory = "cluster" + pauseCfnTemplatePath = "cluster_pause.json.template" +) + +// Replication specs are hardcoded in the CFN template for this test. + +var ( + pauseProfile = os.Getenv("MONGODB_ATLAS_SECRET_PROFILE") + pauseOrgID = os.Getenv("MONGODB_ATLAS_ORG_ID") + pauseRandSuffix = utility.GetRandNum().String() + pauseProjectName = "cfn-e2e-cluster-pause" + pauseRandSuffix + pauseClusterName = "cfn-e2e-cluster-pause" + pauseRandSuffix + pauseStackName = "stack-cluster-pause-e2e-" + pauseRandSuffix +) + +func TestClusterPauseCFN(t *testing.T) { + testCtx := setupPauseSuite(t) + + t.Run("Validate Template", func(t *testing.T) { + utility.TestIsTemplateValid(t, testCtx.cfnClient, testCtx.template) + }) + + t.Run("Create Stack", func(t *testing.T) { + testCreatePauseStack(t, testCtx) + }) + + t.Run("Pause Cluster", func(t *testing.T) { + testUpdatePauseState(t, testCtx, true) + }) + + t.Run("Unpause Cluster", func(t *testing.T) { + testUpdatePauseState(t, testCtx, false) + }) + + t.Run("Delete Stack", func(t *testing.T) { + testDeletePauseStack(t, testCtx) + }) +} + +func setupPauseSuite(t *testing.T) *pauseTestContext { + t.Helper() + t.Log("Setting up pause suite") + testCtx := new(pauseTestContext) + testCtx.setUp(t) + return testCtx +} + +func (c *pauseTestContext) setUp(t *testing.T) { + t.Helper() + c.resourceCtx = utility.InitResourceCtx(pauseStackName, pauseRandSuffix, os.Getenv("RESOURCE_TYPE_NAME_FOR_E2E"), pauseResourceDirectory) + c.cfnClient, _ = utility.NewClients(t) + _, c.atlasClient20231115014 = utility.NewClients20231115014(t) + + utility.PublishToPrivateRegistry(t, c.resourceCtx) + c.setupPrerequisites(t) +} + +func (c *pauseTestContext) setupPrerequisites(t *testing.T) { + t.Helper() + t.Cleanup(func() { + cleanupPausePrerequisites(t, c) + cleanupPauseResources(t, c) + }) + t.Log("Setting up prerequisites for pause test") + + var projectID string + if projectIDEnvVar := os.Getenv("MONGODB_ATLAS_PROJECT_ID"); projectIDEnvVar != "" { + t.Logf("using projectID from env var %s", projectIDEnvVar) + projectID = projectIDEnvVar + } else { + projectID = utility.CreateProject(t, c.atlasClient20231115014, pauseOrgID, pauseProjectName) + } + + c.clusterTmplObj = pauseTestCluster{ + Name: pauseClusterName, + ProjectID: projectID, + Profile: pauseProfile, + Paused: "false", + ResourceTypeName: os.Getenv("RESOURCE_TYPE_NAME_FOR_E2E"), + } + + var err error + c.template, err = newPauseCFNTemplate(c.clusterTmplObj) + utility.FailNowIfError(t, "Error while reading pause CFN Template: %v", err) + t.Logf("Pause test setup complete. ProjectID: %s, ClusterName: %s", c.clusterTmplObj.ProjectID, c.clusterTmplObj.Name) +} + +func newPauseCFNTemplate(tmpl pauseTestCluster) (string, error) { + return utility.ExecuteGoTemplate(pauseCfnTemplatePath, tmpl) +} + +func testCreatePauseStack(t *testing.T, c *pauseTestContext) { + t.Helper() + t.Logf("Creating pause stack with template:\n%s", c.template) + + output := utility.CreateStack(t, c.cfnClient, pauseStackName, c.template) + clusterID := getPauseClusterIDFromStack(output) + + cluster := readPauseClusterFromAtlas(t, c) + + a := assert.New(t) + a.Equal(cluster.GetId(), clusterID) + a.False(cluster.GetPaused()) +} + +func testUpdatePauseState(t *testing.T, c *pauseTestContext, pause bool) { + t.Helper() + + if pause { + c.clusterTmplObj.Paused = "true" + } else { + c.clusterTmplObj.Paused = "false" + } + + var err error + c.template, err = newPauseCFNTemplate(c.clusterTmplObj) + utility.FailNowIfError(t, "Error while reading pause CFN Template: %v", err) + + output := utility.UpdateStack(t, c.cfnClient, pauseStackName, c.template) + _ = getPauseClusterIDFromStack(output) + + cluster := readPauseClusterFromAtlas(t, c) + + a := assert.New(t) + if pause { + a.True(cluster.GetPaused()) + } else { + a.False(cluster.GetPaused()) + } +} + +func testDeletePauseStack(t *testing.T, c *pauseTestContext) { + t.Helper() + utility.DeleteStack(t, c.cfnClient, pauseStackName) + a := assert.New(t) + _, resp, _ := c.atlasClient20231115014.ClustersApi.GetCluster(ctx.Background(), c.clusterTmplObj.ProjectID, c.clusterTmplObj.Name).Execute() + a.Equal(404, resp.StatusCode) +} + +func cleanupPauseResources(t *testing.T, c *pauseTestContext) { + t.Helper() + utility.DeleteStackForCleanup(t, c.cfnClient, pauseStackName) +} + +func cleanupPausePrerequisites(t *testing.T, c *pauseTestContext) { + t.Helper() + t.Log("Cleaning up pause test prerequisites") + if os.Getenv("MONGODB_ATLAS_PROJECT_ID") == "" { + utility.DeleteProject(t, c.atlasClient20231115014, c.clusterTmplObj.ProjectID) + } else { + t.Log("skipping project deletion (project managed outside of test)") + } +} + +func readPauseClusterFromAtlas(t *testing.T, c *pauseTestContext) *admin20231115014.AdvancedClusterDescription { + t.Helper() + context := ctx.Background() + projectID := c.clusterTmplObj.ProjectID + cluster, resp, err := c.atlasClient20231115014.ClustersApi.GetCluster(context, projectID, c.clusterTmplObj.Name).Execute() + utility.FailNowIfError(t, "Err while retrieving Cluster from Atlas: %v", err) + assert.Equal(t, 200, resp.StatusCode) + return cluster +} + +func getPauseClusterIDFromStack(output *cloudformation.DescribeStacksOutput) string { + stackOutputs := output.Stacks[0].Outputs + for i := 0; i < len(stackOutputs); i++ { + if *stackOutputs[i].OutputKey == "MongoDBAtlasClusterID" { + return *stackOutputs[i].OutputValue + } + } + return "" +} From 19ae278ac3c594509d4bc3e300d18d75772efc69 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 3 Nov 2025 11:57:29 +0100 Subject: [PATCH 03/17] adding docs clarification --- cfn-resources/cluster/docs/README.md | 2 +- cfn-resources/cluster/mongodb-atlas-cluster.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cfn-resources/cluster/docs/README.md b/cfn-resources/cluster/docs/README.md index cc1476a43..07b95667c 100644 --- a/cfn-resources/cluster/docs/README.md +++ b/cfn-resources/cluster/docs/README.md @@ -203,7 +203,7 @@ _Update requires_: [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/l #### Paused -Flag that indicates whether the cluster is paused or not. +Flag that indicates whether the cluster is paused or not. When unpausing a cluster the update operaton will not perform any other changes to the cluster. _Required_: No diff --git a/cfn-resources/cluster/mongodb-atlas-cluster.json b/cfn-resources/cluster/mongodb-atlas-cluster.json index 849175209..bc87d6d9e 100644 --- a/cfn-resources/cluster/mongodb-atlas-cluster.json +++ b/cfn-resources/cluster/mongodb-atlas-cluster.json @@ -414,7 +414,7 @@ "type": "string" }, "Paused": { - "description": "Flag that indicates whether the cluster is paused or not.", + "description": "Flag that indicates whether the cluster is paused or not. When unpausing a cluster the update operaton will not perform any other changes to the cluster.", "type": "boolean" }, "PitEnabled": { From ae4126dc1f931ebd361d29a98f2663c8d1fc304a Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 3 Nov 2025 12:31:01 +0100 Subject: [PATCH 04/17] fixing CI for paused test cluster --- .../e2e/cluster/cluster_pause.json.template | 32 +++++++++---------- .../test/e2e/cluster/cluster_pause_test.go | 5 ++- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/cfn-resources/test/e2e/cluster/cluster_pause.json.template b/cfn-resources/test/e2e/cluster/cluster_pause.json.template index 86080aaf4..6d827a96d 100644 --- a/cfn-resources/test/e2e/cluster/cluster_pause.json.template +++ b/cfn-resources/test/e2e/cluster/cluster_pause.json.template @@ -10,23 +10,23 @@ "Profile": "{{ .Profile }}", "ClusterType": "REPLICASET", "Paused": "{{ .Paused }}", - "ReplicationSpecs": [ - { - "NumShards": 1, - "AdvancedRegionConfigs": [ - { - "RegionName": "US_EAST_1", - "Priority": 7, - "ProviderName": "AWS", - "ElectableSpecs": { - "EbsVolumeType": "STANDARD", - "InstanceSize": "M10", - "NodeCount": 3 + "ReplicationSpecs": [ + { + "NumShards": 1, + "AdvancedRegionConfigs": [ + { + "RegionName": "US_EAST_1", + "Priority": 7, + "ProviderName": "AWS", + "ElectableSpecs": { + "EbsVolumeType": "STANDARD", + "InstanceSize": "M10", + "NodeCount": 3 + } } - } - ] - } - ] + ] + } + ] } } }, diff --git a/cfn-resources/test/e2e/cluster/cluster_pause_test.go b/cfn-resources/test/e2e/cluster/cluster_pause_test.go index 57bb038fe..342053156 100644 --- a/cfn-resources/test/e2e/cluster/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster/cluster_pause_test.go @@ -41,8 +41,7 @@ type pauseTestCluster struct { } const ( - pauseResourceDirectory = "cluster" - pauseCfnTemplatePath = "cluster_pause.json.template" + pauseCfnTemplatePath = "cluster_pause.json.template" ) // Replication specs are hardcoded in the CFN template for this test. @@ -90,7 +89,7 @@ func setupPauseSuite(t *testing.T) *pauseTestContext { func (c *pauseTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(pauseStackName, pauseRandSuffix, os.Getenv("RESOURCE_TYPE_NAME_FOR_E2E"), pauseResourceDirectory) + c.resourceCtx = utility.InitResourceCtx(pauseStackName, pauseRandSuffix, resourceTypeName, resourceDirectory) c.cfnClient, _ = utility.NewClients(t) _, c.atlasClient20231115014 = utility.NewClients20231115014(t) From 1684889d752e90be510668e199152277bfa81656 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 3 Nov 2025 12:39:36 +0100 Subject: [PATCH 05/17] allowing execution to run in parallel --- .github/workflows/e2e-testing.yaml | 2 +- cfn-resources/test/e2e/cluster/cluster_pause_test.go | 1 + cfn-resources/test/e2e/cluster/cluster_test.go | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index 03f313454..c3a58133f 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -63,7 +63,7 @@ jobs: MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action run: | cd cfn-resources/test/e2e/cluster - go test -timeout 90m -v cluster_test.go cluster_pause_test.go + go test -timeout 90m -v -parallel 2 cluster_test.go cluster_pause_test.go flex-cluster: diff --git a/cfn-resources/test/e2e/cluster/cluster_pause_test.go b/cfn-resources/test/e2e/cluster/cluster_pause_test.go index 342053156..1b8587dce 100644 --- a/cfn-resources/test/e2e/cluster/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster/cluster_pause_test.go @@ -56,6 +56,7 @@ var ( ) func TestClusterPauseCFN(t *testing.T) { + t.Parallel() testCtx := setupPauseSuite(t) t.Run("Validate Template", func(t *testing.T) { diff --git a/cfn-resources/test/e2e/cluster/cluster_test.go b/cfn-resources/test/e2e/cluster/cluster_test.go index 8296a17c2..0f4ef92f0 100644 --- a/cfn-resources/test/e2e/cluster/cluster_test.go +++ b/cfn-resources/test/e2e/cluster/cluster_test.go @@ -92,6 +92,7 @@ var ( ) func TestClusterCFN(t *testing.T) { + t.Parallel() testCtx := setupSuite(t) t.Run("Validate Template", func(t *testing.T) { From a367cdf919d877233e948b6640338c37735b4339 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 3 Nov 2025 12:54:10 +0100 Subject: [PATCH 06/17] add separate group for executing pause test --- .github/workflows/e2e-testing.yaml | 33 +++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index c3a58133f..f3a7e9576 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -63,7 +63,38 @@ jobs: MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action run: | cd cfn-resources/test/e2e/cluster - go test -timeout 90m -v -parallel 2 cluster_test.go cluster_pause_test.go + go test -timeout 90m -v cluster_test.go + + cluster-pause: + needs: change-detection + if: ${{ needs.change-detection.outputs.cluster == 'true' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c + with: + python-version: '3.9' + cache: 'pip' + - run: pip install cloudformation-cli-go-plugin + - uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 + with: + go-version-file: 'cfn-resources/go.mod' + - uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_TEST_ENV }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_TEST_ENV }} + aws-region: eu-west-1 + - name: Run E2E test + shell: bash + env: + MONGODB_ATLAS_PUBLIC_KEY: ${{ secrets.CLOUD_DEV_PUBLIC_KEY }} + MONGODB_ATLAS_PRIVATE_KEY: ${{ secrets.CLOUD_DEV_PRIVATE_KEY }} + MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} + MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ + MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action + run: | + cd cfn-resources/test/e2e/cluster + go test -timeout 90m -v cluster_pause_test.go flex-cluster: From b7763771b8ffeb78da0e2f361c30b5ed69f3c883 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 3 Nov 2025 12:55:58 +0100 Subject: [PATCH 07/17] removing parallel flag --- cfn-resources/test/e2e/cluster/cluster_pause_test.go | 1 - cfn-resources/test/e2e/cluster/cluster_test.go | 1 - 2 files changed, 2 deletions(-) diff --git a/cfn-resources/test/e2e/cluster/cluster_pause_test.go b/cfn-resources/test/e2e/cluster/cluster_pause_test.go index 1b8587dce..342053156 100644 --- a/cfn-resources/test/e2e/cluster/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster/cluster_pause_test.go @@ -56,7 +56,6 @@ var ( ) func TestClusterPauseCFN(t *testing.T) { - t.Parallel() testCtx := setupPauseSuite(t) t.Run("Validate Template", func(t *testing.T) { diff --git a/cfn-resources/test/e2e/cluster/cluster_test.go b/cfn-resources/test/e2e/cluster/cluster_test.go index 0f4ef92f0..8296a17c2 100644 --- a/cfn-resources/test/e2e/cluster/cluster_test.go +++ b/cfn-resources/test/e2e/cluster/cluster_test.go @@ -92,7 +92,6 @@ var ( ) func TestClusterCFN(t *testing.T) { - t.Parallel() testCtx := setupSuite(t) t.Run("Validate Template", func(t *testing.T) { From 43a556bd3b727b3f85555e1bf3024dbd286105f9 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 3 Nov 2025 13:11:03 +0100 Subject: [PATCH 08/17] make each test group run specific test --- .github/workflows/e2e-testing.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index f3a7e9576..1def8cf62 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -61,9 +61,10 @@ jobs: MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action + # run idividual test allowing for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible run: | cd cfn-resources/test/e2e/cluster - go test -timeout 90m -v cluster_test.go + go test -timeout 90m -v -run '^TestClusterCFN$' . cluster-pause: needs: change-detection @@ -92,9 +93,10 @@ jobs: MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action + # run idividual test allowing for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible run: | cd cfn-resources/test/e2e/cluster - go test -timeout 90m -v cluster_pause_test.go + go test -timeout 90m -v -run '^TestClusterPauseCFN$' . flex-cluster: From 3903fde10655e3900ecd3eca66808610bd87b31e Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 3 Nov 2025 14:27:39 +0100 Subject: [PATCH 09/17] allow update in paused and other changes within same update --- .../cluster/cmd/resource/resource.go | 22 ++++++------------- cfn-resources/cluster/docs/README.md | 2 +- .../cluster/mongodb-atlas-cluster.json | 2 +- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/cfn-resources/cluster/cmd/resource/resource.go b/cfn-resources/cluster/cmd/resource/resource.go index f4c189e4e..8d7462905 100644 --- a/cfn-resources/cluster/cmd/resource/resource.go +++ b/cfn-resources/cluster/cmd/resource/resource.go @@ -126,8 +126,8 @@ func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler return *pe, nil } - // handle unpausing update - if pe, _ := handleUnpausingUpdate(client, currentCluster, currentModel); pe != nil { + // Unpausing must be handled separately from other updates to avoid errors from the API. + if pe := handleUnpausingUpdate(client, currentCluster, currentModel); pe != nil { return *pe, nil } @@ -160,24 +160,16 @@ func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler return event, nil } -func handleUnpausingUpdate(client *util.MongoDBClient, currentCluster *admin20231115014.AdvancedClusterDescription, currentModel *Model) (*handler.ProgressEvent, error) { +func handleUnpausingUpdate(client *util.MongoDBClient, currentCluster *admin20231115014.AdvancedClusterDescription, currentModel *Model) *handler.ProgressEvent { if (currentCluster.Paused != nil && *currentCluster.Paused) && (currentModel.Paused == nil || !*currentModel.Paused) { - cluster, resp, err := client.Atlas20231115014.ClustersApi.UpdateCluster(context.Background(), *currentModel.ProjectId, *currentModel.Name, + _, resp, err := client.Atlas20231115014.ClustersApi.UpdateCluster(context.Background(), *currentModel.ProjectId, *currentModel.Name, &admin20231115014.AdvancedClusterDescription{Paused: admin20231115014.PtrBool(false)}).Execute() if pe := util.HandleClusterError(err, resp); pe != nil { - return pe, nil + return pe } - // returns InProgress event directly, if any other changes are made they will not be performed as part of this update operation - event := handler.ProgressEvent{ - OperationStatus: handler.InProgress, - Message: fmt.Sprintf("Unpausing Cluster %s", *cluster.StateName), - ResourceModel: currentModel, - CallbackDelaySeconds: callBackSeconds, - CallbackContext: callbackContext, - } - return &event, nil + return nil } - return nil, nil + return nil } // Delete handles the Delete event from the Cloudformation service. diff --git a/cfn-resources/cluster/docs/README.md b/cfn-resources/cluster/docs/README.md index 07b95667c..cc1476a43 100644 --- a/cfn-resources/cluster/docs/README.md +++ b/cfn-resources/cluster/docs/README.md @@ -203,7 +203,7 @@ _Update requires_: [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/l #### Paused -Flag that indicates whether the cluster is paused or not. When unpausing a cluster the update operaton will not perform any other changes to the cluster. +Flag that indicates whether the cluster is paused or not. _Required_: No diff --git a/cfn-resources/cluster/mongodb-atlas-cluster.json b/cfn-resources/cluster/mongodb-atlas-cluster.json index bc87d6d9e..849175209 100644 --- a/cfn-resources/cluster/mongodb-atlas-cluster.json +++ b/cfn-resources/cluster/mongodb-atlas-cluster.json @@ -414,7 +414,7 @@ "type": "string" }, "Paused": { - "description": "Flag that indicates whether the cluster is paused or not. When unpausing a cluster the update operaton will not perform any other changes to the cluster.", + "description": "Flag that indicates whether the cluster is paused or not.", "type": "boolean" }, "PitEnabled": { From f4acd9de396394846820346a2160235c1f926ece Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 3 Nov 2025 14:57:56 +0100 Subject: [PATCH 10/17] fix linting --- cfn-resources/cluster/cmd/resource/resource.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cfn-resources/cluster/cmd/resource/resource.go b/cfn-resources/cluster/cmd/resource/resource.go index 8d7462905..d0fe60594 100644 --- a/cfn-resources/cluster/cmd/resource/resource.go +++ b/cfn-resources/cluster/cmd/resource/resource.go @@ -164,10 +164,7 @@ func handleUnpausingUpdate(client *util.MongoDBClient, currentCluster *admin2023 if (currentCluster.Paused != nil && *currentCluster.Paused) && (currentModel.Paused == nil || !*currentModel.Paused) { _, resp, err := client.Atlas20231115014.ClustersApi.UpdateCluster(context.Background(), *currentModel.ProjectId, *currentModel.Name, &admin20231115014.AdvancedClusterDescription{Paused: admin20231115014.PtrBool(false)}).Execute() - if pe := util.HandleClusterError(err, resp); pe != nil { - return pe - } - return nil + return util.HandleClusterError(err, resp) } return nil } From ecddf7b4d796f7cc7d92c760f3e7e2befbdf71cd Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Tue, 4 Nov 2025 12:14:19 +0100 Subject: [PATCH 11/17] having single test group running multiple packages for each cluster test --- .github/workflows/e2e-testing.yaml | 39 ++----------------- .../cluster.json.template | 0 .../cluster_test.go | 2 +- .../cluster_pause.json.template | 0 .../cluster_pause_test.go | 4 +- 5 files changed, 7 insertions(+), 38 deletions(-) rename cfn-resources/test/e2e/{cluster => cluster-basic}/cluster.json.template (100%) rename cfn-resources/test/e2e/{cluster => cluster-basic}/cluster_test.go (99%) rename cfn-resources/test/e2e/{cluster => cluster-pause}/cluster_pause.json.template (100%) rename cfn-resources/test/e2e/{cluster => cluster-pause}/cluster_pause_test.go (98%) diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index 1def8cf62..ed334200c 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -61,43 +61,10 @@ jobs: MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action - # run idividual test allowing for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible + # Have each test defined in separate packages to allow for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible run: | - cd cfn-resources/test/e2e/cluster - go test -timeout 90m -v -run '^TestClusterCFN$' . - - cluster-pause: - needs: change-detection - if: ${{ needs.change-detection.outputs.cluster == 'true' }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 - - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c - with: - python-version: '3.9' - cache: 'pip' - - run: pip install cloudformation-cli-go-plugin - - uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 - with: - go-version-file: 'cfn-resources/go.mod' - - uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_TEST_ENV }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_TEST_ENV }} - aws-region: eu-west-1 - - name: Run E2E test - shell: bash - env: - MONGODB_ATLAS_PUBLIC_KEY: ${{ secrets.CLOUD_DEV_PUBLIC_KEY }} - MONGODB_ATLAS_PRIVATE_KEY: ${{ secrets.CLOUD_DEV_PRIVATE_KEY }} - MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} - MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ - MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action - # run idividual test allowing for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible - run: | - cd cfn-resources/test/e2e/cluster - go test -timeout 90m -v -run '^TestClusterPauseCFN$' . - + cd cfn-resources/test/e2e + go test ./cluster-pause ./cluster-basic -timeout 90m -v flex-cluster: needs: change-detection diff --git a/cfn-resources/test/e2e/cluster/cluster.json.template b/cfn-resources/test/e2e/cluster-basic/cluster.json.template similarity index 100% rename from cfn-resources/test/e2e/cluster/cluster.json.template rename to cfn-resources/test/e2e/cluster-basic/cluster.json.template diff --git a/cfn-resources/test/e2e/cluster/cluster_test.go b/cfn-resources/test/e2e/cluster-basic/cluster_test.go similarity index 99% rename from cfn-resources/test/e2e/cluster/cluster_test.go rename to cfn-resources/test/e2e/cluster-basic/cluster_test.go index 8296a17c2..f233def54 100644 --- a/cfn-resources/test/e2e/cluster/cluster_test.go +++ b/cfn-resources/test/e2e/cluster-basic/cluster_test.go @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -package cluster_test +package cluster_basic_test import ( ctx "context" diff --git a/cfn-resources/test/e2e/cluster/cluster_pause.json.template b/cfn-resources/test/e2e/cluster-pause/cluster_pause.json.template similarity index 100% rename from cfn-resources/test/e2e/cluster/cluster_pause.json.template rename to cfn-resources/test/e2e/cluster-pause/cluster_pause.json.template diff --git a/cfn-resources/test/e2e/cluster/cluster_pause_test.go b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go similarity index 98% rename from cfn-resources/test/e2e/cluster/cluster_pause_test.go rename to cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go index 342053156..55cfae8f5 100644 --- a/cfn-resources/test/e2e/cluster/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -package cluster_test +package cluster_pause_test import ( ctx "context" @@ -41,6 +41,8 @@ type pauseTestCluster struct { } const ( + resourceTypeName = "MongoDB::Atlas::Cluster" + resourceDirectory = "cluster" pauseCfnTemplatePath = "cluster_pause.json.template" ) From e6d5b766613a070d93d5278abd3dde7c9f12cbb8 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Tue, 4 Nov 2025 12:18:47 +0100 Subject: [PATCH 12/17] simplify asserts --- .../test/e2e/cluster-pause/cluster_pause_test.go | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go index 55cfae8f5..04a8bad07 100644 --- a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go @@ -142,9 +142,8 @@ func testCreatePauseStack(t *testing.T, c *pauseTestContext) { cluster := readPauseClusterFromAtlas(t, c) - a := assert.New(t) - a.Equal(cluster.GetId(), clusterID) - a.False(cluster.GetPaused()) + assert.Equal(t, cluster.GetId(), clusterID) + assert.False(t, cluster.GetPaused()) } func testUpdatePauseState(t *testing.T, c *pauseTestContext, pause bool) { @@ -165,20 +164,14 @@ func testUpdatePauseState(t *testing.T, c *pauseTestContext, pause bool) { cluster := readPauseClusterFromAtlas(t, c) - a := assert.New(t) - if pause { - a.True(cluster.GetPaused()) - } else { - a.False(cluster.GetPaused()) - } + assert.Equal(t, pause, cluster.GetPaused()) } func testDeletePauseStack(t *testing.T, c *pauseTestContext) { t.Helper() utility.DeleteStack(t, c.cfnClient, pauseStackName) - a := assert.New(t) _, resp, _ := c.atlasClient20231115014.ClustersApi.GetCluster(ctx.Background(), c.clusterTmplObj.ProjectID, c.clusterTmplObj.Name).Execute() - a.Equal(404, resp.StatusCode) + assert.Equal(t, 404, resp.StatusCode) } func cleanupPauseResources(t *testing.T, c *pauseTestContext) { From f620f31e1282a17059c53d15ebc57a96effb8eb4 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Tue, 4 Nov 2025 12:46:38 +0100 Subject: [PATCH 13/17] support e2e test directory being different from resource directory --- .github/workflows/e2e-testing.yaml | 3 ++- cfn-resources/test/e2e/cluster-basic/cluster_test.go | 3 ++- cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go | 3 ++- cfn-resources/test/e2e/flex-cluster/flexcluster_test.go | 2 +- cfn-resources/test/e2e/project/project_test.go | 2 +- .../test/e2e/search-deployment/searchdeployment_test.go | 2 +- cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh | 7 ++----- cfn-resources/test/e2e/utility/resource_context.go | 4 +++- cfn-resources/test/e2e/utility/util.go | 3 +++ 9 files changed, 17 insertions(+), 12 deletions(-) diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index ed334200c..9c00e5c30 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -24,7 +24,8 @@ jobs: filters: | cluster: - 'cfn-resources/cluster/**' - - 'cfn-resources/test/e2e/cluster/**' + - 'cfn-resources/test/e2e/cluster-basic/**' + - 'cfn-resources/test/e2e/cluster-pause/**' flex-cluster: - 'cfn-resources/flex-cluster/**' - 'cfn-resources/test/e2e/flex-cluster/**' diff --git a/cfn-resources/test/e2e/cluster-basic/cluster_test.go b/cfn-resources/test/e2e/cluster-basic/cluster_test.go index f233def54..634afe41d 100644 --- a/cfn-resources/test/e2e/cluster-basic/cluster_test.go +++ b/cfn-resources/test/e2e/cluster-basic/cluster_test.go @@ -52,6 +52,7 @@ type testCluster struct { const ( resourceTypeName = "MongoDB::Atlas::Cluster" resourceDirectory = "cluster" + e2eTestDirectory = "cluster-basic" cfnTemplatePath = "cluster.json.template" ) @@ -122,7 +123,7 @@ func setupSuite(t *testing.T) *localTestContext { func (c *localTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory) + c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory, admin.PtrString(e2eTestDirectory)) c.cfnClient, c.atlasClient = utility.NewClients(t) _, c.atlasClient20231115014 = utility.NewClients20231115014(t) diff --git a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go index 04a8bad07..bffd603ee 100644 --- a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go @@ -43,6 +43,7 @@ type pauseTestCluster struct { const ( resourceTypeName = "MongoDB::Atlas::Cluster" resourceDirectory = "cluster" + e2eTestDirectory = "cluster-pause" pauseCfnTemplatePath = "cluster_pause.json.template" ) @@ -91,7 +92,7 @@ func setupPauseSuite(t *testing.T) *pauseTestContext { func (c *pauseTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(pauseStackName, pauseRandSuffix, resourceTypeName, resourceDirectory) + c.resourceCtx = utility.InitResourceCtx(pauseStackName, pauseRandSuffix, resourceTypeName, resourceDirectory, admin20231115014.PtrString(e2eTestDirectory)) c.cfnClient, _ = utility.NewClients(t) _, c.atlasClient20231115014 = utility.NewClients20231115014(t) diff --git a/cfn-resources/test/e2e/flex-cluster/flexcluster_test.go b/cfn-resources/test/e2e/flex-cluster/flexcluster_test.go index 039385d1c..fe3b55932 100644 --- a/cfn-resources/test/e2e/flex-cluster/flexcluster_test.go +++ b/cfn-resources/test/e2e/flex-cluster/flexcluster_test.go @@ -90,7 +90,7 @@ func setupSuite(t *testing.T) *localTestContext { func (c *localTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory) + c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory, nil) c.cfnClient, c.atlasClient = utility.NewClients(t) _, c.atlasClient20231115014 = utility.NewClients20231115014(t) utility.PublishToPrivateRegistry(t, c.resourceCtx) diff --git a/cfn-resources/test/e2e/project/project_test.go b/cfn-resources/test/e2e/project/project_test.go index aaa0d3763..6667d6066 100644 --- a/cfn-resources/test/e2e/project/project_test.go +++ b/cfn-resources/test/e2e/project/project_test.go @@ -93,7 +93,7 @@ func setupSuite(t *testing.T) *localTestContext { func (c *localTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory) + c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory, nil) c.cfnClient, c.atlasClient = utility.NewClients20231115014(t) utility.PublishToPrivateRegistry(t, c.resourceCtx) c.setupPrerequisites(t) diff --git a/cfn-resources/test/e2e/search-deployment/searchdeployment_test.go b/cfn-resources/test/e2e/search-deployment/searchdeployment_test.go index a1870177c..08fb65d4f 100644 --- a/cfn-resources/test/e2e/search-deployment/searchdeployment_test.go +++ b/cfn-resources/test/e2e/search-deployment/searchdeployment_test.go @@ -90,7 +90,7 @@ func setupSuite(t *testing.T) *localTestContext { func (c *localTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory) + c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory, nil) c.cfnClient, c.atlasClient = utility.NewClients20231115014(t) utility.PublishToPrivateRegistry(t, c.resourceCtx) c.setupPrerequisites(t) diff --git a/cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh b/cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh index 4e38a29ce..2fdbe04a3 100755 --- a/cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh +++ b/cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh @@ -13,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - # This script performs the following actions: # # 1) Generates the resource typename to use for the e2e test. Note: we cannot use the default typeName as it will affect other cfn stacks/tests @@ -26,6 +25,7 @@ set -eu set -eux resource_directory=$RESOURCE_DIRECTORY_NAME +e2e_test_directory="${E2E_TEST_DIRECTORY_NAME:-$resource_directory}" echo "Updating .rpdk-config with the E2E resource type $RESOURCE_TYPE_NAME_FOR_E2E" rpdk_file="../../../$RESOURCE_DIRECTORY_NAME/.rpdk-config" @@ -36,7 +36,6 @@ jq --arg type_name "$RESOURCE_TYPE_NAME_FOR_E2E" \ rm "${rpdk_file}" mv "${tmp_rpdk_file}" "${rpdk_file}" - echo "Creating a new resource schema" schema_file_name="${resource_directory//-/}" echo "New schema file name: ${schema_file_name}" @@ -50,8 +49,7 @@ echo "Releasing the resource to private registry $RESOURCE_TYPE_NAME_FOR_E2E" cd ../../../"$resource_directory" make build && cfn submit --set-default -cd ../test/e2e/"$resource_directory" - +cd ../test/e2e/"$e2e_test_directory" echo "Reverting .rpdk-config with the original resource typeName $RESOURCE_TYPE_NAME" jq --arg type_name "$RESOURCE_TYPE_NAME" \ @@ -60,7 +58,6 @@ jq --arg type_name "$RESOURCE_TYPE_NAME" \ rm "${rpdk_file}" mv "${tmp_rpdk_file}" "${rpdk_file}" - echo "Deleting resource JSON schema used for the E2E test" rm "${tmp_resource_schema_file}" diff --git a/cfn-resources/test/e2e/utility/resource_context.go b/cfn-resources/test/e2e/utility/resource_context.go index 1b57a900d..19003ab4f 100644 --- a/cfn-resources/test/e2e/utility/resource_context.go +++ b/cfn-resources/test/e2e/utility/resource_context.go @@ -16,16 +16,18 @@ package utility type ResourceContext struct { ResourceDirectory string + E2eTestDirectory *string ResourceTypeName string ResourceTypeNameForE2e string E2eRandSuffix string StackName string } -func InitResourceCtx(stackName, randSuffix, resourceTypeName, resourceDirectory string) ResourceContext { +func InitResourceCtx(stackName, randSuffix, resourceTypeName, resourceDirectory string, e2eTestDirectory *string) ResourceContext { return ResourceContext{ StackName: stackName, ResourceDirectory: resourceDirectory, + E2eTestDirectory: e2eTestDirectory, ResourceTypeName: resourceTypeName, E2eRandSuffix: randSuffix, ResourceTypeNameForE2e: resourceTypeName + randSuffix, diff --git a/cfn-resources/test/e2e/utility/util.go b/cfn-resources/test/e2e/utility/util.go index 5abbb6984..117a41ca4 100644 --- a/cfn-resources/test/e2e/utility/util.go +++ b/cfn-resources/test/e2e/utility/util.go @@ -65,6 +65,9 @@ func PublishToPrivateRegistry(t *testing.T, rctx ResourceContext) { t.Setenv("RESOURCE_TYPE_NAME_FOR_E2E", rctx.ResourceTypeNameForE2e) t.Setenv("E2E_RAND_SUFFIX", rctx.E2eRandSuffix) t.Setenv("RESOURCE_DIRECTORY_NAME", rctx.ResourceDirectory) + if rctx.E2eTestDirectory != nil { + t.Setenv("E2E_TEST_DIRECTORY_NAME", *rctx.E2eTestDirectory) + } t.Cleanup(func() { RunCleanupScript(t, rctx) }) From 0c3cc15b2e21d090fa04fcc23789eff384b7c7ce Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Tue, 4 Nov 2025 16:49:38 +0100 Subject: [PATCH 14/17] Revert "support e2e test directory being different from resource directory" This reverts commit f620f31e1282a17059c53d15ebc57a96effb8eb4. --- .github/workflows/e2e-testing.yaml | 3 +-- cfn-resources/test/e2e/cluster-basic/cluster_test.go | 3 +-- cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go | 3 +-- cfn-resources/test/e2e/flex-cluster/flexcluster_test.go | 2 +- cfn-resources/test/e2e/project/project_test.go | 2 +- .../test/e2e/search-deployment/searchdeployment_test.go | 2 +- cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh | 7 +++++-- cfn-resources/test/e2e/utility/resource_context.go | 4 +--- cfn-resources/test/e2e/utility/util.go | 3 --- 9 files changed, 12 insertions(+), 17 deletions(-) diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index 9c00e5c30..ed334200c 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -24,8 +24,7 @@ jobs: filters: | cluster: - 'cfn-resources/cluster/**' - - 'cfn-resources/test/e2e/cluster-basic/**' - - 'cfn-resources/test/e2e/cluster-pause/**' + - 'cfn-resources/test/e2e/cluster/**' flex-cluster: - 'cfn-resources/flex-cluster/**' - 'cfn-resources/test/e2e/flex-cluster/**' diff --git a/cfn-resources/test/e2e/cluster-basic/cluster_test.go b/cfn-resources/test/e2e/cluster-basic/cluster_test.go index 634afe41d..f233def54 100644 --- a/cfn-resources/test/e2e/cluster-basic/cluster_test.go +++ b/cfn-resources/test/e2e/cluster-basic/cluster_test.go @@ -52,7 +52,6 @@ type testCluster struct { const ( resourceTypeName = "MongoDB::Atlas::Cluster" resourceDirectory = "cluster" - e2eTestDirectory = "cluster-basic" cfnTemplatePath = "cluster.json.template" ) @@ -123,7 +122,7 @@ func setupSuite(t *testing.T) *localTestContext { func (c *localTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory, admin.PtrString(e2eTestDirectory)) + c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory) c.cfnClient, c.atlasClient = utility.NewClients(t) _, c.atlasClient20231115014 = utility.NewClients20231115014(t) diff --git a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go index bffd603ee..04a8bad07 100644 --- a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go @@ -43,7 +43,6 @@ type pauseTestCluster struct { const ( resourceTypeName = "MongoDB::Atlas::Cluster" resourceDirectory = "cluster" - e2eTestDirectory = "cluster-pause" pauseCfnTemplatePath = "cluster_pause.json.template" ) @@ -92,7 +91,7 @@ func setupPauseSuite(t *testing.T) *pauseTestContext { func (c *pauseTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(pauseStackName, pauseRandSuffix, resourceTypeName, resourceDirectory, admin20231115014.PtrString(e2eTestDirectory)) + c.resourceCtx = utility.InitResourceCtx(pauseStackName, pauseRandSuffix, resourceTypeName, resourceDirectory) c.cfnClient, _ = utility.NewClients(t) _, c.atlasClient20231115014 = utility.NewClients20231115014(t) diff --git a/cfn-resources/test/e2e/flex-cluster/flexcluster_test.go b/cfn-resources/test/e2e/flex-cluster/flexcluster_test.go index fe3b55932..039385d1c 100644 --- a/cfn-resources/test/e2e/flex-cluster/flexcluster_test.go +++ b/cfn-resources/test/e2e/flex-cluster/flexcluster_test.go @@ -90,7 +90,7 @@ func setupSuite(t *testing.T) *localTestContext { func (c *localTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory, nil) + c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory) c.cfnClient, c.atlasClient = utility.NewClients(t) _, c.atlasClient20231115014 = utility.NewClients20231115014(t) utility.PublishToPrivateRegistry(t, c.resourceCtx) diff --git a/cfn-resources/test/e2e/project/project_test.go b/cfn-resources/test/e2e/project/project_test.go index 6667d6066..aaa0d3763 100644 --- a/cfn-resources/test/e2e/project/project_test.go +++ b/cfn-resources/test/e2e/project/project_test.go @@ -93,7 +93,7 @@ func setupSuite(t *testing.T) *localTestContext { func (c *localTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory, nil) + c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory) c.cfnClient, c.atlasClient = utility.NewClients20231115014(t) utility.PublishToPrivateRegistry(t, c.resourceCtx) c.setupPrerequisites(t) diff --git a/cfn-resources/test/e2e/search-deployment/searchdeployment_test.go b/cfn-resources/test/e2e/search-deployment/searchdeployment_test.go index 08fb65d4f..a1870177c 100644 --- a/cfn-resources/test/e2e/search-deployment/searchdeployment_test.go +++ b/cfn-resources/test/e2e/search-deployment/searchdeployment_test.go @@ -90,7 +90,7 @@ func setupSuite(t *testing.T) *localTestContext { func (c *localTestContext) setUp(t *testing.T) { t.Helper() - c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory, nil) + c.resourceCtx = utility.InitResourceCtx(stackName, e2eRandSuffix, resourceTypeName, resourceDirectory) c.cfnClient, c.atlasClient = utility.NewClients20231115014(t) utility.PublishToPrivateRegistry(t, c.resourceCtx) c.setupPrerequisites(t) diff --git a/cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh b/cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh index 2fdbe04a3..4e38a29ce 100755 --- a/cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh +++ b/cfn-resources/test/e2e/utility/publish_cfn_to_registry.sh @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. + # This script performs the following actions: # # 1) Generates the resource typename to use for the e2e test. Note: we cannot use the default typeName as it will affect other cfn stacks/tests @@ -25,7 +26,6 @@ set -eu set -eux resource_directory=$RESOURCE_DIRECTORY_NAME -e2e_test_directory="${E2E_TEST_DIRECTORY_NAME:-$resource_directory}" echo "Updating .rpdk-config with the E2E resource type $RESOURCE_TYPE_NAME_FOR_E2E" rpdk_file="../../../$RESOURCE_DIRECTORY_NAME/.rpdk-config" @@ -36,6 +36,7 @@ jq --arg type_name "$RESOURCE_TYPE_NAME_FOR_E2E" \ rm "${rpdk_file}" mv "${tmp_rpdk_file}" "${rpdk_file}" + echo "Creating a new resource schema" schema_file_name="${resource_directory//-/}" echo "New schema file name: ${schema_file_name}" @@ -49,7 +50,8 @@ echo "Releasing the resource to private registry $RESOURCE_TYPE_NAME_FOR_E2E" cd ../../../"$resource_directory" make build && cfn submit --set-default -cd ../test/e2e/"$e2e_test_directory" +cd ../test/e2e/"$resource_directory" + echo "Reverting .rpdk-config with the original resource typeName $RESOURCE_TYPE_NAME" jq --arg type_name "$RESOURCE_TYPE_NAME" \ @@ -58,6 +60,7 @@ jq --arg type_name "$RESOURCE_TYPE_NAME" \ rm "${rpdk_file}" mv "${tmp_rpdk_file}" "${rpdk_file}" + echo "Deleting resource JSON schema used for the E2E test" rm "${tmp_resource_schema_file}" diff --git a/cfn-resources/test/e2e/utility/resource_context.go b/cfn-resources/test/e2e/utility/resource_context.go index 19003ab4f..1b57a900d 100644 --- a/cfn-resources/test/e2e/utility/resource_context.go +++ b/cfn-resources/test/e2e/utility/resource_context.go @@ -16,18 +16,16 @@ package utility type ResourceContext struct { ResourceDirectory string - E2eTestDirectory *string ResourceTypeName string ResourceTypeNameForE2e string E2eRandSuffix string StackName string } -func InitResourceCtx(stackName, randSuffix, resourceTypeName, resourceDirectory string, e2eTestDirectory *string) ResourceContext { +func InitResourceCtx(stackName, randSuffix, resourceTypeName, resourceDirectory string) ResourceContext { return ResourceContext{ StackName: stackName, ResourceDirectory: resourceDirectory, - E2eTestDirectory: e2eTestDirectory, ResourceTypeName: resourceTypeName, E2eRandSuffix: randSuffix, ResourceTypeNameForE2e: resourceTypeName + randSuffix, diff --git a/cfn-resources/test/e2e/utility/util.go b/cfn-resources/test/e2e/utility/util.go index 117a41ca4..5abbb6984 100644 --- a/cfn-resources/test/e2e/utility/util.go +++ b/cfn-resources/test/e2e/utility/util.go @@ -65,9 +65,6 @@ func PublishToPrivateRegistry(t *testing.T, rctx ResourceContext) { t.Setenv("RESOURCE_TYPE_NAME_FOR_E2E", rctx.ResourceTypeNameForE2e) t.Setenv("E2E_RAND_SUFFIX", rctx.E2eRandSuffix) t.Setenv("RESOURCE_DIRECTORY_NAME", rctx.ResourceDirectory) - if rctx.E2eTestDirectory != nil { - t.Setenv("E2E_TEST_DIRECTORY_NAME", *rctx.E2eTestDirectory) - } t.Cleanup(func() { RunCleanupScript(t, rctx) }) From d43392a9fdae46c8e5213db90a686ea6d77eedc6 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Tue, 4 Nov 2025 16:49:53 +0100 Subject: [PATCH 15/17] Revert "simplify asserts" This reverts commit e6d5b766613a070d93d5278abd3dde7c9f12cbb8. --- .../test/e2e/cluster-pause/cluster_pause_test.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go index 04a8bad07..55cfae8f5 100644 --- a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go @@ -142,8 +142,9 @@ func testCreatePauseStack(t *testing.T, c *pauseTestContext) { cluster := readPauseClusterFromAtlas(t, c) - assert.Equal(t, cluster.GetId(), clusterID) - assert.False(t, cluster.GetPaused()) + a := assert.New(t) + a.Equal(cluster.GetId(), clusterID) + a.False(cluster.GetPaused()) } func testUpdatePauseState(t *testing.T, c *pauseTestContext, pause bool) { @@ -164,14 +165,20 @@ func testUpdatePauseState(t *testing.T, c *pauseTestContext, pause bool) { cluster := readPauseClusterFromAtlas(t, c) - assert.Equal(t, pause, cluster.GetPaused()) + a := assert.New(t) + if pause { + a.True(cluster.GetPaused()) + } else { + a.False(cluster.GetPaused()) + } } func testDeletePauseStack(t *testing.T, c *pauseTestContext) { t.Helper() utility.DeleteStack(t, c.cfnClient, pauseStackName) + a := assert.New(t) _, resp, _ := c.atlasClient20231115014.ClustersApi.GetCluster(ctx.Background(), c.clusterTmplObj.ProjectID, c.clusterTmplObj.Name).Execute() - assert.Equal(t, 404, resp.StatusCode) + a.Equal(404, resp.StatusCode) } func cleanupPauseResources(t *testing.T, c *pauseTestContext) { From cfd5afe5a78dee4ae36bd6bb8b8e982158d1218f Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Tue, 4 Nov 2025 16:50:15 +0100 Subject: [PATCH 16/17] Revert "having single test group running multiple packages for each cluster test" This reverts commit ecddf7b4d796f7cc7d92c760f3e7e2befbdf71cd. --- .github/workflows/e2e-testing.yaml | 39 +++++++++++++++++-- .../cluster.json.template | 0 .../cluster_pause.json.template | 0 .../cluster_pause_test.go | 4 +- .../cluster_test.go | 2 +- 5 files changed, 38 insertions(+), 7 deletions(-) rename cfn-resources/test/e2e/{cluster-basic => cluster}/cluster.json.template (100%) rename cfn-resources/test/e2e/{cluster-pause => cluster}/cluster_pause.json.template (100%) rename cfn-resources/test/e2e/{cluster-pause => cluster}/cluster_pause_test.go (98%) rename cfn-resources/test/e2e/{cluster-basic => cluster}/cluster_test.go (99%) diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index ed334200c..1def8cf62 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -61,10 +61,43 @@ jobs: MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action - # Have each test defined in separate packages to allow for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible + # run idividual test allowing for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible run: | - cd cfn-resources/test/e2e - go test ./cluster-pause ./cluster-basic -timeout 90m -v + cd cfn-resources/test/e2e/cluster + go test -timeout 90m -v -run '^TestClusterCFN$' . + + cluster-pause: + needs: change-detection + if: ${{ needs.change-detection.outputs.cluster == 'true' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c + with: + python-version: '3.9' + cache: 'pip' + - run: pip install cloudformation-cli-go-plugin + - uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 + with: + go-version-file: 'cfn-resources/go.mod' + - uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_TEST_ENV }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_TEST_ENV }} + aws-region: eu-west-1 + - name: Run E2E test + shell: bash + env: + MONGODB_ATLAS_PUBLIC_KEY: ${{ secrets.CLOUD_DEV_PUBLIC_KEY }} + MONGODB_ATLAS_PRIVATE_KEY: ${{ secrets.CLOUD_DEV_PRIVATE_KEY }} + MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} + MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ + MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action + # run idividual test allowing for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible + run: | + cd cfn-resources/test/e2e/cluster + go test -timeout 90m -v -run '^TestClusterPauseCFN$' . + flex-cluster: needs: change-detection diff --git a/cfn-resources/test/e2e/cluster-basic/cluster.json.template b/cfn-resources/test/e2e/cluster/cluster.json.template similarity index 100% rename from cfn-resources/test/e2e/cluster-basic/cluster.json.template rename to cfn-resources/test/e2e/cluster/cluster.json.template diff --git a/cfn-resources/test/e2e/cluster-pause/cluster_pause.json.template b/cfn-resources/test/e2e/cluster/cluster_pause.json.template similarity index 100% rename from cfn-resources/test/e2e/cluster-pause/cluster_pause.json.template rename to cfn-resources/test/e2e/cluster/cluster_pause.json.template diff --git a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go b/cfn-resources/test/e2e/cluster/cluster_pause_test.go similarity index 98% rename from cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go rename to cfn-resources/test/e2e/cluster/cluster_pause_test.go index 55cfae8f5..342053156 100644 --- a/cfn-resources/test/e2e/cluster-pause/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster/cluster_pause_test.go @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -package cluster_pause_test +package cluster_test import ( ctx "context" @@ -41,8 +41,6 @@ type pauseTestCluster struct { } const ( - resourceTypeName = "MongoDB::Atlas::Cluster" - resourceDirectory = "cluster" pauseCfnTemplatePath = "cluster_pause.json.template" ) diff --git a/cfn-resources/test/e2e/cluster-basic/cluster_test.go b/cfn-resources/test/e2e/cluster/cluster_test.go similarity index 99% rename from cfn-resources/test/e2e/cluster-basic/cluster_test.go rename to cfn-resources/test/e2e/cluster/cluster_test.go index f233def54..8296a17c2 100644 --- a/cfn-resources/test/e2e/cluster-basic/cluster_test.go +++ b/cfn-resources/test/e2e/cluster/cluster_test.go @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -package cluster_basic_test +package cluster_test import ( ctx "context" From a843f047ec3dc764a95ba4d7e2373f20c9434f2d Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Tue, 4 Nov 2025 17:01:18 +0100 Subject: [PATCH 17/17] improving comment of why single test group is challenging --- .github/workflows/e2e-testing.yaml | 5 +++-- .../test/e2e/cluster/cluster_pause_test.go | 15 ++++----------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/.github/workflows/e2e-testing.yaml b/.github/workflows/e2e-testing.yaml index 1def8cf62..bcbbcc9f1 100644 --- a/.github/workflows/e2e-testing.yaml +++ b/.github/workflows/e2e-testing.yaml @@ -61,11 +61,13 @@ jobs: MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action - # run idividual test allowing for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible run: | cd cfn-resources/test/e2e/cluster go test -timeout 90m -v -run '^TestClusterCFN$' . + # Run idividual test in separate test group for parallel execution. + # Due to usage of t.Setenv() in test code t.Parallel() is not possible. + # Having both tests run in same `go test` execution is not possible due to scripts used for private registry publishing modifying same files cluster-pause: needs: change-detection if: ${{ needs.change-detection.outputs.cluster == 'true' }} @@ -93,7 +95,6 @@ jobs: MONGODB_ATLAS_ORG_ID: ${{ secrets.CLOUD_DEV_ORG_ID }} MONGODB_ATLAS_BASE_URL: https://cloud-dev.mongodb.com/ MONGODB_ATLAS_SECRET_PROFILE: cfn-cloud-dev-github-action - # run idividual test allowing for parallel execution. Due to usage of t.Setenv() in test code, t.Parallel() is not possible run: | cd cfn-resources/test/e2e/cluster go test -timeout 90m -v -run '^TestClusterPauseCFN$' . diff --git a/cfn-resources/test/e2e/cluster/cluster_pause_test.go b/cfn-resources/test/e2e/cluster/cluster_pause_test.go index 342053156..5e4bd4f8f 100644 --- a/cfn-resources/test/e2e/cluster/cluster_pause_test.go +++ b/cfn-resources/test/e2e/cluster/cluster_pause_test.go @@ -140,9 +140,8 @@ func testCreatePauseStack(t *testing.T, c *pauseTestContext) { cluster := readPauseClusterFromAtlas(t, c) - a := assert.New(t) - a.Equal(cluster.GetId(), clusterID) - a.False(cluster.GetPaused()) + assert.Equal(t, cluster.GetId(), clusterID) + assert.False(t, cluster.GetPaused()) } func testUpdatePauseState(t *testing.T, c *pauseTestContext, pause bool) { @@ -163,20 +162,14 @@ func testUpdatePauseState(t *testing.T, c *pauseTestContext, pause bool) { cluster := readPauseClusterFromAtlas(t, c) - a := assert.New(t) - if pause { - a.True(cluster.GetPaused()) - } else { - a.False(cluster.GetPaused()) - } + assert.Equal(t, pause, cluster.GetPaused()) } func testDeletePauseStack(t *testing.T, c *pauseTestContext) { t.Helper() utility.DeleteStack(t, c.cfnClient, pauseStackName) - a := assert.New(t) _, resp, _ := c.atlasClient20231115014.ClustersApi.GetCluster(ctx.Background(), c.clusterTmplObj.ProjectID, c.clusterTmplObj.Name).Execute() - a.Equal(404, resp.StatusCode) + assert.Equal(t, 404, resp.StatusCode) } func cleanupPauseResources(t *testing.T, c *pauseTestContext) {