github.com/jsoriano/terraform@v0.6.7-0.20151026070445-8b70867fdd95/builtin/providers/google/resource_storage_bucket_test.go (about) 1 package google 2 3 import ( 4 "bytes" 5 "fmt" 6 "math/rand" 7 "testing" 8 "time" 9 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 13 "google.golang.org/api/googleapi" 14 storage "google.golang.org/api/storage/v1" 15 ) 16 17 func TestAccStorage_basic(t *testing.T) { 18 var bucketName string 19 20 resource.Test(t, resource.TestCase{ 21 PreCheck: func() { testAccPreCheck(t) }, 22 Providers: testAccProviders, 23 CheckDestroy: testAccGoogleStorageDestroy, 24 Steps: []resource.TestStep{ 25 resource.TestStep{ 26 Config: testGoogleStorageBucketsReaderDefaults, 27 Check: resource.ComposeTestCheckFunc( 28 testAccCheckCloudStorageBucketExists( 29 "google_storage_bucket.bucket", &bucketName), 30 resource.TestCheckResourceAttr( 31 "google_storage_bucket.bucket", "location", "US"), 32 resource.TestCheckResourceAttr( 33 "google_storage_bucket.bucket", "force_destroy", "false"), 34 ), 35 }, 36 }, 37 }) 38 } 39 40 func TestAccStorageCustomAttributes(t *testing.T) { 41 var bucketName string 42 43 resource.Test(t, resource.TestCase{ 44 PreCheck: func() { testAccPreCheck(t) }, 45 Providers: testAccProviders, 46 CheckDestroy: testAccGoogleStorageDestroy, 47 Steps: []resource.TestStep{ 48 resource.TestStep{ 49 Config: testGoogleStorageBucketsReaderCustomAttributes, 50 Check: resource.ComposeTestCheckFunc( 51 testAccCheckCloudStorageBucketExists( 52 "google_storage_bucket.bucket", &bucketName), 53 resource.TestCheckResourceAttr( 54 "google_storage_bucket.bucket", "location", "EU"), 55 resource.TestCheckResourceAttr( 56 "google_storage_bucket.bucket", "force_destroy", "true"), 57 ), 58 }, 59 }, 60 }) 61 } 62 63 func TestAccStorageBucketUpdate(t *testing.T) { 64 var bucketName string 65 66 resource.Test(t, resource.TestCase{ 67 PreCheck: func() { testAccPreCheck(t) }, 68 Providers: testAccProviders, 69 CheckDestroy: testAccGoogleStorageDestroy, 70 Steps: []resource.TestStep{ 71 resource.TestStep{ 72 Config: testGoogleStorageBucketsReaderDefaults, 73 Check: resource.ComposeTestCheckFunc( 74 testAccCheckCloudStorageBucketExists( 75 "google_storage_bucket.bucket", &bucketName), 76 resource.TestCheckResourceAttr( 77 "google_storage_bucket.bucket", "location", "US"), 78 resource.TestCheckResourceAttr( 79 "google_storage_bucket.bucket", "force_destroy", "false"), 80 ), 81 }, 82 resource.TestStep{ 83 Config: testGoogleStorageBucketsReaderCustomAttributes, 84 Check: resource.ComposeTestCheckFunc( 85 testAccCheckCloudStorageBucketExists( 86 "google_storage_bucket.bucket", &bucketName), 87 resource.TestCheckResourceAttr( 88 "google_storage_bucket.bucket", "predefined_acl", "publicReadWrite"), 89 resource.TestCheckResourceAttr( 90 "google_storage_bucket.bucket", "location", "EU"), 91 resource.TestCheckResourceAttr( 92 "google_storage_bucket.bucket", "force_destroy", "true"), 93 ), 94 }, 95 }, 96 }) 97 } 98 99 func TestAccStorageForceDestroy(t *testing.T) { 100 var bucketName string 101 102 resource.Test(t, resource.TestCase{ 103 PreCheck: func() { testAccPreCheck(t) }, 104 Providers: testAccProviders, 105 CheckDestroy: testAccGoogleStorageDestroy, 106 Steps: []resource.TestStep{ 107 resource.TestStep{ 108 Config: testGoogleStorageBucketsReaderCustomAttributes, 109 Check: resource.ComposeTestCheckFunc( 110 testAccCheckCloudStorageBucketExists( 111 "google_storage_bucket.bucket", &bucketName), 112 ), 113 }, 114 resource.TestStep{ 115 Config: testGoogleStorageBucketsReaderCustomAttributes, 116 Check: resource.ComposeTestCheckFunc( 117 testAccCheckCloudStorageBucketPutItem(&bucketName), 118 ), 119 }, 120 resource.TestStep{ 121 Config: "", 122 Check: resource.ComposeTestCheckFunc( 123 testAccCheckCloudStorageBucketMissing(&bucketName), 124 ), 125 }, 126 }, 127 }) 128 } 129 130 func testAccCheckCloudStorageBucketExists(n string, bucketName *string) resource.TestCheckFunc { 131 return func(s *terraform.State) error { 132 rs, ok := s.RootModule().Resources[n] 133 if !ok { 134 return fmt.Errorf("Not found: %s", n) 135 } 136 137 if rs.Primary.ID == "" { 138 return fmt.Errorf("No Project_ID is set") 139 } 140 141 config := testAccProvider.Meta().(*Config) 142 143 found, err := config.clientStorage.Buckets.Get(rs.Primary.ID).Do() 144 if err != nil { 145 return err 146 } 147 148 if found.Id != rs.Primary.ID { 149 return fmt.Errorf("Bucket not found") 150 } 151 152 *bucketName = found.Name 153 return nil 154 } 155 } 156 157 func testAccCheckCloudStorageBucketPutItem(bucketName *string) resource.TestCheckFunc { 158 return func(s *terraform.State) error { 159 config := testAccProvider.Meta().(*Config) 160 161 data := bytes.NewBufferString("test") 162 dataReader := bytes.NewReader(data.Bytes()) 163 object := &storage.Object{Name: "bucketDestroyTestFile"} 164 165 // This needs to use Media(io.Reader) call, otherwise it does not go to /upload API and fails 166 if res, err := config.clientStorage.Objects.Insert(*bucketName, object).Media(dataReader).Do(); err == nil { 167 fmt.Printf("Created object %v at location %v\n\n", res.Name, res.SelfLink) 168 } else { 169 return fmt.Errorf("Objects.Insert failed: %v", err) 170 } 171 172 return nil 173 } 174 } 175 176 func testAccCheckCloudStorageBucketMissing(bucketName *string) resource.TestCheckFunc { 177 return func(s *terraform.State) error { 178 config := testAccProvider.Meta().(*Config) 179 180 _, err := config.clientStorage.Buckets.Get(*bucketName).Do() 181 if err == nil { 182 return fmt.Errorf("Found %s", *bucketName) 183 } 184 185 if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { 186 return nil 187 } else { 188 return err 189 } 190 } 191 } 192 193 func testAccGoogleStorageDestroy(s *terraform.State) error { 194 config := testAccProvider.Meta().(*Config) 195 196 for _, rs := range s.RootModule().Resources { 197 if rs.Type != "google_storage_bucket" { 198 continue 199 } 200 201 _, err := config.clientStorage.Buckets.Get(rs.Primary.ID).Do() 202 if err == nil { 203 return fmt.Errorf("Bucket still exists") 204 } 205 } 206 207 return nil 208 } 209 210 var randInt = rand.New(rand.NewSource(time.Now().UnixNano())).Int() 211 212 var testGoogleStorageBucketsReaderDefaults = fmt.Sprintf(` 213 resource "google_storage_bucket" "bucket" { 214 name = "tf-test-bucket-%d" 215 } 216 `, randInt) 217 218 var testGoogleStorageBucketsReaderCustomAttributes = fmt.Sprintf(` 219 resource "google_storage_bucket" "bucket" { 220 name = "tf-test-bucket-%d" 221 predefined_acl = "publicReadWrite" 222 location = "EU" 223 force_destroy = "true" 224 } 225 `, randInt)