github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/caas/remove_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caas_test 5 6 import ( 7 "github.com/juju/cmd" 8 "github.com/juju/cmd/cmdtesting" 9 "github.com/juju/errors" 10 "github.com/juju/loggo" 11 jujutesting "github.com/juju/testing" 12 jc "github.com/juju/testing/checkers" 13 gc "gopkg.in/check.v1" 14 15 "github.com/juju/juju/cloud" 16 "github.com/juju/juju/cmd/juju/caas" 17 ) 18 19 type removeCAASSuite struct { 20 jujutesting.IsolationSuite 21 fakeCloudAPI *fakeRemoveCloudAPI 22 store *fakeCloudMetadataStore 23 fileCredentialStore *fakeCredentialStore 24 } 25 26 var _ = gc.Suite(&removeCAASSuite{}) 27 28 type fakeRemoveCloudAPI struct { 29 caas.RemoveCloudAPI 30 jujutesting.Stub 31 } 32 33 func (api *fakeRemoveCloudAPI) RemoveCloud(cloud string) error { 34 api.AddCall("RemoveCloud", cloud) 35 return api.NextErr() 36 } 37 38 func (api *fakeRemoveCloudAPI) Close() error { 39 return nil 40 } 41 42 func (s *removeCAASSuite) SetUpTest(c *gc.C) { 43 s.IsolationSuite.SetUpTest(c) 44 s.fakeCloudAPI = &fakeRemoveCloudAPI{} 45 s.fileCredentialStore = &fakeCredentialStore{} 46 47 var logger loggo.Logger 48 s.store = &fakeCloudMetadataStore{CallMocker: jujutesting.NewCallMocker(logger)} 49 50 k8sCloud := cloud.Cloud{Name: "myk8s", Type: "kubernetes"} 51 initialCloudMap := map[string]cloud.Cloud{"myk8s": k8sCloud} 52 53 s.store.Call("PersonalCloudMetadata").Returns(initialCloudMap, nil) 54 s.store.Call("WritePersonalCloudMetadata", map[string]cloud.Cloud{}).Returns(nil) 55 } 56 57 func (s *removeCAASSuite) makeCommand() cmd.Command { 58 removecmd := caas.NewRemoveCAASCommandForTest( 59 s.store, 60 s.fileCredentialStore, 61 NewMockClientStore(), 62 func() (caas.RemoveCloudAPI, error) { 63 return s.fakeCloudAPI, nil 64 }, 65 ) 66 return removecmd 67 } 68 69 func (s *removeCAASSuite) runCommand(c *gc.C, cmd cmd.Command, args ...string) (*cmd.Context, error) { 70 return cmdtesting.RunCommand(c, cmd, args...) 71 } 72 73 func (s *removeCAASSuite) TestExtraArg(c *gc.C) { 74 cmd := s.makeCommand() 75 _, err := s.runCommand(c, cmd, "k8sname", "extra") 76 c.Assert(err, gc.ErrorMatches, `unrecognized args: \["extra"\]`) 77 } 78 79 func (s *removeCAASSuite) TestMissingName(c *gc.C) { 80 cmd := s.makeCommand() 81 _, err := s.runCommand(c, cmd) 82 c.Assert(err, gc.ErrorMatches, `missing k8s name.`) 83 } 84 85 func (s *removeCAASSuite) TestRemove(c *gc.C) { 86 cmd := s.makeCommand() 87 _, err := s.runCommand(c, cmd, "myk8s") 88 c.Assert(err, jc.ErrorIsNil) 89 90 s.fakeCloudAPI.CheckCallNames(c, "RemoveCloud") 91 s.fakeCloudAPI.CheckCall(c, 0, "RemoveCloud", "myk8s") 92 93 s.store.CheckCallNames(c, "PersonalCloudMetadata", "WritePersonalCloudMetadata") 94 s.store.CheckCall(c, 1, "WritePersonalCloudMetadata", map[string]cloud.Cloud{}) 95 96 s.fileCredentialStore.CheckCallNames(c, "UpdateCredential") 97 s.fileCredentialStore.CheckCall(c, 0, "UpdateCredential", "myk8s", cloud.CloudCredential{}) 98 } 99 100 func (s *removeCAASSuite) TestRemoveNotInController(c *gc.C) { 101 s.fakeCloudAPI.SetErrors(errors.NotFoundf("cloud")) 102 cmd := s.makeCommand() 103 _, err := s.runCommand(c, cmd, "myk8s") 104 c.Assert(err, gc.ErrorMatches, "cannot remove k8s cloud from controller.*") 105 106 s.store.CheckNoCalls(c) 107 s.fileCredentialStore.CheckNoCalls(c) 108 } 109 110 func (s *removeCAASSuite) TestRemoveNotInLocal(c *gc.C) { 111 cmd := s.makeCommand() 112 _, err := s.runCommand(c, cmd, "yourk8s") 113 c.Assert(err, jc.ErrorIsNil) 114 115 s.fakeCloudAPI.CheckCallNames(c, "RemoveCloud") 116 s.fakeCloudAPI.CheckCall(c, 0, "RemoveCloud", "yourk8s") 117 118 s.store.CheckCallNames(c, "PersonalCloudMetadata") 119 s.fileCredentialStore.CheckCall(c, 0, "UpdateCredential", "yourk8s", cloud.CloudCredential{}) 120 }