github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/client/credentialmanager/client_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package credentialmanager_test 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/names/v5" 9 "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/apiserver/common" 14 apiservererrors "github.com/juju/juju/apiserver/errors" 15 "github.com/juju/juju/apiserver/facades/client/credentialmanager" 16 apiservertesting "github.com/juju/juju/apiserver/testing" 17 "github.com/juju/juju/rpc/params" 18 coretesting "github.com/juju/juju/testing" 19 ) 20 21 type CredentialManagerSuite struct { 22 coretesting.BaseSuite 23 24 resources *common.Resources 25 authorizer apiservertesting.FakeAuthorizer 26 backend *testBackend 27 28 api *credentialmanager.CredentialManagerAPI 29 } 30 31 var _ = gc.Suite(&CredentialManagerSuite{}) 32 33 func (s *CredentialManagerSuite) SetUpTest(c *gc.C) { 34 s.BaseSuite.SetUpTest(c) 35 s.backend = newMockBackend() 36 37 s.resources = common.NewResources() 38 s.authorizer = apiservertesting.FakeAuthorizer{ 39 Tag: names.NewUserTag("read"), 40 AdminTag: names.NewUserTag("admin"), 41 } 42 s.AddCleanup(func(_ *gc.C) { s.resources.StopAll() }) 43 44 api, err := credentialmanager.NewCredentialManagerAPIForTest(s.backend, s.resources, s.authorizer) 45 c.Assert(err, jc.ErrorIsNil) 46 s.api = api 47 } 48 49 func (s *CredentialManagerSuite) TestInvalidateModelCredentialUnauthorized(c *gc.C) { 50 s.authorizer = apiservertesting.FakeAuthorizer{ 51 Tag: names.NewMachineTag("0"), 52 } 53 _, err := credentialmanager.NewCredentialManagerAPIForTest(s.backend, s.resources, s.authorizer) 54 c.Assert(err, gc.ErrorMatches, "permission denied") 55 } 56 57 func (s *CredentialManagerSuite) TestInvalidateModelCredential(c *gc.C) { 58 result, err := s.api.InvalidateModelCredential(params.InvalidateCredentialArg{"not again"}) 59 c.Assert(err, jc.ErrorIsNil) 60 c.Assert(result, gc.DeepEquals, params.ErrorResult{}) 61 s.backend.CheckCalls(c, []testing.StubCall{ 62 {"InvalidateModelCredential", []interface{}{"not again"}}, 63 }) 64 } 65 66 func (s *CredentialManagerSuite) TestInvalidateModelCredentialError(c *gc.C) { 67 expected := errors.New("boom") 68 s.backend.SetErrors(expected) 69 result, err := s.api.InvalidateModelCredential(params.InvalidateCredentialArg{"not again"}) 70 c.Assert(err, jc.ErrorIsNil) 71 c.Assert(result, gc.DeepEquals, params.ErrorResult{Error: apiservererrors.ServerError(expected)}) 72 s.backend.CheckCalls(c, []testing.StubCall{ 73 {"InvalidateModelCredential", []interface{}{"not again"}}, 74 }) 75 } 76 77 func newMockBackend() *testBackend { 78 return &testBackend{ 79 Stub: &testing.Stub{}, 80 } 81 } 82 83 type testBackend struct { 84 *testing.Stub 85 } 86 87 func (b *testBackend) InvalidateModelCredential(reason string) error { 88 b.AddCall("InvalidateModelCredential", reason) 89 return b.NextErr() 90 }