Merge pull request #4509 from hashicorp/phinze/google-storage-test-collisions

provider/google: enchance storage acctests to avoid collisions
This commit is contained in:
Paul Hinze 2016-01-05 11:13:00 -06:00
commit 0ee57c2d13
4 changed files with 178 additions and 125 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"testing" "testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform" "github.com/hashicorp/terraform/terraform"
@ -18,19 +19,22 @@ var roleEntityBasic3_owner = "OWNER:user-yetanotheremail@gmail.com"
var roleEntityBasic3_reader = "READER:user-yetanotheremail@gmail.com" var roleEntityBasic3_reader = "READER:user-yetanotheremail@gmail.com"
var testAclBucketName = fmt.Sprintf("%s-%d", "tf-test-acl-bucket", genRandInt()) func testAclBucketName() string {
return fmt.Sprintf("%s-%d", "tf-test-acl-bucket", acctest.RandInt())
}
func TestAccGoogleStorageBucketAcl_basic(t *testing.T) { func TestAccGoogleStorageBucketAcl_basic(t *testing.T) {
bucketName := testAclBucketName()
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders, Providers: testAccProviders,
CheckDestroy: testAccGoogleStorageBucketAclDestroy, CheckDestroy: testAccGoogleStorageBucketAclDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsAclBasic1, Config: testGoogleStorageBucketsAclBasic1(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic1), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic1),
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic2), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
), ),
}, },
}, },
@ -38,33 +42,34 @@ func TestAccGoogleStorageBucketAcl_basic(t *testing.T) {
} }
func TestAccGoogleStorageBucketAcl_upgrade(t *testing.T) { func TestAccGoogleStorageBucketAcl_upgrade(t *testing.T) {
bucketName := testAclBucketName()
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders, Providers: testAccProviders,
CheckDestroy: testAccGoogleStorageBucketAclDestroy, CheckDestroy: testAccGoogleStorageBucketAclDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsAclBasic1, Config: testGoogleStorageBucketsAclBasic1(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic1), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic1),
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic2), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsAclBasic2, Config: testGoogleStorageBucketsAclBasic2(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic2), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic3_owner), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_owner),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsAclBasicDelete, Config: testGoogleStorageBucketsAclBasicDelete(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageBucketAclDelete(testAclBucketName, roleEntityBasic1), testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic1),
testAccCheckGoogleStorageBucketAclDelete(testAclBucketName, roleEntityBasic2), testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic2),
testAccCheckGoogleStorageBucketAclDelete(testAclBucketName, roleEntityBasic3_owner), testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic3_owner),
), ),
}, },
}, },
@ -72,33 +77,34 @@ func TestAccGoogleStorageBucketAcl_upgrade(t *testing.T) {
} }
func TestAccGoogleStorageBucketAcl_downgrade(t *testing.T) { func TestAccGoogleStorageBucketAcl_downgrade(t *testing.T) {
bucketName := testAclBucketName()
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders, Providers: testAccProviders,
CheckDestroy: testAccGoogleStorageBucketAclDestroy, CheckDestroy: testAccGoogleStorageBucketAclDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsAclBasic2, Config: testGoogleStorageBucketsAclBasic2(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic2), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic3_owner), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_owner),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsAclBasic3, Config: testGoogleStorageBucketsAclBasic3(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic2), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
testAccCheckGoogleStorageBucketAcl(testAclBucketName, roleEntityBasic3_reader), testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_reader),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsAclBasicDelete, Config: testGoogleStorageBucketsAclBasicDelete(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageBucketAclDelete(testAclBucketName, roleEntityBasic1), testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic1),
testAccCheckGoogleStorageBucketAclDelete(testAclBucketName, roleEntityBasic2), testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic2),
testAccCheckGoogleStorageBucketAclDelete(testAclBucketName, roleEntityBasic3_owner), testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic3_owner),
), ),
}, },
}, },
@ -112,7 +118,7 @@ func TestAccGoogleStorageBucketAcl_predefined(t *testing.T) {
CheckDestroy: testAccGoogleStorageBucketAclDestroy, CheckDestroy: testAccGoogleStorageBucketAclDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsAclPredefined, Config: testGoogleStorageBucketsAclPredefined(bucketName),
}, },
}, },
}) })
@ -172,7 +178,8 @@ func testAccGoogleStorageBucketAclDestroy(s *terraform.State) error {
return nil return nil
} }
var testGoogleStorageBucketsAclBasic1 = fmt.Sprintf(` func testGoogleStorageBucketsAclBasic1(bucketName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -181,9 +188,11 @@ resource "google_storage_bucket_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
role_entity = ["%s", "%s"] role_entity = ["%s", "%s"]
} }
`, testAclBucketName, roleEntityBasic1, roleEntityBasic2) `, bucketName, roleEntityBasic1, roleEntityBasic2)
}
var testGoogleStorageBucketsAclBasic2 = fmt.Sprintf(` func testGoogleStorageBucketsAclBasic2(bucketName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -192,9 +201,11 @@ resource "google_storage_bucket_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
role_entity = ["%s", "%s"] role_entity = ["%s", "%s"]
} }
`, testAclBucketName, roleEntityBasic2, roleEntityBasic3_owner) `, bucketName, roleEntityBasic2, roleEntityBasic3_owner)
}
var testGoogleStorageBucketsAclBasicDelete = fmt.Sprintf(` func testGoogleStorageBucketsAclBasicDelete(bucketName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -203,9 +214,11 @@ resource "google_storage_bucket_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
role_entity = [] role_entity = []
} }
`, testAclBucketName) `, bucketName)
}
var testGoogleStorageBucketsAclBasic3 = fmt.Sprintf(` func testGoogleStorageBucketsAclBasic3(bucketName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -214,9 +227,11 @@ resource "google_storage_bucket_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
role_entity = ["%s", "%s"] role_entity = ["%s", "%s"]
} }
`, testAclBucketName, roleEntityBasic2, roleEntityBasic3_reader) `, bucketName, roleEntityBasic2, roleEntityBasic3_reader)
}
var testGoogleStorageBucketsAclPredefined = fmt.Sprintf(` func testGoogleStorageBucketsAclPredefined(bucketName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -226,4 +241,5 @@ resource "google_storage_bucket_acl" "acl" {
predefined_acl = "projectPrivate" predefined_acl = "projectPrivate"
default_acl = "projectPrivate" default_acl = "projectPrivate"
} }
`, testAclBucketName) `, bucketName)
}

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"testing" "testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform" "github.com/hashicorp/terraform/terraform"
@ -13,7 +14,7 @@ import (
) )
func TestAccStorage_basic(t *testing.T) { func TestAccStorage_basic(t *testing.T) {
var bucketName string bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt())
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -21,10 +22,10 @@ func TestAccStorage_basic(t *testing.T) {
CheckDestroy: testAccGoogleStorageDestroy, CheckDestroy: testAccGoogleStorageDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsReaderDefaults, Config: testGoogleStorageBucketsReaderDefaults(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketExists( testAccCheckCloudStorageBucketExists(
"google_storage_bucket.bucket", &bucketName), "google_storage_bucket.bucket", bucketName),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"google_storage_bucket.bucket", "location", "US"), "google_storage_bucket.bucket", "location", "US"),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
@ -36,7 +37,7 @@ func TestAccStorage_basic(t *testing.T) {
} }
func TestAccStorageCustomAttributes(t *testing.T) { func TestAccStorageCustomAttributes(t *testing.T) {
var bucketName string bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt())
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -44,10 +45,10 @@ func TestAccStorageCustomAttributes(t *testing.T) {
CheckDestroy: testAccGoogleStorageDestroy, CheckDestroy: testAccGoogleStorageDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsReaderCustomAttributes, Config: testGoogleStorageBucketsReaderCustomAttributes(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketExists( testAccCheckCloudStorageBucketExists(
"google_storage_bucket.bucket", &bucketName), "google_storage_bucket.bucket", bucketName),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"google_storage_bucket.bucket", "location", "EU"), "google_storage_bucket.bucket", "location", "EU"),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
@ -59,7 +60,7 @@ func TestAccStorageCustomAttributes(t *testing.T) {
} }
func TestAccStorageBucketUpdate(t *testing.T) { func TestAccStorageBucketUpdate(t *testing.T) {
var bucketName string bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt())
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -67,10 +68,10 @@ func TestAccStorageBucketUpdate(t *testing.T) {
CheckDestroy: testAccGoogleStorageDestroy, CheckDestroy: testAccGoogleStorageDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsReaderDefaults, Config: testGoogleStorageBucketsReaderDefaults(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketExists( testAccCheckCloudStorageBucketExists(
"google_storage_bucket.bucket", &bucketName), "google_storage_bucket.bucket", bucketName),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"google_storage_bucket.bucket", "location", "US"), "google_storage_bucket.bucket", "location", "US"),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
@ -78,10 +79,10 @@ func TestAccStorageBucketUpdate(t *testing.T) {
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsReaderCustomAttributes, Config: testGoogleStorageBucketsReaderCustomAttributes(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketExists( testAccCheckCloudStorageBucketExists(
"google_storage_bucket.bucket", &bucketName), "google_storage_bucket.bucket", bucketName),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"google_storage_bucket.bucket", "predefined_acl", "publicReadWrite"), "google_storage_bucket.bucket", "predefined_acl", "publicReadWrite"),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
@ -95,7 +96,7 @@ func TestAccStorageBucketUpdate(t *testing.T) {
} }
func TestAccStorageForceDestroy(t *testing.T) { func TestAccStorageForceDestroy(t *testing.T) {
var bucketName string bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt())
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -103,29 +104,29 @@ func TestAccStorageForceDestroy(t *testing.T) {
CheckDestroy: testAccGoogleStorageDestroy, CheckDestroy: testAccGoogleStorageDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsReaderCustomAttributes, Config: testGoogleStorageBucketsReaderCustomAttributes(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketExists( testAccCheckCloudStorageBucketExists(
"google_storage_bucket.bucket", &bucketName), "google_storage_bucket.bucket", bucketName),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageBucketsReaderCustomAttributes, Config: testGoogleStorageBucketsReaderCustomAttributes(bucketName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketPutItem(&bucketName), testAccCheckCloudStorageBucketPutItem(bucketName),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: "", Config: "",
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketMissing(&bucketName), testAccCheckCloudStorageBucketMissing(bucketName),
), ),
}, },
}, },
}) })
} }
func testAccCheckCloudStorageBucketExists(n string, bucketName *string) resource.TestCheckFunc { func testAccCheckCloudStorageBucketExists(n string, bucketName string) resource.TestCheckFunc {
return func(s *terraform.State) error { return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n] rs, ok := s.RootModule().Resources[n]
if !ok { if !ok {
@ -147,12 +148,14 @@ func testAccCheckCloudStorageBucketExists(n string, bucketName *string) resource
return fmt.Errorf("Bucket not found") return fmt.Errorf("Bucket not found")
} }
*bucketName = found.Name if found.Name != bucketName {
return fmt.Errorf("expected name %s, got %s", bucketName, found.Name)
}
return nil return nil
} }
} }
func testAccCheckCloudStorageBucketPutItem(bucketName *string) resource.TestCheckFunc { func testAccCheckCloudStorageBucketPutItem(bucketName string) resource.TestCheckFunc {
return func(s *terraform.State) error { return func(s *terraform.State) error {
config := testAccProvider.Meta().(*Config) config := testAccProvider.Meta().(*Config)
@ -161,7 +164,7 @@ func testAccCheckCloudStorageBucketPutItem(bucketName *string) resource.TestChec
object := &storage.Object{Name: "bucketDestroyTestFile"} object := &storage.Object{Name: "bucketDestroyTestFile"}
// This needs to use Media(io.Reader) call, otherwise it does not go to /upload API and fails // This needs to use Media(io.Reader) call, otherwise it does not go to /upload API and fails
if res, err := config.clientStorage.Objects.Insert(*bucketName, object).Media(dataReader).Do(); err == nil { if res, err := config.clientStorage.Objects.Insert(bucketName, object).Media(dataReader).Do(); err == nil {
fmt.Printf("Created object %v at location %v\n\n", res.Name, res.SelfLink) fmt.Printf("Created object %v at location %v\n\n", res.Name, res.SelfLink)
} else { } else {
return fmt.Errorf("Objects.Insert failed: %v", err) return fmt.Errorf("Objects.Insert failed: %v", err)
@ -171,20 +174,20 @@ func testAccCheckCloudStorageBucketPutItem(bucketName *string) resource.TestChec
} }
} }
func testAccCheckCloudStorageBucketMissing(bucketName *string) resource.TestCheckFunc { func testAccCheckCloudStorageBucketMissing(bucketName string) resource.TestCheckFunc {
return func(s *terraform.State) error { return func(s *terraform.State) error {
config := testAccProvider.Meta().(*Config) config := testAccProvider.Meta().(*Config)
_, err := config.clientStorage.Buckets.Get(*bucketName).Do() _, err := config.clientStorage.Buckets.Get(bucketName).Do()
if err == nil { if err == nil {
return fmt.Errorf("Found %s", *bucketName) return fmt.Errorf("Found %s", bucketName)
} }
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
return nil return nil
} else {
return err
} }
return err
} }
} }
@ -205,19 +208,21 @@ func testAccGoogleStorageDestroy(s *terraform.State) error {
return nil return nil
} }
var randInt = genRandInt() func testGoogleStorageBucketsReaderDefaults(bucketName string) string {
return fmt.Sprintf(`
var testGoogleStorageBucketsReaderDefaults = fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "tf-test-bucket-%d" name = "%s"
}
`, bucketName)
} }
`, randInt)
var testGoogleStorageBucketsReaderCustomAttributes = fmt.Sprintf(` func testGoogleStorageBucketsReaderCustomAttributes(bucketName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "tf-test-bucket-%d" name = "%s"
predefined_acl = "publicReadWrite" predefined_acl = "publicReadWrite"
location = "EU" location = "EU"
force_destroy = "true" force_destroy = "true"
} }
`, randInt) `, bucketName)
}

View File

@ -14,10 +14,15 @@ import (
) )
var tfObjectAcl, errObjectAcl = ioutil.TempFile("", "tf-gce-test") var tfObjectAcl, errObjectAcl = ioutil.TempFile("", "tf-gce-test")
var testAclObjectName = fmt.Sprintf("%s-%d", "tf-test-acl-object",
rand.New(rand.NewSource(time.Now().UnixNano())).Int()) func testAclObjectName() string {
return fmt.Sprintf("%s-%d", "tf-test-acl-object",
rand.New(rand.NewSource(time.Now().UnixNano())).Int())
}
func TestAccGoogleStorageObjectAcl_basic(t *testing.T) { func TestAccGoogleStorageObjectAcl_basic(t *testing.T) {
bucketName := testAclBucketName()
objectName := testAclObjectName()
objectData := []byte("data data data") objectData := []byte("data data data")
ioutil.WriteFile(tfObjectAcl.Name(), objectData, 0644) ioutil.WriteFile(tfObjectAcl.Name(), objectData, 0644)
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
@ -31,12 +36,12 @@ func TestAccGoogleStorageObjectAcl_basic(t *testing.T) {
CheckDestroy: testAccGoogleStorageObjectAclDestroy, CheckDestroy: testAccGoogleStorageObjectAclDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageObjectsAclBasic1, Config: testGoogleStorageObjectsAclBasic1(bucketName, objectName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic1), objectName, roleEntityBasic1),
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic2), objectName, roleEntityBasic2),
), ),
}, },
}, },
@ -44,6 +49,8 @@ func TestAccGoogleStorageObjectAcl_basic(t *testing.T) {
} }
func TestAccGoogleStorageObjectAcl_upgrade(t *testing.T) { func TestAccGoogleStorageObjectAcl_upgrade(t *testing.T) {
bucketName := testAclBucketName()
objectName := testAclObjectName()
objectData := []byte("data data data") objectData := []byte("data data data")
ioutil.WriteFile(tfObjectAcl.Name(), objectData, 0644) ioutil.WriteFile(tfObjectAcl.Name(), objectData, 0644)
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
@ -57,34 +64,34 @@ func TestAccGoogleStorageObjectAcl_upgrade(t *testing.T) {
CheckDestroy: testAccGoogleStorageObjectAclDestroy, CheckDestroy: testAccGoogleStorageObjectAclDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageObjectsAclBasic1, Config: testGoogleStorageObjectsAclBasic1(bucketName, objectName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic1), objectName, roleEntityBasic1),
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic2), objectName, roleEntityBasic2),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageObjectsAclBasic2, Config: testGoogleStorageObjectsAclBasic2(bucketName, objectName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic2), objectName, roleEntityBasic2),
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic3_owner), objectName, roleEntityBasic3_owner),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageObjectsAclBasicDelete, Config: testGoogleStorageObjectsAclBasicDelete(bucketName, objectName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageObjectAclDelete(testAclBucketName, testAccCheckGoogleStorageObjectAclDelete(bucketName,
testAclObjectName, roleEntityBasic1), objectName, roleEntityBasic1),
testAccCheckGoogleStorageObjectAclDelete(testAclBucketName, testAccCheckGoogleStorageObjectAclDelete(bucketName,
testAclObjectName, roleEntityBasic2), objectName, roleEntityBasic2),
testAccCheckGoogleStorageObjectAclDelete(testAclBucketName, testAccCheckGoogleStorageObjectAclDelete(bucketName,
testAclObjectName, roleEntityBasic3_reader), objectName, roleEntityBasic3_reader),
), ),
}, },
}, },
@ -92,6 +99,8 @@ func TestAccGoogleStorageObjectAcl_upgrade(t *testing.T) {
} }
func TestAccGoogleStorageObjectAcl_downgrade(t *testing.T) { func TestAccGoogleStorageObjectAcl_downgrade(t *testing.T) {
bucketName := testAclBucketName()
objectName := testAclObjectName()
objectData := []byte("data data data") objectData := []byte("data data data")
ioutil.WriteFile(tfObjectAcl.Name(), objectData, 0644) ioutil.WriteFile(tfObjectAcl.Name(), objectData, 0644)
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
@ -105,34 +114,34 @@ func TestAccGoogleStorageObjectAcl_downgrade(t *testing.T) {
CheckDestroy: testAccGoogleStorageObjectAclDestroy, CheckDestroy: testAccGoogleStorageObjectAclDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageObjectsAclBasic2, Config: testGoogleStorageObjectsAclBasic2(bucketName, objectName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic2), objectName, roleEntityBasic2),
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic3_owner), objectName, roleEntityBasic3_owner),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageObjectsAclBasic3, Config: testGoogleStorageObjectsAclBasic3(bucketName, objectName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic2), objectName, roleEntityBasic2),
testAccCheckGoogleStorageObjectAcl(testAclBucketName, testAccCheckGoogleStorageObjectAcl(bucketName,
testAclObjectName, roleEntityBasic3_reader), objectName, roleEntityBasic3_reader),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageObjectsAclBasicDelete, Config: testGoogleStorageObjectsAclBasicDelete(bucketName, objectName),
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleStorageObjectAclDelete(testAclBucketName, testAccCheckGoogleStorageObjectAclDelete(bucketName,
testAclObjectName, roleEntityBasic1), objectName, roleEntityBasic1),
testAccCheckGoogleStorageObjectAclDelete(testAclBucketName, testAccCheckGoogleStorageObjectAclDelete(bucketName,
testAclObjectName, roleEntityBasic2), objectName, roleEntityBasic2),
testAccCheckGoogleStorageObjectAclDelete(testAclBucketName, testAccCheckGoogleStorageObjectAclDelete(bucketName,
testAclObjectName, roleEntityBasic3_reader), objectName, roleEntityBasic3_reader),
), ),
}, },
}, },
@ -140,6 +149,8 @@ func TestAccGoogleStorageObjectAcl_downgrade(t *testing.T) {
} }
func TestAccGoogleStorageObjectAcl_predefined(t *testing.T) { func TestAccGoogleStorageObjectAcl_predefined(t *testing.T) {
bucketName := testAclBucketName()
objectName := testAclObjectName()
objectData := []byte("data data data") objectData := []byte("data data data")
ioutil.WriteFile(tfObjectAcl.Name(), objectData, 0644) ioutil.WriteFile(tfObjectAcl.Name(), objectData, 0644)
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
@ -153,7 +164,7 @@ func TestAccGoogleStorageObjectAcl_predefined(t *testing.T) {
CheckDestroy: testAccGoogleStorageObjectAclDestroy, CheckDestroy: testAccGoogleStorageObjectAclDestroy,
Steps: []resource.TestStep{ Steps: []resource.TestStep{
resource.TestStep{ resource.TestStep{
Config: testGoogleStorageObjectsAclPredefined, Config: testGoogleStorageObjectsAclPredefined(bucketName, objectName),
}, },
}, },
}) })
@ -216,7 +227,8 @@ func testAccGoogleStorageObjectAclDestroy(s *terraform.State) error {
return nil return nil
} }
var testGoogleStorageObjectsAclBasicDelete = fmt.Sprintf(` func testGoogleStorageObjectsAclBasicDelete(bucketName string, objectName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -232,9 +244,11 @@ resource "google_storage_object_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
role_entity = [] role_entity = []
} }
`, testAclBucketName, testAclObjectName, tfObjectAcl.Name()) `, bucketName, objectName, tfObjectAcl.Name())
}
var testGoogleStorageObjectsAclBasic1 = fmt.Sprintf(` func testGoogleStorageObjectsAclBasic1(bucketName string, objectName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -250,10 +264,12 @@ resource "google_storage_object_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
role_entity = ["%s", "%s"] role_entity = ["%s", "%s"]
} }
`, testAclBucketName, testAclObjectName, tfObjectAcl.Name(), `, bucketName, objectName, tfObjectAcl.Name(),
roleEntityBasic1, roleEntityBasic2) roleEntityBasic1, roleEntityBasic2)
}
var testGoogleStorageObjectsAclBasic2 = fmt.Sprintf(` func testGoogleStorageObjectsAclBasic2(bucketName string, objectName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -269,10 +285,12 @@ resource "google_storage_object_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
role_entity = ["%s", "%s"] role_entity = ["%s", "%s"]
} }
`, testAclBucketName, testAclObjectName, tfObjectAcl.Name(), `, bucketName, objectName, tfObjectAcl.Name(),
roleEntityBasic2, roleEntityBasic3_owner) roleEntityBasic2, roleEntityBasic3_owner)
}
var testGoogleStorageObjectsAclBasic3 = fmt.Sprintf(` func testGoogleStorageObjectsAclBasic3(bucketName string, objectName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -288,10 +306,12 @@ resource "google_storage_object_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
role_entity = ["%s", "%s"] role_entity = ["%s", "%s"]
} }
`, testAclBucketName, testAclObjectName, tfObjectAcl.Name(), `, bucketName, objectName, tfObjectAcl.Name(),
roleEntityBasic2, roleEntityBasic3_reader) roleEntityBasic2, roleEntityBasic3_reader)
}
var testGoogleStorageObjectsAclPredefined = fmt.Sprintf(` func testGoogleStorageObjectsAclPredefined(bucketName string, objectName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" { resource "google_storage_bucket" "bucket" {
name = "%s" name = "%s"
} }
@ -307,4 +327,5 @@ resource "google_storage_object_acl" "acl" {
bucket = "${google_storage_bucket.bucket.name}" bucket = "${google_storage_bucket.bucket.name}"
predefined_acl = "projectPrivate" predefined_acl = "projectPrivate"
} }
`, testAclBucketName, testAclObjectName, tfObjectAcl.Name()) `, bucketName, objectName, tfObjectAcl.Name())
}

