github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/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())