1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package jujuclient_test
7
jc "github.com/juju/testing/checkers"
10
"github.com/juju/juju/cloud"
11
"github.com/juju/juju/juju/osenv"
12
"github.com/juju/juju/jujuclient"
13
"github.com/juju/juju/testing"
16
type CredentialsSuite struct {
17
testing.FakeJujuXDGDataHomeSuite
18
store jujuclient.CredentialStore
20
credentials cloud.CloudCredential
23
var _ = gc.Suite(&CredentialsSuite{})
25
func (s *CredentialsSuite) SetUpTest(c *gc.C) {
26
s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
27
s.store = jujuclient.NewFileCredentialStore()
28
s.cloudName = "testcloud"
29
s.credentials = cloud.CloudCredential{
30
DefaultCredential: "peter",
31
DefaultRegion: "east",
32
AuthCredentials: map[string]cloud.Credential{
33
"peter": cloud.NewCredential(cloud.AccessKeyAuthType, nil),
34
"paul": cloud.NewCredential(cloud.AccessKeyAuthType, nil),
39
func (s *CredentialsSuite) TestCredentialForCloudNoFile(c *gc.C) {
40
found, err := s.store.CredentialForCloud(s.cloudName)
41
c.Assert(err, gc.ErrorMatches, "credentials for cloud testcloud not found")
42
c.Assert(found, gc.IsNil)
45
func (s *CredentialsSuite) TestCredentialForCloudNoneExists(c *gc.C) {
46
writeTestCredentialsFile(c)
47
found, err := s.store.CredentialForCloud(s.cloudName)
48
c.Assert(err, gc.ErrorMatches, "credentials for cloud testcloud not found")
49
c.Assert(found, gc.IsNil)
52
func (s *CredentialsSuite) TestCredentialForCloud(c *gc.C) {
53
name := firstTestCloudName(c)
54
found, err := s.store.CredentialForCloud(name)
55
c.Assert(err, jc.ErrorIsNil)
56
expected := s.getCredentials(c)[name]
57
c.Assert(found, gc.DeepEquals, &expected)
60
func (s *CredentialsSuite) TestUpdateCredentialAddFirst(c *gc.C) {
61
err := s.store.UpdateCredential(s.cloudName, s.credentials)
62
c.Assert(err, jc.ErrorIsNil)
63
s.assertUpdateSucceeded(c)
66
func (s *CredentialsSuite) TestUpdateCredentialAddNew(c *gc.C) {
67
s.assertCredentialsNotExists(c)
68
err := s.store.UpdateCredential(s.cloudName, s.credentials)
69
c.Assert(err, jc.ErrorIsNil)
70
s.assertUpdateSucceeded(c)
73
func (s *CredentialsSuite) TestUpdateCredential(c *gc.C) {
74
s.cloudName = firstTestCloudName(c)
76
err := s.store.UpdateCredential(s.cloudName, s.credentials)
77
c.Assert(err, jc.ErrorIsNil)
78
s.assertUpdateSucceeded(c)
81
func (s *CredentialsSuite) TestUpdateCredentialRemovesDefaultIfNecessary(c *gc.C) {
82
origHome := osenv.SetJujuXDGDataHome(c.MkDir())
83
s.AddCleanup(func(*gc.C) { osenv.SetJujuXDGDataHome(origHome) })
85
s.cloudName = firstTestCloudName(c)
87
store := jujuclient.NewFileCredentialStore()
88
err := store.UpdateCredential(s.cloudName, s.credentials)
89
c.Assert(err, jc.ErrorIsNil)
90
newCreds := s.credentials
91
// "peter" is the default credential
92
delete(newCreds.AuthCredentials, "peter")
93
err = store.UpdateCredential(s.cloudName, newCreds)
94
c.Assert(err, jc.ErrorIsNil)
95
creds, err := store.AllCredentials()
96
c.Assert(err, jc.ErrorIsNil)
97
c.Assert(creds[s.cloudName].DefaultCredential, gc.Equals, "")
100
func (s *CredentialsSuite) assertCredentialsNotExists(c *gc.C) {
101
all := writeTestCredentialsFile(c)
102
_, exists := all[s.cloudName]
103
c.Assert(exists, jc.IsFalse)
106
func (s *CredentialsSuite) assertUpdateSucceeded(c *gc.C) {
107
c.Assert(s.getCredentials(c)[s.cloudName], gc.DeepEquals, s.credentials)
110
func (s *CredentialsSuite) getCredentials(c *gc.C) map[string]cloud.CloudCredential {
111
credentials, err := s.store.AllCredentials()
112
c.Assert(err, jc.ErrorIsNil)
116
func firstTestCloudName(c *gc.C) string {
117
all := writeTestCredentialsFile(c)
118
for key, _ := range all {