/* * Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com) and * Steven Grimm <koreth[remove] at midwinter dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: TestDatabaseSessions.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.authentication.sessionmanagers; import com.uwyn.rife.authentication.ListSessions; import com.uwyn.rife.authentication.exceptions.SessionManagerException; import com.uwyn.rife.database.Datasource; import com.uwyn.rife.ioc.HierarchicalProperties; import com.uwyn.rife.tools.ExceptionUtils; import junit.framework.TestCase; public class TestDatabaseSessions extends TestCase { private Datasource mDatasource = null; private HierarchicalProperties mProperties = null; public TestDatabaseSessions(Datasource datasource, String datasourceName, String name) { super(name); mDatasource = datasource; mProperties = new HierarchicalProperties(); mProperties.put("datasource", mDatasource); mProperties.put(SessionManagerFactoryFactory.PROPERTYNAME_FACTORY_CLASS, DatabaseSessionsFactory.class.getName()); } public void testInstantiation() { DatabaseSessions manager = new DatabaseSessionsFactory().getManager(mProperties); assertNotNull(manager); } public void testInstall() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); try { assertTrue(true == sessions.install()); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testRemove() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); try { assertTrue(true == sessions.remove()); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } public void testStartSession() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); int user_id = 143; String host_ip = "189.38.987.43"; String auth_id = null; try { sessions.install(); auth_id = sessions.startSession(user_id, host_ip, false); assertFalse(sessions.wasRemembered(auth_id)); assertEquals(1, sessions.countSessions()); assertNotNull(auth_id); assertTrue(auth_id.length() > 0); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testStartRememberedSession() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); int user_id = 143; String host_ip = "189.38.987.43"; String auth_id = null; try { sessions.install(); auth_id = sessions.startSession(user_id, host_ip, true); assertTrue(sessions.wasRemembered(auth_id)); assertEquals(1, sessions.countSessions()); assertNotNull(auth_id); assertTrue(auth_id.length() > 0); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testSessionExpiration() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); sessions.setSessionDuration(2000); int user_id = 1243; String host_ip = "837.234.23.434"; String auth_id = null; try { sessions.install(); auth_id = sessions.startSession(user_id, host_ip, false); assertTrue(sessions.isSessionValid(auth_id, host_ip)); assertEquals(1, sessions.countSessions()); long start = System.currentTimeMillis(); Thread.sleep(1500); if (System.currentTimeMillis()-start <= 2000) { assertTrue(sessions.isSessionValid(auth_id, host_ip)); assertEquals(1, sessions.countSessions()); Thread.sleep(510); } assertTrue(!sessions.isSessionValid(auth_id, host_ip)); assertEquals(0, sessions.countSessions()); } catch (InterruptedException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testContinueSession() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); sessions.setSessionDuration(2000); int user_id = 41; String host_ip = "113.98.46.140"; String auth_id = null; try { sessions.install(); auth_id = sessions.startSession(user_id, host_ip, false); assertTrue(sessions.isSessionValid(auth_id, host_ip)); Thread.sleep(1900); assertTrue(sessions.continueSession(auth_id)); Thread.sleep(100); assertTrue(sessions.isSessionValid(auth_id, host_ip)); Thread.sleep(1901); assertTrue(!sessions.isSessionValid(auth_id, host_ip)); } catch (InterruptedException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testContinueUnknownSession() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); String auth_id = "unknown"; try { sessions.install(); assertTrue(false == sessions.continueSession(auth_id)); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testEraseSession() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); int user_id = 93; String host_ip = "24.534.23.444"; try { sessions.install(); long number_of_sessions = sessions.countSessions(); String auth_id = null; auth_id = sessions.startSession(user_id, host_ip, false); assertEquals(number_of_sessions+1, sessions.countSessions()); assertTrue(sessions.eraseSession(auth_id)); assertEquals(number_of_sessions, sessions.countSessions()); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testEraseUnknownSession() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); String auth_id = "unknown"; try { sessions.install(); assertTrue(false == sessions.eraseSession(auth_id)); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testEraseAllSessions() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); try { sessions.install(); sessions.startSession(232, "873.232.44.333", false); sessions.startSession(232, "873.232.44.333", false); sessions.startSession(23, "873.232.44.333", false); sessions.startSession(53, "873.232.44.333", false); sessions.startSession(53, "873.232.44.333", false); sessions.startSession(232, "873.232.44.333", false); sessions.startSession(23, "873.232.44.333", false); assertTrue(sessions.countSessions() > 0); sessions.eraseAllSessions(); assertEquals(0, sessions.countSessions()); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testEraseUserSessions() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); try { sessions.install(); assertEquals(0, sessions.countSessions()); sessions.startSession(8433, "143.98.32.545", false); sessions.startSession(8433, "143.98.32.545", false); sessions.startSession(8432, "143.98.32.545", false); sessions.startSession(8431, "143.98.32.545", false); assertTrue(sessions.countSessions() > 0); assertTrue(sessions.eraseUserSessions(8433)); assertEquals(2, sessions.countSessions()); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testEraseUnkownUserSessions() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); try { sessions.install(); assertEquals(0, sessions.countSessions()); sessions.startSession(8432, "143.98.32.545", false); sessions.startSession(8431, "143.98.32.545", false); assertTrue(sessions.countSessions() > 0); assertTrue(!sessions.eraseUserSessions(8433)); assertEquals(2, sessions.countSessions()); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testPurgeSessions() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); sessions.setSessionDuration(2000); int user_id = 9478; String host_ip = "98.232.12.456"; try { sessions.install(); sessions.eraseAllSessions(); assertEquals(0, sessions.countSessions()); sessions.startSession(user_id, host_ip, false); assertEquals(1, sessions.countSessions()); Thread.sleep(2010); sessions.purgeSessions(); sessions.startSession(user_id, host_ip, false); assertEquals(1, sessions.countSessions()); } catch (InterruptedException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testCountSessions() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); sessions.setSessionDuration(4000); int user_id1 = 9478; String host_ip1 = "98.232.12.456"; int user_id2 = 9479; String host_ip2 = "98.232.12.457"; int user_id3 = 9480; String host_ip3 = "98.232.12.458"; try { sessions.install(); sessions.eraseAllSessions(); assertEquals(0, sessions.countSessions()); sessions.startSession(user_id1, host_ip1, false); assertEquals(1, sessions.countSessions()); Thread.sleep(2000); sessions.startSession(user_id2, host_ip2, false); assertEquals(2, sessions.countSessions()); Thread.sleep(1000); sessions.startSession(user_id3, host_ip3, false); assertEquals(3, sessions.countSessions()); Thread.sleep(1100); assertEquals(2, sessions.countSessions()); } catch (InterruptedException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } public void testListSessions() { DatabaseSessions sessions = new DatabaseSessionsFactory().getManager(mProperties); sessions.setSessionDuration(4000); final int user_id1 = 9478; final String host_ip1 = "98.232.12.456"; final int user_id2 = 9479; final String host_ip2 = "98.232.12.457"; final int user_id3 = 9480; final String host_ip3 = "98.232.12.458"; final int[] count = new int[1]; count[0] = 0; try { sessions.install(); sessions.eraseAllSessions(); assertEquals(false, sessions.listSessions(new ListSessions() { public boolean foundSession(long userId, String hostIp, String authId) { fail(); return true; } })); sessions.startSession(user_id1, host_ip1, false); count[0] = 0; assertEquals(true, sessions.listSessions(new ListSessions() { public boolean foundSession(long userId, String hostIp, String authId) { count[0]++; assertTrue(count[0] <= 1); assertTrue(9478 == userId); assertTrue(host_ip1.equals(hostIp)); return true; } })); Thread.sleep(2000); sessions.startSession(user_id2, host_ip2, false); count[0] = 0; assertEquals(true, sessions.listSessions(new ListSessions() { public boolean foundSession(long userId, String hostIp, String authId) { count[0]++; assertTrue(count[0] <= 2); assertTrue(9478 == userId || 9479 == userId); assertTrue(host_ip1.equals(hostIp) || host_ip2.equals(hostIp)); return true; } })); Thread.sleep(1000); sessions.startSession(user_id3, host_ip3, false); count[0] = 0; assertEquals(true, sessions.listSessions(new ListSessions() { public boolean foundSession(long userId, String hostIp, String authId) { count[0]++; assertTrue(count[0] <= 3); assertTrue(9478 == userId || 9479 == userId || 9480 == userId); assertTrue(host_ip1.equals(hostIp) || host_ip2.equals(hostIp) || host_ip3.equals(hostIp)); return true; } })); Thread.sleep(1100); count[0] = 0; assertEquals(true, sessions.listSessions(new ListSessions() { public boolean foundSession(long userId, String hostIp, String authId) { count[0]++; assertTrue(count[0] <= 2); assertTrue(9479 == userId || 9480 == userId); assertTrue(host_ip2.equals(hostIp) || host_ip3.equals(hostIp)); return true; } })); } catch (InterruptedException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } finally { try { sessions.remove(); } catch (SessionManagerException e) { assertTrue(ExceptionUtils.getExceptionStackTrace(e), false); } } } }