/** * Copyright (c) 2015 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package com.redhat.rhn.common.db.test; import java.util.Calendar; import java.util.Iterator; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import com.redhat.rhn.common.conf.Config; import com.redhat.rhn.common.db.ResetPasswordFactory; import com.redhat.rhn.domain.common.ResetPassword; import com.redhat.rhn.testing.BaseTestCaseWithUser; public class ResetPasswordFactoryTest extends BaseTestCaseWithUser { public void testToken() throws Exception { String tok = ResetPasswordFactory.generatePasswordToken(user); assertNotNull(tok); assertEquals(40, tok.length()); } public void testDirectCreate() { ResetPassword rp = new ResetPassword(user.getId(), ResetPasswordFactory.generatePasswordToken(user)); assertNotNull(rp); assertEquals(rp.getUserId(), user.getId()); assertNotNull(rp.getToken()); assertTrue(rp.isValid()); assertTrue(!rp.isExpired()); } public void testExpired() { ResetPassword rp = new ResetPassword(user.getId(), ResetPasswordFactory.generatePasswordToken(user)); assertNotNull(rp); assertTrue(!rp.isExpired()); int expirationHours = Config.get().getInt(ResetPasswordFactory.EXPIRE_TIME, 48); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR, -(expirationHours - 1)); rp.setCreated(cal.getTime()); assertTrue(!rp.isExpired()); cal = Calendar.getInstance(); cal.add(Calendar.HOUR, -(expirationHours + 1)); rp.setCreated(cal.getTime()); assertTrue(rp.isExpired()); cal = Calendar.getInstance(); cal.add(Calendar.YEAR, -1); rp.setCreated(cal.getTime()); assertTrue(rp.isExpired()); } public void testFactoryCreate() { ResetPassword rp = ResetPasswordFactory.createNewEntryFor(user); assertNotNull(rp); assertNotNull(rp); assertEquals(rp.getUserId(), user.getId()); assertNotNull(rp.getToken()); assertTrue(rp.isValid()); } public void testNoToken() { ResetPassword rp = ResetPasswordFactory.lookupByToken("Thistokencannotexist"); assertNull(rp); } public void testRecoverAndDelete() { ResetPassword rp = ResetPasswordFactory.createNewEntryFor(user); ResetPassword found = ResetPasswordFactory.lookupByToken(rp.getToken()); assertEquals(found.getUserId(), user.getId()); assertNotNull(found.getToken()); assertTrue(found.isValid()); assertEquals(rp.getToken(), found.getToken()); int rmv = ResetPasswordFactory.deleteUserTokens(user.getId()); assertEquals(1, rmv); } public void testInvalidateOne() { ResetPassword rp = ResetPasswordFactory.createNewEntryFor(user); assertNotNull(rp); ResetPasswordFactory.invalidateToken(rp.getToken()); ResetPassword found = ResetPasswordFactory.lookupByToken(rp.getToken()); assertTrue(!found.isValid()); } public void testInvalidate() { ResetPassword rp = ResetPasswordFactory.createNewEntryFor(user); assertNotNull(rp); int rmvd = ResetPasswordFactory.deleteUserTokens(user.getId()); assertEquals(1, rmvd); ResetPassword rp1 = ResetPasswordFactory.createNewEntryFor(user); ResetPassword rp2 = ResetPasswordFactory.createNewEntryFor(user); ResetPassword rp3 = ResetPasswordFactory.createNewEntryFor(user); assertNotSame(rp1, rp2); assertNotSame(rp1, rp3); assertNotSame(rp2, rp3); ResetPassword found = ResetPasswordFactory.lookupByToken(rp1.getToken()); assertNotNull(found); assertTrue(found.isValid()); found = ResetPasswordFactory.lookupByToken(rp2.getToken()); assertNotNull(found); assertTrue(found.isValid()); found = ResetPasswordFactory.lookupByToken(rp3.getToken()); assertNotNull(found); assertTrue(found.isValid()); int inv = ResetPasswordFactory.invalidateUserTokens(user.getId()); assertEquals(3, inv); rmvd = ResetPasswordFactory.deleteUserTokens(user.getId()); assertEquals(3, rmvd); } public void testFindErrors() { ResetPassword rp = ResetPasswordFactory.createNewEntryFor(user); assertNotNull(rp); // Everything OK ActionErrors errors = ResetPasswordFactory.findErrors(rp); assertNotNull(errors); assertTrue(errors.isEmpty()); // No Token errors = ResetPasswordFactory.findErrors(null); assertEquals(1, errors.size()); Iterator<ActionMessage> iter = errors.get(ActionMessages.GLOBAL_MESSAGE); while (iter.hasNext()) { ActionMessage am = iter.next(); assertEquals("resetpassword.jsp.error.notoken", am.getKey()); } // Invalid token ResetPassword rp1 = ResetPasswordFactory.createNewEntryFor(user); rp1.setIsValid(false); errors = ResetPasswordFactory.findErrors(rp1); assertEquals(1, errors.size()); iter = errors.get(ActionMessages.GLOBAL_MESSAGE); while (iter.hasNext()) { ActionMessage am = iter.next(); assertEquals("resetpassword.jsp.error.invalidtoken", am.getKey()); } rp1.setIsValid(true); // Expired token Calendar cal = Calendar.getInstance(); cal.add(Calendar.YEAR, -1); rp1.setCreated(cal.getTime()); errors = ResetPasswordFactory.findErrors(rp1); assertEquals(1, errors.size()); iter = errors.get(ActionMessages.GLOBAL_MESSAGE); while (iter.hasNext()) { ActionMessage am = iter.next(); assertEquals("resetpassword.jsp.error.expiredtoken", am.getKey()); } } }