github.com/anuaimi/terraform@v0.6.4-0.20150904235404-2bf9aec61da8/builtin/providers/aws/resource_aws_s3_bucket_object_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  
    12  	"github.com/aws/aws-sdk-go/aws"
    13  	"github.com/aws/aws-sdk-go/service/s3"
    14  )
    15  
    16  var tf, err = ioutil.TempFile("", "tf")
    17  
    18  func TestAccAWSS3BucketObject_basic(t *testing.T) {
    19  	// first write some data to the tempfile just so it's not 0 bytes.
    20  	ioutil.WriteFile(tf.Name(), []byte("{anything will do }"), 0644)
    21  	resource.Test(t, resource.TestCase{
    22  		PreCheck: func() {
    23  			if err != nil {
    24  				panic(err)
    25  			}
    26  			testAccPreCheck(t)
    27  		},
    28  		Providers:    testAccProviders,
    29  		CheckDestroy: testAccCheckAWSS3BucketObjectDestroy,
    30  		Steps: []resource.TestStep{
    31  			resource.TestStep{
    32  				Config: testAccAWSS3BucketObjectConfig,
    33  				Check:  testAccCheckAWSS3BucketObjectExists("aws_s3_bucket_object.object"),
    34  			},
    35  		},
    36  	})
    37  }
    38  
    39  func testAccCheckAWSS3BucketObjectDestroy(s *terraform.State) error {
    40  	s3conn := testAccProvider.Meta().(*AWSClient).s3conn
    41  
    42  	for _, rs := range s.RootModule().Resources {
    43  		if rs.Type != "aws_s3_bucket_object" {
    44  			continue
    45  		}
    46  
    47  		_, err := s3conn.HeadObject(
    48  			&s3.HeadObjectInput{
    49  				Bucket:  aws.String(rs.Primary.Attributes["bucket"]),
    50  				Key:     aws.String(rs.Primary.Attributes["key"]),
    51  				IfMatch: aws.String(rs.Primary.Attributes["etag"]),
    52  			})
    53  		if err == nil {
    54  			return fmt.Errorf("AWS S3 Object still exists: %s", rs.Primary.ID)
    55  		}
    56  	}
    57  	return nil
    58  }
    59  
    60  func testAccCheckAWSS3BucketObjectExists(n string) resource.TestCheckFunc {
    61  	return func(s *terraform.State) error {
    62  
    63  		defer os.Remove(tf.Name())
    64  
    65  		rs, ok := s.RootModule().Resources[n]
    66  		if !ok {
    67  			return fmt.Errorf("Not Found: %s", n)
    68  		}
    69  
    70  		if rs.Primary.ID == "" {
    71  			return fmt.Errorf("No S3 Bucket Object ID is set")
    72  		}
    73  
    74  		s3conn := testAccProvider.Meta().(*AWSClient).s3conn
    75  		_, err := s3conn.GetObject(
    76  			&s3.GetObjectInput{
    77  				Bucket:  aws.String(rs.Primary.Attributes["bucket"]),
    78  				Key:     aws.String(rs.Primary.Attributes["key"]),
    79  				IfMatch: aws.String(rs.Primary.Attributes["etag"]),
    80  			})
    81  		if err != nil {
    82  			return fmt.Errorf("S3Bucket Object error: %s", err)
    83  		}
    84  		return nil
    85  	}
    86  }
    87  
    88  var randomBucket = randInt
    89  var testAccAWSS3BucketObjectConfig = fmt.Sprintf(`
    90  resource "aws_s3_bucket" "object_bucket" {
    91  	bucket = "tf-object-test-bucket-%d"
    92  }
    93  
    94  resource "aws_s3_bucket_object" "object" {
    95  	bucket = "${aws_s3_bucket.object_bucket.bucket}"
    96  	key = "test-key"
    97  	source = "%s"
    98  }
    99  `, randomBucket, tf.Name())