Skip to content

Commit

Permalink
chore: Supports running cloud gov tests in CI (#2302)
Browse files Browse the repository at this point in the history
  • Loading branch information
EspenAlbert authored May 27, 2024
1 parent 9fc1189 commit 7304d61
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 12 deletions.
15 changes: 15 additions & 0 deletions .github/workflows/acceptance-tests-runner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ on:
mongodb_atlas_federated_org_id:
type: string
required: true
mongodb_atlas_gov_org_id:
type: string
required: true
mongodb_atlas_gov_base_url:
type: string
required: true
mongodb_atlas_federated_settings_associated_domain:
type: string
required: true
Expand Down Expand Up @@ -107,6 +113,10 @@ on:
required: true
mongodb_atlas_private_endpoint_dns_name:
required: true
mongodb_atlas_gov_private_key:
required: true
mongodb_atlas_gov_public_key:
required: true
azure_directory_id:
required: true
azure_resource_group_name:
Expand All @@ -128,6 +138,11 @@ env:
MONGODB_ATLAS_ORG_ID: ${{ inputs.mongodb_atlas_org_id }}
MONGODB_ATLAS_PUBLIC_KEY: ${{ secrets.mongodb_atlas_public_key }}
MONGODB_ATLAS_PRIVATE_KEY: ${{ secrets.mongodb_atlas_private_key }}
MONGODB_ATLAS_GOV_PUBLIC_KEY: ${{ secrets.mongodb_atlas_gov_public_key }}
MONGODB_ATLAS_GOV_PRIVATE_KEY: ${{ secrets.mongodb_atlas_gov_private_key }}
MONGODB_ATLAS_GOV_BASE_URL: ${{ inputs.mongodb_atlas_gov_base_url }}
MONGODB_ATLAS_GOV_ORG_ID: ${{ inputs.mongodb_atlas_gov_org_id }}


jobs:

Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/acceptance-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ jobs:
secrets:
mongodb_atlas_public_key: ${{ inputs.atlas_cloud_env == 'qa' && secrets.MONGODB_ATLAS_PUBLIC_KEY_CLOUD_QA || secrets.MONGODB_ATLAS_PUBLIC_KEY_CLOUD_DEV }}
mongodb_atlas_private_key: ${{ inputs.atlas_cloud_env == 'qa' && secrets.MONGODB_ATLAS_PRIVATE_KEY_CLOUD_QA || secrets.MONGODB_ATLAS_PRIVATE_KEY_CLOUD_DEV }}
mongodb_atlas_gov_public_key: ${{ inputs.atlas_cloud_env == 'qa' && secrets.MONGODB_ATLAS_GOV_PUBLIC_KEY_QA || secrets.MONGODB_ATLAS_GOV_PUBLIC_KEY_DEV }}
mongodb_atlas_gov_private_key: ${{ inputs.atlas_cloud_env == 'qa' && secrets.MONGODB_ATLAS_GOV_PRIVATE_KEY_QA || secrets.MONGODB_ATLAS_GOV_PRIVATE_KEY_DEV }}
ca_cert: ${{ secrets.CA_CERT }}
aws_account_id: ${{ secrets.AWS_ACCOUNT_ID }}
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
Expand Down Expand Up @@ -92,4 +94,6 @@ jobs:
mongodb_atlas_federated_sso_url: ${{ vars.MONGODB_ATLAS_FEDERATED_SSO_URL }}
mongodb_atlas_federated_issuer_uri: ${{ vars.MONGODB_ATLAS_FEDERATED_ISSUER_URI }}
mongodb_atlas_federated_org_id: ${{ inputs.atlas_cloud_env == 'qa' && vars.MONGODB_ATLAS_FEDERATED_ORG_ID_QA || vars.MONGODB_ATLAS_FEDERATED_ORG_ID }}
mongodb_atlas_gov_base_url: ${{ inputs.atlas_cloud_env == 'qa' && vars.MONGODB_ATLAS_GOV_BASE_URL_QA || vars.MONGODB_ATLAS_GOV_BASE_URL_DEV }}
mongodb_atlas_gov_org_id: ${{ inputs.atlas_cloud_env == 'qa' && vars.MONGODB_ATLAS_GOV_ORG_ID_QA || vars.MONGODB_ATLAS_GOV_ORG_ID_DEV }}
mongodb_atlas_federated_settings_associated_domain: ${{ vars.MONGODB_ATLAS_FEDERATED_SETTINGS_ASSOCIATED_DOMAIN }}
10 changes: 10 additions & 0 deletions contributing/testing-best-practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,16 @@
- Data sources are tested in the same tests as the resources, e.g. [commonChecks](https://github.com/mongodb/terraform-provider-mongodbatlas/blob/66c44e62c9afe04ffe8be0dbccaec682bab830e6/internal/service/searchindex/resource_search_index_test.go#L262-L263).
- Helper functions such as `resource.TestCheckTypeSetElemNestedAttrs` or `resource.TestCheckTypeSetElemAttr` can be used to check resource and data source attributes more easily, e.g. [resource_serverless_instance_test.go](https://github.com/mongodb/terraform-provider-mongodbatlas/blob/66c44e62c9afe04ffe8be0dbccaec682bab830e6/internal/service/serverlessinstance/resource_serverless_instance_test.go#L61).

### Cloud Gov tests

1. Use [`PreCheck: PreCheckGovBasic`](https://github.com/mongodb/terraform-provider-mongodbatlas/blob/CLOUDP-250271_cloud_gov/internal/testutil/acc/pre_check.go#L98)
2. Use the [`acc.ConfigGovProvider`](https://github.com/mongodb/terraform-provider-mongodbatlas/blob/CLOUDP-250271_cloud_gov/internal/testutil/acc/provider.go#L61) together with your normal terraform config
3. Modify the `checkExist` and `CheckDestroy` to use `acc.ConnV2UsingGov`
4. Follow naming convention:
1. `TestAccGovProject_withProjectOwner`, note prefix: `TestAccGov`
2. `TestMigGovProject_regionUsageRestrictionsDefault`, note prefix: `TestMigGov`
3. Although `Gov` tests can be run together with other acceptance tests, using the `Test(Acc|Mig)Gov` makes it easier to run *only* gov tests or find similar gov tests

## Migration tests

- There must be at least one `basic migration test` for each resource that leverages on the `basic acceptance tests` using helper test functions such as `CreateAndRunTest`, e.g. [TestMigServerlessInstance_basic](https://github.com/mongodb/terraform-provider-mongodbatlas/blob/66c44e62c9afe04ffe8be0dbccaec682bab830e6/internal/service/serverlessinstance/resource_serverless_instance_migration_test.go#L10).
Expand Down
10 changes: 10 additions & 0 deletions internal/testutil/acc/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,16 @@ func ConnV2UsingProxy(proxyPort *int) *admin.APIClient {
return client.(*config.MongoDBClient).AtlasV2
}

func ConnV2UsingGov() *admin.APIClient {
cfg := config.Config{
PublicKey: os.Getenv("MONGODB_ATLAS_GOV_PUBLIC_KEY"),
PrivateKey: os.Getenv("MONGODB_ATLAS_GOV_PRIVATE_KEY"),
BaseURL: os.Getenv("MONGODB_ATLAS_GOV_BASE_URL"),
}
client, _ := cfg.NewClient(context.Background())
return client.(*config.MongoDBClient).AtlasV2
}

func init() {
TestAccProviderV6Factories = map[string]func() (tfprotov6.ProviderServer, error){
ProviderNameMongoDBAtlas: func() (tfprotov6.ProviderServer, error) {
Expand Down
17 changes: 5 additions & 12 deletions internal/testutil/acc/pre_check.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,19 +97,12 @@ func GetProjectTeamsIDsWithPos(pos int) string {

func PreCheckGovBasic(tb testing.TB) {
tb.Helper()
if os.Getenv("MONGODB_ATLAS_PUBLIC_KEY") == "" ||
os.Getenv("MONGODB_ATLAS_PRIVATE_KEY") == "" ||
os.Getenv("MONGODB_ATLAS_ORG_ID_GOV") == "" {
tb.Fatal("`MONGODB_ATLAS_PUBLIC_KEY`, `MONGODB_ATLAS_PRIVATE_KEY`and `MONGODB_ATLAS_ORG_ID_GOV` must be set for acceptance testing")
}
}

func PreCheckGov(tb testing.TB) {
tb.Helper()
if os.Getenv("MONGODB_ATLAS_PROJECT_ID_GOV") == "" {
tb.Fatal("`MONGODB_ATLAS_PROJECT_ID_GOV` must be set for acceptance testing")
if os.Getenv("MONGODB_ATLAS_GOV_PUBLIC_KEY") == "" ||
os.Getenv("MONGODB_ATLAS_GOV_PRIVATE_KEY") == "" ||
os.Getenv("MONGODB_ATLAS_GOV_BASE_URL") == "" ||
os.Getenv("MONGODB_ATLAS_GOV_ORG_ID") == "" {
tb.Fatal("`MONGODB_ATLAS_GOV_BASE_URL`, `MONGODB_ATLAS_GOV_PUBLIC_KEY`, `MONGODB_ATLAS_GOV_PRIVATE_KEY`and `MONGODB_ATLAS_GOV_ORG_ID` must be set for acceptance testing")
}
PreCheckGovBasic(tb)
}

func PreCheckGPCEnv(tb testing.TB) {
Expand Down
23 changes: 23 additions & 0 deletions internal/testutil/acc/provider.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package acc

import (
"fmt"
"os"

"github.com/hashicorp/terraform-plugin-testing/helper/resource"
)

Expand Down Expand Up @@ -38,3 +41,23 @@ func providerAWS() *resource.ExternalProvider {
Source: "hashicorp/aws",
}
}

// configProvider creates a new provider with credentials explicit in config.
//
// This can be used when you want credentials different from the default env-vars.
func configProvider(publicKey, privateKey, baseURL string) string {
return fmt.Sprintf(`
provider %[1]q {
public_key = %[2]q
private_key = %[3]q
base_url = %[4]q
}
`, ProviderNameMongoDBAtlas, publicKey, privateKey, baseURL)
}

// ConfigGovProvider creates provider using MONGODB_ATLAS_GOV_* env vars.
//
// Remember to use PreCheckGovBasic when using this.
func ConfigGovProvider() string {
return configProvider(os.Getenv("MONGODB_ATLAS_GOV_PUBLIC_KEY"), os.Getenv("MONGODB_ATLAS_GOV_PRIVATE_KEY"), os.Getenv("MONGODB_ATLAS_GOV_BASE_URL"))
}

0 comments on commit 7304d61

Please sign in to comment.