package auth; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import junit.framework.TestCase; import org.bouncycastle.util.encoders.Base64; import org.easymock.EasyMock; import org.jdal.auth.AuthHashMD5; import org.jdal.auth.AuthManager; import org.jdal.auth.AuthPlain; import org.jdal.auth.AuthStrategy; import org.jdal.dao.UserDao; import org.jdal.model.DefaultUser; import org.jdal.model.User; /** * Test info.joseluismartin.auth package * * @author Jose Luis Martin - (jlm@joseluismartin.info) */ public class AuthTest extends TestCase { /** test username */ private static final String USERNAME = "test username"; /** test supplied password */ private static final String SUPPLIED_PASS = "supplied password"; /** test stored password */ private static final String STORED_PASS = "stored password"; // create mocks /** user dao mock */ private UserDao userDao = EasyMock.createMock(UserDao.class); /** auth strategy mock */ private AuthStrategy authStrategy = EasyMock.createMock(AuthStrategy.class); /** * Test auth manager */ public void notestAuthManagerValidate() { AuthManager authManager = newAuthManager(); reset(userDao); reset(authStrategy); assertFalse(authManager.validate(null, null)); // record messages expect(userDao.findByUsername(USERNAME)).andReturn(newTestUser()); expect(authStrategy.validate(SUPPLIED_PASS, STORED_PASS)).andReturn(true); // sets mocks in replay state replay(authStrategy); replay(userDao); // and send message... boolean valid = authManager.validate(USERNAME, SUPPLIED_PASS); // test that colaborators receive all messages verify(authStrategy); verify(userDao); assertTrue(valid); } /** * Test Auth plain */ public void testAuthPlain() { AuthPlain auth = new AuthPlain(); assertTrue(auth.validate(SUPPLIED_PASS, SUPPLIED_PASS)); assertFalse(auth.validate(SUPPLIED_PASS, STORED_PASS)); assertFalse(auth.validate(null, null)); } /** * Test auth hash md5 */ public void testAuthHashMD5() { AuthHashMD5 auth = new AuthHashMD5(); try { assertTrue(auth.validate(SUPPLIED_PASS, hashmd5(SUPPLIED_PASS))); } catch (NoSuchAlgorithmException e) { fail(e.getMessage()); } assertFalse(auth.validate(SUPPLIED_PASS, STORED_PASS)); assertFalse(auth.validate(null, null)); } /** * * @param asuppliedPass pass * @return base64 encode of hash md5 * @throws NoSuchAlgorithmException from MessageDigester */ private String hashmd5( String suppliedPassword) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(suppliedPassword.getBytes()); String encriptedPassword = null; try { encriptedPassword = new String(Base64.encode(md.digest()), "ASCII"); } catch (UnsupportedEncodingException e) {} return encriptedPassword; } /** * * @return new test user */ private User newTestUser() { DefaultUser user = new DefaultUser(); user.setPassword(STORED_PASS); user.setUsername(USERNAME); return user; } /** * * @return new auth manager */ private AuthManager newAuthManager() { AuthManager authManager = new AuthManager(); reset(authStrategy); authManager.setAuthStrategy(authStrategy); reset(userDao); authManager.setUserDao(userDao); return authManager; } }