You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by le...@apache.org on 2002/01/24 03:56:21 UTC

cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/pool/test ClassInstanceObjectFactory.java PoolableTestObject.java ResourceLimitingPoolMultithreadMaxStrictBlockTestCase.java ResourceLimitingPoolMultithreadMaxStrictTestCase.java ResourceLimitingPoolMultithreadMaxTestCase.java ResourceLimitingPoolMultithreadTestCase.java ResourceLimitingPoolTestCase.java

leif        02/01/23 18:56:21

  Added:       src/scratchpad/org/apache/avalon/excalibur/pool/test
                        ClassInstanceObjectFactory.java
                        PoolableTestObject.java
                        ResourceLimitingPoolMultithreadMaxStrictBlockTestCase.java
                        ResourceLimitingPoolMultithreadMaxStrictTestCase.java
                        ResourceLimitingPoolMultithreadMaxTestCase.java
                        ResourceLimitingPoolMultithreadTestCase.java
                        ResourceLimitingPoolTestCase.java
  Log:
  Add tests for ResourceLimiting Pools.
  
  Revision  Changes    Path
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/pool/test/ClassInstanceObjectFactory.java
  
  Index: ClassInstanceObjectFactory.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.avalon.excalibur.pool.test;
  
  import java.util.HashMap;
  
  import org.apache.avalon.excalibur.pool.ObjectFactory;
  import org.apache.avalon.framework.logger.Logger;
  
  /**
   * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/01/24 02:56:21 $
   * @since 4.0
   */
  public class ClassInstanceObjectFactory
      implements ObjectFactory
  {
      private HashMap m_instances = new HashMap();
      private Logger m_logger;
      private Class m_clazz;
      private int m_id;
      
      /*---------------------------------------------------------------
       * Constructors
       *-------------------------------------------------------------*/
      /**
       * Creates a reproducable log of activity in the provided StringBuffer
       */
      public ClassInstanceObjectFactory( Class clazz, Logger logger )
      {
          m_clazz = clazz;
          m_logger = logger;
          m_id = 1;
      }
      
      /*---------------------------------------------------------------
       * ObjectFactory Methods
       *-------------------------------------------------------------*/
      public Object newInstance() throws Exception
      {
          Object object = m_clazz.newInstance();
          Integer id = new Integer( m_id++ );
          
          m_instances.put( object, id );
          m_logger.debug( "ClassInstanceObjectFactory.newInstance()  id:" + id );
          
          return object;
      }
      
      public Class getCreatedClass()
      {
          return m_clazz;
      }
      
      public void decommission( Object object ) throws Exception
      {
          Integer id = (Integer)m_instances.remove( object );
          m_logger.debug( "ClassInstanceObjectFactory.decommission(a "
              + object.getClass().getName() + ")  id:" + id );
      }
  }
  
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/pool/test/PoolableTestObject.java
  
  Index: PoolableTestObject.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.avalon.excalibur.pool.test;
  
  import org.apache.avalon.excalibur.pool.Poolable;
  
  /**
   * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/01/24 02:56:21 $
   * @since 4.0
   */
  public class PoolableTestObject implements Poolable
  {
  }
  
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/pool/test/ResourceLimitingPoolMultithreadMaxStrictBlockTestCase.java
  
  Index: ResourceLimitingPoolMultithreadMaxStrictBlockTestCase.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.avalon.excalibur.pool.test;
  
  import com.clarkware.junitperf.ConstantTimer;
  import com.clarkware.junitperf.LoadTest;
  import com.clarkware.junitperf.TimedTest;
  import com.clarkware.junitperf.Timer;
  
  import junit.extensions.TestSetup;
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  import org.apache.avalon.excalibur.logger.BufferedLogger;
  import org.apache.avalon.excalibur.pool.Poolable;
  import org.apache.avalon.excalibur.pool.ResourceLimitingPool;
  
  /**
   * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/01/24 02:56:21 $
   * @since 4.0
   */
  public final class ResourceLimitingPoolMultithreadMaxStrictBlockTestCase extends TestCase
  {
      private static BufferedLogger m_logger;
      private static ClassInstanceObjectFactory m_factory;
      private static ResourceLimitingPool m_pool;
      
      /*---------------------------------------------------------------
       * Constructors
       *-------------------------------------------------------------*/
      public ResourceLimitingPoolMultithreadMaxStrictBlockTestCase()
      {
          this( "ResourceLimitingPool Multithreaded Max Size Strict Blocking Test Case" );
      }
  
      public ResourceLimitingPoolMultithreadMaxStrictBlockTestCase( final String name )
      {
          super( name );
      }
      
      /*---------------------------------------------------------------
       * Suite
       *-------------------------------------------------------------*/
      public static Test suite()
      {
          TestSuite suite = new TestSuite();
          
          Timer timer = new ConstantTimer( 100 );
          int maxUsers = 10;
          int iterations = 10;
          long maxElapsedTime = 20000;
          
          Test testCase = new ResourceLimitingPoolMultithreadMaxStrictBlockTestCase( "testGetPut" );
          Test loadTest = new LoadTest( testCase, maxUsers, iterations, timer );
          Test timedTest = new TimedTest( loadTest, maxElapsedTime );
          suite.addTest( timedTest );
          
          TestSetup wrapper= new TestSetup(suite)
          {
              public void setUp()
              {
                  oneTimeSetUp();
              }
              public void tearDown() throws Exception
              {
                  oneTimeTearDown();
              }
          }; 
          
          return wrapper;
      }
      
      public static void oneTimeSetUp()
      {
          m_logger = new BufferedLogger();
          m_factory = new ClassInstanceObjectFactory( PoolableTestObject.class, m_logger );
          m_pool = new ResourceLimitingPool( m_factory, 3, true, true, 0, 0 );
          
          m_pool.enableLogging( m_logger );
      }
      
      public static void oneTimeTearDown() throws Exception
      {
          // The timing of this test makes it so the pool should grow to 4 elements
          assertEquals( "1) Pool Ready Size", 3, m_pool.getReadySize() );
          assertEquals( "1) Pool Size", 3, m_pool.getSize() );
          
          // Make sure that each of the objects are uniqe by checking them all back out.
          Poolable p1 = m_pool.get();
          Poolable p2 = m_pool.get();
          Poolable p3 = m_pool.get();
          
          assertEquals( "2) Pool Ready Size", 0, m_pool.getReadySize() );
          assertEquals( "2) Pool Size", 3, m_pool.getSize() );
          
          assertTrue( "p1 != p2", p1 != p2 );
          assertTrue( "p1 != p3", p1 != p3 );
          assertTrue( "p2 != p3", p2 != p3 );
          
          m_pool.put( p1 );
          m_pool.put( p2 );
          m_pool.put( p3 );
          
          assertEquals( "3) Pool Ready Size", 3, m_pool.getReadySize() );
          assertEquals( "3) Pool Size", 3, m_pool.getSize() );
          
          m_pool.dispose();
          
          assertEquals( "4) Pool Ready Size", 0, m_pool.getReadySize() );
          assertEquals( "4) Pool Size", 0, m_pool.getSize() );
      }
      
      /*---------------------------------------------------------------
       * TestCases
       *-------------------------------------------------------------*/
      public void testGetPut() throws Exception
      {
          Poolable p = m_pool.get();
          
          // We can't check the exact pool size, but make sure that it never gets over 3
          assertTrue( "Pool size <= 3", m_pool.getSize() <= 3 );
          
          try
          {
              Thread.sleep( 33 );
          }
          catch (InterruptedException e) {}
          m_pool.put( p );
      }
  }
  
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/pool/test/ResourceLimitingPoolMultithreadMaxStrictTestCase.java
  
  Index: ResourceLimitingPoolMultithreadMaxStrictTestCase.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.avalon.excalibur.pool.test;
  
  import com.clarkware.junitperf.ConstantTimer;
  import com.clarkware.junitperf.LoadTest;
  import com.clarkware.junitperf.TimedTest;
  import com.clarkware.junitperf.Timer;
  
  import junit.extensions.TestSetup;
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  import org.apache.avalon.excalibur.logger.BufferedLogger;
  import org.apache.avalon.excalibur.pool.Poolable;
  import org.apache.avalon.excalibur.pool.ResourceLimitingPool;
  
  /**
   * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/01/24 02:56:21 $
   * @since 4.0
   */
  public final class ResourceLimitingPoolMultithreadMaxStrictTestCase extends TestCase
  {
      private static BufferedLogger m_logger;
      private static ClassInstanceObjectFactory m_factory;
      private static ResourceLimitingPool m_pool;
      
      /*---------------------------------------------------------------
       * Constructors
       *-------------------------------------------------------------*/
      public ResourceLimitingPoolMultithreadMaxStrictTestCase()
      {
          this( "ResourceLimitingPool Multithreaded Max Size Strict Test Case" );
      }
  
      public ResourceLimitingPoolMultithreadMaxStrictTestCase( final String name )
      {
          super( name );
      }
      
      /*---------------------------------------------------------------
       * Suite
       *-------------------------------------------------------------*/
      public static Test suite()
      {
          TestSuite suite = new TestSuite();
          
          Timer timer = new ConstantTimer( 100 );
          int maxUsers = 50;
          int iterations = 10;
          long maxElapsedTime = 20000;
          
          Test testCase = new ResourceLimitingPoolMultithreadMaxStrictTestCase( "testGetPut" );
          Test loadTest = new LoadTest( testCase, maxUsers, iterations, timer );
          Test timedTest = new TimedTest( loadTest, maxElapsedTime );
          suite.addTest( timedTest );
          
          TestSetup wrapper= new TestSetup( suite )
          {
              public void setUp()
              {
                  oneTimeSetUp();
              }
              public void tearDown() throws Exception
              {
                  oneTimeTearDown();
              }
          }; 
          
          return wrapper;
      }
      
      public static void oneTimeSetUp()
      {
          m_logger = new BufferedLogger();
          m_factory = new ClassInstanceObjectFactory( PoolableTestObject.class, m_logger );
          m_pool = new ResourceLimitingPool( m_factory, 3, true, false, 0, 0 );
          
          m_pool.enableLogging( m_logger );
      }
      
      public static void oneTimeTearDown() throws Exception
      {
          // The timing of this test makes it so the pool should grow to 4 elements
          assertEquals( "1) Pool Ready Size", 3, m_pool.getReadySize() );
          assertEquals( "1) Pool Size", 3, m_pool.getSize() );
          
          // Make sure that each of the objects are uniqe by checking them all back out.
          Poolable p1 = m_pool.get();
          Poolable p2 = m_pool.get();
          Poolable p3 = m_pool.get();
          
          assertEquals( "2) Pool Ready Size", 0, m_pool.getReadySize() );
          assertEquals( "2) Pool Size", 3, m_pool.getSize() );
          
          assertTrue( "p1 != p2", p1 != p2 );
          assertTrue( "p1 != p3", p1 != p3 );
          assertTrue( "p2 != p3", p2 != p3 );
          
          m_pool.put( p1 );
          m_pool.put( p2 );
          m_pool.put( p3 );
          
          assertEquals( "3) Pool Ready Size", 3, m_pool.getReadySize() );
          assertEquals( "3) Pool Size", 3, m_pool.getSize() );
          
          m_pool.dispose();
          
          assertEquals( "4) Pool Ready Size", 0, m_pool.getReadySize() );
          assertEquals( "4) Pool Size", 0, m_pool.getSize() );
      }
      
      /*---------------------------------------------------------------
       * TestCases
       *-------------------------------------------------------------*/
      public void testGetPut() throws Exception
      {
          Poolable p;
          try
          {
              p = m_pool.get();
          }
          catch ( Exception e )
          {
              // We will sometimes fail to get an object
              assertEquals( "Exception calling get()", 
                  "Could not create enough Components to service your request.", 
                  e.getMessage() );
              return;
          }
          
          // We can't check the exact pool size, but make sure that it never gets over 3
          assertTrue( "Pool size <= 3", m_pool.getSize() <= 3 );
          
          try
          {
              Thread.sleep( 33 );
          } catch ( InterruptedException e ) {}
          m_pool.put( p );
      }
  }
  
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/pool/test/ResourceLimitingPoolMultithreadMaxTestCase.java
  
  Index: ResourceLimitingPoolMultithreadMaxTestCase.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.avalon.excalibur.pool.test;
  
  import com.clarkware.junitperf.ConstantTimer;
  import com.clarkware.junitperf.LoadTest;
  import com.clarkware.junitperf.TimedTest;
  import com.clarkware.junitperf.Timer;
  
  import junit.extensions.TestSetup;
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  import org.apache.avalon.excalibur.logger.BufferedLogger;
  import org.apache.avalon.excalibur.pool.Poolable;
  import org.apache.avalon.excalibur.pool.ResourceLimitingPool;
  
  /**
   * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/01/24 02:56:21 $
   * @since 4.0
   */
  public final class ResourceLimitingPoolMultithreadMaxTestCase
      extends TestCase
  {
      private static BufferedLogger m_logger;
      private static ClassInstanceObjectFactory m_factory;
      private static ResourceLimitingPool m_pool;
      
      /*---------------------------------------------------------------
       * Constructors
       *-------------------------------------------------------------*/
      public ResourceLimitingPoolMultithreadMaxTestCase()
      {
          this( "ResourceLimitingPool Multithreaded Max Size Test Case" );
      }
  
      public ResourceLimitingPoolMultithreadMaxTestCase( final String name )
      {
          super( name );
      }
      
      /*---------------------------------------------------------------
       * Suite
       *-------------------------------------------------------------*/
      public static Test suite()
      {
          TestSuite suite = new TestSuite();
          
          Timer timer = new ConstantTimer( 100 );
          int maxUsers = 50;
          int iterations = 10;
          long maxElapsedTime = 20000;
          
          Test testCase = new ResourceLimitingPoolMultithreadMaxTestCase( "testGetPut" );
          Test loadTest = new LoadTest( testCase, maxUsers, iterations, timer );
          Test timedTest = new TimedTest( loadTest, maxElapsedTime );
          suite.addTest( timedTest );
          
          TestSetup wrapper= new TestSetup( suite )
          {
              public void setUp()
              {
                  oneTimeSetUp();
              }
              public void tearDown() throws Exception
              {
                  oneTimeTearDown();
              }
          }; 
          
          return wrapper;
      }
      
      public static void oneTimeSetUp()
      {
          m_logger = new BufferedLogger();
          m_factory = new ClassInstanceObjectFactory( PoolableTestObject.class, m_logger );
          m_pool = new ResourceLimitingPool( m_factory, 3, false, false, 0, 0 );
          
          m_pool.enableLogging( m_logger );
      }
      
      public static void oneTimeTearDown() throws Exception
      {
          // The timing of this test makes it so the pool should grow to 4 elements
          assertEquals( "1) Pool Ready Size", 3, m_pool.getReadySize() );
          assertEquals( "1) Pool Size", 3, m_pool.getSize() );
          
          // Make sure that each of the objects are uniqe by checking them all back out.
          Poolable p1 = m_pool.get();
          Poolable p2 = m_pool.get();
          Poolable p3 = m_pool.get();
          
          assertEquals( "2) Pool Ready Size", 0, m_pool.getReadySize() );
          assertEquals( "2) Pool Size", 3, m_pool.getSize() );
          
          assertTrue( "p1 != p2", p1 != p2 );
          assertTrue( "p1 != p3", p1 != p3 );
          assertTrue( "p2 != p3", p2 != p3 );
          
          m_pool.put( p1 );
          m_pool.put( p2 );
          m_pool.put( p3 );
          
          assertEquals( "3) Pool Ready Size", 3, m_pool.getReadySize() );
          assertEquals( "3) Pool Size", 3, m_pool.getSize() );
          
          m_pool.dispose();
          
          assertEquals( "4) Pool Ready Size", 0, m_pool.getReadySize() );
          assertEquals( "4) Pool Size", 0, m_pool.getSize() );
      }
      
      /*---------------------------------------------------------------
       * TestCases
       *-------------------------------------------------------------*/
      public void testGetPut() throws Exception
      {
          Poolable p = m_pool.get();
          
          try
          {
              Thread.sleep(33);
          } catch ( InterruptedException e ) {}
          m_pool.put( p );
      }
  }
  
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/pool/test/ResourceLimitingPoolMultithreadTestCase.java
  
  Index: ResourceLimitingPoolMultithreadTestCase.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.avalon.excalibur.pool.test;
  
  import com.clarkware.junitperf.ConstantTimer;
  import com.clarkware.junitperf.LoadTest;
  import com.clarkware.junitperf.TimedTest;
  import com.clarkware.junitperf.Timer;
  
  import junit.extensions.TestSetup;
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  import org.apache.avalon.excalibur.logger.BufferedLogger;
  import org.apache.avalon.excalibur.pool.Poolable;
  import org.apache.avalon.excalibur.pool.ResourceLimitingPool;
  
  /**
   * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/01/24 02:56:21 $
   * @since 4.0
   */
  public final class ResourceLimitingPoolMultithreadTestCase
      extends TestCase
  {
      private static BufferedLogger m_logger;
      private static ClassInstanceObjectFactory m_factory;
      private static ResourceLimitingPool m_pool;
      
      /*---------------------------------------------------------------
       * Constructors
       *-------------------------------------------------------------*/
      public ResourceLimitingPoolMultithreadTestCase()
      {
          this( "ResourceLimitingPool Multithreaded Test Case" );
      }
  
      public ResourceLimitingPoolMultithreadTestCase( final String name )
      {
          super( name );
      }
      
      /*---------------------------------------------------------------
       * Suite
       *-------------------------------------------------------------*/
      public static Test suite()
      {
          TestSuite suite = new TestSuite();
          
          Timer timer = new ConstantTimer( 100 );
          int maxUsers = 10;
          int iterations = 10;
          long maxElapsedTime = 20000;
          
          Test testCase = new ResourceLimitingPoolMultithreadTestCase( "testGetPut" );
          Test loadTest = new LoadTest( testCase, maxUsers, iterations, timer );
          Test timedTest = new TimedTest( loadTest, maxElapsedTime );
          suite.addTest( timedTest );
          
          TestSetup wrapper= new TestSetup( suite )
          {
              public void setUp()
              {
                  oneTimeSetUp();
              }
              public void tearDown() throws Exception
              {
                  oneTimeTearDown();
              }
          }; 
          
          return wrapper;
      }
      
      public static void oneTimeSetUp()
      {
          m_logger = new BufferedLogger();
          m_factory = new ClassInstanceObjectFactory( PoolableTestObject.class, m_logger );
          m_pool = new ResourceLimitingPool( m_factory, 0, false, false, 0, 0 );
          
          m_pool.enableLogging( m_logger );
      }
      
      public static void oneTimeTearDown() throws Exception
      {
          // The timing of this test makes it so the pool should grow to 4 elements
          assertEquals( "1) Pool Ready Size", 4, m_pool.getReadySize() );
          assertEquals( "1) Pool Size", 4, m_pool.getSize() );
          
          // Make sure that each of the objects are uniqe by checking them all back out.
          Poolable p1 = m_pool.get();
          Poolable p2 = m_pool.get();
          Poolable p3 = m_pool.get();
          Poolable p4 = m_pool.get();
          
          assertEquals( "2) Pool Ready Size", 0, m_pool.getReadySize() );
          assertEquals( "2) Pool Size", 4, m_pool.getSize() );
          
          assertTrue( "p1 != p2", p1 != p2 );
          assertTrue( "p1 != p3", p1 != p3 );
          assertTrue( "p1 != p4", p1 != p4 );
          assertTrue( "p2 != p3", p2 != p3 );
          assertTrue( "p2 != p4", p2 != p4 );
          assertTrue( "p3 != p4", p3 != p4 );
          
          m_pool.put( p1 );
          m_pool.put( p2 );
          m_pool.put( p3 );
          m_pool.put( p4 );
          
          assertEquals( "3) Pool Ready Size", 4, m_pool.getReadySize() );
          assertEquals( "3) Pool Size", 4, m_pool.getSize() );
          
          m_pool.dispose();
          
          assertEquals( "4) Pool Ready Size", 0, m_pool.getReadySize() );
          assertEquals( "4) Pool Size", 0, m_pool.getSize() );
      }
      
      /*---------------------------------------------------------------
       * TestCases
       *-------------------------------------------------------------*/
      public void testGetPut() throws Exception
      {
          Poolable p = m_pool.get();
          try
          {
              Thread.sleep(33);
          }
          catch ( InterruptedException e ) {}
          m_pool.put( p );
      }
  }
  
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/pool/test/ResourceLimitingPoolTestCase.java
  
  Index: ResourceLimitingPoolTestCase.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.avalon.excalibur.pool.test;
  
  import junit.framework.TestCase;
  
  import org.apache.avalon.excalibur.logger.BufferedLogger;
  import org.apache.avalon.excalibur.pool.Poolable;
  import org.apache.avalon.excalibur.pool.ResourceLimitingPool;
  
  /**
   * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/01/24 02:56:21 $
   * @since 4.0
   */
  public final class ResourceLimitingPoolTestCase extends TestCase
  {
      /*---------------------------------------------------------------
       * Constructors
       *-------------------------------------------------------------*/
      public ResourceLimitingPoolTestCase()
      {
          this( "ResourceLimitingPool Test Case" );
      }
  
      public ResourceLimitingPoolTestCase( final String name )
      {
          super( name );
      }
      
      /*---------------------------------------------------------------
       * TestCases
       *-------------------------------------------------------------*/
      public void testCreateDestroy()
      {
          BufferedLogger logger = new BufferedLogger();
          ClassInstanceObjectFactory factory = 
              new ClassInstanceObjectFactory( PoolableTestObject.class, logger );
          ResourceLimitingPool pool = new ResourceLimitingPool( factory, 0, false, false, 0, 0 );
          
          pool.enableLogging( logger );
          pool.dispose();
          
          // Make sure the logger output check out.
          assertEquals(
              logger.toString(),
              ""
              );
      }
      
      public void testSingleGetPut() throws Exception
      {
          BufferedLogger logger = new BufferedLogger();
          ClassInstanceObjectFactory factory = 
              new ClassInstanceObjectFactory( PoolableTestObject.class, logger );
          ResourceLimitingPool pool = new ResourceLimitingPool( factory, 0, false, false, 0, 0 );
          
          pool.enableLogging( logger );
          
          assertEquals( "1) Pool Ready Size", 0, pool.getReadySize() );
          assertEquals( "1) Pool Size", 0, pool.getSize() );
          
          Poolable p = pool.get();
          
          assertEquals( "2) Pool Ready Size", 0, pool.getReadySize() );
          assertEquals( "2) Pool Size", 1, pool.getSize() );
          
          pool.put(p);
          
          assertEquals( "3) Pool Ready Size", 1, pool.getReadySize() );
          assertEquals( "3) Pool Size", 1, pool.getSize() );
          
          pool.dispose();
          
          // Make sure the logger output check out.
          assertEquals( "Logger output",
              "DEBUG - ClassInstanceObjectFactory.newInstance()  id:1\n" +
              "DEBUG - Created a new org.apache.avalon.excalibur.pool.test.PoolableTestObject from the object factory.\n" +
              "DEBUG - Got a org.apache.avalon.excalibur.pool.test.PoolableTestObject from the pool.\n" +
              "DEBUG - Put a org.apache.avalon.excalibur.pool.test.PoolableTestObject back into the pool.\n" +
              "DEBUG - ClassInstanceObjectFactory.decommission(a org.apache.avalon.excalibur.pool.test.PoolableTestObject)  id:1\n",
              logger.toString()
              );
      }
      
      public void testSingleGetPutPoolCheck() throws Exception
      {
          BufferedLogger logger = new BufferedLogger();
          ClassInstanceObjectFactory factory = 
              new ClassInstanceObjectFactory( PoolableTestObject.class, logger );
          ResourceLimitingPool pool = new ResourceLimitingPool( factory, 0, false, false, 0, 0 );
          
          pool.enableLogging( logger );
          
          assertEquals( "1) Pool Ready Size", 0, pool.getReadySize() );
          assertEquals( "1) Pool Size", 0, pool.getSize() );
          
          Poolable p1 = pool.get();
          
          assertEquals( "2) Pool Ready Size", 0, pool.getReadySize() );
          assertEquals( "2) Pool Size", 1, pool.getSize() );
          
          pool.put( p1 );
          
          assertEquals( "3) Pool Ready Size", 1, pool.getReadySize() );
          assertEquals( "3) Pool Size", 1, pool.getSize() );
          
          Poolable p2 = pool.get();
          
          assertEquals( "4) Pool Ready Size", 0, pool.getReadySize() );
          assertEquals( "4) Pool Size", 1, pool.getSize() );
          
          assertEquals( "Pooled Object reuse check", p1, p2 );
          
          pool.put( p2 );
          
          assertEquals( "5) Pool Ready Size", 1, pool.getReadySize() );
          assertEquals( "5) Pool Size", 1, pool.getSize() );
          
          pool.dispose();
          
          // Make sure the logger output check out.
          assertEquals( "Logger output",
              "DEBUG - ClassInstanceObjectFactory.newInstance()  id:1\n" +
              "DEBUG - Created a new org.apache.avalon.excalibur.pool.test.PoolableTestObject from the object factory.\n" +
              "DEBUG - Got a org.apache.avalon.excalibur.pool.test.PoolableTestObject from the pool.\n" +
              "DEBUG - Put a org.apache.avalon.excalibur.pool.test.PoolableTestObject back into the pool.\n" +
              "DEBUG - Got a org.apache.avalon.excalibur.pool.test.PoolableTestObject from the pool.\n" +
              "DEBUG - Put a org.apache.avalon.excalibur.pool.test.PoolableTestObject back into the pool.\n" +
              "DEBUG - ClassInstanceObjectFactory.decommission(a org.apache.avalon.excalibur.pool.test.PoolableTestObject)  id:1\n",
              logger.toString()
              );
      }
      
      public void testMultipleGetPut() throws Exception
      {
          BufferedLogger logger = new BufferedLogger();
          ClassInstanceObjectFactory factory = 
              new ClassInstanceObjectFactory( PoolableTestObject.class, logger );
          ResourceLimitingPool pool = new ResourceLimitingPool( factory, 0, false, false, 0, 0 );
          
          pool.enableLogging( logger );
          
          assertEquals( "1) Pool Ready Size", 0, pool.getReadySize() );
          assertEquals( "1) Pool Size", 0, pool.getSize() );
          
          Poolable p1 = pool.get();
          
          assertEquals( "2) Pool Ready Size", 0, pool.getReadySize() );
          assertEquals( "2) Pool Size", 1, pool.getSize() );
          
          Poolable p2 = pool.get();
          
          assertEquals( "3) Pool Ready Size", 0, pool.getReadySize() );
          assertEquals( "3) Pool Size", 2, pool.getSize() );
          
          pool.put( p1 );
          
          assertEquals( "4) Pool Ready Size", 1, pool.getReadySize() );
          assertEquals( "4) Pool Size", 2, pool.getSize() );
          
          pool.put( p2 );
          
          assertEquals( "5) Pool Ready Size", 2, pool.getReadySize() );
          assertEquals( "5) Pool Size", 2, pool.getSize() );
          
          pool.dispose();
          
          // Make sure the logger output check out.
          assertEquals( "Logger output",
              "DEBUG - ClassInstanceObjectFactory.newInstance()  id:1\n" +
              "DEBUG - Created a new org.apache.avalon.excalibur.pool.test.PoolableTestObject from the object factory.\n" +
              "DEBUG - Got a org.apache.avalon.excalibur.pool.test.PoolableTestObject from the pool.\n" +
              "DEBUG - ClassInstanceObjectFactory.newInstance()  id:2\n" +
              "DEBUG - Created a new org.apache.avalon.excalibur.pool.test.PoolableTestObject from the object factory.\n" +
              "DEBUG - Got a org.apache.avalon.excalibur.pool.test.PoolableTestObject from the pool.\n" +
              "DEBUG - Put a org.apache.avalon.excalibur.pool.test.PoolableTestObject back into the pool.\n" +
              "DEBUG - Put a org.apache.avalon.excalibur.pool.test.PoolableTestObject back into the pool.\n" +
              "DEBUG - ClassInstanceObjectFactory.decommission(a org.apache.avalon.excalibur.pool.test.PoolableTestObject)  id:1\n" +
              "DEBUG - ClassInstanceObjectFactory.decommission(a org.apache.avalon.excalibur.pool.test.PoolableTestObject)  id:2\n",
              logger.toString()
              );
      }
  }
  
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>