43
45
return map[cloud.AuthType]cloud.CredentialSchema{
44
46
cloud.UserPassAuthType: schema,
47
"interactive": cloud.CredentialSchema{
48
{"username", cloud.CredentialAttr{}},
53
func (mockProvider) FinalizeCredential(
54
ctx environs.FinalizeCredentialContext,
55
args environs.FinalizeCredentialParams,
56
) (*cloud.Credential, error) {
57
if args.Credential.AuthType() == "interactive" {
58
username := args.Credential.Attributes()["username"]
59
fmt.Fprintf(ctx.GetStderr(), "generating credential for %q\n", username)
60
out := cloud.NewCredential(cloud.UserPassAuthType, map[string]string{
67
return &args.Credential, nil
48
70
type credentialsSuite struct {
49
71
testing.FakeJujuXDGDataHomeSuite
73
store *jujuclienttesting.MemStore
52
76
var _ = gc.Suite(&credentialsSuite{})
54
func (s *credentialsSuite) assertGetCredentials(c *gc.C, region string) {
78
func (s *credentialsSuite) SetUpTest(c *gc.C) {
79
s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
80
s.cloud = cloud.Cloud{
82
Regions: []cloud.Region{
83
{Name: "first-region"},
84
{Name: "second-region"},
56
89
keyFile := filepath.Join(dir, "keyfile")
57
90
err := ioutil.WriteFile(keyFile, []byte("value"), 0600)
58
91
c.Assert(err, jc.ErrorIsNil)
60
store := jujuclienttesting.NewMemStore()
61
store.Credentials["cloud"] = cloud.CloudCredential{
62
DefaultRegion: "default-region",
93
s.store = jujuclienttesting.NewMemStore()
94
s.store.Credentials["cloud"] = cloud.CloudCredential{
95
DefaultRegion: "second-region",
63
96
AuthCredentials: map[string]cloud.Credential{
97
"interactive": cloud.NewCredential("interactive", map[string]string{
64
100
"secrets": cloud.NewCredential(cloud.UserPassAuthType, map[string]string{
65
101
"username": "user",
66
102
"password": "sekret",
109
func (s *credentialsSuite) assertGetCredentials(c *gc.C, cred, region string) {
72
110
credential, credentialName, regionName, err := modelcmd.GetCredentials(
73
store, region, "secrets", "cloud", "fake",
111
testing.Context(c), s.store, modelcmd.GetCredentialsParams{
115
CredentialName: cred,
75
118
c.Assert(err, jc.ErrorIsNil)
76
119
expectedRegion := region
77
120
if expectedRegion == "" {
78
expectedRegion = "default-region"
121
expectedRegion = s.store.Credentials["cloud"].DefaultRegion
122
if expectedRegion == "" && len(s.cloud.Regions) > 0 {
123
expectedRegion = "first-region"
80
126
c.Assert(regionName, gc.Equals, expectedRegion)
81
c.Assert(credentialName, gc.Equals, "secrets")
127
c.Assert(credentialName, gc.Equals, cred)
82
128
c.Assert(credential.Attributes(), jc.DeepEquals, map[string]string{
84
130
"username": "user",
89
func (s *credentialsSuite) TestGetCredentialsDefaultRegion(c *gc.C) {
90
s.assertGetCredentials(c, "")
135
func (s *credentialsSuite) TestGetCredentialsUserDefaultRegion(c *gc.C) {
136
s.assertGetCredentials(c, "secrets", "")
139
func (s *credentialsSuite) TestGetCredentialsCloudDefaultRegion(c *gc.C) {
140
creds := s.store.Credentials["cloud"]
141
creds.DefaultRegion = ""
142
s.store.Credentials["cloud"] = creds
143
s.assertGetCredentials(c, "secrets", "")
146
func (s *credentialsSuite) TestGetCredentialsNoRegion(c *gc.C) {
147
creds := s.store.Credentials["cloud"]
148
creds.DefaultRegion = ""
149
s.store.Credentials["cloud"] = creds
150
s.cloud.Regions = nil
151
s.assertGetCredentials(c, "secrets", "")
93
154
func (s *credentialsSuite) TestGetCredentials(c *gc.C) {
94
s.assertGetCredentials(c, "region")
155
s.cloud.Regions = append(s.cloud.Regions, cloud.Region{Name: "third-region"})
156
s.assertGetCredentials(c, "secrets", "third-region")
159
func (s *credentialsSuite) TestGetCredentialsProviderFinalizeCredential(c *gc.C) {
160
s.assertGetCredentials(c, "interactive", "")