/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.cluster.defaultcfg.simpleweb.test;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
import junit.framework.TestCase;
import org.apache.catalina.Manager;
import org.apache.catalina.Session;
import org.jboss.cache.Cache;
import org.jboss.cache.Fqn;
import org.jboss.cache.pojo.PojoCache;
import org.jboss.logging.Logger;
import org.jboss.metadata.web.jboss.JBossWebMetaData;
import org.jboss.test.cluster.testutil.JGroupsSystemPropertySupport;
import org.jboss.test.cluster.testutil.SessionTestUtil;
import org.jboss.web.tomcat.service.session.JBossCacheManager;
/**
* Unit tests of session count management.
*
* @author <a href="brian.stansberry@jboss.com">Brian Stansberry</a>
* @version $Revision: 104633 $
*/
public class SessionCountUnitTestCase extends TestCase
{
private static final Logger log = Logger.getLogger(SessionCountUnitTestCase.class);
private static long testCount = System.currentTimeMillis();
private JGroupsSystemPropertySupport jgroupsSupport;
private Set<PojoCache> caches = new HashSet<PojoCache>();
private String tempDir;
/**
* Create a new SessionCountUnitTestCase.
*
* @param name
*/
public SessionCountUnitTestCase(String name)
{
super(name);
}
@Override
protected void setUp() throws Exception
{
super.setUp();
// Set system properties to properly bind JGroups channels
jgroupsSupport = new JGroupsSystemPropertySupport();
jgroupsSupport.setUpProperties();
File tmpDir = new File(System.getProperty("java.io.tmpdir"));
File root = new File(tmpDir, getClass().getSimpleName());
root.mkdirs();
root.deleteOnExit();
tempDir = root.getAbsolutePath();
}
@Override
protected void tearDown() throws Exception
{
try
{
super.tearDown();
}
finally
{
SessionTestUtil.clearDistributedCacheManagerFactory();
// Restore any system properties we set in setUp
if (jgroupsSupport != null)
{
jgroupsSupport.restoreProperties();
}
for (PojoCache cache : caches)
{
// Try to clean up so we avoid loading sessions
// from storage in later tests
try
{
log.info("Removing /JSESSION from " + cache.getCache().getLocalAddress());
cache.getCache().removeNode(Fqn.fromString("/JSESSION"));
}
catch (Exception e)
{
log.error("Cache " + cache.getCache().getLocalAddress() + ": " + e.getMessage(), e);
}
try
{
cache.stop();
cache.destroy();
}
catch (Exception e)
{
log.error("Cache " + cache.getCache().getLocalAddress() + ": " + e.getMessage(), e);
}
}
caches.clear();
if (tempDir != null)
{
SessionTestUtil.cleanPassivationDir(new File(tempDir));
}
}
}
public void testStandaloneMaxSessions() throws Exception
{
log.info("Enter testStandaloneMaxSessions");
++testCount;
JBossCacheManager jbcm = SessionTestUtil.createManager("test" + testCount, 5, true, null, false, false, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(2);
jbcm.init("test.war", webMetaData);
jbcm.start();
assertFalse("Passivation is disabled", jbcm.isPassivationEnabled());
assertEquals("Correct max active count", 2, jbcm.getMaxActiveAllowed());
// Set up a session
Session sess1 = createAndUseSession(jbcm, "1", true, true);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
createAndUseSession(jbcm, "2", true, true);
assertEquals("Session count correct", 2, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 2, jbcm.getLocalActiveSessionCount());
// Should fail to create a 3rd
createAndUseSession(jbcm, "3", false, false);
// Confirm a session timeout clears space
sess1.setMaxInactiveInterval(1);
SessionTestUtil.sleepThread(1100);
createAndUseSession(jbcm, "3", true, true);
assertEquals("Session count correct", 2, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 2, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 3, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 1, jbcm.getExpiredSessionCount());
}
public void testStandaloneMaxSessionsWithMaxIdle()
throws Exception
{
log.info("Enter testStandaloneMaxSessionsWithMaxIdle");
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm = SessionTestUtil.createManager("test" + testCount, 5, true, passDir, false, false, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(1, true, 1, -1);
jbcm.init("test.war", webMetaData);
jbcm.start();
assertTrue("Passivation is enabled", jbcm.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm.getMaxActiveAllowed());
assertEquals("Correct max idle time", 1, jbcm.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", -1, jbcm.getPassivationMinIdleTime());
// Set up a session
Session sess1 = createAndUseSession(jbcm, "1", true, true);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
// Should fail to create a 2nd
createAndUseSession(jbcm, "2", false, false);
// Confirm a session timeout clears space
sess1.setMaxInactiveInterval(1);
SessionTestUtil.sleepThread(1100);
createAndUseSession(jbcm, "2", true, true);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 2, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 1, jbcm.getExpiredSessionCount());
assertEquals("Passivated session count correct", 0, jbcm.getPassivatedSessionCount());
// Sleep past maxIdleTime
SessionTestUtil.sleepThread(1100);
assertEquals("Passivated session count correct", 0, jbcm.getPassivatedSessionCount());
createAndUseSession(jbcm, "3", true, true);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 3, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 1, jbcm.getExpiredSessionCount());
assertEquals("Passivated session count correct", 1, jbcm.getPassivatedSessionCount());
}
public void testStandaloneMaxSessionsWithMinIdle() throws Exception
{
log.info("Enter testStandaloneMaxSessionsWithMinIdle");
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm = SessionTestUtil.createManager("test" + testCount, 5, true, passDir, false, false, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(1, true, 3, 1);
jbcm.init("test.war", webMetaData);
jbcm.start();
assertTrue("Passivation is enabled", jbcm.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm.getPassivationMinIdleTime());
// Set up a session
Session sess1 = createAndUseSession(jbcm, "1", true, true);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
// Should fail to create a 2nd
createAndUseSession(jbcm, "2", false, false);
// Confirm a session timeout clears space
sess1.setMaxInactiveInterval(1);
SessionTestUtil.sleepThread(1100);
createAndUseSession(jbcm, "2", true, false);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 2, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 1, jbcm.getExpiredSessionCount());
// Sleep past minIdleTime
SessionTestUtil.sleepThread(1100);
// assertTrue("Session 2 still valid", sess2.isValid());
assertEquals("Passivated session count correct", 0, jbcm.getPassivatedSessionCount());
createAndUseSession(jbcm, "3", true, true);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 3, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 1, jbcm.getExpiredSessionCount());
assertEquals("Passivated session count correct", 1, jbcm.getPassivatedSessionCount());
}
public void testReplicatedMaxSessions() throws Exception
{
log.info("Enter testReplicatedMaxSessions");
++testCount;
JBossCacheManager jbcm0 = SessionTestUtil.createManager("test" + testCount, 1, false, null, false, false, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(1);
jbcm0.init("test.war", webMetaData);
jbcm0.start();
assertFalse("Passivation is disabled", jbcm0.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm0.getMaxActiveAllowed());
assertEquals("Correct max inactive interval", 1, jbcm0.getMaxInactiveInterval());
JBossCacheManager jbcm1 = SessionTestUtil.createManager("test" + testCount, 1, false, null, false, false, null, caches);
jbcm1.init("test.war", webMetaData);
jbcm1.start();
assertFalse("Passivation is disabled", jbcm1.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm1.getMaxActiveAllowed());
assertEquals("Correct max inactive interval", 1, jbcm1.getMaxInactiveInterval());
// Set up a session
Session sess1 = createAndUseSession(jbcm0, "1", true, true);
assertEquals("Session count correct", 1, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm1.getLocalActiveSessionCount());
// Should fail to create a 2nd
createAndUseSession(jbcm1, "2", false, false);
// Confirm a session timeout clears space
sess1.setMaxInactiveInterval(1);
useSession(jbcm0, "1");
SessionTestUtil.sleepThread(jbcm0.getMaxInactiveInterval() * 1000 + 100);
createAndUseSession(jbcm1, "2", true, true);
assertEquals("Session count correct", 2, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
}
public void testReplicatedMaxSessionsWithMaxIdle() throws Exception
{
log.info("Enter testReplicatedMaxSessionsWithMaxIdle");
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm0 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, false, false, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(1, true, 1, -1);
jbcm0.init("test.war", webMetaData);
jbcm0.start();
assertTrue("Passivation is enabled", jbcm0.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm0.getMaxActiveAllowed());
assertEquals("Correct max idle time", 1, jbcm0.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", -1, jbcm0.getPassivationMinIdleTime());
passDir = getPassivationDir(testCount, 2);
JBossCacheManager jbcm1 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, false, false, null, caches);
jbcm1.init("test.war", webMetaData);
jbcm1.start();
assertTrue("Passivation is enabled", jbcm1.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm1.getMaxActiveAllowed());
assertEquals("Correct max idle time", 1, jbcm1.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", -1, jbcm1.getPassivationMinIdleTime());
// Set up a session
createAndUseSession(jbcm0, "1", true, true);
assertEquals("Session count correct", 1, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Passivated session count correct", 0, jbcm0.getPassivatedSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm1.getLocalActiveSessionCount());
assertEquals("Passivated session count correct", 0, jbcm1.getPassivatedSessionCount());
// Should fail to create a 2nd
createAndUseSession(jbcm1, "2", false, false);
// Sleep past maxIdleTime
SessionTestUtil.sleepThread(1100);
assertEquals("Passivated session count correct", 0, jbcm1.getPassivatedSessionCount());
createAndUseSession(jbcm1, "2", true, true);
assertEquals("Session count correct", 2, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
assertEquals("Passivated session count correct", 0, jbcm0.getPassivatedSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm1.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm1.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm1.getExpiredSessionCount());
assertEquals("Passivated session count correct", 1, jbcm1.getPassivatedSessionCount());
}
public void testReplicatedMaxSessionsWithMinIdle() throws Exception
{
log.info("Enter testReplicatedMaxSessionsWithMinIdle");
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm0 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, false, false, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(1, true, 3, 1);
jbcm0.init("test.war", webMetaData);
jbcm0.start();
assertTrue("Passivation is enabled", jbcm0.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm0.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm0.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm0.getPassivationMinIdleTime());
passDir = getPassivationDir(testCount, 2);
JBossCacheManager jbcm1 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, false, false, null, caches);
jbcm1.init("test.war", webMetaData);
jbcm1.start();
assertTrue("Passivation is enabled", jbcm1.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm1.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm1.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm1.getPassivationMinIdleTime());
// Set up a session
createAndUseSession(jbcm0, "1", true, true);
assertEquals("Session count correct", 1, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Passivated session count correct", 0, jbcm0.getPassivatedSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm1.getLocalActiveSessionCount());
assertEquals("Passivated session count correct", 0, jbcm0.getPassivatedSessionCount());
// Should fail to create a 2nd
createAndUseSession(jbcm1, "2", false, false);
// Sleep past maxIdleTime
SessionTestUtil.sleepThread(1100);
assertEquals("Passivated session count correct", 0, jbcm1.getPassivatedSessionCount());
createAndUseSession(jbcm1, "2", true, true);
assertEquals("Session count correct", 2, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
assertEquals("Passivated session count correct", 0, jbcm0.getPassivatedSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm1.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm1.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm1.getExpiredSessionCount());
assertEquals("Passivated session count correct", 1, jbcm1.getPassivatedSessionCount());
}
public void testTotalReplication() throws Exception
{
log.info("Enter testTotalReplication");
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm0 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, true, false, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(1, true, 3, 1);
jbcm0.init("test.war", webMetaData);
jbcm0.start();
assertTrue("Passivation is enabled", jbcm0.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm0.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm0.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm0.getPassivationMinIdleTime());
passDir = getPassivationDir(testCount, 2);
JBossCacheManager jbcm1 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, true, false, null, caches);
jbcm1.init("test.war", webMetaData);
jbcm1.start();
assertTrue("Passivation is enabled", jbcm1.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm1.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm1.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm1.getPassivationMinIdleTime());
// Set up a session
createAndUseSession(jbcm0, "1", true, true);
assertEquals("Session count correct", 1, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm1.getLocalActiveSessionCount());
// Should fail to create a 2nd
createAndUseSession(jbcm1, "2", false, false);
// Sleep past maxIdleTime
SessionTestUtil.sleepThread(1100);
assertEquals("Passivated session count correct", 0, jbcm1.getPassivatedSessionCount());
createAndUseSession(jbcm1, "2", true, true);
assertEquals("Session count correct", 2, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
}
public void testRegionBasedMarshalling() throws Exception
{
log.info("Enter testRegionBasedMarshalling");
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm0 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, false, true, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(1, true, 3, 1);
jbcm0.init("test.war", webMetaData);
jbcm0.start();
assertTrue("Passivation is enabled", jbcm0.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm0.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm0.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm0.getPassivationMinIdleTime());
passDir = getPassivationDir(testCount, 2);
JBossCacheManager jbcm1 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, false, true, null, caches);
jbcm1.init("test.war", webMetaData);
jbcm1.start();
assertTrue("Passivation is enabled", jbcm1.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm1.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm1.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm1.getPassivationMinIdleTime());
// Set up a session
createAndUseSession(jbcm0, "1", true, true);
assertEquals("Session count correct", 1, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm1.getLocalActiveSessionCount());
// Should fail to create a 2nd
createAndUseSession(jbcm1, "2", false, false);
// Sleep past maxIdleTime
SessionTestUtil.sleepThread(1100);
assertEquals("Passivated session count correct", 0, jbcm1.getPassivatedSessionCount());
createAndUseSession(jbcm1, "2", true, true);
assertEquals("Session count correct", 2, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
}
public void testTotalReplicationWithMarshalling() throws Exception
{
log.info("Enter testTotalReplicationWithMarshalling");
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm0 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, true, true, null, caches);
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(1, true, 3, 1);
jbcm0.init("test.war", webMetaData);
jbcm0.start();
assertTrue("Passivation is enabled", jbcm0.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm0.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm0.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm0.getPassivationMinIdleTime());
passDir = getPassivationDir(testCount, 2);
JBossCacheManager jbcm1 = SessionTestUtil.createManager("test" + testCount, 1, false, passDir, true, true, null, caches);
jbcm1.init("test.war", webMetaData);
jbcm1.start();
assertTrue("Passivation is enabled", jbcm1.isPassivationEnabled());
assertEquals("Correct max active count", 1, jbcm1.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm1.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm1.getPassivationMinIdleTime());
// Set up a session
createAndUseSession(jbcm0, "1", true, true);
assertEquals("Session count correct", 1, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm1.getLocalActiveSessionCount());
// Should fail to create a 2nd
createAndUseSession(jbcm1, "2", false, false);
// Sleep past maxIdleTime
SessionTestUtil.sleepThread(1100);
assertEquals("Passivated session count correct", 0, jbcm1.getPassivatedSessionCount());
createAndUseSession(jbcm1, "2", true, true);
assertEquals("Session count correct", 2, jbcm0.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm0.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm0.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm0.getExpiredSessionCount());
}
public void testStandaloneRedeploy() throws Exception
{
log.info("Enter testStandaloneRedeploy");
standaloneWarRedeployTest(false);
}
public void testStandaloneRestart() throws Exception
{
log.info("Enter testStandaloneRedeploy");
standaloneWarRedeployTest(true);
}
private void standaloneWarRedeployTest(boolean restartCache)
throws Exception
{
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm = SessionTestUtil.createManager("test" + testCount, 300, true, passDir, false, false, null, caches);
PojoCache cache = SessionTestUtil.getDistributedCacheManagerFactoryPojoCache();
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(2, true, 3, 1);
jbcm.init("test.war", webMetaData);
jbcm.start();
assertTrue("Passivation is enabled", jbcm.isPassivationEnabled());
assertEquals("Correct max active count", 2, jbcm.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm.getPassivationMinIdleTime());
// Set up a session
createAndUseSession(jbcm, "1", true, true);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
// And a 2nd
createAndUseSession(jbcm, "2", true, true);
assertEquals("Session count correct", 2, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 2, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 2, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm.getExpiredSessionCount());
// Sleep past minIdleTime
SessionTestUtil.sleepThread(1100);
assertEquals("Passivated session count correct", 0, jbcm.getPassivatedSessionCount());
createAndUseSession(jbcm, "3", true, true);
assertEquals("Session count correct", 2, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 2, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 3, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm.getExpiredSessionCount());
assertEquals("Passivated session count correct", 1, jbcm.getPassivatedSessionCount());
jbcm.stop();
if (restartCache)
{
cache.stop();
cache.destroy();
caches.remove(cache);
passDir = getPassivationDir(testCount, 1);
jbcm = SessionTestUtil.createManager("test" + testCount, 300, true, passDir, false, false, null, caches);
}
else
{
jbcm = SessionTestUtil.createManager("test" + testCount, 300, cache, null);
}
jbcm.init("test.war", webMetaData);
jbcm.start();
assertTrue("Passivation is enabled", jbcm.isPassivationEnabled());
assertEquals("Correct max active count", 2, jbcm.getMaxActiveAllowed());
assertEquals("Correct max idle time", 3, jbcm.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm.getPassivationMinIdleTime());
assertEquals("Session count correct", 2, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 0, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm.getExpiredSessionCount());
assertEquals("Passivated session count correct", 1, jbcm.getPassivatedSessionCount());
// Sleep past minIdleTime
SessionTestUtil.sleepThread(1100);
createAndUseSession(jbcm, "4", true, true);
}
public void testReplicatedRedeploy() throws Exception
{
log.info("Enter testReplicatedRedeploy");
replicatedWarRedeployTest(false, false, false, false);
}
public void testReplicatedRestart() throws Exception
{
log.info("Enter testReplicatedRestart");
replicatedWarRedeployTest(true, true, false, false);
}
private void replicatedWarRedeployTest(boolean restartCache,
boolean fullRestart,
boolean totalReplication,
boolean marshalling)
throws Exception
{
++testCount;
String passDir = getPassivationDir(testCount, 1);
JBossCacheManager jbcm = SessionTestUtil.createManager("test" + testCount, 300, false, passDir, totalReplication, marshalling, null, caches);
PojoCache cache = SessionTestUtil.getDistributedCacheManagerFactoryPojoCache();
JBossWebMetaData webMetaData = SessionTestUtil.createWebMetaData(2, true, 30, 1);
jbcm.init("test.war", webMetaData);
jbcm.start();
assertTrue("Passivation is enabled", jbcm.isPassivationEnabled());
assertEquals("Correct max active count", 2, jbcm.getMaxActiveAllowed());
assertEquals("Correct max idle time", 30, jbcm.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm.getPassivationMinIdleTime());
passDir = getPassivationDir(testCount, 2);
JBossCacheManager jbcm1 = SessionTestUtil.createManager("test" + testCount, 300, false, passDir, totalReplication, marshalling, null, caches);
PojoCache cache1 = SessionTestUtil.getDistributedCacheManagerFactoryPojoCache();
jbcm1.init("test.war", webMetaData);
jbcm1.start();
SessionTestUtil.blockUntilViewsReceived(new Cache[]{ cache.getCache(), cache1.getCache()}, 10000);
assertTrue("Passivation is enabled", jbcm1.isPassivationEnabled());
assertEquals("Correct max active count", 2, jbcm1.getMaxActiveAllowed());
assertEquals("Correct max idle time", 30, jbcm1.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm1.getPassivationMinIdleTime());
// Set up a session
createAndUseSession(jbcm, "1", true, true);
assertEquals("Session count correct", 1, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
assertEquals("Session count correct", 1, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm1.getLocalActiveSessionCount());
// Create a 2nd
createAndUseSession(jbcm1, "2", true, true);
assertEquals("Session count correct", 2, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm.getExpiredSessionCount());
assertEquals("Session count correct", 2, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm1.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm1.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm1.getExpiredSessionCount());
// Sleep past minIdleTime
SessionTestUtil.sleepThread(1100);
assertEquals("Passivated session count correct", 0, jbcm1.getPassivatedSessionCount());
createAndUseSession(jbcm1, "3", true, true);
// jbcm has 3 active because receipt of repl doesn't trigger passivation
assertEquals("Session count correct", 3, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 1, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 1, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm.getExpiredSessionCount());
assertEquals("Passivated session count correct", 0, jbcm.getPassivatedSessionCount());
// jbcm1 only has 2 active since it passivated one when it created 3rd
assertEquals("Session count correct", 2, jbcm1.getActiveSessionCount());
// Both active sessions are local, as the remote session is oldest so we passivate it first
assertEquals("Local session count correct", 2, jbcm1.getLocalActiveSessionCount());
assertEquals("Created session count correct", 2, jbcm1.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm1.getExpiredSessionCount());
assertEquals("Passivated session count correct", 1, jbcm1.getPassivatedSessionCount());
if (fullRestart)
{
jbcm1.stop();
cache1.stop();
cache1.destroy();
caches.remove(cache1);
// Give jbcm a bit of time to react to view change before
// stopping it
SessionTestUtil.sleepThread(100);
}
jbcm.stop();
if (restartCache)
{
cache.stop();
cache.destroy();
caches.remove(cache);
passDir = getPassivationDir(testCount, 1);
jbcm = SessionTestUtil.createManager("test" + testCount, 300, false, passDir, totalReplication, marshalling, null, caches);
}
else
{
jbcm = SessionTestUtil.createManager("test" + testCount, 300, cache, null);
}
jbcm.init("test.war", webMetaData);
jbcm.start();
assertTrue("Passivation is enabled", jbcm.isPassivationEnabled());
assertEquals("Correct max active count", 2, jbcm.getMaxActiveAllowed());
assertEquals("Correct max idle time", 30, jbcm.getPassivationMaxIdleTime());
assertEquals("Correct min idle time", 1, jbcm.getPassivationMinIdleTime());
int expected = (totalReplication && marshalling && fullRestart) ? 0 : 2;
assertEquals("Session count correct", expected, jbcm.getActiveSessionCount());
assertEquals("Local session count correct", 0, jbcm.getLocalActiveSessionCount());
assertEquals("Created session count correct", 0, jbcm.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm.getExpiredSessionCount());
expected = (totalReplication && !(marshalling && fullRestart)) ? 1 : 0;
assertEquals("Passivated session count correct", expected, jbcm.getPassivatedSessionCount());
if (!fullRestart)
{
assertEquals("Session count correct", 2, jbcm1.getActiveSessionCount());
assertEquals("Local session count correct", 2, jbcm1.getLocalActiveSessionCount());
assertEquals("Created session count correct", 2, jbcm1.getCreatedSessionCount());
assertEquals("Expired session count correct", 0, jbcm1.getExpiredSessionCount());
assertEquals("Passivated session count correct", 1, jbcm1.getPassivatedSessionCount());
}
// Sleep past minIdleTime
SessionTestUtil.sleepThread(1100);
createAndUseSession(jbcm, "4", true, true);
}
public void testTotalReplicatedRedeploy() throws Exception
{
log.info("Enter testTotalReplicatedRedeploy");
replicatedWarRedeployTest(false, false, true, false);
}
public void testTotalReplicatedRestart() throws Exception
{
log.info("Enter testTotalReplicatedRestart");
replicatedWarRedeployTest(true, true, true, false);
}
public void testMarshalledRedeploy() throws Exception
{
log.info("Enter testMarshalledRedeploy");
replicatedWarRedeployTest(false, false, false, true);
}
public void testMarshalledRestart() throws Exception
{
log.info("Enter testMarshalledRestart");
replicatedWarRedeployTest(true, true, false, true);
}
public void testTotalMarshalledRedeploy() throws Exception
{
log.info("Enter testTotalMarshalledRedeploy");
replicatedWarRedeployTest(false, false, true, true);
}
public void testTotalMarshalledRestart() throws Exception
{
log.info("Enter testTotalMarshalledRestart");
replicatedWarRedeployTest(true, true, true, true);
}
private Session createAndUseSession(JBossCacheManager jbcm, String id,
boolean canCreate, boolean access)
throws Exception
{
// Shift to Manager interface when we simulate Tomcat
Manager mgr = jbcm;
Session sess = mgr.findSession(id);
assertNull("session does not exist", sess);
try
{
sess = mgr.createSession(id);
if (!canCreate)
fail("Could not create session" + id);
}
catch (IllegalStateException ise)
{
if (canCreate)
{
log.error("Failed to create session " + id, ise);
fail("Could create session " + id);
}
}
if (access)
{
sess.access();
sess.getSession().setAttribute("test", "test");
jbcm.storeSession(sess);
sess.endAccess();
}
return sess;
}
private void useSession(JBossCacheManager jbcm, String id)
throws Exception
{
// Shift to Manager interface when we simulate Tomcat
Manager mgr = jbcm;
Session sess = mgr.findSession(id);
assertNotNull("session exists", sess);
sess.access();
sess.getSession().setAttribute("test", "test");
jbcm.storeSession(sess);
sess.endAccess();
}
private String getPassivationDir(long testCount, int cacheCount)
{
File dir = new File(tempDir);
dir = new File(dir, String.valueOf(testCount));
dir.mkdirs();
dir.deleteOnExit();
dir = new File(dir, String.valueOf(cacheCount));
dir.mkdirs();
dir.deleteOnExit();
return dir.getAbsolutePath();
}
}