github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/state/apiserver/usermanager/usermanager_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package usermanager_test 5 6 import ( 7 gc "launchpad.net/gocheck" 8 9 jujutesting "github.com/juju/juju/juju/testing" 10 "github.com/juju/juju/state/api/params" 11 apiservertesting "github.com/juju/juju/state/apiserver/testing" 12 "github.com/juju/juju/state/apiserver/usermanager" 13 ) 14 15 type userManagerSuite struct { 16 jujutesting.JujuConnSuite 17 18 usermanager *usermanager.UserManagerAPI 19 authorizer apiservertesting.FakeAuthorizer 20 } 21 22 var _ = gc.Suite(&userManagerSuite{}) 23 24 func (s *userManagerSuite) SetUpTest(c *gc.C) { 25 s.JujuConnSuite.SetUpTest(c) 26 27 s.authorizer = apiservertesting.FakeAuthorizer{ 28 Tag: "user-admin", 29 LoggedIn: true, 30 Client: true, 31 } 32 33 var err error 34 s.usermanager, err = usermanager.NewUserManagerAPI(s.State, s.authorizer) 35 c.Assert(err, gc.IsNil) 36 } 37 38 func (s *userManagerSuite) TestNewUserManagerAPIRefusesNonClient(c *gc.C) { 39 anAuthoriser := s.authorizer 40 anAuthoriser.Client = false 41 endPoint, err := usermanager.NewUserManagerAPI(s.State, anAuthoriser) 42 c.Assert(endPoint, gc.IsNil) 43 c.Assert(err, gc.ErrorMatches, "permission denied") 44 } 45 46 func (s *userManagerSuite) TestAddUser(c *gc.C) { 47 args := params.ModifyUsers{ 48 Changes: []params.ModifyUser{{ 49 Username: "foobar", 50 DisplayName: "Foo Bar", 51 Password: "password", 52 }}} 53 54 result, err := s.usermanager.AddUser(args) 55 // Check that the call is succesful 56 c.Assert(err, gc.IsNil) 57 c.Assert(result.Results, gc.HasLen, 1) 58 c.Assert(result.Results[0], gc.DeepEquals, params.ErrorResult{Error: nil}) 59 // Check that the call results in a new user being created 60 user, err := s.State.User("foobar") 61 c.Assert(err, gc.IsNil) 62 c.Assert(user, gc.NotNil) 63 c.Assert(user.Name(), gc.Equals, "foobar") 64 c.Assert(user.DisplayName(), gc.Equals, "Foo Bar") 65 } 66 67 func (s *userManagerSuite) TestRemoveUser(c *gc.C) { 68 args := params.ModifyUsers{ 69 Changes: []params.ModifyUser{{ 70 Username: "foobar", 71 DisplayName: "Foo Bar", 72 Password: "password", 73 }}} 74 removeArg := params.Entity{ 75 Tag: "foobar", 76 } 77 removeArgs := params.Entities{Entities: []params.Entity{removeArg}} 78 _, err := s.usermanager.AddUser(args) 79 c.Assert(err, gc.IsNil) 80 user, err := s.State.User("foobar") 81 c.Assert(user.IsDeactivated(), gc.Equals, false) // The user should be active 82 83 result, err := s.usermanager.RemoveUser(removeArgs) 84 c.Assert(err, gc.IsNil) 85 c.Assert(result, gc.DeepEquals, params.ErrorResults{Results: []params.ErrorResult{params.ErrorResult{Error: nil}}}) 86 user, err = s.State.User("foobar") 87 c.Assert(err, gc.IsNil) 88 // Removal makes the user in active 89 c.Assert(user.IsDeactivated(), gc.Equals, true) 90 c.Assert(user.PasswordValid(args.Changes[0].Password), gc.Equals, false) 91 } 92 93 // Since removing a user just deacitvates them you cannot add a user 94 // that has been previously been removed 95 // TODO(mattyw) 2014-03-07 bug #1288745 96 func (s *userManagerSuite) TestCannotAddRemoveAdd(c *gc.C) { 97 removeArg := params.Entity{ 98 Tag: "foobar", 99 } 100 args := params.ModifyUsers{ 101 Changes: []params.ModifyUser{{ 102 Username: "foobar", 103 DisplayName: "Foo Bar", 104 Password: "password", 105 }}} 106 removeArgs := params.Entities{Entities: []params.Entity{removeArg}} 107 _, err := s.usermanager.AddUser(args) 108 c.Assert(err, gc.IsNil) 109 110 _, err = s.usermanager.RemoveUser(removeArgs) 111 c.Assert(err, gc.IsNil) 112 _, err = s.State.User("addremove") 113 result, err := s.usermanager.AddUser(args) 114 expectedError := apiservertesting.ServerError("failed to create user: user already exists") 115 c.Assert(result, gc.DeepEquals, params.ErrorResults{ 116 Results: []params.ErrorResult{ 117 params.ErrorResult{expectedError}}}) 118 }