remove test-related special casing

This commit is contained in:
Megan Marsh 2018-09-10 15:43:01 -07:00
parent ef3c10c403
commit 93f1155a14
8 changed files with 1318 additions and 42 deletions

View File

@ -11,6 +11,8 @@ func testConfig() map[string]interface{} {
"ami_name": "foo", "ami_name": "foo",
"source_ami": "foo", "source_ami": "foo",
"region": "us-east-1", "region": "us-east-1",
// region validation logic is checked in ami_config_test
"skip_region_validation": true,
} }
} }

View File

@ -148,7 +148,8 @@ func (c *AccessConfig) Prepare(ctx *interpolate.Context) []error {
} }
if c.RawRegion != "" && !c.SkipValidation { if c.RawRegion != "" && !c.SkipValidation {
if valid := ValidateRegion(c.RawRegion); !valid { ec2conn := getValidationSession()
if valid := ValidateRegion(c.RawRegion, ec2conn); !valid {
errs = append(errs, fmt.Errorf("Unknown region: %s", c.RawRegion)) errs = append(errs, fmt.Errorf("Unknown region: %s", c.RawRegion))
} }
} }

View File

@ -13,33 +13,40 @@ func testAccessConfig() *AccessConfig {
func TestAccessConfigPrepare_Region(t *testing.T) { func TestAccessConfigPrepare_Region(t *testing.T) {
c := testAccessConfig() c := testAccessConfig()
c.RawRegion = ""
if err := c.Prepare(nil); err != nil { mockConn := &mockEC2Client{}
t.Fatalf("shouldn't have err: %s", err)
}
c.RawRegion = "us-east-12" c.RawRegion = "us-east-12"
if err := c.Prepare(nil); err == nil { valid := ValidateRegion(c.RawRegion, mockConn)
t.Fatal("should have error") if valid {
t.Fatalf("should have region validation err: %s", c.RawRegion)
} }
c.RawRegion = "us-east-1" c.RawRegion = "us-east-1"
if err := c.Prepare(nil); err != nil { valid = ValidateRegion(c.RawRegion, mockConn)
t.Fatalf("shouldn't have err: %s", err) if !valid {
t.Fatalf("shouldn't have region validation err: %s", c.RawRegion)
} }
c.RawRegion = "custom" c.RawRegion = "custom"
if err := c.Prepare(nil); err == nil { valid = ValidateRegion(c.RawRegion, mockConn)
t.Fatalf("should have err") if valid {
t.Fatalf("should have region validation err: %s", c.RawRegion)
} }
c.RawRegion = "custom" c.RawRegion = "custom"
c.SkipValidation = true c.SkipValidation = true
// testing whole prepare func here; this is checking that validation is
// skipped, so we don't need a mock connection
if err := c.Prepare(nil); err != nil { if err := c.Prepare(nil); err != nil {
t.Fatalf("shouldn't have err: %s", err) t.Fatalf("shouldn't have err: %s", err)
} }
c.SkipValidation = false
c.SkipValidation = false
c.RawRegion = ""
if err := c.Prepare(nil); err != nil {
t.Fatalf("shouldn't have err: %s", err)
}
} }
func TestAccessConfigPrepare_RegionRestricted(t *testing.T) { func TestAccessConfigPrepare_RegionRestricted(t *testing.T) {

View File

@ -71,7 +71,7 @@ func (c *AMIConfig) Prepare(accessConfig *AccessConfig, ctx *interpolate.Context
if !c.AMISkipRegionValidation { if !c.AMISkipRegionValidation {
// Verify the region is real // Verify the region is real
if valid := ValidateRegion(region); !valid { if valid := ValidateRegion(region, getValidationSession()); !valid {
errs = append(errs, fmt.Errorf("Unknown region: %s", region)) errs = append(errs, fmt.Errorf("Unknown region: %s", region))
} }
} }

View File

@ -3,6 +3,9 @@ package common
import ( import (
"reflect" "reflect"
"testing" "testing"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
) )
func testAMIConfig() *AMIConfig { func testAMIConfig() *AMIConfig {
@ -29,6 +32,19 @@ func TestAMIConfigPrepare_name(t *testing.T) {
} }
} }
type mockEC2Client struct {
ec2iface.EC2API
}
func (m *mockEC2Client) DescribeRegions(*ec2.DescribeRegionsInput) (*ec2.DescribeRegionsOutput, error) {
// Describes a region.
regionString := "us-east-1"
reg := ec2.Region{RegionName: &regionString}
return &ec2.DescribeRegionsOutput{
Regions: []*ec2.Region{&reg},
}, nil
}
func TestAMIConfigPrepare_regions(t *testing.T) { func TestAMIConfigPrepare_regions(t *testing.T) {
c := testAMIConfig() c := testAMIConfig()
c.AMIRegions = nil c.AMIRegions = nil
@ -36,7 +52,8 @@ func TestAMIConfigPrepare_regions(t *testing.T) {
t.Fatalf("shouldn't have err: %s", err) t.Fatalf("shouldn't have err: %s", err)
} }
c.AMIRegions = listEC2Regions() mockConn := &mockEC2Client{}
c.AMIRegions = listEC2Regions(mockConn)
if err := c.Prepare(nil, nil); err != nil { if err := c.Prepare(nil, nil); err != nil {
t.Fatalf("shouldn't have err: %s", err) t.Fatalf("shouldn't have err: %s", err)
} }

View File

@ -1,19 +1,22 @@
package common package common
import ( import (
"flag"
"github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
) )
func listEC2Regions() []string { func getValidationSession() *ec2.EC2 {
var regions []string
sess := session.Must(session.NewSessionWithOptions(session.Options{ sess := session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable, SharedConfigState: session.SharedConfigEnable,
})) }))
ec2conn := ec2.New(sess) ec2conn := ec2.New(sess)
return ec2conn
}
func listEC2Regions(ec2conn ec2iface.EC2API) []string {
var regions []string
resultRegions, _ := ec2conn.DescribeRegions(nil) resultRegions, _ := ec2conn.DescribeRegions(nil)
for _, region := range resultRegions.Regions { for _, region := range resultRegions.Regions {
regions = append(regions, *region.RegionName) regions = append(regions, *region.RegionName)
@ -24,24 +27,8 @@ func listEC2Regions() []string {
// ValidateRegion returns true if the supplied region is a valid AWS // ValidateRegion returns true if the supplied region is a valid AWS
// region and false if it's not. // region and false if it's not.
func ValidateRegion(region string) bool { func ValidateRegion(region string, ec2conn ec2iface.EC2API) bool {
for _, valid := range listEC2Regions(ec2conn) {
// To pass tests
if v := flag.Lookup("test.v"); v != nil || v.Value.String() == "true" {
regions := []string{
"us-east-1",
"us-east-2",
"us-west-1",
}
for _, valid := range regions {
if region == valid {
return true
}
}
}
// Normal run
for _, valid := range listEC2Regions() {
if region == valid { if region == valid {
return true return true
} }

File diff suppressed because it is too large Load Diff

20
vendor/vendor.json vendored
View File

@ -531,6 +531,14 @@
"version": "v1.12.72", "version": "v1.12.72",
"versionExact": "v1.12.72" "versionExact": "v1.12.72"
}, },
{
"checksumSHA1": "u+wyWp/GWHHINKLeXP0eQmbfQ38=",
"path": "github.com/aws/aws-sdk-go/service/ec2/ec2iface",
"revision": "586c9ba6027a527800564282bb843d7e6e7985c9",
"revisionTime": "2018-02-07T00:16:19Z",
"version": "v1.12.72",
"versionExact": "v1.12.72"
},
{ {
"checksumSHA1": "kEgV0dSAj3M3M1waEkC27JS7VnU=", "checksumSHA1": "kEgV0dSAj3M3M1waEkC27JS7VnU=",
"comment": "v1.7.1", "comment": "v1.7.1",
@ -1005,12 +1013,6 @@
"revision": "0fb14efe8c47ae851c0034ed7a448854d3d34cf3", "revision": "0fb14efe8c47ae851c0034ed7a448854d3d34cf3",
"revisionTime": "2018-02-01T23:52:37Z" "revisionTime": "2018-02-01T23:52:37Z"
}, },
{
"checksumSHA1": "0PeWsO2aI+2PgVYlYlDPKfzCLEQ=",
"path": "github.com/hashicorp/serf/coordinate",
"revision": "984a73625de3138f44deb38d00878fab39eb6447",
"revisionTime": "2018-05-30T15:59:58Z"
},
{ {
"checksumSHA1": "HtpYAWHvd9mq+mHkpo7z8PGzMik=", "checksumSHA1": "HtpYAWHvd9mq+mHkpo7z8PGzMik=",
"path": "github.com/hashicorp/hcl", "path": "github.com/hashicorp/hcl",
@ -1065,6 +1067,12 @@
"revision": "ef8a98b0bbce4a65b5aa4c368430a80ddc533168", "revision": "ef8a98b0bbce4a65b5aa4c368430a80ddc533168",
"revisionTime": "2018-04-04T17:41:02Z" "revisionTime": "2018-04-04T17:41:02Z"
}, },
{
"checksumSHA1": "0PeWsO2aI+2PgVYlYlDPKfzCLEQ=",
"path": "github.com/hashicorp/serf/coordinate",
"revision": "984a73625de3138f44deb38d00878fab39eb6447",
"revisionTime": "2018-05-30T15:59:58Z"
},
{ {
"checksumSHA1": "oi8fnfAPPTf2nN7zptlyu/EsMMs=", "checksumSHA1": "oi8fnfAPPTf2nN7zptlyu/EsMMs=",
"path": "github.com/hashicorp/vault/api", "path": "github.com/hashicorp/vault/api",