github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/common/cloudcredential_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 "bytes" 8 9 "github.com/golang/mock/gomock" 10 "github.com/juju/cmd" 11 "github.com/juju/errors" 12 "github.com/juju/testing" 13 jc "github.com/juju/testing/checkers" 14 gc "gopkg.in/check.v1" 15 "gopkg.in/juju/names.v2" 16 17 "github.com/juju/juju/cloud" 18 "github.com/juju/juju/cmd/juju/common" 19 "github.com/juju/juju/cmd/modelcmd" 20 ) 21 22 var _ = gc.Suite(&cloudCredentialSuite{}) 23 24 type cloudCredentialSuite struct { 25 testing.IsolationSuite 26 } 27 28 func (*cloudCredentialSuite) TestResolveCloudCredentialTag(c *gc.C) { 29 testResolveCloudCredentialTag(c, 30 names.NewUserTag("admin@local"), 31 names.NewCloudTag("aws"), 32 "foo", 33 "aws/admin/foo", 34 ) 35 } 36 37 func (*cloudCredentialSuite) TestResolveCloudCredentialTagOtherUser(c *gc.C) { 38 testResolveCloudCredentialTag(c, 39 names.NewUserTag("admin@local"), 40 names.NewCloudTag("aws"), 41 "brenda/foo", 42 "aws/brenda/foo", 43 ) 44 } 45 46 func testResolveCloudCredentialTag( 47 c *gc.C, 48 user names.UserTag, 49 cloud names.CloudTag, 50 credentialName string, 51 expect string, 52 ) { 53 tag, err := common.ResolveCloudCredentialTag(user, cloud, credentialName) 54 c.Assert(err, jc.ErrorIsNil) 55 c.Assert(tag.Id(), gc.Equals, expect) 56 } 57 58 func (*cloudCredentialSuite) TestRegisterCredentials(c *gc.C) { 59 ctrl := gomock.NewController(c) 60 defer ctrl.Finish() 61 62 credential := &cloud.CloudCredential{ 63 AuthCredentials: map[string]cloud.Credential{ 64 "admin": cloud.NewCredential("certificate", map[string]string{ 65 "cert": "certificate", 66 }), 67 }, 68 } 69 70 mockProvider := common.NewMockTestCloudProvider(ctrl) 71 mockProvider.EXPECT().RegisterCredentials(cloud.Cloud{ 72 Name: "fake", 73 }).Return(map[string]*cloud.CloudCredential{ 74 "fake": credential, 75 }, nil) 76 mockStore := common.NewMockCredentialStore(ctrl) 77 mockStore.EXPECT().UpdateCredential("fake", *credential).Return(nil) 78 79 stderr := new(bytes.Buffer) 80 81 err := common.RegisterCredentials(&cmd.Context{ 82 Stderr: stderr, 83 }, mockStore, mockProvider, modelcmd.RegisterCredentialsParams{ 84 Cloud: cloud.Cloud{ 85 Name: "fake", 86 }, 87 }) 88 c.Assert(err, jc.ErrorIsNil) 89 c.Assert(stderr.String(), gc.Equals, "") 90 } 91 92 func (*cloudCredentialSuite) TestRegisterCredentialsWithNoCredentials(c *gc.C) { 93 ctrl := gomock.NewController(c) 94 defer ctrl.Finish() 95 96 mockProvider := common.NewMockTestCloudProvider(ctrl) 97 mockProvider.EXPECT().RegisterCredentials(cloud.Cloud{ 98 Name: "fake", 99 }).Return(map[string]*cloud.CloudCredential{}, nil) 100 mockStore := common.NewMockCredentialStore(ctrl) 101 102 stderr := new(bytes.Buffer) 103 104 err := common.RegisterCredentials(&cmd.Context{ 105 Stderr: stderr, 106 }, mockStore, mockProvider, modelcmd.RegisterCredentialsParams{ 107 Cloud: cloud.Cloud{ 108 Name: "fake", 109 }, 110 }) 111 c.Assert(err, jc.ErrorIsNil) 112 } 113 114 func (*cloudCredentialSuite) TestRegisterCredentialsWithCallFailure(c *gc.C) { 115 ctrl := gomock.NewController(c) 116 defer ctrl.Finish() 117 118 mockProvider := common.NewMockTestCloudProvider(ctrl) 119 mockProvider.EXPECT().RegisterCredentials(cloud.Cloud{ 120 Name: "fake", 121 }).Return(nil, errors.New("bad")) 122 mockStore := common.NewMockCredentialStore(ctrl) 123 124 stderr := new(bytes.Buffer) 125 126 err := common.RegisterCredentials(&cmd.Context{ 127 Stderr: stderr, 128 }, mockStore, mockProvider, modelcmd.RegisterCredentialsParams{ 129 Cloud: cloud.Cloud{ 130 Name: "fake", 131 }, 132 }) 133 c.Assert(errors.Cause(err).Error(), gc.Matches, "bad") 134 }