github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/apiserver/adminv3_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package apiserver_test 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/names" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/api" 13 "github.com/juju/juju/apiserver" 14 "github.com/juju/juju/rpc" 15 "github.com/juju/juju/testing/factory" 16 ) 17 18 type loginV3Suite struct { 19 loginSuite 20 } 21 22 var _ = gc.Suite(&loginV3Suite{ 23 loginSuite{ 24 baseLoginSuite{ 25 setAdminApi: func(srv *apiserver.Server) { 26 apiserver.SetAdminApiVersions(srv, 3) 27 }, 28 }, 29 }, 30 }) 31 32 func (s *loginV3Suite) TestClientLoginToEnvironment(c *gc.C) { 33 _, cleanup := s.setupServerWithValidator(c, nil) 34 defer cleanup() 35 36 info := s.APIInfo(c) 37 apiState, err := api.Open(info, api.DialOpts{}) 38 c.Assert(err, jc.ErrorIsNil) 39 defer apiState.Close() 40 41 client := apiState.Client() 42 _, err = client.GetModelConstraints() 43 c.Assert(err, jc.ErrorIsNil) 44 } 45 46 func (s *loginV3Suite) TestClientLoginToServer(c *gc.C) { 47 _, cleanup := s.setupServerWithValidator(c, nil) 48 defer cleanup() 49 50 info := s.APIInfo(c) 51 info.ModelTag = names.ModelTag{} 52 apiState, err := api.Open(info, api.DialOpts{}) 53 c.Assert(err, jc.ErrorIsNil) 54 defer apiState.Close() 55 56 client := apiState.Client() 57 _, err = client.GetModelConstraints() 58 c.Assert(errors.Cause(err), gc.DeepEquals, &rpc.RequestError{ 59 Message: `logged in to server, no model, "Client" not supported`, 60 Code: "not supported", 61 }) 62 } 63 64 func (s *loginV3Suite) TestClientLoginToServerNoAccessToControllerEnv(c *gc.C) { 65 _, cleanup := s.setupServerWithValidator(c, nil) 66 defer cleanup() 67 68 password := "shhh..." 69 user := s.Factory.MakeUser(c, &factory.UserParams{ 70 NoModelUser: true, 71 Password: password, 72 }) 73 74 info := s.APIInfo(c) 75 info.Tag = user.Tag() 76 info.Password = password 77 info.ModelTag = names.ModelTag{} 78 apiState, err := api.Open(info, api.DialOpts{}) 79 c.Assert(err, jc.ErrorIsNil) 80 defer apiState.Close() 81 // The user now has last login updated. 82 err = user.Refresh() 83 c.Assert(err, jc.ErrorIsNil) 84 lastLogin, err := user.LastLogin() 85 c.Assert(err, jc.ErrorIsNil) 86 c.Assert(lastLogin, gc.NotNil) 87 } 88 89 func (s *loginV3Suite) TestClientLoginToRootOldClient(c *gc.C) { 90 _, cleanup := s.setupServerWithValidator(c, nil) 91 defer cleanup() 92 93 info := s.APIInfo(c) 94 info.ModelTag = names.ModelTag{} 95 _, err := api.OpenWithVersion(info, api.DialOpts{}, 2) 96 c.Assert(err, gc.ErrorMatches, ".*this version of Juju does not support login from old clients.*") 97 }