terraform-provider-google/google/resource_kms_key_ring_test.go
The Magician c605b0bc4b [Terraform]: Apply gofmt -s to all files managed by MM (#2676)
<!-- This change is generated by MagicModules. -->
/cc @rileykarson
2018-12-20 17:22:22 -08:00

164 lines
5.0 KiB
Go

package google
import (
"fmt"
"testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)
func TestKeyRingIdParsing(t *testing.T) {
cases := map[string]struct {
ImportId string
ExpectedError bool
ExpectedTerraformId string
ExpectedKeyRingId string
Config *Config
}{
"id is in project/location/keyRingName format": {
ImportId: "test-project/us-central1/test-key-ring",
ExpectedError: false,
ExpectedTerraformId: "test-project/us-central1/test-key-ring",
ExpectedKeyRingId: "projects/test-project/locations/us-central1/keyRings/test-key-ring",
},
"id is in domain:project/location/keyRingName format": {
ImportId: "example.com:test-project/us-central1/test-key-ring",
ExpectedError: false,
ExpectedTerraformId: "example.com:test-project/us-central1/test-key-ring",
ExpectedKeyRingId: "projects/example.com:test-project/locations/us-central1/keyRings/test-key-ring",
},
"id contains name that is longer than 63 characters": {
ImportId: "test-project/us-central1/can-you-believe-that-this-key-ring-name-is-exactly-64-characters",
ExpectedError: true,
},
"id is in location/keyRingName format": {
ImportId: "us-central1/test-key-ring",
ExpectedError: false,
ExpectedTerraformId: "test-project/us-central1/test-key-ring",
ExpectedKeyRingId: "projects/test-project/locations/us-central1/keyRings/test-key-ring",
Config: &Config{Project: "test-project"},
},
"id is in location/keyRingName format without project in config": {
ImportId: "us-central1/test-key-ring",
ExpectedError: true,
Config: &Config{Project: ""},
},
}
for tn, tc := range cases {
keyRingId, err := parseKmsKeyRingId(tc.ImportId, tc.Config)
if tc.ExpectedError && err == nil {
t.Fatalf("bad: %s, expected an error", tn)
}
if err != nil {
if tc.ExpectedError {
continue
}
t.Fatalf("bad: %s, err: %#v", tn, err)
}
if keyRingId.terraformId() != tc.ExpectedTerraformId {
t.Fatalf("bad: %s, expected Terraform ID to be `%s` but is `%s`", tn, tc.ExpectedTerraformId, keyRingId.terraformId())
}
if keyRingId.keyRingId() != tc.ExpectedKeyRingId {
t.Fatalf("bad: %s, expected KeyRing ID to be `%s` but is `%s`", tn, tc.ExpectedKeyRingId, keyRingId.keyRingId())
}
}
}
func TestAccKmsKeyRing_basic(t *testing.T) {
projectId := "terraform-" + acctest.RandString(10)
projectOrg := getTestOrgFromEnv(t)
projectBillingAccount := getTestBillingAccountFromEnv(t)
keyRingName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckGoogleKmsKeyRingWasRemovedFromState("google_kms_key_ring.key_ring"),
Steps: []resource.TestStep{
{
Config: testGoogleKmsKeyRing_basic(projectId, projectOrg, projectBillingAccount, keyRingName),
},
{
ResourceName: "google_kms_key_ring.key_ring",
ImportState: true,
ImportStateVerify: true,
},
{
Config: testGoogleKmsKeyRing_removed(projectId, projectOrg, projectBillingAccount),
Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleKmsKeyRingWasRemovedFromState("google_kms_key_ring.key_ring"),
),
},
},
})
}
/*
KMS KeyRings cannot be deleted. This ensures that the KeyRing resource was removed from state,
even though the server-side resource was not removed.
*/
func testAccCheckGoogleKmsKeyRingWasRemovedFromState(resourceName string) resource.TestCheckFunc {
return func(s *terraform.State) error {
_, ok := s.RootModule().Resources[resourceName]
if ok {
return fmt.Errorf("Resource was not removed from state: %s", resourceName)
}
return nil
}
}
/*
This test runs in its own project, otherwise the test project would start to get filled
with undeletable resources
*/
func testGoogleKmsKeyRing_basic(projectId, projectOrg, projectBillingAccount, keyRingName string) string {
return fmt.Sprintf(`
resource "google_project" "acceptance" {
name = "%s"
project_id = "%s"
org_id = "%s"
billing_account = "%s"
}
resource "google_project_services" "acceptance" {
project = "${google_project.acceptance.project_id}"
services = [
"cloudkms.googleapis.com"
]
}
resource "google_kms_key_ring" "key_ring" {
project = "${google_project_services.acceptance.project}"
name = "%s"
location = "us-central1"
}
`, projectId, projectId, projectOrg, projectBillingAccount, keyRingName)
}
func testGoogleKmsKeyRing_removed(projectId, projectOrg, projectBillingAccount string) string {
return fmt.Sprintf(`
resource "google_project" "acceptance" {
name = "%s"
project_id = "%s"
org_id = "%s"
billing_account = "%s"
}
resource "google_project_services" "acceptance" {
project = "${google_project.acceptance.project_id}"
services = [
"cloudkms.googleapis.com"
]
}
`, projectId, projectId, projectOrg, projectBillingAccount)
}