github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/jujuclient/credentialsfile_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package jujuclient_test 5 6 import ( 7 "os" 8 9 "github.com/juju/errors" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 "gopkg.in/yaml.v2" 13 14 "github.com/juju/juju/cloud" 15 "github.com/juju/juju/juju/osenv" 16 "github.com/juju/juju/jujuclient" 17 "github.com/juju/juju/testing" 18 ) 19 20 type CredentialsFileSuite struct { 21 testing.FakeJujuXDGDataHomeSuite 22 } 23 24 var _ = gc.Suite(&CredentialsFileSuite{}) 25 26 const testCredentialsYAML = ` 27 credentials: 28 aws: 29 default-credential: peter 30 default-region: us-west-2 31 paul: 32 auth-type: access-key 33 access-key: paul-key 34 secret-key: paul-secret 35 peter: 36 auth-type: access-key 37 access-key: key 38 secret-key: secret 39 aws-gov: 40 fbi: 41 auth-type: access-key 42 access-key: key 43 secret-key: secret 44 ` 45 46 func (s *CredentialsFileSuite) TestWriteFile(c *gc.C) { 47 writeTestCredentialsFile(c) 48 data, err := os.ReadFile(osenv.JujuXDGDataHomePath("credentials.yaml")) 49 c.Assert(err, jc.ErrorIsNil) 50 51 var original map[string]interface{} 52 err = yaml.Unmarshal([]byte(testCredentialsYAML), &original) 53 c.Assert(err, jc.ErrorIsNil) 54 var written map[string]interface{} 55 err = yaml.Unmarshal(data, &written) 56 c.Assert(err, jc.ErrorIsNil) 57 58 c.Assert(written, gc.DeepEquals, original) 59 } 60 61 func (s *CredentialsFileSuite) TestReadNoFile(c *gc.C) { 62 credentials, err := jujuclient.ReadCredentialsFile("nohere.yaml") 63 c.Assert(err, jc.ErrorIsNil) 64 c.Assert(credentials, gc.NotNil) 65 } 66 67 func (s *CredentialsFileSuite) TestReadEmptyFile(c *gc.C) { 68 err := os.WriteFile(osenv.JujuXDGDataHomePath("credentials.yaml"), []byte(""), 0600) 69 c.Assert(err, jc.ErrorIsNil) 70 71 credentialstore := jujuclient.NewFileCredentialStore() 72 _, err = credentialstore.CredentialForCloud("foo") 73 c.Assert(err, jc.Satisfies, errors.IsNotFound) 74 } 75 76 func parseCredentials(c *gc.C) *cloud.CredentialCollection { 77 credentials, err := cloud.ParseCredentialCollection([]byte(testCredentialsYAML)) 78 c.Assert(err, jc.ErrorIsNil) 79 return credentials 80 } 81 82 func writeTestCredentialsFile(c *gc.C) map[string]cloud.CloudCredential { 83 credentials := parseCredentials(c) 84 err := jujuclient.WriteCredentialsFile(credentials) 85 c.Assert(err, jc.ErrorIsNil) 86 allCredentials := make(map[string]cloud.CloudCredential) 87 names := credentials.CloudNames() 88 for _, cloudName := range names { 89 cred, err := credentials.CloudCredential(cloudName) 90 c.Assert(err, jc.ErrorIsNil) 91 c.Assert(cred, gc.NotNil) 92 allCredentials[cloudName] = *cred 93 } 94 return allCredentials 95 }