~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/jujuclient/credentials_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2016 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package jujuclient_test
 
5
 
 
6
import (
 
7
        jc "github.com/juju/testing/checkers"
 
8
        gc "gopkg.in/check.v1"
 
9
 
 
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"
 
14
)
 
15
 
 
16
type CredentialsSuite struct {
 
17
        testing.FakeJujuXDGDataHomeSuite
 
18
        store       jujuclient.CredentialStore
 
19
        cloudName   string
 
20
        credentials cloud.CloudCredential
 
21
}
 
22
 
 
23
var _ = gc.Suite(&CredentialsSuite{})
 
24
 
 
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),
 
35
                },
 
36
        }
 
37
}
 
38
 
 
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)
 
43
}
 
44
 
 
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)
 
50
}
 
51
 
 
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)
 
58
}
 
59
 
 
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)
 
64
}
 
65
 
 
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)
 
71
}
 
72
 
 
73
func (s *CredentialsSuite) TestUpdateCredential(c *gc.C) {
 
74
        s.cloudName = firstTestCloudName(c)
 
75
 
 
76
        err := s.store.UpdateCredential(s.cloudName, s.credentials)
 
77
        c.Assert(err, jc.ErrorIsNil)
 
78
        s.assertUpdateSucceeded(c)
 
79
}
 
80
 
 
81
func (s *CredentialsSuite) TestUpdateCredentialRemovesDefaultIfNecessary(c *gc.C) {
 
82
        origHome := osenv.SetJujuXDGDataHome(c.MkDir())
 
83
        s.AddCleanup(func(*gc.C) { osenv.SetJujuXDGDataHome(origHome) })
 
84
 
 
85
        s.cloudName = firstTestCloudName(c)
 
86
 
 
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, "")
 
98
}
 
99
 
 
100
func (s *CredentialsSuite) assertCredentialsNotExists(c *gc.C) {
 
101
        all := writeTestCredentialsFile(c)
 
102
        _, exists := all[s.cloudName]
 
103
        c.Assert(exists, jc.IsFalse)
 
104
}
 
105
 
 
106
func (s *CredentialsSuite) assertUpdateSucceeded(c *gc.C) {
 
107
        c.Assert(s.getCredentials(c)[s.cloudName], gc.DeepEquals, s.credentials)
 
108
}
 
109
 
 
110
func (s *CredentialsSuite) getCredentials(c *gc.C) map[string]cloud.CloudCredential {
 
111
        credentials, err := s.store.AllCredentials()
 
112
        c.Assert(err, jc.ErrorIsNil)
 
113
        return credentials
 
114
}
 
115
 
 
116
func firstTestCloudName(c *gc.C) string {
 
117
        all := writeTestCredentialsFile(c)
 
118
        for key, _ := range all {
 
119
                return key
 
120
        }
 
121
        return ""
 
122
}