github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/usermanager/client_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 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/juju/api/usermanager" 12 "github.com/juju/juju/apiserver/params" 13 jujutesting "github.com/juju/juju/juju/testing" 14 "github.com/juju/juju/testing/factory" 15 ) 16 17 type usermanagerSuite struct { 18 jujutesting.JujuConnSuite 19 20 usermanager *usermanager.Client 21 } 22 23 var _ = gc.Suite(&usermanagerSuite{}) 24 25 func (s *usermanagerSuite) SetUpTest(c *gc.C) { 26 s.JujuConnSuite.SetUpTest(c) 27 s.usermanager = usermanager.NewClient(s.APIState) 28 c.Assert(s.usermanager, gc.NotNil) 29 } 30 31 func (s *usermanagerSuite) TestAddUser(c *gc.C) { 32 tag, err := s.usermanager.AddUser("foobar", "Foo Bar", "password") 33 c.Assert(err, jc.ErrorIsNil) 34 35 user, err := s.State.User(tag) 36 c.Assert(err, jc.ErrorIsNil) 37 c.Assert(user.Name(), gc.Equals, "foobar") 38 c.Assert(user.DisplayName(), gc.Equals, "Foo Bar") 39 c.Assert(user.PasswordValid("password"), jc.IsTrue) 40 } 41 42 func (s *usermanagerSuite) TestAddExistingUser(c *gc.C) { 43 s.Factory.MakeUser(c, &factory.UserParams{Name: "foobar"}) 44 45 _, err := s.usermanager.AddUser("foobar", "Foo Bar", "password") 46 c.Assert(err, gc.ErrorMatches, "failed to create user: user already exists") 47 } 48 49 func (s *usermanagerSuite) TestAddUserResponseError(c *gc.C) { 50 usermanager.PatchResponses(s, s.usermanager, 51 func(interface{}) error { 52 return errors.New("call error") 53 }, 54 ) 55 _, err := s.usermanager.AddUser("foobar", "Foo Bar", "password") 56 c.Assert(err, gc.ErrorMatches, "call error") 57 } 58 59 func (s *usermanagerSuite) TestAddUserResultCount(c *gc.C) { 60 usermanager.PatchResponses(s, s.usermanager, 61 func(result interface{}) error { 62 if result, ok := result.(*params.AddUserResults); ok { 63 result.Results = make([]params.AddUserResult, 2) 64 return nil 65 } 66 return errors.New("wrong result type") 67 }, 68 ) 69 _, err := s.usermanager.AddUser("foobar", "Foo Bar", "password") 70 c.Assert(err, gc.ErrorMatches, "expected 1 result, got 2") 71 } 72 73 func (s *usermanagerSuite) TestDisableUser(c *gc.C) { 74 user := s.Factory.MakeUser(c, &factory.UserParams{Name: "foobar"}) 75 76 err := s.usermanager.DisableUser(user.Name()) 77 c.Assert(err, jc.ErrorIsNil) 78 79 err = user.Refresh() 80 c.Assert(err, jc.ErrorIsNil) 81 c.Assert(user.IsDisabled(), jc.IsTrue) 82 } 83 84 func (s *usermanagerSuite) TestDisableUserBadName(c *gc.C) { 85 err := s.usermanager.DisableUser("not@home") 86 c.Assert(err, gc.ErrorMatches, `"not@home" is not a valid username`) 87 } 88 89 func (s *usermanagerSuite) TestEnableUser(c *gc.C) { 90 user := s.Factory.MakeUser(c, &factory.UserParams{Name: "foobar", Disabled: true}) 91 92 err := s.usermanager.EnableUser(user.Name()) 93 c.Assert(err, jc.ErrorIsNil) 94 95 err = user.Refresh() 96 c.Assert(err, jc.ErrorIsNil) 97 c.Assert(user.IsDisabled(), jc.IsFalse) 98 } 99 100 func (s *usermanagerSuite) TestEnableUserBadName(c *gc.C) { 101 err := s.usermanager.EnableUser("not@home") 102 c.Assert(err, gc.ErrorMatches, `"not@home" is not a valid username`) 103 } 104 105 func (s *usermanagerSuite) TestCantRemoveAdminUser(c *gc.C) { 106 err := s.usermanager.DisableUser(s.AdminUserTag(c).Name()) 107 c.Assert(err, gc.ErrorMatches, "failed to disable user: cannot disable state server environment owner") 108 } 109 110 func (s *usermanagerSuite) TestUserInfo(c *gc.C) { 111 user := s.Factory.MakeUser(c, &factory.UserParams{ 112 Name: "foobar", DisplayName: "Foo Bar"}) 113 114 obtained, err := s.usermanager.UserInfo([]string{"foobar"}, usermanager.AllUsers) 115 c.Assert(err, jc.ErrorIsNil) 116 expected := []params.UserInfo{ 117 { 118 Username: "foobar", 119 DisplayName: "Foo Bar", 120 CreatedBy: s.AdminUserTag(c).Name(), 121 DateCreated: user.DateCreated(), 122 }, 123 } 124 125 c.Assert(obtained, jc.DeepEquals, expected) 126 } 127 128 func (s *usermanagerSuite) TestUserInfoMoreThanOneResult(c *gc.C) { 129 usermanager.PatchResponses(s, s.usermanager, 130 func(result interface{}) error { 131 if result, ok := result.(*params.UserInfoResults); ok { 132 result.Results = make([]params.UserInfoResult, 2) 133 result.Results[0].Result = ¶ms.UserInfo{Username: "first"} 134 result.Results[1].Result = ¶ms.UserInfo{Username: "second"} 135 return nil 136 } 137 return errors.New("wrong result type") 138 }, 139 ) 140 obtained, err := s.usermanager.UserInfo(nil, usermanager.AllUsers) 141 c.Assert(err, jc.ErrorIsNil) 142 143 expected := []params.UserInfo{ 144 {Username: "first"}, 145 {Username: "second"}, 146 } 147 148 c.Assert(obtained, jc.DeepEquals, expected) 149 } 150 151 func (s *usermanagerSuite) TestUserInfoMoreThanOneError(c *gc.C) { 152 usermanager.PatchResponses(s, s.usermanager, 153 func(result interface{}) error { 154 if result, ok := result.(*params.UserInfoResults); ok { 155 result.Results = make([]params.UserInfoResult, 2) 156 result.Results[0].Error = ¶ms.Error{Message: "first error"} 157 result.Results[1].Error = ¶ms.Error{Message: "second error"} 158 return nil 159 } 160 return errors.New("wrong result type") 161 }, 162 ) 163 _, err := s.usermanager.UserInfo([]string{"foo", "bar"}, usermanager.AllUsers) 164 c.Assert(err, gc.ErrorMatches, "foo: first error, bar: second error") 165 } 166 167 func (s *usermanagerSuite) TestSetUserPassword(c *gc.C) { 168 tag := s.AdminUserTag(c) 169 err := s.usermanager.SetPassword(tag.Name(), "new-password") 170 c.Assert(err, jc.ErrorIsNil) 171 user, err := s.State.User(tag) 172 c.Assert(err, jc.ErrorIsNil) 173 c.Assert(user.PasswordValid("new-password"), jc.IsTrue) 174 } 175 176 func (s *usermanagerSuite) TestSetUserPasswordBadName(c *gc.C) { 177 err := s.usermanager.SetPassword("not@home", "new-password") 178 c.Assert(err, gc.ErrorMatches, `"not@home" is not a valid username`) 179 }