Created
August 16, 2017 22:44
-
-
Save mubeta06/b5e29694b8b1b5b5511f373ab5f85703 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package derp | |
import ( | |
"fmt" | |
"io/ioutil" | |
"log" | |
"os" | |
"testing" | |
"github.com/hashicorp/terraform/helper/acctest" | |
"github.com/hashicorp/terraform/helper/resource" | |
"github.com/hashicorp/terraform/helper/schema" | |
"github.com/hashicorp/terraform/terraform" | |
"github.com/terraform-providers/terraform-provider-template/template" | |
"github.com/terraform-providers/terraform-provider-tls/tls" | |
terraformaws "github.com/terraform-providers/terraform-provider-aws/aws" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/service/s3" | |
) | |
var testAccProviders map[string]terraform.ResourceProvider | |
var testAccProvidersWithTLS map[string]terraform.ResourceProvider | |
var testAccProvider *schema.Provider | |
var testAccTemplateProvider *schema.Provider | |
func init() { | |
testAccProvider = terraformaws.Provider().(*schema.Provider) | |
testAccTemplateProvider = template.Provider().(*schema.Provider) | |
testAccProviders = map[string]terraform.ResourceProvider{ | |
"aws": testAccProvider, | |
"template": testAccTemplateProvider, | |
} | |
testAccProvidersWithTLS = map[string]terraform.ResourceProvider{ | |
"tls": tls.Provider(), | |
} | |
for k, v := range testAccProviders { | |
testAccProvidersWithTLS[k] = v | |
} | |
} | |
func testAccPreCheck(t *testing.T) { | |
if v := os.Getenv("AWS_PROFILE"); v == "" { | |
if v := os.Getenv("AWS_ACCESS_KEY_ID"); v == "" { | |
t.Fatal("AWS_ACCESS_KEY_ID must be set for acceptance tests") | |
} | |
if v := os.Getenv("AWS_SECRET_ACCESS_KEY"); v == "" { | |
t.Fatal("AWS_SECRET_ACCESS_KEY must be set for acceptance tests") | |
} | |
} | |
if v := os.Getenv("AWS_DEFAULT_REGION"); v == "" { | |
log.Println("[INFO] Test: Using us-west-2 as test region") | |
os.Setenv("AWS_DEFAULT_REGION", "us-west-2") | |
} | |
err := testAccProvider.Configure(terraform.NewResourceConfig(nil)) | |
if err != nil { | |
t.Fatal(err) | |
} | |
} | |
func TestAccAWSS3BucketObject_sse(t *testing.T) { | |
tmpFile, err := ioutil.TempFile("", "tf-acc-s3-obj-source-sse") | |
if err != nil { | |
t.Fatal(err) | |
} | |
defer os.Remove(tmpFile.Name()) | |
// first write some data to the tempfile just so it's not 0 bytes. | |
err = ioutil.WriteFile(tmpFile.Name(), []byte("{anything will do}"), 0644) | |
if err != nil { | |
t.Fatal(err) | |
} | |
rInt := acctest.RandInt() | |
var obj s3.GetObjectOutput | |
resource.Test(t, resource.TestCase{ | |
PreCheck: func() { testAccPreCheck(t) }, | |
Providers: testAccProviders, | |
CheckDestroy: testAccCheckAWSS3BucketObjectDestroy, | |
Steps: []resource.TestStep{ | |
resource.TestStep{ | |
PreConfig: func() {}, | |
Config: testAccAWSS3BucketObjectConfig_withSSE(rInt, tmpFile.Name()), | |
Check: resource.ComposeTestCheckFunc( | |
testAccCheckAWSS3BucketObjectExists( | |
"aws_s3_bucket_object.object", | |
&obj), | |
testAccCheckAWSS3BucketObjectSSE( | |
"aws_s3_bucket_object.object", | |
"aws:kms"), | |
), | |
}, | |
}, | |
}) | |
} | |
func testAccCheckAWSS3BucketObjectDestroy(s *terraform.State) error { | |
s3conn := testAccProvider.Meta().(*terraformaws.AWSClient).S3() | |
for _, rs := range s.RootModule().Resources { | |
if rs.Type != "aws_s3_bucket_object" { | |
continue | |
} | |
_, err := s3conn.HeadObject( | |
&s3.HeadObjectInput{ | |
Bucket: aws.String(rs.Primary.Attributes["bucket"]), | |
Key: aws.String(rs.Primary.Attributes["key"]), | |
IfMatch: aws.String(rs.Primary.Attributes["etag"]), | |
}) | |
if err == nil { | |
return fmt.Errorf("AWS S3 Object still exists: %s", rs.Primary.ID) | |
} | |
} | |
return nil | |
} | |
func testAccCheckAWSS3BucketObjectExists(n string, obj *s3.GetObjectOutput) resource.TestCheckFunc { | |
return func(s *terraform.State) error { | |
rs, ok := s.RootModule().Resources[n] | |
if !ok { | |
return fmt.Errorf("Not Found: %s", n) | |
} | |
if rs.Primary.ID == "" { | |
return fmt.Errorf("No S3 Bucket Object ID is set") | |
} | |
s3conn := testAccProvider.Meta().(*terraformaws.AWSClient).S3() | |
out, err := s3conn.GetObject( | |
&s3.GetObjectInput{ | |
Bucket: aws.String(rs.Primary.Attributes["bucket"]), | |
Key: aws.String(rs.Primary.Attributes["key"]), | |
IfMatch: aws.String(rs.Primary.Attributes["etag"]), | |
}) | |
if err != nil { | |
return fmt.Errorf("S3Bucket Object error: %s", err) | |
} | |
*obj = *out | |
return nil | |
} | |
} | |
func testAccCheckAWSS3BucketObjectSSE(n, expectedSSE string) resource.TestCheckFunc { | |
return func(s *terraform.State) error { | |
rs, _ := s.RootModule().Resources[n] | |
s3conn := testAccProvider.Meta().(*terraformaws.AWSClient).S3() | |
out, err := s3conn.HeadObject(&s3.HeadObjectInput{ | |
Bucket: aws.String(rs.Primary.Attributes["bucket"]), | |
Key: aws.String(rs.Primary.Attributes["key"]), | |
}) | |
if err != nil { | |
return fmt.Errorf("HeadObject error: %v", err) | |
} | |
if out.ServerSideEncryption == nil { | |
return fmt.Errorf("Expected a non %v Server Side Encryption.", out.ServerSideEncryption) | |
} | |
sse := *out.ServerSideEncryption | |
if sse != expectedSSE { | |
return fmt.Errorf("Expected Server Side Encryption %v, got %v.", | |
expectedSSE, sse) | |
} | |
return nil | |
} | |
} | |
func testAccAWSS3BucketObjectConfig_withSSE(randInt int, source string) string { | |
return fmt.Sprintf(` | |
resource "aws_s3_bucket" "object_bucket" { | |
bucket = "tf-object-test-bucket-%d" | |
} | |
resource "aws_s3_bucket_object" "object" { | |
bucket = "${aws_s3_bucket.object_bucket.bucket}" | |
key = "test-key" | |
source = "%s" | |
server_side_encryption = "aws:kms" | |
} | |
`, randInt, source) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment