Package org.jboss.test.cluster.defaultcfg.simpleweb.test

Source Code of org.jboss.test.cluster.defaultcfg.simpleweb.test.SessionCountUnitTestCase

/*
* 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: 85945 $
*/
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)
         {
            File dir = new File(tempDir);
            if (dir.exists())
               dir.delete();
            if (dir.exists())
               dir.deleteOnExit();
         }
      }
   }

   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, 5, true, passDir, false, false, null, caches);
      }
      else
      {
         jbcm = SessionTestUtil.createManager("test" + testCount, 5, 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);
      }
     
      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();
   }
}
TOP

Related Classes of org.jboss.test.cluster.defaultcfg.simpleweb.test.SessionCountUnitTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.