From 769b7d20b9271f03a4d5122657925e7000fdc4de Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 8 Jun 2015 09:16:01 -0700 Subject: [PATCH] amazon/ebs: acceptance test for region copy --- builder/amazon/ebs/builder_acc_test.go | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/builder/amazon/ebs/builder_acc_test.go b/builder/amazon/ebs/builder_acc_test.go index 19af43512..b70f7f7b9 100644 --- a/builder/amazon/ebs/builder_acc_test.go +++ b/builder/amazon/ebs/builder_acc_test.go @@ -1,10 +1,14 @@ package ebs import ( + "fmt" "os" "testing" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/mitchellh/packer/builder/amazon/common" builderT "github.com/mitchellh/packer/helper/builder/testing" + "github.com/mitchellh/packer/packer" ) func TestBuilderAcc_basic(t *testing.T) { @@ -15,6 +19,48 @@ func TestBuilderAcc_basic(t *testing.T) { }) } +func TestBuilderAcc_regionCopy(t *testing.T) { + builderT.Test(t, builderT.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Builder: &Builder{}, + Template: testBuilderAccRegionCopy, + Check: checkRegionCopy([]string{"us-east-1", "us-west-2"}), + }) +} + +func checkRegionCopy(regions []string) builderT.TestCheckFunc { + return func(artifacts []packer.Artifact) error { + if len(artifacts) > 1 { + return fmt.Errorf("more than 1 artifact") + } + + // Get the actual *Artifact pointer so we can access the AMIs directly + artifactRaw := artifacts[0] + artifact, ok := artifactRaw.(*common.Artifact) + if !ok { + return fmt.Errorf("unknown artifact: %#v", artifactRaw) + } + + // Verify that we copied to only the regions given + regionSet := make(map[string]struct{}) + for _, r := range regions { + regionSet[r] = struct{}{} + } + for r, _ := range artifact.Amis { + if _, ok := regionSet[r]; !ok { + return fmt.Errorf("unknown region: %s", r) + } + + delete(regionSet, r) + } + if len(regionSet) > 0 { + return fmt.Errorf("didn't copy to: %#v", regionSet) + } + + return nil + } +} + func testAccPreCheck(t *testing.T) { if v := os.Getenv("AWS_ACCESS_KEY_ID"); v == "" { t.Fatal("AWS_ACCESS_KEY_ID must be set for acceptance tests") @@ -25,6 +71,16 @@ func testAccPreCheck(t *testing.T) { } } +func testEC2Conn() (*ec2.EC2, error) { + access := &common.AccessConfig{RawRegion: "us-east-1"} + config, err := access.Config() + if err != nil { + return nil, err + } + + return ec2.New(config), nil +} + const testBuilderAccBasic = ` { "builders": [{ @@ -37,3 +93,17 @@ const testBuilderAccBasic = ` }] } ` + +const testBuilderAccRegionCopy = ` +{ + "builders": [{ + "type": "test", + "region": "us-east-1", + "instance_type": "m3.medium", + "source_ami": "ami-76b2a71e", + "ssh_username": "ubuntu", + "ami_name": "packer-test {{timestamp}}", + "ami_regions": ["us-east-1", "us-west-2"] + }] +} +`