github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/cmd/modelcmd/base_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package modelcmd_test 5 6 import ( 7 "strings" 8 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/errors" 12 "github.com/juju/juju/api" 13 "github.com/juju/juju/apiserver/params" 14 "github.com/juju/juju/cmd/modelcmd" 15 "github.com/juju/juju/jujuclient" 16 "github.com/juju/juju/jujuclient/jujuclienttesting" 17 "github.com/juju/juju/testing" 18 ) 19 20 type BaseCommandSuite struct { 21 testing.FakeJujuXDGDataHomeSuite 22 store *jujuclienttesting.MemStore 23 } 24 25 var _ = gc.Suite(&BaseCommandSuite{}) 26 27 func (s *BaseCommandSuite) SetUpTest(c *gc.C) { 28 s.FakeJujuXDGDataHomeSuite.SetUpTest(c) 29 30 s.store = jujuclienttesting.NewMemStore() 31 s.store.CurrentControllerName = "foo" 32 s.store.Controllers["foo"] = jujuclient.ControllerDetails{ 33 APIEndpoints: []string{"testing.invalid:1234"}, 34 } 35 s.store.Models["foo"] = &jujuclient.ControllerModels{ 36 Models: map[string]jujuclient.ModelDetails{ 37 "admin/badmodel": {"deadbeef"}, 38 "admin/goodmodel": {"deadbeef2"}, 39 }, 40 CurrentModel: "admin/badmodel", 41 } 42 s.store.Accounts["foo"] = jujuclient.AccountDetails{ 43 User: "bar", Password: "hunter2", 44 } 45 } 46 47 func (s *BaseCommandSuite) assertUnknownModel(c *gc.C, current, expectedCurrent string) { 48 s.store.Models["foo"].CurrentModel = current 49 apiOpen := func(*api.Info, api.DialOpts) (api.Connection, error) { 50 return nil, errors.Trace(¶ms.Error{Code: params.CodeModelNotFound, Message: "model deaddeaf not found"}) 51 } 52 cmd := modelcmd.NewModelCommandBase(s.store, "foo", "admin/badmodel") 53 cmd.SetAPIOpen(apiOpen) 54 conn, err := cmd.NewAPIRoot() 55 c.Assert(conn, gc.IsNil) 56 msg := strings.Replace(err.Error(), "\n", "", -1) 57 c.Assert(msg, gc.Equals, `model "admin/badmodel" has been removed from the controller, run 'juju models' and switch to one of them.There are 1 accessible models on controller "foo".`) 58 c.Assert(s.store.Models["foo"].Models, gc.HasLen, 1) 59 c.Assert(s.store.Models["foo"].Models["admin/goodmodel"], gc.DeepEquals, jujuclient.ModelDetails{"deadbeef2"}) 60 c.Assert(s.store.Models["foo"].CurrentModel, gc.Equals, expectedCurrent) 61 } 62 63 func (s *BaseCommandSuite) TestUnknownModel(c *gc.C) { 64 s.assertUnknownModel(c, "admin/badmodel", "") 65 } 66 67 func (s *BaseCommandSuite) TestUnknownModelNotCurrent(c *gc.C) { 68 s.assertUnknownModel(c, "admin/goodmodel", "admin/goodmodel") 69 }