Skip to content

Commit

Permalink
Remove auto generated test, force hand written tests to run serially
Browse files Browse the repository at this point in the history
  • Loading branch information
Ty Larrabee committed Aug 12, 2019
1 parent 4031fef commit e38b271
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 37 deletions.
1 change: 1 addition & 0 deletions products/bigquerydatatransfer/terraform.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ overrides: !ruby/object:Overrides::ResourceOverrides
ignore_read: true
examples:
- !ruby/object:Provider::Terraform::Examples
skip_test: true
name: "scheduled_query"
primary_resource_id: "query_config"
vars:
Expand Down
4 changes: 2 additions & 2 deletions templates/terraform/examples/scheduled_query.tf.erb
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ resource "google_bigquery_data_transfer_config" "<%= ctx[:primary_resource_id] %
location = "asia-northeast1"
data_source_id = "scheduled_query"
schedule = "first sunday of quarter 00:00"
destination_dataset_id = "${google_bigquery_dataset.my-dataset.dataset_id}"
destination_dataset_id = "${google_bigquery_dataset.my_dataset.dataset_id}"
params = {
destination_table_name_template = "my-table"
write_disposition = "WRITE_APPEND"
query = "SELECT name FROM tabl WHERE x = 'y'"
}
}

resource "google_bigquery_dataset" "my-dataset" {
resource "google_bigquery_dataset" "my_dataset" {

depends_on = [google_project_iam_member.permissions]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,68 @@ package google

import (
"fmt"
"strings"
"testing"

"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)

func TestAccBigqueryDataTransferConfig_scheduledQueryUpdate(t *testing.T) {
t.Parallel()
// The service account TF uses needs the permission granted in the configs
// but it will get deleted by parallel tests, so they need to be ran serially.
func TestAccBigqueryDataTransferConfig(t *testing.T) {
testCases := map[string]func(t *testing.T){
"basic": testAccBigqueryDataTransferConfig_scheduledQuery_basic,
"update": testAccBigqueryDataTransferConfig_scheduledQuery_update,
}

for name, tc := range testCases {
// shadow the tc variable into scope so that when
// the loop continues, if t.Run hasn't executed tc(t)
// yet, we don't have a race condition
// see https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables
tc := tc
t.Run(name, func(t *testing.T) {
tc(t)
})
}
}

func testAccBigqueryDataTransferConfig_scheduledQuery_basic(t *testing.T) {
random_suffix := acctest.RandString(10)

projectOrg := getTestOrgFromEnv(t)
projectBillingAccount := getTestBillingAccountFromEnv(t)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckBigqueryDataTransferConfigDestroy,
Steps: []resource.TestStep{
{
Config: testAccBigqueryDataTransferConfig_scheduledQuery(random_suffix, "third", "y"),
},
{
ResourceName: "google_bigquery_data_transfer_config.query_config",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"location"},
},
},
})
}

func testAccBigqueryDataTransferConfig_scheduledQuery_update(t *testing.T) {
random_suffix := acctest.RandString(10)

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckBigqueryDataTransferConfigDestroy,
Steps: []resource.TestStep{
{
Config: testAccBigqueryDataTransferConfig_scheduledQueryUpdate(random_suffix, projectOrg, projectBillingAccount, "first", "y"),
Config: testAccBigqueryDataTransferConfig_scheduledQuery(random_suffix, "first", "y"),
},
{
Config: testAccBigqueryDataTransferConfig_scheduledQueryUpdate(random_suffix, projectOrg, projectBillingAccount, "second", "z"),
Config: testAccBigqueryDataTransferConfig_scheduledQuery(random_suffix, "second", "z"),
},
{
ResourceName: "google_bigquery_data_transfer_config.query_config",
Expand All @@ -37,53 +75,63 @@ func TestAccBigqueryDataTransferConfig_scheduledQueryUpdate(t *testing.T) {
})
}

func testAccBigqueryDataTransferConfig_scheduledQueryUpdate(random_suffix, org, billing, schedule, letter string) string {
return fmt.Sprintf(`
resource "google_project" "update" {
name = "terraform-%s"
project_id = "terraform-%s"
org_id = "%s"
billing_account = "%s"
}
func testAccCheckBigqueryDataTransferConfigDestroy(s *terraform.State) error {
for name, rs := range s.RootModule().Resources {
if rs.Type != "google_bigquery_data_transfer_config" {
continue
}
if strings.HasPrefix(name, "data.") {
continue
}

config := testAccProvider.Meta().(*Config)

resource "google_project_services" "update" {
project = google_project.update.project_id
services = ["bigquerydatatransfer.googleapis.com", "bigquery-json.googleapis.com"]
url, err := replaceVarsForTest(config, rs, "{{BigqueryDataTransferBasePath}}{{name}}")
if err != nil {
return err
}

_, err = sendRequest(config, "GET", url, nil)
if err == nil {
return fmt.Errorf("BigqueryDataTransferConfig still exists at %s", url)
}
}

return nil
}

func testAccBigqueryDataTransferConfig_scheduledQuery(random_suffix, schedule, letter string) string {
return fmt.Sprintf(`
data "google_project" "project" {}
resource "google_project_iam_member" "permissions" {
depends_on = [google_project_services.update]
project = google_project.update.project_id
role = "roles/iam.serviceAccountShortTermTokenMinter"
member = "serviceAccount:service-${google_project.update.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com"
member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com"
}
resource "google_bigquery_data_transfer_config" "query_config" {
project = google_project.update.project_id
resource "google_bigquery_dataset" "my_dataset" {
depends_on = [google_project_iam_member.permissions]
dataset_id = "my_dataset%s"
friendly_name = "foo"
description = "bar"
location = "asia-northeast1"
}
resource "google_bigquery_data_transfer_config" "query_config" {
depends_on = [google_project_iam_member.permissions]
display_name = "my-query-%s"
location = "asia-northeast1"
data_source_id = "scheduled_query"
schedule = "%s sunday of quarter 00:00"
destination_dataset_id = google_bigquery_dataset.my-dataset.dataset_id
destination_dataset_id = google_bigquery_dataset.my_dataset.dataset_id
params = {
destination_table_name_template = "my-table"
write_disposition = "WRITE_APPEND"
query = "SELECT name FROM tabl WHERE x = '%s'"
}
}
resource "google_bigquery_dataset" "my-dataset" {
project = google_project.update.project_id
depends_on = [google_project_iam_member.permissions]
dataset_id = "my_dataset%s"
friendly_name = "foo"
description = "bar"
location = "asia-northeast1"
}
`, random_suffix, random_suffix, org, billing, random_suffix, schedule, letter, random_suffix)
`, random_suffix, random_suffix, schedule, letter)
}

0 comments on commit e38b271

Please sign in to comment.