github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/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/acctest"
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  
    13  	"github.com/aws/aws-sdk-go/aws"
    14  	"github.com/aws/aws-sdk-go/service/s3"
    15  )
    16  
    17  var tf, err = ioutil.TempFile("", "tf")
    18  
    19  func TestAccAWSS3BucketObject_source(t *testing.T) {
    20  	rInt := acctest.RandInt()
    21  	// first write some data to the tempfile just so it's not 0 bytes.
    22  	ioutil.WriteFile(tf.Name(), []byte("{anything will do }"), 0644)
    23  	resource.Test(t, resource.TestCase{
    24  		PreCheck: func() {
    25  			if err != nil {
    26  				panic(err)
    27  			}
    28  			testAccPreCheck(t)
    29  		},
    30  		Providers:    testAccProviders,
    31  		CheckDestroy: testAccCheckAWSS3BucketObjectDestroy,
    32  		Steps: []resource.TestStep{
    33  			resource.TestStep{
    34  				Config: testAccAWSS3BucketObjectConfigSource(rInt),
    35  				Check:  testAccCheckAWSS3BucketObjectExists("aws_s3_bucket_object.object"),
    36  			},
    37  		},
    38  	})
    39  }
    40  
    41  func TestAccAWSS3BucketObject_content(t *testing.T) {
    42  	rInt := acctest.RandInt()
    43  	resource.Test(t, resource.TestCase{
    44  		PreCheck: func() {
    45  			if err != nil {
    46  				panic(err)
    47  			}
    48  			testAccPreCheck(t)
    49  		},
    50  		Providers:    testAccProviders,
    51  		CheckDestroy: testAccCheckAWSS3BucketObjectDestroy,
    52  		Steps: []resource.TestStep{
    53  			resource.TestStep{
    54  				Config: testAccAWSS3BucketObjectConfigContent(rInt),
    55  				Check:  testAccCheckAWSS3BucketObjectExists("aws_s3_bucket_object.object"),
    56  			},
    57  		},
    58  	})
    59  }
    60  
    61  func TestAccAWSS3BucketObject_withContentCharacteristics(t *testing.T) {
    62  	rInt := acctest.RandInt()
    63  	// first write some data to the tempfile just so it's not 0 bytes.
    64  	ioutil.WriteFile(tf.Name(), []byte("{anything will do }"), 0644)
    65  	resource.Test(t, resource.TestCase{
    66  		PreCheck: func() {
    67  			if err != nil {
    68  				panic(err)
    69  			}
    70  			testAccPreCheck(t)
    71  		},
    72  		Providers:    testAccProviders,
    73  		CheckDestroy: testAccCheckAWSS3BucketObjectDestroy,
    74  		Steps: []resource.TestStep{
    75  			resource.TestStep{
    76  				Config: testAccAWSS3BucketObjectConfig_withContentCharacteristics(rInt),
    77  				Check: resource.ComposeTestCheckFunc(
    78  					testAccCheckAWSS3BucketObjectExists("aws_s3_bucket_object.object"),
    79  					resource.TestCheckResourceAttr(
    80  						"aws_s3_bucket_object.object", "content_type", "binary/octet-stream"),
    81  				),
    82  			},
    83  		},
    84  	})
    85  }
    86  
    87  func testAccCheckAWSS3BucketObjectDestroy(s *terraform.State) error {
    88  	s3conn := testAccProvider.Meta().(*AWSClient).s3conn
    89  
    90  	for _, rs := range s.RootModule().Resources {
    91  		if rs.Type != "aws_s3_bucket_object" {
    92  			continue
    93  		}
    94  
    95  		_, err := s3conn.HeadObject(
    96  			&s3.HeadObjectInput{
    97  				Bucket:  aws.String(rs.Primary.Attributes["bucket"]),
    98  				Key:     aws.String(rs.Primary.Attributes["key"]),
    99  				IfMatch: aws.String(rs.Primary.Attributes["etag"]),
   100  			})
   101  		if err == nil {
   102  			return fmt.Errorf("AWS S3 Object still exists: %s", rs.Primary.ID)
   103  		}
   104  	}
   105  	return nil
   106  }
   107  
   108  func testAccCheckAWSS3BucketObjectExists(n string) resource.TestCheckFunc {
   109  	return func(s *terraform.State) error {
   110  
   111  		defer os.Remove(tf.Name())
   112  
   113  		rs, ok := s.RootModule().Resources[n]
   114  		if !ok {
   115  			return fmt.Errorf("Not Found: %s", n)
   116  		}
   117  
   118  		if rs.Primary.ID == "" {
   119  			return fmt.Errorf("No S3 Bucket Object ID is set")
   120  		}
   121  
   122  		s3conn := testAccProvider.Meta().(*AWSClient).s3conn
   123  		_, err := s3conn.GetObject(
   124  			&s3.GetObjectInput{
   125  				Bucket:  aws.String(rs.Primary.Attributes["bucket"]),
   126  				Key:     aws.String(rs.Primary.Attributes["key"]),
   127  				IfMatch: aws.String(rs.Primary.Attributes["etag"]),
   128  			})
   129  		if err != nil {
   130  			return fmt.Errorf("S3Bucket Object error: %s", err)
   131  		}
   132  		return nil
   133  	}
   134  }
   135  
   136  func testAccAWSS3BucketObjectConfigSource(randInt int) string {
   137  	return fmt.Sprintf(`
   138  resource "aws_s3_bucket" "object_bucket" {
   139      bucket = "tf-object-test-bucket-%d"
   140  }
   141  resource "aws_s3_bucket_object" "object" {
   142  	bucket = "${aws_s3_bucket.object_bucket.bucket}"
   143  	key = "test-key"
   144  	source = "%s"
   145  	content_type = "binary/octet-stream"
   146  }
   147  `, randInt, tf.Name())
   148  }
   149  
   150  func testAccAWSS3BucketObjectConfig_withContentCharacteristics(randInt int) string {
   151  	return fmt.Sprintf(`
   152  resource "aws_s3_bucket" "object_bucket_2" {
   153  	bucket = "tf-object-test-bucket-%d"
   154  }
   155  
   156  resource "aws_s3_bucket_object" "object" {
   157  	bucket = "${aws_s3_bucket.object_bucket_2.bucket}"
   158  	key = "test-key"
   159  	source = "%s"
   160  	content_language = "en"
   161  	content_type = "binary/octet-stream"
   162  }
   163  `, randInt, tf.Name())
   164  }
   165  
   166  func testAccAWSS3BucketObjectConfigContent(randInt int) string {
   167  	return fmt.Sprintf(`
   168  resource "aws_s3_bucket" "object_bucket" {
   169          bucket = "tf-object-test-bucket-%d"
   170  }
   171  resource "aws_s3_bucket_object" "object" {
   172          bucket = "${aws_s3_bucket.object_bucket.bucket}"
   173          key = "test-key"
   174          content = "some_bucket_content"
   175  }
   176  `, randInt)
   177  }