2015-05-26 16:47:24 -04:00
|
|
|
package ebs
|
|
|
|
|
|
|
|
import (
|
2015-06-08 12:16:01 -04:00
|
|
|
"fmt"
|
2015-05-26 16:47:24 -04:00
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
|
2015-06-08 12:16:01 -04:00
|
|
|
"github.com/aws/aws-sdk-go/service/ec2"
|
|
|
|
"github.com/mitchellh/packer/builder/amazon/common"
|
2015-05-26 16:47:24 -04:00
|
|
|
builderT "github.com/mitchellh/packer/helper/builder/testing"
|
2015-06-08 12:16:01 -04:00
|
|
|
"github.com/mitchellh/packer/packer"
|
2015-05-26 16:47:24 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestBuilderAcc_basic(t *testing.T) {
|
|
|
|
builderT.Test(t, builderT.TestCase{
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
Builder: &Builder{},
|
|
|
|
Template: testBuilderAccBasic,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2015-06-08 12:16:01 -04:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-26 16:47:24 -04:00
|
|
|
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")
|
|
|
|
}
|
|
|
|
|
|
|
|
if v := os.Getenv("AWS_SECRET_ACCESS_KEY"); v == "" {
|
|
|
|
t.Fatal("AWS_SECRET_ACCESS_KEY must be set for acceptance tests")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-06-08 12:16:01 -04:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2015-05-26 16:47:24 -04:00
|
|
|
const testBuilderAccBasic = `
|
|
|
|
{
|
|
|
|
"builders": [{
|
|
|
|
"type": "test",
|
|
|
|
"region": "us-east-1",
|
|
|
|
"instance_type": "m3.medium",
|
|
|
|
"source_ami": "ami-76b2a71e",
|
|
|
|
"ssh_username": "ubuntu",
|
|
|
|
"ami_name": "packer-test {{timestamp}}"
|
|
|
|
}]
|
|
|
|
}
|
|
|
|
`
|
2015-06-08 12:16:01 -04:00
|
|
|
|
|
|
|
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"]
|
|
|
|
}]
|
|
|
|
}
|
|
|
|
`
|