github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/provider/ec2/provider_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package ec2_test 5 6 import ( 7 "github.com/juju/testing" 8 jc "github.com/juju/testing/checkers" 9 "gopkg.in/amz.v3/aws" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/cloud" 13 "github.com/juju/juju/environs" 14 "github.com/juju/juju/provider/ec2" 15 coretesting "github.com/juju/juju/testing" 16 ) 17 18 type ProviderSuite struct { 19 testing.IsolationSuite 20 spec environs.CloudSpec 21 provider environs.EnvironProvider 22 } 23 24 var _ = gc.Suite(&ProviderSuite{}) 25 26 func (s *ProviderSuite) SetUpTest(c *gc.C) { 27 s.IsolationSuite.SetUpTest(c) 28 29 credential := cloud.NewCredential( 30 cloud.AccessKeyAuthType, 31 map[string]string{ 32 "access-key": "foo", 33 "secret-key": "bar", 34 }, 35 ) 36 s.spec = environs.CloudSpec{ 37 Type: "ec2", 38 Name: "aws", 39 Region: "us-east-1", 40 Credential: &credential, 41 } 42 43 provider, err := environs.Provider("ec2") 44 c.Assert(err, jc.ErrorIsNil) 45 s.provider = provider 46 } 47 48 func (s *ProviderSuite) TestOpen(c *gc.C) { 49 env, err := s.provider.Open(environs.OpenParams{ 50 Cloud: s.spec, 51 Config: coretesting.ModelConfig(c), 52 }) 53 c.Assert(err, jc.ErrorIsNil) 54 c.Assert(env, gc.NotNil) 55 } 56 57 func (s *ProviderSuite) TestOpenUnknownRegion(c *gc.C) { 58 // This test shows that we do *not* check the region names against 59 // anything in the client. That means that when new regions are 60 // added to AWS, we'll be able to support them. 61 s.spec.Region = "foobar" 62 _, err := s.provider.Open(environs.OpenParams{ 63 Cloud: s.spec, 64 Config: coretesting.ModelConfig(c), 65 }) 66 c.Assert(err, jc.ErrorIsNil) 67 } 68 69 func (s *ProviderSuite) TestOpenKnownRegionInvalidEndpoint(c *gc.C) { 70 s.PatchValue(&aws.Regions, map[string]aws.Region{ 71 "us-east-1": { 72 EC2Endpoint: "https://testing.invalid", 73 }, 74 }) 75 s.spec.Endpoint = "https://us-east-1.aws.amazon.com/v1.2/" 76 77 env, err := s.provider.Open(environs.OpenParams{ 78 Cloud: s.spec, 79 Config: coretesting.ModelConfig(c), 80 }) 81 c.Assert(err, jc.ErrorIsNil) 82 83 ec2Client := ec2.EnvironEC2(env) 84 c.Assert(ec2Client.Region.EC2Endpoint, gc.Equals, "https://testing.invalid") 85 } 86 87 func (s *ProviderSuite) TestOpenKnownRegionValidEndpoint(c *gc.C) { 88 // If the endpoint in the cloudspec is not known to be invalid, 89 // we ignore whatever is in aws.Regions. This way, if the AWS 90 // endpoints do ever change, we can update public-clouds.yaml 91 // and have it picked up. 92 s.PatchValue(&aws.Regions, map[string]aws.Region{ 93 "us-east-1": { 94 EC2Endpoint: "https://testing.invalid", 95 }, 96 }) 97 s.spec.Endpoint = "https://ec2.us-east-1.amazonaws.com" 98 99 env, err := s.provider.Open(environs.OpenParams{ 100 Cloud: s.spec, 101 Config: coretesting.ModelConfig(c), 102 }) 103 c.Assert(err, jc.ErrorIsNil) 104 105 ec2Client := ec2.EnvironEC2(env) 106 c.Assert(ec2Client.Region.EC2Endpoint, gc.Equals, "https://ec2.us-east-1.amazonaws.com") 107 } 108 109 func (s *ProviderSuite) TestOpenMissingCredential(c *gc.C) { 110 s.spec.Credential = nil 111 s.testOpenError(c, s.spec, `validating cloud spec: missing credential not valid`) 112 } 113 114 func (s *ProviderSuite) TestOpenUnsupportedCredential(c *gc.C) { 115 credential := cloud.NewCredential(cloud.UserPassAuthType, map[string]string{}) 116 s.spec.Credential = &credential 117 s.testOpenError(c, s.spec, `validating cloud spec: "userpass" auth-type not supported`) 118 } 119 120 func (s *ProviderSuite) testOpenError(c *gc.C, spec environs.CloudSpec, expect string) { 121 _, err := s.provider.Open(environs.OpenParams{ 122 Cloud: spec, 123 Config: coretesting.ModelConfig(c), 124 }) 125 c.Assert(err, gc.ErrorMatches, expect) 126 }