github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/user/whoami_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package user_test 5 6 import ( 7 "github.com/juju/cmd" 8 "github.com/juju/cmd/cmdtesting" 9 "github.com/juju/errors" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/cmd/juju/user" 14 "github.com/juju/juju/core/model" 15 "github.com/juju/juju/jujuclient" 16 "github.com/juju/juju/jujuclient/jujuclienttesting" 17 "github.com/juju/juju/testing" 18 ) 19 20 type WhoAmITestSuite struct { 21 testing.BaseSuite 22 store jujuclient.ClientStore 23 expectedOutput string 24 expectedErr string 25 } 26 27 var _ = gc.Suite(&WhoAmITestSuite{}) 28 29 func (s *WhoAmITestSuite) TestEmptyStore(c *gc.C) { 30 s.expectedOutput = ` 31 There is no current controller. 32 Run juju list-controllers to see available controllers. 33 `[1:] 34 35 s.store = jujuclient.NewMemStore() 36 s.assertWhoAmI(c) 37 } 38 39 func (s *WhoAmITestSuite) TestNoCurrentController(c *gc.C) { 40 s.expectedOutput = ` 41 There is no current controller. 42 Run juju list-controllers to see available controllers. 43 `[1:] 44 45 s.store = &jujuclient.MemStore{ 46 Controllers: map[string]jujuclient.ControllerDetails{ 47 "controller": {}, 48 }, 49 } 50 s.assertWhoAmI(c) 51 } 52 53 func (s *WhoAmITestSuite) TestNoCurrentModel(c *gc.C) { 54 s.expectedOutput = ` 55 Controller: controller 56 Model: <no-current-model> 57 User: admin 58 `[1:] 59 60 s.store = &jujuclient.MemStore{ 61 CurrentControllerName: "controller", 62 Controllers: map[string]jujuclient.ControllerDetails{ 63 "controller": {}, 64 }, 65 Models: map[string]*jujuclient.ControllerModels{ 66 "controller": { 67 Models: map[string]jujuclient.ModelDetails{ 68 "admin/model": {ModelUUID: "model-uuid", ModelType: model.IAAS}, 69 }, 70 }, 71 }, 72 Accounts: map[string]jujuclient.AccountDetails{ 73 "controller": { 74 User: "admin", 75 }, 76 }, 77 } 78 s.assertWhoAmI(c) 79 } 80 81 func (s *WhoAmITestSuite) TestNoCurrentUser(c *gc.C) { 82 s.expectedOutput = ` 83 You are not logged in to controller "controller" and model "admin/model". 84 Run juju login if you want to login. 85 `[1:] 86 87 s.store = &jujuclient.MemStore{ 88 CurrentControllerName: "controller", 89 Controllers: map[string]jujuclient.ControllerDetails{ 90 "controller": {}, 91 }, 92 Models: map[string]*jujuclient.ControllerModels{ 93 "controller": { 94 Models: map[string]jujuclient.ModelDetails{ 95 "admin/model": {ModelUUID: "model-uuid", ModelType: model.IAAS}, 96 }, 97 CurrentModel: "admin/model", 98 }, 99 }, 100 } 101 s.assertWhoAmI(c) 102 } 103 104 func (s *WhoAmITestSuite) assertWhoAmIForUser(c *gc.C, user, format string) { 105 s.store = &jujuclient.MemStore{ 106 CurrentControllerName: "controller", 107 Controllers: map[string]jujuclient.ControllerDetails{ 108 "controller": {}, 109 }, 110 Models: map[string]*jujuclient.ControllerModels{ 111 "controller": { 112 Models: map[string]jujuclient.ModelDetails{ 113 "admin/model": {ModelUUID: "model-uuid", ModelType: model.IAAS}, 114 }, 115 CurrentModel: "admin/model", 116 }, 117 }, 118 Accounts: map[string]jujuclient.AccountDetails{ 119 "controller": { 120 User: user, 121 }, 122 }, 123 } 124 s.assertWhoAmI(c, "--format", format) 125 } 126 127 func (s *WhoAmITestSuite) TestWhoAmISameUser(c *gc.C) { 128 s.expectedOutput = ` 129 Controller: controller 130 Model: model 131 User: admin 132 `[1:] 133 s.assertWhoAmIForUser(c, "admin", "tabular") 134 } 135 136 func (s *WhoAmITestSuite) TestWhoAmIYaml(c *gc.C) { 137 s.expectedOutput = ` 138 controller: controller 139 model: model 140 user: admin 141 `[1:] 142 s.assertWhoAmIForUser(c, "admin", "yaml") 143 } 144 145 func (s *WhoAmITestSuite) TestWhoAmIJson(c *gc.C) { 146 s.expectedOutput = ` 147 {"controller":"controller","model":"model","user":"admin"} 148 `[1:] 149 s.assertWhoAmIForUser(c, "admin", "json") 150 } 151 152 func (s *WhoAmITestSuite) TestWhoAmIDifferentUsersModel(c *gc.C) { 153 s.expectedOutput = ` 154 Controller: controller 155 Model: admin/model 156 User: bob 157 `[1:] 158 s.assertWhoAmIForUser(c, "bob", "tabular") 159 } 160 161 func (s *WhoAmITestSuite) TestFromStoreErr(c *gc.C) { 162 msg := "fail getting current controller" 163 errStore := jujuclienttesting.NewStubStore() 164 errStore.SetErrors(errors.New(msg)) 165 s.store = errStore 166 s.expectedErr = msg 167 s.assertWhoAmIFailed(c) 168 errStore.CheckCallNames(c, "CurrentController") 169 } 170 171 func (s *WhoAmITestSuite) runWhoAmI(c *gc.C, args ...string) (*cmd.Context, error) { 172 return cmdtesting.RunCommand(c, user.NewWhoAmICommandForTest(s.store), args...) 173 } 174 175 func (s *WhoAmITestSuite) assertWhoAmIFailed(c *gc.C, args ...string) { 176 _, err := s.runWhoAmI(c, args...) 177 c.Assert(err, gc.ErrorMatches, s.expectedErr) 178 } 179 180 func (s *WhoAmITestSuite) assertWhoAmI(c *gc.C, args ...string) string { 181 context, err := s.runWhoAmI(c, args...) 182 c.Assert(err, jc.ErrorIsNil) 183 output := cmdtesting.Stdout(context) 184 if output == "" { 185 output = cmdtesting.Stderr(context) 186 } 187 if s.expectedOutput != "" { 188 c.Assert(output, gc.Equals, s.expectedOutput) 189 } 190 return output 191 }