github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/provider/ec2/credentials_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 "io/ioutil" 8 "os" 9 "path/filepath" 10 "runtime" 11 12 "github.com/juju/errors" 13 "github.com/juju/testing" 14 jc "github.com/juju/testing/checkers" 15 "github.com/juju/utils" 16 gc "gopkg.in/check.v1" 17 18 "github.com/juju/juju/cloud" 19 "github.com/juju/juju/environs" 20 envtesting "github.com/juju/juju/environs/testing" 21 ) 22 23 type credentialsSuite struct { 24 testing.IsolationSuite 25 provider environs.EnvironProvider 26 } 27 28 var _ = gc.Suite(&credentialsSuite{}) 29 30 func (s *credentialsSuite) SetUpTest(c *gc.C) { 31 s.IsolationSuite.SetUpTest(c) 32 33 var err error 34 s.provider, err = environs.Provider("ec2") 35 c.Assert(err, jc.ErrorIsNil) 36 } 37 38 func (s *credentialsSuite) TestCredentialSchemas(c *gc.C) { 39 envtesting.AssertProviderAuthTypes(c, s.provider, "access-key") 40 } 41 42 func (s *credentialsSuite) TestAccessKeyCredentialsValid(c *gc.C) { 43 envtesting.AssertProviderCredentialsValid(c, s.provider, "access-key", map[string]string{ 44 "access-key": "key", 45 "secret-key": "secret", 46 }) 47 } 48 49 func (s *credentialsSuite) TestAccessKeyHiddenAttributes(c *gc.C) { 50 envtesting.AssertProviderCredentialsAttributesHidden(c, s.provider, "access-key", "secret-key") 51 } 52 53 func (s *credentialsSuite) TestDetectCredentialsNotFound(c *gc.C) { 54 // No environment variables set, so no credentials should be found. 55 _, err := s.provider.DetectCredentials() 56 c.Assert(err, jc.Satisfies, errors.IsNotFound) 57 } 58 59 func (s *credentialsSuite) TestDetectCredentialsEnvironmentVariables(c *gc.C) { 60 home := utils.Home() 61 dir := c.MkDir() 62 err := utils.SetHome(dir) 63 c.Assert(err, jc.ErrorIsNil) 64 s.AddCleanup(func(*gc.C) { 65 err := utils.SetHome(home) 66 c.Assert(err, jc.ErrorIsNil) 67 }) 68 s.PatchEnvironment("USER", "fred") 69 s.PatchEnvironment("AWS_ACCESS_KEY_ID", "key-id") 70 s.PatchEnvironment("AWS_SECRET_ACCESS_KEY", "secret-access-key") 71 72 credentials, err := s.provider.DetectCredentials() 73 c.Assert(err, jc.ErrorIsNil) 74 expected := cloud.NewCredential( 75 cloud.AccessKeyAuthType, map[string]string{ 76 "access-key": "key-id", 77 "secret-key": "secret-access-key", 78 }, 79 ) 80 expected.Label = `aws credential "fred"` 81 c.Assert(credentials.AuthCredentials["fred"], jc.DeepEquals, expected) 82 } 83 84 func (s *credentialsSuite) assertDetectCredentialsKnownLocation(c *gc.C, dir string) { 85 location := filepath.Join(dir, ".aws") 86 err := os.MkdirAll(location, 0700) 87 c.Assert(err, jc.ErrorIsNil) 88 path := filepath.Join(location, "credentials") 89 credData := ` 90 [fred] 91 aws_access_key_id=aws-key-id 92 aws_secret_access_key=aws-secret-access-key 93 `[1:] 94 err = ioutil.WriteFile(path, []byte(credData), 0600) 95 c.Assert(err, jc.ErrorIsNil) 96 97 path = filepath.Join(location, "config") 98 regionData := ` 99 [default] 100 region=region 101 `[1:] 102 err = ioutil.WriteFile(path, []byte(regionData), 0600) 103 c.Assert(err, jc.ErrorIsNil) 104 105 // Ensure any env vars are ignored. 106 s.PatchEnvironment("AWS_ACCESS_KEY_ID", "key-id") 107 s.PatchEnvironment("AWS_SECRET_ACCESS_KEY", "secret-access-key") 108 109 credentials, err := s.provider.DetectCredentials() 110 c.Assert(err, jc.ErrorIsNil) 111 c.Assert(credentials.DefaultRegion, gc.Equals, "region") 112 expected := cloud.NewCredential( 113 cloud.AccessKeyAuthType, map[string]string{ 114 "access-key": "aws-key-id", 115 "secret-key": "aws-secret-access-key", 116 }, 117 ) 118 expected.Label = `aws credential "fred"` 119 c.Assert(credentials.AuthCredentials["fred"], jc.DeepEquals, expected) 120 } 121 122 func (s *credentialsSuite) TestDetectCredentialsKnownLocationUnix(c *gc.C) { 123 if runtime.GOOS == "windows" { 124 c.Skip("skipping on Windows") 125 } 126 home := utils.Home() 127 dir := c.MkDir() 128 err := utils.SetHome(dir) 129 c.Assert(err, jc.ErrorIsNil) 130 s.AddCleanup(func(*gc.C) { 131 err := utils.SetHome(home) 132 c.Assert(err, jc.ErrorIsNil) 133 }) 134 s.assertDetectCredentialsKnownLocation(c, dir) 135 } 136 137 func (s *credentialsSuite) TestDetectCredentialsKnownLocationWindows(c *gc.C) { 138 if runtime.GOOS != "windows" { 139 c.Skip("skipping on non-Windows platform") 140 } 141 dir := c.MkDir() 142 s.PatchEnvironment("USERPROFILE", dir) 143 s.assertDetectCredentialsKnownLocation(c, dir) 144 }