github.com/joshgarnett/terraform@v0.5.4-0.20160219181435-92dc20bb3594/builtin/providers/google/resource_storage_bucket_acl_test.go (about) 1 package google 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/acctest" 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 //"google.golang.org/api/storage/v1" 11 ) 12 13 var roleEntityBasic1 = "OWNER:user-omeemail@gmail.com" 14 15 var roleEntityBasic2 = "READER:user-anotheremail@gmail.com" 16 17 var roleEntityBasic3_owner = "OWNER:user-yetanotheremail@gmail.com" 18 19 var roleEntityBasic3_reader = "READER:user-yetanotheremail@gmail.com" 20 21 func testAclBucketName() string { 22 return fmt.Sprintf("%s-%d", "tf-test-acl-bucket", acctest.RandInt()) 23 } 24 25 func TestAccGoogleStorageBucketAcl_basic(t *testing.T) { 26 bucketName := testAclBucketName() 27 resource.Test(t, resource.TestCase{ 28 PreCheck: func() { testAccPreCheck(t) }, 29 Providers: testAccProviders, 30 CheckDestroy: testAccGoogleStorageBucketAclDestroy, 31 Steps: []resource.TestStep{ 32 resource.TestStep{ 33 Config: testGoogleStorageBucketsAclBasic1(bucketName), 34 Check: resource.ComposeTestCheckFunc( 35 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic1), 36 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2), 37 ), 38 }, 39 }, 40 }) 41 } 42 43 func TestAccGoogleStorageBucketAcl_upgrade(t *testing.T) { 44 bucketName := testAclBucketName() 45 resource.Test(t, resource.TestCase{ 46 PreCheck: func() { testAccPreCheck(t) }, 47 Providers: testAccProviders, 48 CheckDestroy: testAccGoogleStorageBucketAclDestroy, 49 Steps: []resource.TestStep{ 50 resource.TestStep{ 51 Config: testGoogleStorageBucketsAclBasic1(bucketName), 52 Check: resource.ComposeTestCheckFunc( 53 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic1), 54 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2), 55 ), 56 }, 57 58 resource.TestStep{ 59 Config: testGoogleStorageBucketsAclBasic2(bucketName), 60 Check: resource.ComposeTestCheckFunc( 61 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2), 62 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_owner), 63 ), 64 }, 65 66 resource.TestStep{ 67 Config: testGoogleStorageBucketsAclBasicDelete(bucketName), 68 Check: resource.ComposeTestCheckFunc( 69 testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic1), 70 testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic2), 71 testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic3_owner), 72 ), 73 }, 74 }, 75 }) 76 } 77 78 func TestAccGoogleStorageBucketAcl_downgrade(t *testing.T) { 79 bucketName := testAclBucketName() 80 resource.Test(t, resource.TestCase{ 81 PreCheck: func() { testAccPreCheck(t) }, 82 Providers: testAccProviders, 83 CheckDestroy: testAccGoogleStorageBucketAclDestroy, 84 Steps: []resource.TestStep{ 85 resource.TestStep{ 86 Config: testGoogleStorageBucketsAclBasic2(bucketName), 87 Check: resource.ComposeTestCheckFunc( 88 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2), 89 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_owner), 90 ), 91 }, 92 93 resource.TestStep{ 94 Config: testGoogleStorageBucketsAclBasic3(bucketName), 95 Check: resource.ComposeTestCheckFunc( 96 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2), 97 testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_reader), 98 ), 99 }, 100 101 resource.TestStep{ 102 Config: testGoogleStorageBucketsAclBasicDelete(bucketName), 103 Check: resource.ComposeTestCheckFunc( 104 testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic1), 105 testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic2), 106 testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic3_owner), 107 ), 108 }, 109 }, 110 }) 111 } 112 113 func TestAccGoogleStorageBucketAcl_predefined(t *testing.T) { 114 resource.Test(t, resource.TestCase{ 115 PreCheck: func() { testAccPreCheck(t) }, 116 Providers: testAccProviders, 117 CheckDestroy: testAccGoogleStorageBucketAclDestroy, 118 Steps: []resource.TestStep{ 119 resource.TestStep{ 120 Config: testGoogleStorageBucketsAclPredefined(bucketName), 121 }, 122 }, 123 }) 124 } 125 126 func testAccCheckGoogleStorageBucketAclDelete(bucket, roleEntityS string) resource.TestCheckFunc { 127 return func(s *terraform.State) error { 128 roleEntity, _ := getRoleEntityPair(roleEntityS) 129 config := testAccProvider.Meta().(*Config) 130 131 _, err := config.clientStorage.BucketAccessControls.Get(bucket, roleEntity.Entity).Do() 132 133 if err != nil { 134 return nil 135 } 136 137 return fmt.Errorf("Error, entity %s still exists", roleEntity.Entity) 138 } 139 } 140 141 func testAccCheckGoogleStorageBucketAcl(bucket, roleEntityS string) resource.TestCheckFunc { 142 return func(s *terraform.State) error { 143 roleEntity, _ := getRoleEntityPair(roleEntityS) 144 config := testAccProvider.Meta().(*Config) 145 146 res, err := config.clientStorage.BucketAccessControls.Get(bucket, roleEntity.Entity).Do() 147 148 if err != nil { 149 return fmt.Errorf("Error retrieving contents of acl for bucket %s: %s", bucket, err) 150 } 151 152 if res.Role != roleEntity.Role { 153 return fmt.Errorf("Error, Role mismatch %s != %s", res.Role, roleEntity.Role) 154 } 155 156 return nil 157 } 158 } 159 160 func testAccGoogleStorageBucketAclDestroy(s *terraform.State) error { 161 config := testAccProvider.Meta().(*Config) 162 163 for _, rs := range s.RootModule().Resources { 164 if rs.Type != "google_storage_bucket_acl" { 165 continue 166 } 167 168 bucket := rs.Primary.Attributes["bucket"] 169 170 _, err := config.clientStorage.BucketAccessControls.List(bucket).Do() 171 172 if err == nil { 173 return fmt.Errorf("Acl for bucket %s still exists", bucket) 174 } 175 } 176 177 return nil 178 } 179 180 func testGoogleStorageBucketsAclBasic1(bucketName string) string { 181 return fmt.Sprintf(` 182 resource "google_storage_bucket" "bucket" { 183 name = "%s" 184 } 185 186 resource "google_storage_bucket_acl" "acl" { 187 bucket = "${google_storage_bucket.bucket.name}" 188 role_entity = ["%s", "%s"] 189 } 190 `, bucketName, roleEntityBasic1, roleEntityBasic2) 191 } 192 193 func testGoogleStorageBucketsAclBasic2(bucketName string) string { 194 return fmt.Sprintf(` 195 resource "google_storage_bucket" "bucket" { 196 name = "%s" 197 } 198 199 resource "google_storage_bucket_acl" "acl" { 200 bucket = "${google_storage_bucket.bucket.name}" 201 role_entity = ["%s", "%s"] 202 } 203 `, bucketName, roleEntityBasic2, roleEntityBasic3_owner) 204 } 205 206 func testGoogleStorageBucketsAclBasicDelete(bucketName string) string { 207 return fmt.Sprintf(` 208 resource "google_storage_bucket" "bucket" { 209 name = "%s" 210 } 211 212 resource "google_storage_bucket_acl" "acl" { 213 bucket = "${google_storage_bucket.bucket.name}" 214 role_entity = [] 215 } 216 `, bucketName) 217 } 218 219 func testGoogleStorageBucketsAclBasic3(bucketName string) string { 220 return fmt.Sprintf(` 221 resource "google_storage_bucket" "bucket" { 222 name = "%s" 223 } 224 225 resource "google_storage_bucket_acl" "acl" { 226 bucket = "${google_storage_bucket.bucket.name}" 227 role_entity = ["%s", "%s"] 228 } 229 `, bucketName, roleEntityBasic2, roleEntityBasic3_reader) 230 } 231 232 func testGoogleStorageBucketsAclPredefined(bucketName string) string { 233 return fmt.Sprintf(` 234 resource "google_storage_bucket" "bucket" { 235 name = "%s" 236 } 237 238 resource "google_storage_bucket_acl" "acl" { 239 bucket = "${google_storage_bucket.bucket.name}" 240 predefined_acl = "projectPrivate" 241 default_acl = "projectPrivate" 242 } 243 `, bucketName) 244 }