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 }