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  }