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