github.com/atsaki/terraform@v0.4.3-0.20150919165407-25bba5967654/builtin/providers/google/resource_storage_bucket_object_test.go (about)

     1  package google
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  	"io/ioutil"
     7  	"crypto/md5"
     8  	"encoding/base64"
     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  
    20  func TestAccGoogleStorageObject_basic(t *testing.T) {
    21  	data := []byte("data data data")
    22  	h := md5.New()
    23  	h.Write(data)
    24  	data_md5 := base64.StdEncoding.EncodeToString(h.Sum(nil))
    25  
    26  	ioutil.WriteFile(tf.Name(), data, 0644)
    27  	resource.Test(t, resource.TestCase{
    28  		PreCheck: func() {
    29  			if err != nil {
    30  				panic(err)
    31  			}
    32  			testAccPreCheck(t)
    33  		},
    34  		Providers:    testAccProviders,
    35  		CheckDestroy: testAccGoogleStorageObjectDestroy,
    36  		Steps: []resource.TestStep{
    37  			resource.TestStep{
    38  				Config: testGoogleStorageBucketsObjectBasic,
    39  				Check:  testAccCheckGoogleStorageObject(bucketName, objectName, data_md5),
    40  			},
    41  		},
    42  	})
    43  }
    44  
    45  func testAccCheckGoogleStorageObject(bucket, object, md5 string) resource.TestCheckFunc {
    46  	return func(s *terraform.State) error {
    47  		config := testAccProvider.Meta().(*Config)
    48  
    49  		objectsService := storage.NewObjectsService(config.clientStorage)
    50  
    51  
    52  		getCall := objectsService.Get(bucket, object)
    53  		res, err := getCall.Do()
    54  
    55  		if err != nil {
    56  			return fmt.Errorf("Error retrieving contents of object %s: %s", object, err)
    57  		}
    58  
    59  		if (md5 != res.Md5Hash) {
    60  			return fmt.Errorf("Error contents of %s garbled, md5 hashes don't match (%s, %s)", object, md5, res.Md5Hash)
    61  		}
    62  
    63  		return nil
    64  	}
    65  }
    66  
    67  func testAccGoogleStorageObjectDestroy(s *terraform.State) error {
    68  	config := testAccProvider.Meta().(*Config)
    69  
    70  	for _, rs := range s.RootModule().Resources {
    71  		if rs.Type != "google_storage_bucket_object" {
    72  			continue
    73  		}
    74  
    75  		bucket := rs.Primary.Attributes["bucket"]
    76  		name := rs.Primary.Attributes["name"]
    77  
    78  		objectsService := storage.NewObjectsService(config.clientStorage)
    79  
    80  		getCall := objectsService.Get(bucket, name)
    81  		_, err := getCall.Do()
    82  
    83  		if err == nil {
    84  			return fmt.Errorf("Object %s still exists", name)
    85  		}
    86  	}
    87  
    88  	return nil
    89  }
    90  
    91  var testGoogleStorageBucketsObjectBasic = fmt.Sprintf(`
    92  resource "google_storage_bucket" "bucket" {
    93  	name = "%s"
    94  }
    95  
    96  resource "google_storage_bucket_object" "object" {
    97  	name = "%s"
    98  	bucket = "${google_storage_bucket.bucket.name}"
    99  	source = "%s"
   100  	predefined_acl = "projectPrivate"
   101  }
   102  `, bucketName, objectName, tf.Name())