github.com/leeprovoost/terraform@v0.6.10-0.20160119085442-96f3f76118e7/builtin/providers/google/resource_storage_bucket_object_test.go (about) 1 package google 2 3 import ( 4 "crypto/md5" 5 "encoding/base64" 6 "fmt" 7 "io/ioutil" 8 "testing" 9 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 13 "google.golang.org/api/storage/v1" 14 ) 15 16 var tf, err = ioutil.TempFile("", "tf-gce-test") 17 var bucketName = "tf-gce-bucket-test" 18 var objectName = "tf-gce-test" 19 var content = "now this is content!" 20 21 func TestAccGoogleStorageObject_basic(t *testing.T) { 22 data := []byte("data data data") 23 h := md5.New() 24 h.Write(data) 25 data_md5 := base64.StdEncoding.EncodeToString(h.Sum(nil)) 26 27 ioutil.WriteFile(tf.Name(), data, 0644) 28 resource.Test(t, resource.TestCase{ 29 PreCheck: func() { 30 if err != nil { 31 panic(err) 32 } 33 testAccPreCheck(t) 34 }, 35 Providers: testAccProviders, 36 CheckDestroy: testAccGoogleStorageObjectDestroy, 37 Steps: []resource.TestStep{ 38 resource.TestStep{ 39 Config: testGoogleStorageBucketsObjectBasic, 40 Check: testAccCheckGoogleStorageObject(bucketName, objectName, data_md5), 41 }, 42 }, 43 }) 44 } 45 46 func TestAccGoogleStorageObject_content(t *testing.T) { 47 data := []byte(content) 48 h := md5.New() 49 h.Write(data) 50 data_md5 := base64.StdEncoding.EncodeToString(h.Sum(nil)) 51 52 ioutil.WriteFile(tf.Name(), data, 0644) 53 resource.Test(t, resource.TestCase{ 54 PreCheck: func() { 55 if err != nil { 56 panic(err) 57 } 58 testAccPreCheck(t) 59 }, 60 Providers: testAccProviders, 61 CheckDestroy: testAccGoogleStorageObjectDestroy, 62 Steps: []resource.TestStep{ 63 resource.TestStep{ 64 Config: testGoogleStorageBucketsObjectContent, 65 Check: testAccCheckGoogleStorageObject(bucketName, objectName, data_md5), 66 }, 67 }, 68 }) 69 } 70 71 func testAccCheckGoogleStorageObject(bucket, object, md5 string) resource.TestCheckFunc { 72 return func(s *terraform.State) error { 73 config := testAccProvider.Meta().(*Config) 74 75 objectsService := storage.NewObjectsService(config.clientStorage) 76 77 getCall := objectsService.Get(bucket, object) 78 res, err := getCall.Do() 79 80 if err != nil { 81 return fmt.Errorf("Error retrieving contents of object %s: %s", object, err) 82 } 83 84 if md5 != res.Md5Hash { 85 return fmt.Errorf("Error contents of %s garbled, md5 hashes don't match (%s, %s)", object, md5, res.Md5Hash) 86 } 87 88 return nil 89 } 90 } 91 92 func testAccGoogleStorageObjectDestroy(s *terraform.State) error { 93 config := testAccProvider.Meta().(*Config) 94 95 for _, rs := range s.RootModule().Resources { 96 if rs.Type != "google_storage_bucket_object" { 97 continue 98 } 99 100 bucket := rs.Primary.Attributes["bucket"] 101 name := rs.Primary.Attributes["name"] 102 103 objectsService := storage.NewObjectsService(config.clientStorage) 104 105 getCall := objectsService.Get(bucket, name) 106 _, err := getCall.Do() 107 108 if err == nil { 109 return fmt.Errorf("Object %s still exists", name) 110 } 111 } 112 113 return nil 114 } 115 116 var testGoogleStorageBucketsObjectContent = fmt.Sprintf(` 117 resource "google_storage_bucket" "bucket" { 118 name = "%s" 119 } 120 121 resource "google_storage_bucket_object" "object" { 122 name = "%s" 123 bucket = "${google_storage_bucket.bucket.name}" 124 content = "%s" 125 predefined_acl = "projectPrivate" 126 } 127 `, bucketName, objectName, content) 128 129 var testGoogleStorageBucketsObjectBasic = fmt.Sprintf(` 130 resource "google_storage_bucket" "bucket" { 131 name = "%s" 132 } 133 134 resource "google_storage_bucket_object" "object" { 135 name = "%s" 136 bucket = "${google_storage_bucket.bucket.name}" 137 source = "%s" 138 predefined_acl = "projectPrivate" 139 } 140 `, bucketName, objectName, tf.Name())