Refactor tests to defer to common method when looking up project (#410)

This commit is contained in:
Joe Selman 2017-09-12 13:28:31 -07:00 committed by GitHub
parent 9ede711538
commit 204201a5be
5 changed files with 44 additions and 53 deletions

View File

@ -36,7 +36,7 @@ func TestAccSpannerDatabase_importProjectInstanceDatabase(t *testing.T) {
resourceName := "google_spanner_database.basic"
instanceName := fmt.Sprintf("span-iname-%s", acctest.RandString(10))
dbName := fmt.Sprintf("span-dbname-%s", acctest.RandString(10))
var projectId = multiEnvSearch([]string{"GOOGLE_PROJECT", "GCLOUD_PROJECT", "CLOUDSDK_CORE_PROJECT"})
projectId := getTestProjectFromEnv()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },

View File

@ -34,7 +34,7 @@ func TestAccSpannerInstance_importInstance(t *testing.T) {
func TestAccSpannerInstance_importProjectInstance(t *testing.T) {
resourceName := "google_spanner_instance.basic"
instanceName := fmt.Sprintf("span-itest-%s", acctest.RandString(10))
var projectId = multiEnvSearch([]string{"GOOGLE_PROJECT", "GCLOUD_PROJECT", "CLOUDSDK_CORE_PROJECT"})
projectId := getTestProjectFromEnv()
if projectId == "" {
t.Skip("Unable to locate projectId via environment variables ... skipping ")
return

View File

@ -14,6 +14,25 @@ import (
var testAccProviders map[string]terraform.ResourceProvider
var testAccProvider *schema.Provider
var credsEnvVars = []string{
"GOOGLE_CREDENTIALS",
"GOOGLE_CLOUD_KEYFILE_JSON",
"GCLOUD_KEYFILE_JSON",
"GOOGLE_USE_DEFAULT_CREDENTIALS",
}
var projectEnvVars = []string{
"GOOGLE_PROJECT",
"GCLOUD_PROJECT",
"CLOUDSDK_CORE_PROJECT",
}
var regionEnvVars = []string{
"GOOGLE_REGION",
"GCLOUD_REGION",
"CLOUDSDK_COMPUTE_REGION",
}
func init() {
testAccProvider = Provider().(*schema.Provider)
testAccProviders = map[string]terraform.ResourceProvider{
@ -40,41 +59,16 @@ func testAccPreCheck(t *testing.T) {
os.Setenv("GOOGLE_CREDENTIALS", string(creds))
}
multiEnvSearch := func(ks []string) string {
for _, k := range ks {
if v := os.Getenv(k); v != "" {
return v
}
}
return ""
if v := multiEnvSearch(credsEnvVars); v == "" {
t.Fatalf("One of %s must be set for acceptance tests", strings.Join(credsEnvVars, ", "))
}
creds := []string{
"GOOGLE_CREDENTIALS",
"GOOGLE_CLOUD_KEYFILE_JSON",
"GCLOUD_KEYFILE_JSON",
"GOOGLE_USE_DEFAULT_CREDENTIALS",
}
if v := multiEnvSearch(creds); v == "" {
t.Fatalf("One of %s must be set for acceptance tests", strings.Join(creds, ", "))
if v := multiEnvSearch(projectEnvVars); v == "" {
t.Fatalf("One of %s must be set for acceptance tests", strings.Join(projectEnvVars, ", "))
}
projs := []string{
"GOOGLE_PROJECT",
"GCLOUD_PROJECT",
"CLOUDSDK_CORE_PROJECT",
}
if v := multiEnvSearch(projs); v == "" {
t.Fatalf("One of %s must be set for acceptance tests", strings.Join(projs, ", "))
}
regs := []string{
"GOOGLE_REGION",
"GCLOUD_REGION",
"CLOUDSDK_COMPUTE_REGION",
}
if v := multiEnvSearch(regs); v != "us-central1" {
t.Fatalf("One of %s must be set to us-central1 for acceptance tests", strings.Join(regs, ", "))
if v := multiEnvSearch(regionEnvVars); v != "us-central1" {
t.Fatalf("One of %s must be set to us-central1 for acceptance tests", strings.Join(regionEnvVars, ", "))
}
if v := os.Getenv("GOOGLE_XPN_HOST_PROJECT"); v == "" {
@ -111,3 +105,17 @@ func getTestProject(is *terraform.InstanceState, config *Config) (string, error)
}
return "", fmt.Errorf("%q: required field is not set", "project")
}
// getTestProjectFromEnv returns the current configured project from environment variables.
func getTestProjectFromEnv() string {
return multiEnvSearch(projectEnvVars)
}
func multiEnvSearch(ks []string) string {
for _, k := range ks {
if v := os.Getenv(k); v != "" {
return v
}
}
return ""
}

View File

@ -21,15 +21,6 @@ var (
originalPolicy *cloudresourcemanager.Policy
)
func multiEnvSearch(ks []string) string {
for _, k := range ks {
if v := os.Getenv(k); v != "" {
return v
}
}
return ""
}
// Test that a Project resource can be created and an IAM policy
// associated
func TestAccGoogleProject_create(t *testing.T) {

View File

@ -9,14 +9,6 @@ import (
"github.com/hashicorp/terraform/terraform"
)
var (
projectId = multiEnvSearch([]string{
"GOOGLE_PROJECT",
"GCLOUD_PROJECT",
"CLOUDSDK_CORE_PROJECT",
})
)
// Test that a service account resource can be created, updated, and destroyed
func TestAccGoogleServiceAccount_basic(t *testing.T) {
accountId := "a" + acctest.RandString(10)
@ -55,7 +47,7 @@ func TestAccGoogleServiceAccount_createPolicy(t *testing.T) {
Steps: []resource.TestStep{
// The first step creates a basic service account with an IAM policy
resource.TestStep{
Config: testAccGoogleServiceAccountPolicy(accountId, projectId),
Config: testAccGoogleServiceAccountPolicy(accountId, getTestProjectFromEnv()),
Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleServiceAccountPolicyCount("google_service_account.acceptance", 1),
),
@ -69,7 +61,7 @@ func TestAccGoogleServiceAccount_createPolicy(t *testing.T) {
},
// The final step re-applies the IAM policy
resource.TestStep{
Config: testAccGoogleServiceAccountPolicy(accountId, projectId),
Config: testAccGoogleServiceAccountPolicy(accountId, getTestProjectFromEnv()),
Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleServiceAccountPolicyCount("google_service_account.acceptance", 1),
),
@ -147,5 +139,5 @@ data "google_iam_policy" "service_account" {
}
}`
return fmt.Sprintf(t, account, name, account, projectId)
return fmt.Sprintf(t, account, name, account, getTestProjectFromEnv())
}