logon(TEST_ADMIN_USER);
Assert.assertNull("If failed, a previous test run didn't cleared the data-base.", userDao.getUserGroupCache().getUser(testUsername1));
Assert.assertNull("If failed, a previous test run didn't cleared the data-base.", userDao.getUserGroupCache().getUser(testUsername2));
// Check failed login:
LoginResult result = loginHandler.checkLogin(testUsername1, "fail");
Assert.assertEquals("User login failed against LDAP therefore login should be failed.", LoginResultStatus.FAILED,
result.getLoginResultStatus());
// Check successful login for new ProjectForge users:
result = loginHandler.checkLogin(testUsername1, "successful");
Assert.assertEquals(LoginResultStatus.SUCCESS, result.getLoginResultStatus());
Assert.assertNotNull("User should be returned.", result.getUser());
synchronizeLdapUsers(loginHandler);
PFUserDO user = userDao.authenticateUser(testUsername1, "successful");
Assert.assertNotNull("User should be created by login handler.", user);
Assert.assertEquals(testUsername1, user.getUsername());
result = loginHandler.checkLogin(testUsername1, "successful");
Assert.assertEquals(result.getUser().getId(), user.getId());
user = userDao.getInternalByName(testUsername2);
result = loginHandler.checkLogin(testUsername2, "successful");
Assert.assertNotNull("User should be created by login handler.", user);
Assert.assertEquals(testUsername2, user.getUsername());
Assert.assertEquals(result.getUser().getId(), user.getId());
// Delete user2
ldapUserDao.delete(ldapUser2);
synchronizeLdapUsers(loginHandler);
user = userDao.getInternalByName(testUsername2);
Assert.assertTrue("User isn't available in LDAP, therefore should be deleted.", user.isDeleted());
createLdapUser(ldapUser2, "successful");
synchronizeLdapUsers(loginHandler);
user = userDao.getInternalByName(testUsername2);
Assert.assertFalse("User isn't available in LDAP, therefore should be deleted.", user.isDeleted());
// Check that LDAP is ignored for local users:
user.setLocalUser(true);
userDao.createEncryptedPassword(user, "test");
userDao.internalUpdate(user);
result = loginHandler.checkLogin(testUsername2, "successful");
Assert.assertEquals("User is a local user, thus the LDAP authentication should be ignored.", LoginResultStatus.FAILED,
result.getLoginResultStatus());
result = loginHandler.checkLogin(testUsername2, "test");
Assert.assertEquals("User is a local user, thus the data-base authentication should be used.", LoginResultStatus.SUCCESS,
result.getLoginResultStatus());
// Delete all users
ldapUserDao.delete(ldapUser1);
ldapUserDao.delete(ldapUser2);
}