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",
"source_ami": "foo",
"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 valid := ValidateRegion(c.RawRegion); !valid {
ec2conn := getValidationSession()
if valid := ValidateRegion(c.RawRegion, ec2conn); !valid {
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) {
c := testAccessConfig()
c.RawRegion = ""
if err := c.Prepare(nil); err != nil {
t.Fatalf("shouldn't have err: %s", err)
}
mockConn := &mockEC2Client{}
c.RawRegion = "us-east-12"
if err := c.Prepare(nil); err == nil {
t.Fatal("should have error")
valid := ValidateRegion(c.RawRegion, mockConn)
if valid {
t.Fatalf("should have region validation err: %s", c.RawRegion)
}
c.RawRegion = "us-east-1"
if err := c.Prepare(nil); err != nil {
t.Fatalf("shouldn't have err: %s", err)
valid = ValidateRegion(c.RawRegion, mockConn)
if !valid {
t.Fatalf("shouldn't have region validation err: %s", c.RawRegion)
}
c.RawRegion = "custom"
if err := c.Prepare(nil); err == nil {
t.Fatalf("should have err")
valid = ValidateRegion(c.RawRegion, mockConn)
if valid {
t.Fatalf("should have region validation err: %s", c.RawRegion)
}
c.RawRegion = "custom"
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 {
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) {

View File

@ -71,7 +71,7 @@ func (c *AMIConfig) Prepare(accessConfig *AccessConfig, ctx *interpolate.Context
if !c.AMISkipRegionValidation {
// 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))
}
}

View File

@ -3,6 +3,9 @@ package common
import (
"reflect"
"testing"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
)
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) {
c := testAMIConfig()
c.AMIRegions = nil
@ -36,7 +52,8 @@ func TestAMIConfigPrepare_regions(t *testing.T) {
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 {
t.Fatalf("shouldn't have err: %s", err)
}

View File

@ -1,19 +1,22 @@
package common
import (
"flag"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
)
func listEC2Regions() []string {
var regions []string
func getValidationSession() *ec2.EC2 {
sess := session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
}))
ec2conn := ec2.New(sess)
return ec2conn
}
func listEC2Regions(ec2conn ec2iface.EC2API) []string {
var regions []string
resultRegions, _ := ec2conn.DescribeRegions(nil)
for _, region := range resultRegions.Regions {
regions = append(regions, *region.RegionName)
@ -24,24 +27,8 @@ func listEC2Regions() []string {
// ValidateRegion returns true if the supplied region is a valid AWS
// region and false if it's not.
func ValidateRegion(region string) bool {
// 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() {
func ValidateRegion(region string, ec2conn ec2iface.EC2API) bool {
for _, valid := range listEC2Regions(ec2conn) {
if region == valid {
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",
"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=",
"comment": "v1.7.1",
@ -1005,12 +1013,6 @@
"revision": "0fb14efe8c47ae851c0034ed7a448854d3d34cf3",
"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=",
"path": "github.com/hashicorp/hcl",
@ -1065,6 +1067,12 @@
"revision": "ef8a98b0bbce4a65b5aa4c368430a80ddc533168",
"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=",
"path": "github.com/hashicorp/vault/api",