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