View File

@ -8,6 +8,12 @@ import (
// Helpers for generating random tidbits for use in identifiers to prevent // Helpers for generating random tidbits for use in identifiers to prevent
// collisions in acceptance tests. // collisions in acceptance tests.
// RandInt generates a random integer
func RandInt() int {
reseed()
return rand.New(rand.NewSource(time.Now().UnixNano())).Int()
}
// RandString generates a random alphanumeric string of the length specified // RandString generates a random alphanumeric string of the length specified
func RandString(strlen int) string { func RandString(strlen int) string {
return RandStringFromCharSet(strlen, CharSetAlphaNum) return RandStringFromCharSet(strlen, CharSetAlphaNum)
@ -16,7 +22,7 @@ func RandString(strlen int) string {
// RandStringFromCharSet generates a random string by selecting characters from // RandStringFromCharSet generates a random string by selecting characters from
// the charset provided // the charset provided
func RandStringFromCharSet(strlen int, charSet string) string { func RandStringFromCharSet(strlen int, charSet string) string {
rand.Seed(time.Now().UTC().UnixNano()) reseed()
result := make([]byte, strlen) result := make([]byte, strlen)
for i := 0; i < strlen; i++ { for i := 0; i < strlen; i++ {
result[i] = charSet[rand.Intn(len(charSet))] result[i] = charSet[rand.Intn(len(charSet))]
@ -24,6 +30,11 @@ func RandStringFromCharSet(strlen int, charSet string) string {
return string(result) return string(result)
} }
// Seeds random with current timestamp
func reseed() {
rand.Seed(time.Now().UTC().UnixNano())
}
const ( const (
// CharSetAlphaNum is the alphanumeric character set for use with // CharSetAlphaNum is the alphanumeric character set for use with
// RandStringFromCharSet // RandStringFromCharSet