/* * Created on Jun 15, 2005 11:57:08 AM */ package net.jforum; import junit.framework.TestCase; import net.jforum.cache.DefaultCacheEngine; import net.jforum.context.web.WebRequestContext; import net.jforum.context.web.WebResponseContext; import net.jforum.context.RequestContext; import net.jforum.context.ResponseContext; import net.jforum.context.ForumContext; import net.jforum.context.JForumContext; import net.jforum.entities.UserSession; import net.jforum.http.FakeHttpRequest; import net.jforum.http.FakeHttpResponse; import net.jforum.util.preferences.ConfigKeys; import net.jforum.util.preferences.SystemGlobals; /** * Test {@link net.jforum.SessionFacade} methods for online users * * @author Rafael Steil * @version $Id: OnlineUsersTest.java,v 1.9 2006/08/24 21:03:00 sergemaslyukov Exp $ */ public class OnlineUsersTest extends TestCase { private static final int ANONYMOUS = 1; protected void setUp() throws Exception { new SessionFacade().setCacheEngine(new DefaultCacheEngine()); RequestContext requestContext = new WebRequestContext(new FakeHttpRequest()); ResponseContext responseContext = new WebResponseContext(new FakeHttpResponse()); ForumContext forumContext = new JForumContext( requestContext.getContextPath(), SystemGlobals.getValue(ConfigKeys.SERVLET_EXTENSION), requestContext, responseContext, false ); JForumExecutionContext ex = JForumExecutionContext.get(); ex.setForumContext( forumContext ); JForumExecutionContext.set(ex); SystemGlobals.setValue(ConfigKeys.ANONYMOUS_USER_ID, Integer.toString(ANONYMOUS)); } /** * Check if guest users are being counted correctly */ public void testAnonymousCount() { this.createUserSession(ANONYMOUS, ANONYMOUS + 1 + "_" + System.currentTimeMillis()); this.createUserSession(ANONYMOUS, ANONYMOUS + 2 + "_" + System.currentTimeMillis()); this.createUserSession(ANONYMOUS, ANONYMOUS + 3 + "_" + System.currentTimeMillis()); assertEquals(3, SessionFacade.anonymousSize()); } /** * Check if counting of both guest and logged users is correct */ public void test2Anymous1Logged() { // Anonymous this.createUserSession(ANONYMOUS, ANONYMOUS + "1_" + System.currentTimeMillis()); this.createUserSession(ANONYMOUS, ANONYMOUS + "2_" + System.currentTimeMillis()); // Logged SessionFacade.setAttribute("logged", "1"); this.createUserSession(2, "logged" + System.currentTimeMillis()); // Assert assertEquals(2, SessionFacade.anonymousSize()); assertEquals(1, SessionFacade.registeredSize()); } /** * First register as anonymous, then change to logged, and check counting */ public void testAnonymousThenLogged() { // Anonymous String sessionId = ANONYMOUS + "1_" + System.currentTimeMillis(); this.createUserSession(ANONYMOUS, sessionId); assertEquals(1, SessionFacade.anonymousSize()); assertEquals(0, SessionFacade.registeredSize()); // Logged UserSession us = SessionFacade.getUserSession(sessionId); us.setUserId(2); SessionFacade.setAttribute("logged", "1"); SessionFacade.remove(sessionId); SessionFacade.add(us); assertEquals(0, SessionFacade.anonymousSize()); assertEquals(1, SessionFacade.registeredSize()); } public void test3LoggedThen1Logout() { // Logged SessionFacade.setAttribute("logged", "1"); this.createUserSession(2, "2_" + System.currentTimeMillis()); String sessionId = "3_" + System.currentTimeMillis(); this.createUserSession(3, sessionId); this.createUserSession(4, "4_" + System.currentTimeMillis()); assertEquals(3, SessionFacade.registeredSize()); assertEquals(0, SessionFacade.anonymousSize()); // Logout (goes as guest) SessionFacade.removeAttribute("logged"); SessionFacade.remove(sessionId); this.createUserSession(ANONYMOUS, sessionId); assertEquals(2, SessionFacade.registeredSize()); assertEquals(1, SessionFacade.anonymousSize()); } private void createUserSession(int userId, String sessionId) { UserSession us = new UserSession(); us.setUserId(userId); us.setSessionId(sessionId); us.setUsername("blah_" + System.currentTimeMillis()); SessionFacade.add(us, sessionId); } }