1 16 package org.outerj.daisy.repository.test; 17 18 import org.outerj.daisy.repository.*; 19 import org.outerj.daisy.repository.testsupport.AbstractDaisyTestCase; 20 import org.outerj.daisy.repository.user.Role; 21 import org.outerj.daisy.repository.user.Roles; 22 import org.outerj.daisy.repository.user.User; 23 import org.outerj.daisy.repository.user.UserManagementException; 24 import org.outerj.daisy.repository.user.UserManager; 25 26 29 public abstract class AbstractUserManagementTest extends AbstractDaisyTestCase { 30 31 protected boolean resetDataStores() { 32 36 return true; 37 } 38 39 protected abstract RepositoryManager getRepositoryManager() throws Exception ; 40 41 46 private void setUpBasicUsersAndRoles() throws Exception { 47 Repository repository = getRepositoryManager().getRepository(new Credentials("testuser", "testuser")); 48 repository.switchRole(Role.ADMINISTRATOR); 49 UserManager userMan = repository.getUserManager(); 50 51 setupRole(userMan, "guest"); 52 53 Role adminRole = userMan.getRole(1, true); 54 Role userRole = userMan.getRole("User", true); 55 Role guestRole = userMan.getRole("guest", true); 56 57 58 User testAdminUser = userMan.createUser("testadmin"); 59 testAdminUser.addToRole(adminRole); 60 testAdminUser.addToRole(userRole); 61 testAdminUser.setDefaultRole(userRole); 62 testAdminUser.setPassword("secret"); 63 testAdminUser.save(); 64 65 User user = userMan.createUser("testnonadmin"); 66 user.addToRole(userRole); 67 user.setDefaultRole(userRole); 68 user.setPassword("spa"); 69 user.save(); 70 71 } 72 73 private void setupRole(UserManager userMan, String roleName) throws Exception { 74 try { 75 userMan.getRole(roleName, true); 76 } catch (UserManagementException e) { 77 Role userRole = userMan.createRole(roleName); 78 userRole.save(); 79 } 80 } 81 82 83 public void testUserManagement() throws Exception { 84 setUpBasicUsersAndRoles(); 85 UserManager userManager = null; 86 Repository repository = null; 87 88 System.out.println("starting user management tests"); 89 90 RepositoryManager repositoryManager = getRepositoryManager(); 92 repository = repositoryManager.getRepository(new Credentials("testadmin", "secret")); 93 repository.switchRole(1); 94 long[] availableRoles = repository.getAvailableRoles(); 95 96 userManager = repository.getUserManager(); 97 assertNotNull(userManager); 98 99 String tmpRoleName = "Confessor"+System.currentTimeMillis(); 100 Role confessorRole = userManager.createRole(tmpRoleName); 101 102 confessorRole.setDescription("if you're touched by confessor magic - you're in quite some trouble :)"); 103 104 confessorRole.save(); 105 assertTrue(confessorRole.getId()!=-1); 107 108 Role cfRole = userManager.getRole(tmpRoleName, true); 110 assertTrue(cfRole.getId()!=-1); 111 112 System.out.println("About to delete role with id "+confessorRole.getId()); 113 userManager.deleteRole(confessorRole.getId()); 114 115 try { 116 userManager.getRole(tmpRoleName, true); 117 assertTrue("role deletion didn't succeed", false); 118 } catch (UserManagementException e6) {} 119 120 tmpRoleName+="-partDeux"; 121 Role anotherConfessorRole = userManager.createRole(tmpRoleName); 122 123 tmpRoleName+="x"; 124 Role yetAnotherConfessorRole = userManager.createRole(tmpRoleName); 125 yetAnotherConfessorRole.setName(tmpRoleName); 127 yetAnotherConfessorRole.save(); 128 129 User kahlanUser = userManager.createUser("KahlanAmnell"+System.currentTimeMillis()); 130 131 kahlanUser.setPassword("ConDar"); 132 133 try { 134 kahlanUser.addToRole(anotherConfessorRole); 135 136 137 assertTrue("adding user to role that wasn't saved yet didn't throw an exception!", false); 138 } catch (Exception e1) {} 139 140 anotherConfessorRole.save(); 141 kahlanUser.addToRole(anotherConfessorRole); 143 kahlanUser.setDefaultRole(anotherConfessorRole); 144 kahlanUser.save(); 145 146 kahlanUser = userManager.getUser(kahlanUser.getLogin(), true); 148 Roles wuRoles = kahlanUser.getAllRoles(); 149 Role[] wuRolesArr = wuRoles.getArray(); 151 System.out.println("this user belongs to "+wuRolesArr.length+" roles"); 152 System.out.println("just checking: this user's login was "+kahlanUser.getLogin()); 153 154 assertEquals(wuRolesArr.length, 1); 155 assertEquals(wuRolesArr[0].getName(), anotherConfessorRole.getName()); 157 158 160 try { 161 userManager.deleteRole(anotherConfessorRole.getId()); 162 assertTrue("deleting role when some users only have it as their " + 163 "default role didn't throw an exception", false); 164 165 } catch (UserManagementException e5) {} 166 167 String userToBeDeletedLogin = kahlanUser.getLogin(); 168 userManager.getUser(userToBeDeletedLogin, true); 170 userManager.deleteUser(kahlanUser.getId()); 171 172 try { 173 userManager.getUser(userToBeDeletedLogin, true); 174 assertTrue("user deletion didn't succeed", false); 175 } catch (UserManagementException e4) {} 176 177 179 User warshanUser = userManager.createUser("Warshan"+System.currentTimeMillis()); 181 warshanUser.addToRole(anotherConfessorRole); 182 warshanUser.addToRole(anotherConfessorRole); 183 warshanUser.addToRole(anotherConfessorRole); 184 warshanUser.addToRole(yetAnotherConfessorRole); 187 188 warshanUser.setDefaultRole(anotherConfessorRole); 189 190 try { 191 warshanUser.save(); 192 assertTrue("saving user with empty password succeeded! Houston, we have a problem!", false); 193 } catch (UserManagementException e2) {} 194 195 warshanUser.setPassword("Tyskie"); 196 197 warshanUser.save(); 199 200 201 User userToUpdate = userManager.getUser(warshanUser.getLogin(), true); 203 assertEquals(userToUpdate.getAllRoles().getArray().length, 2); 205 206 userToUpdate.setEmail("speedy@gonzales.org"); 207 userToUpdate.setFirstName("speedy"); 208 userToUpdate.setLastName("gonzales"); 209 userToUpdate.setPassword("chachacha"); 210 userToUpdate.setAuthenticationScheme("abc"); 211 212 userToUpdate.removeFromRole(anotherConfessorRole); 213 userToUpdate.setDefaultRole(yetAnotherConfessorRole); 214 215 userToUpdate.save(); 216 User updatedUser = userManager.getUser(warshanUser.getLogin(), true); 217 assertEquals(userToUpdate.getAllRoles().getArray().length, 1); 218 assertEquals(updatedUser.getEmail(), "speedy@gonzales.org"); 219 assertEquals(updatedUser.getFirstName(), "speedy"); 220 assertEquals(updatedUser.getLastName(), "gonzales"); 221 assertNotNull(updatedUser.getDefaultRole()); 222 assertEquals(updatedUser.getDefaultRole().getName(), yetAnotherConfessorRole.getName()); 223 assertEquals("abc", updatedUser.getAuthenticationScheme()); 224 226 230 Role roleToUpdate = userManager.getRole(yetAnotherConfessorRole.getName(), true); 231 Role roleToUpdate2 = userManager.getRole(yetAnotherConfessorRole.getName(), true); 232 roleToUpdate.setDescription("bugsbunnyimitator"); 233 roleToUpdate.save(); 234 235 Role updatedRole = userManager.getRole(yetAnotherConfessorRole.getName(), true); 236 assertEquals(updatedRole.getDescription(), "bugsbunnyimitator"); 237 roleToUpdate2.setDescription("TomskiAndJerrySki"); 239 try { 240 roleToUpdate2.save(); 241 assertTrue("concurrency problem not detected!", false); 242 } catch (RepositoryException e7) {} 243 244 246 247 249 Role r = userManager.getRole("Administrator", true); 250 assertEquals(r.getName(), "Administrator"); 251 252 Role[] allRoles = userManager.getRoles().getArray(); 254 255 assertTrue(allRoles.length>1); 259 for (int i = 0; i < allRoles.length; i++) { 260 Role role = allRoles[i]; 261 assertNotNull(role); 262 } 263 264 User simpleNonAdminUser = userManager.getUser("testnonadmin", true); 266 assertNotNull(simpleNonAdminUser); 267 assertNotNull(simpleNonAdminUser.getDefaultRole()); 268 Roles simpleNonAdminRoles = simpleNonAdminUser.getAllRoles(); 269 270 for (int i = 0; i < simpleNonAdminRoles.getArray().length; i++) { 272 Role role = simpleNonAdminRoles.getArray()[i]; 273 assertNotNull(role); 274 } 275 276 assertEquals(simpleNonAdminUser.getDisplayName(), userManager.getUserDisplayName(simpleNonAdminUser.getId())); 278 279 User nonUpdateableUser1 = userManager.getUser(simpleNonAdminUser.getId(), false); 281 User nonUpdateableUser2 = userManager.getUser(simpleNonAdminUser.getId(), false); 282 assertTrue("retrieving cached user two times should give same object instance", nonUpdateableUser1 == nonUpdateableUser2); 283 284 simpleNonAdminUser.setFirstName("jules"); 285 simpleNonAdminUser.save(); 286 assertEquals("jules", userManager.getUserDisplayName(simpleNonAdminUser.getId())); 287 288 Role justAUser = userManager.createRole("just_a_user"); 292 justAUser.save(); 293 Role justAUser2 = userManager.createRole("just_a_user2"); 294 justAUser2.save(); 295 User herman = userManager.createUser("herman"); 296 herman.setPassword("herman"); 297 herman.addToRole(justAUser); 298 herman.addToRole(justAUser2); 299 herman.setDefaultRole(justAUser); 300 herman.setUpdateableByUser(true); 301 herman.save(); 302 303 Repository hermanRepository = repositoryManager.getRepository(new Credentials("herman", "herman")); 304 herman = hermanRepository.getUserManager().getUser(herman.getId(), true); 305 herman.setEmail("herman@highanddry"); 306 herman.save(); 307 308 Role adminRole = hermanRepository.getUserManager().getRole(Role.ADMINISTRATOR, false); 309 herman.addToRole(adminRole); 310 try { 311 herman.save(); 312 fail("User should not be able to change his/her own roles."); 313 } catch (Exception e) { 314 } 315 316 herman = hermanRepository.getUserManager().getUser(herman.getId(), true); 317 herman.setDefaultRole(justAUser2); 318 try { 319 herman.save(); 320 fail("User should not be able to change his/her own default role."); 321 } catch (Exception e) { 322 } 323 324 herman = hermanRepository.getUserManager().getUser(herman.getId(), true); 325 herman.setLogin("otherHerman"); 326 try { 327 herman.save(); 328 fail("User should not be able to change his/her own login."); 329 } catch (Exception e) { 330 } 331 332 try { 336 repositoryManager.getRepository(new Credentials("$system", "does_not_matter")); 337 fail("Logging in as user $system should not have succeeded."); 338 } catch (Exception e) { 339 } 341 342 try { 343 User systemUser = repository.getUserManager().getUser(1, true); 344 systemUser.save(); 345 fail("Saving the user $system should have failed."); 346 } catch (Exception e) { 347 } 349 350 try { 351 User systemUser = repository.getUserManager().getUser("$system", true); 352 systemUser.save(); 353 fail("Saving the user $system should have failed."); 354 } catch (Exception e) { 355 } 357 358 Role testRole = userManager.createRole("test"); 362 testRole.save(); 363 User confirmUser = userManager.createUser("confirm"); 364 confirmUser.setPassword("confirm"); 365 confirmUser.addToRole(testRole); 366 confirmUser.setDefaultRole(testRole); 367 assertTrue(confirmUser.isConfirmed()); 368 confirmUser.save(); 369 assertTrue(confirmUser.isConfirmed()); 370 confirmUser = userManager.getUser(confirmUser.getId(), true); 371 assertTrue(confirmUser.isConfirmed()); 372 confirmUser.setConfirmed(false); 373 confirmUser.setConfirmKey("abc"); 374 confirmUser.save(); 375 confirmUser = userManager.getUser(confirmUser.getId(), true); 376 assertFalse(confirmUser.isConfirmed()); 377 assertEquals("abc", confirmUser.getConfirmKey()); 378 379 try { 381 repositoryManager.getRepository(new Credentials("confirm", "confirm")); 382 fail("Logging in with unconfirmed user should fail."); 383 } catch (AuthenticationFailedException e) { 384 } 385 386 User user = userManager.createUser("deleteLastUpdateTest"); 391 Role guestRole = userManager.getRole("guest", false); 392 user.addToRole(guestRole); 393 user.setDefaultRole(guestRole); 394 user.setPassword("dummy"); 395 user.setUpdateableByUser(true); 396 user.save(); 397 398 User myself = repositoryManager.getRepository(new Credentials("deleteLastUpdateTest", "dummy")).getUserManager().getUser("deleteLastUpdateTest", true); 399 myself.save(); 400 401 userManager.deleteUser(user.getId()); 402 } 403 } 404 | Popular Tags |