github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/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 "os" 8 "path/filepath" 9 10 "github.com/juju/errors" 11 "github.com/juju/testing" 12 jc "github.com/juju/testing/checkers" 13 "github.com/juju/utils/v3" 14 gc "gopkg.in/check.v1" 15 16 "github.com/juju/juju/cloud" 17 "github.com/juju/juju/environs" 18 envtesting "github.com/juju/juju/environs/testing" 19 ) 20 21 type credentialsSuite struct { 22 testing.IsolationSuite 23 provider environs.EnvironProvider 24 } 25 26 var _ = gc.Suite(&credentialsSuite{}) 27 28 func (s *credentialsSuite) SetUpTest(c *gc.C) { 29 s.IsolationSuite.SetUpTest(c) 30 31 var err error 32 s.provider, err = environs.Provider("ec2") 33 c.Assert(err, jc.ErrorIsNil) 34 } 35 36 func (s *credentialsSuite) TestCredentialSchemas(c *gc.C) { 37 envtesting.AssertProviderAuthTypes(c, s.provider, "access-key", "instance-role") 38 } 39 40 func (s *credentialsSuite) TestAccessKeyCredentialsValid(c *gc.C) { 41 envtesting.AssertProviderCredentialsValid(c, s.provider, "access-key", map[string]string{ 42 "access-key": "key", 43 "secret-key": "secret", 44 }) 45 } 46 47 func (s *credentialsSuite) TestAccessKeyHiddenAttributes(c *gc.C) { 48 envtesting.AssertProviderCredentialsAttributesHidden(c, s.provider, "access-key", "secret-key") 49 } 50 51 func (s *credentialsSuite) TestDetectCredentialsNotFound(c *gc.C) { 52 // No environment variables set, so no credentials should be found. 53 s.PatchEnvironment("AWS_ACCESS_KEY_ID", "") 54 s.PatchEnvironment("AWS_SECRET_ACCESS_KEY", "") 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(c *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 = os.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 = os.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 home := utils.Home() 124 dir := c.MkDir() 125 err := utils.SetHome(dir) 126 c.Assert(err, jc.ErrorIsNil) 127 s.AddCleanup(func(c *gc.C) { 128 err := utils.SetHome(home) 129 c.Assert(err, jc.ErrorIsNil) 130 }) 131 s.assertDetectCredentialsKnownLocation(c, dir) 132 }