You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@apache.org on 2004/11/11 21:38:09 UTC

svn commit: rev 57471 - in cocoon/branches/BRANCH_2_1_X: . src/test/org/apache/cocoon/components/thread tools/lib

Author: giacomo
Date: Thu Nov 11 12:38:09 2004
New Revision: 57471

Added:
   cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/components/thread/
   cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/components/thread/DefaultRunnableManagerTestCase.java
   cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/components/thread/DefaultThreadFactoryTestCase.java
   cocoon/branches/BRANCH_2_1_X/tools/lib/easymock-1.1.jar   (contents, props changed)
Modified:
   cocoon/branches/BRANCH_2_1_X/gump.xml
Log:
added test cases for the thread package

Modified: cocoon/branches/BRANCH_2_1_X/gump.xml
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/gump.xml	(original)
+++ cocoon/branches/BRANCH_2_1_X/gump.xml	Thu Nov 11 12:38:09 2004
@@ -82,6 +82,7 @@
     <depend project="jing"/>
     <depend project="pizza"/>
     <depend project="junit"/>
+    <depend project="easymock"/>
     <depend project="eclipse-jtd"/>
     <depend project="concurrent"/>
 

Added: cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/components/thread/DefaultRunnableManagerTestCase.java
==============================================================================
--- (empty file)
+++ cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/components/thread/DefaultRunnableManagerTestCase.java	Thu Nov 11 12:38:09 2004
@@ -0,0 +1,1297 @@
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.components.thread;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.Logger;
+import org.easymock.MockControl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+
+/**
+ * The $classType$ class ...
+ *
+ * @author <a href="mailto:giacomo.at.apache.org">Giacomo Pati </a>
+ * @version $Id$
+ */
+public class DefaultRunnableManagerTestCase
+    extends TestCase
+{
+    //~ Instance fields --------------------------------------------------------
+
+    /** DOCUMENT ME! */
+    private List m_controls;
+
+    //~ Constructors -----------------------------------------------------------
+
+    /**
+     * Constructor for DefaultRunnableManagerTestCase.
+     *
+     * @param name
+     */
+    public DefaultRunnableManagerTestCase( String name )
+    {
+        super( name );
+    }
+
+    //~ Methods ----------------------------------------------------------------
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @throws Exception DOCUMENT ME!
+     */
+    public final void testConfigureDaemonPool(  )
+        throws Exception
+    {
+        final MockControl threadPoolConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration threadPoolConfig =
+            (Configuration)threadPoolConfigControl.getMock(  );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "name" ),
+                                                 createValueConfigMock( "daemon" ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "queue-size" ),
+                                                 createIntegerConfigMock( 2 * DefaultRunnableManager.DEFAULT_QUEUE_SIZE,
+                                                                          DefaultRunnableManager.DEFAULT_QUEUE_SIZE ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "max-pool-size" ),
+                                                 createIntegerConfigMock( 2 * DefaultRunnableManager.DEFAULT_MAX_POOL_SIZE,
+                                                                          DefaultRunnableManager.DEFAULT_MAX_POOL_SIZE ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "min-pool-size" ),
+                                                 createIntegerConfigMock( DefaultRunnableManager.DEFAULT_MIN_POOL_SIZE / 3,
+                                                                          DefaultRunnableManager.DEFAULT_MIN_POOL_SIZE ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "priority" ),
+                                                 createValueConfigMock( "LOW",
+                                                                        DefaultRunnableManager.DEFAULT_THREAD_PRIORITY ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "daemon" ),
+                                                 createBooleanConfigMock( false,
+                                                                          DefaultRunnableManager.DEFAULT_DAEMON_MODE ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "keep-alive-time-ms" ),
+                                                 createLongConfigMock( DefaultRunnableManager.DEFAULT_KEEP_ALIVE_TIME / 2,
+                                                                       DefaultRunnableManager.DEFAULT_KEEP_ALIVE_TIME ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "block-policy" ),
+                                                 createValueConfigMock( "WAIT",
+                                                                        DefaultThreadPool.POLICY_DEFAULT ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "shutdown-graceful" ),
+                                                 createBooleanConfigMock( true,
+                                                                          DefaultRunnableManager.DEFAULT_SHUTDOWN_GRACEFUL ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "shutdown-wait-time-ms" ),
+                                                 createIntegerConfigMock( DefaultRunnableManager.DEFAULT_SHUTDOWN_WAIT_TIME / 2,
+                                                                          DefaultRunnableManager.DEFAULT_SHUTDOWN_WAIT_TIME ) );
+        threadPoolConfigControl.replay(  );
+
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration []
+                                                                     {
+                                                                         threadPoolConfig
+                                                                     } ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerDaemonControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDaemon =
+            (Logger)childLoggerDaemonControl.getMock(  );
+        childLoggerDaemonControl.replay(  );
+
+        final MockControl childLoggerDefaultControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDefault =
+            (Logger)childLoggerDefaultControl.getMock(  );
+        childLoggerDefaultControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        logger.warn( "Unknown thread priority \"LOW\". Set to \"NORM\"." );
+        loggerControl.expectAndReturn( logger.getChildLogger( "daemon" ),
+                                       childLoggerDaemon );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"daemon\" created with maximum queue-size=2147483647,max-pool-size=10,min-pool-size=1,priority=0,isDaemon=false,keep-alive-time-ms=30000,block-policy=\"WAIT\",shutdown-wait-time-ms=0" );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLoggerDefault );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool daemon" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool daemon disposed" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        runnableManager.dispose(  );
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public final void testConfigureMinimal(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerDefaultControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDefault =
+            (Logger)childLoggerDefaultControl.getMock(  );
+        childLoggerDefaultControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLoggerDefault );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        runnableManager.dispose(  );
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @throws Exception DOCUMENT ME!
+     */
+    public final void testConfigureMyPool(  )
+        throws Exception
+    {
+        final MockControl threadPoolConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration threadPoolConfig =
+            (Configuration)threadPoolConfigControl.getMock(  );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "name" ),
+                                                 createValueConfigMock( "mypool" ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "queue-size" ),
+                                                 createIntegerConfigMock( 2 * DefaultRunnableManager.DEFAULT_QUEUE_SIZE,
+                                                                          DefaultRunnableManager.DEFAULT_QUEUE_SIZE ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "max-pool-size" ),
+                                                 createIntegerConfigMock( 2 * DefaultRunnableManager.DEFAULT_MAX_POOL_SIZE,
+                                                                          DefaultRunnableManager.DEFAULT_MAX_POOL_SIZE ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "min-pool-size" ),
+                                                 createIntegerConfigMock( DefaultRunnableManager.DEFAULT_MIN_POOL_SIZE / 3,
+                                                                          DefaultRunnableManager.DEFAULT_MIN_POOL_SIZE ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "priority" ),
+                                                 createValueConfigMock( "MIN",
+                                                                        DefaultRunnableManager.DEFAULT_THREAD_PRIORITY ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "daemon" ),
+                                                 createBooleanConfigMock( false,
+                                                                          DefaultRunnableManager.DEFAULT_DAEMON_MODE ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "keep-alive-time-ms" ),
+                                                 createLongConfigMock( DefaultRunnableManager.DEFAULT_KEEP_ALIVE_TIME / 2,
+                                                                       DefaultRunnableManager.DEFAULT_KEEP_ALIVE_TIME ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "block-policy" ),
+                                                 createValueConfigMock( "WAIT",
+                                                                        DefaultThreadPool.POLICY_DEFAULT ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "shutdown-graceful" ),
+                                                 createBooleanConfigMock( true,
+                                                                          DefaultRunnableManager.DEFAULT_SHUTDOWN_GRACEFUL ) );
+        threadPoolConfigControl.expectAndReturn( threadPoolConfig.getChild( "shutdown-wait-time-ms" ),
+                                                 createIntegerConfigMock( DefaultRunnableManager.DEFAULT_SHUTDOWN_WAIT_TIME / 2,
+                                                                          DefaultRunnableManager.DEFAULT_SHUTDOWN_WAIT_TIME ) );
+        threadPoolConfigControl.replay(  );
+
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration []
+                                                                     {
+                                                                         threadPoolConfig
+                                                                     } ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerDefaultControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDefault =
+            (Logger)childLoggerDefaultControl.getMock(  );
+        childLoggerDefaultControl.replay(  );
+
+        final MockControl childLoggerMyPoolControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerMyPool =
+            (Logger)childLoggerMyPoolControl.getMock(  );
+        childLoggerMyPoolControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "mypool" ),
+                                       childLoggerMyPool );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"mypool\" created with maximum queue-size=2147483647,max-pool-size=10,min-pool-size=1,priority=0,isDaemon=false,keep-alive-time-ms=30000,block-policy=\"WAIT\",shutdown-wait-time-ms=0" );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLoggerDefault );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool mypool" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool mypool disposed" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        runnableManager.dispose(  );
+    }
+
+    /**
+     * Class under test for void createPool(String, int, int, int, int,
+     * boolean, long, String, boolean, int)
+     */
+    public final void testCreatePoolStringintintintintbooleanlongStringbooleanint(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerDefaultControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDefault =
+            (Logger)childLoggerDefaultControl.getMock(  );
+        childLoggerDefaultControl.replay(  );
+
+        final MockControl childLoggerMyPoolControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerMyPool =
+            (Logger)childLoggerMyPoolControl.getMock(  );
+        childLoggerMyPoolControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLoggerDefault );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.getChildLogger( "mypool" ),
+                                       childLoggerMyPool );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"mypool\" created with maximum queue-size=230,max-pool-size=15,min-pool-size=12,priority=0,isDaemon=false,keep-alive-time-ms=15500,block-policy=\"DISCARD\",shutdown-wait-time-ms=22200" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool mypool" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool mypool disposed" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        runnableManager.createPool( "mypool", 230, 15, 12, Thread.MIN_PRIORITY,
+                                    false, 15500, "DISCARD", false, 22200 );
+        runnableManager.dispose(  );
+    }
+
+    /**
+     * Class under test for ThreadPool createPool(int, int, int, int, boolean,
+     * long, String, boolean, int)
+     */
+    public final void testCreatePoolintintintintbooleanlongStringbooleanint(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerDefaultControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDefault =
+            (Logger)childLoggerDefaultControl.getMock(  );
+        childLoggerDefaultControl.replay(  );
+
+        final MockControl childLoggerAnonControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerAnon =
+            (Logger)childLoggerAnonControl.getMock(  );
+        childLoggerAnonControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLoggerDefault );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.getChildLogger( "anon-xxx" ),
+                                       childLoggerAnon );
+        loggerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"anon-xxx\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool anon-xxx" );
+        loggerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool anon-xxx disposed" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        final ThreadPool threadPool =
+            runnableManager.createPool( 200, 5, 2, Thread.MAX_PRIORITY, true,
+                                        15000, "ABORT", true, 22000 );
+        assertEquals( "queue-size", 200, threadPool.getMaximumQueueSize(  ) );
+        runnableManager.dispose(  );
+    }
+
+    /**
+     * Class under test for void execute(Runnable)
+     */
+    public final void testExecuteRunnable(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerControl =
+            createStrictControl( Logger.class );
+        final Logger childLogger = (Logger)childLoggerControl.getMock(  );
+        childLoggerControl.expectAndReturn( childLogger.isDebugEnabled(  ), true );
+        childLogger.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        childLoggerControl.expectAndReturn( childLogger.isDebugEnabled(  ), true );
+        childLogger.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLogger );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "starting heart" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Entering loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Command entered: EasyMock for interface java.lang.Runnable,pool=default,delay=0,interval=0" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Hand over Command EasyMock for interface java.lang.Runnable to pool \"default\" with delay=0 and interval=0" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Exiting loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        final MockControl runnableControl =
+            createStrictControl( Runnable.class );
+        final Runnable runnable = (Runnable)runnableControl.getMock(  );
+        runnable.run(  );
+        runnableControl.replay(  );
+
+        try
+        {
+            runnableManager.start(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.execute( runnable );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.stop(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.dispose(  );
+            Thread.sleep( 20 );
+        }
+        catch( final Throwable ex )
+        {
+            ex.printStackTrace(  );
+            assertTrue( "Unexpected Exception", false );
+        }
+    }
+
+    /**
+     * Class under test for void execute(Runnable, long)
+     */
+    public final void testExecuteRunnablelong(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerControl =
+            createStrictControl( Logger.class );
+        final Logger childLogger = (Logger)childLoggerControl.getMock(  );
+        childLoggerControl.expectAndReturn( childLogger.isDebugEnabled(  ), true );
+        childLogger.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        childLoggerControl.expectAndReturn( childLogger.isDebugEnabled(  ), true );
+        childLogger.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLogger );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "starting heart" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Entering loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Command entered: EasyMock for interface java.lang.Runnable,pool=default,delay=100,interval=0" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Hand over Command EasyMock for interface java.lang.Runnable to pool \"default\" with delay=100 and interval=0" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Exiting loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        final MockControl runnableControl =
+            createStrictControl( Runnable.class );
+        final Runnable runnable = (Runnable)runnableControl.getMock(  );
+        runnable.run(  );
+        runnableControl.replay(  );
+
+        try
+        {
+            runnableManager.start(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.execute( runnable, 100, 0 );
+            Thread.yield(  );
+            Thread.sleep( 200 );
+            runnableManager.stop(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.dispose(  );
+            Thread.sleep( 20 );
+        }
+        catch( final Throwable ex )
+        {
+            ex.printStackTrace(  );
+            assertTrue( "Unexpected Exception", false );
+        }
+    }
+
+    /**
+     * Class under test for void execute(Runnable, long, long)
+     */
+    public final void testExecuteRunnablelonglong(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerControl =
+            createStrictControl( Logger.class );
+        final Logger childLogger = (Logger)childLoggerControl.getMock(  );
+        childLoggerControl.expectAndReturn( childLogger.isDebugEnabled(  ), true );
+        childLogger.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        childLoggerControl.expectAndReturn( childLogger.isDebugEnabled(  ), true );
+        childLogger.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLogger );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "starting heart" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Entering loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Command entered: EasyMock for interface java.lang.Runnable,pool=default,delay=100,interval=100" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Hand over Command EasyMock for interface java.lang.Runnable to pool \"default\" with delay=100 and interval=100" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Exiting loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        final MockControl runnableControl =
+            createStrictControl( Runnable.class );
+        final Runnable runnable = (Runnable)runnableControl.getMock(  );
+        runnable.run(  );
+        runnableControl.setVoidCallable( MockControl.ONE_OR_MORE );
+        runnableControl.replay(  );
+
+        try
+        {
+            runnableManager.start(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.execute( runnable, 100, 100 );
+            Thread.yield(  );
+            Thread.sleep( 200 );
+            runnableManager.stop(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.dispose(  );
+            Thread.sleep( 20 );
+        }
+        catch( final Throwable ex )
+        {
+            ex.printStackTrace(  );
+            assertTrue( "Unexpected Exception", false );
+        }
+    }
+
+    /**
+     * Class under test for void execute(String, Runnable)
+     */
+    public final void testExecuteStringRunnable(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerDefaultControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDefault =
+            (Logger)childLoggerDefaultControl.getMock(  );
+        childLoggerDefaultControl.expectAndReturn( childLoggerDefault.isDebugEnabled(  ),
+                                                   true );
+        childLoggerDefault.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerDefaultControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        childLoggerDefaultControl.replay(  );
+
+        final MockControl childLoggerMyPoolControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerMyPool =
+            (Logger)childLoggerMyPoolControl.getMock(  );
+        childLoggerMyPoolControl.expectAndReturn( childLoggerMyPool.isDebugEnabled(  ),
+                                                  true );
+        childLoggerMyPool.debug( "Executing Command: EasyMock for interface java.lang.Runnable,pool=mypool" );
+        childLoggerMyPoolControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLoggerDefault );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "starting heart" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Entering loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.getChildLogger( "mypool" ),
+                                       childLoggerMyPool );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"mypool\" created with maximum queue-size=230,max-pool-size=15,min-pool-size=12,priority=0,isDaemon=false,keep-alive-time-ms=15500,block-policy=\"DISCARD\",shutdown-wait-time-ms=22200" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Command entered: EasyMock for interface java.lang.Runnable,pool=mypool,delay=0,interval=0" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Hand over Command EasyMock for interface java.lang.Runnable to pool \"mypool\" with delay=0 and interval=0" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Exiting loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool mypool" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool mypool disposed" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        final MockControl runnableControl =
+            createStrictControl( Runnable.class );
+        final Runnable runnable = (Runnable)runnableControl.getMock(  );
+        runnable.run(  );
+        runnableControl.replay(  );
+
+        try
+        {
+            runnableManager.start(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.createPool( "mypool", 230, 15, 12,
+                                        Thread.MIN_PRIORITY, false, 15500,
+                                        "DISCARD", false, 22200 );
+            runnableManager.execute( "mypool", runnable );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.stop(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.dispose(  );
+            Thread.sleep( 20 );
+        }
+        catch( final Throwable ex )
+        {
+            ex.printStackTrace(  );
+            assertTrue( "Unexpected Exception", false );
+        }
+    }
+
+    /**
+     * Class under test for void execute(String, Runnable, long)
+     */
+    public final void testExecuteStringRunnablelong(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerDefaultControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDefault =
+            (Logger)childLoggerDefaultControl.getMock(  );
+        childLoggerDefaultControl.expectAndReturn( childLoggerDefault.isDebugEnabled(  ),
+                                                   true );
+        childLoggerDefault.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerDefaultControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        childLoggerDefaultControl.replay(  );
+
+        final MockControl childLoggerMyPoolControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerMyPool =
+            (Logger)childLoggerMyPoolControl.getMock(  );
+        childLoggerMyPoolControl.expectAndReturn( childLoggerMyPool.isDebugEnabled(  ),
+                                                  true );
+        childLoggerMyPool.debug( "Executing Command: EasyMock for interface java.lang.Runnable,pool=mypool" );
+        childLoggerMyPoolControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLoggerDefault );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "starting heart" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Entering loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.getChildLogger( "mypool" ),
+                                       childLoggerMyPool );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"mypool\" created with maximum queue-size=230,max-pool-size=15,min-pool-size=12,priority=0,isDaemon=false,keep-alive-time-ms=15500,block-policy=\"DISCARD\",shutdown-wait-time-ms=22200" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Command entered: EasyMock for interface java.lang.Runnable,pool=mypool,delay=100,interval=0" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Hand over Command EasyMock for interface java.lang.Runnable to pool \"mypool\" with delay=100 and interval=0" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Exiting loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool mypool" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool mypool disposed" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        final MockControl runnableControl =
+            createStrictControl( Runnable.class );
+        final Runnable runnable = (Runnable)runnableControl.getMock(  );
+        runnable.run(  );
+        runnableControl.replay(  );
+
+        try
+        {
+            runnableManager.start(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.createPool( "mypool", 230, 15, 12,
+                                        Thread.MIN_PRIORITY, false, 15500,
+                                        "DISCARD", false, 22200 );
+            runnableManager.execute( "mypool", runnable, 100, 0 );
+            Thread.yield(  );
+            Thread.sleep( 200 );
+            runnableManager.stop(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.dispose(  );
+            Thread.sleep( 20 );
+        }
+        catch( final Throwable ex )
+        {
+            ex.printStackTrace(  );
+            assertTrue( "Unexpected Exception", false );
+        }
+    }
+
+    /**
+     * Class under test for void execute(String, Runnable, long, long)
+     */
+    public final void testExecuteStringRunnablelonglong(  )
+    {
+        final MockControl mainConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration mainConfig =
+            (Configuration)mainConfigControl.getMock(  );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-factory" ),
+                                           createValueConfigMock( DefaultRunnableManager.DEFAULT_THREAD_FACTORY,
+                                                                  DefaultRunnableManager.DEFAULT_THREAD_FACTORY ) );
+        mainConfigControl.expectAndReturn( mainConfig.getChild( "thread-pools" ),
+                                           createChildrenConfigMock( "thread-pool",
+                                                                     new Configuration[ 0 ] ) );
+        mainConfigControl.replay(  );
+
+        final MockControl childLoggerDefaultControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerDefault =
+            (Logger)childLoggerDefaultControl.getMock(  );
+        childLoggerDefaultControl.expectAndReturn( childLoggerDefault.isDebugEnabled(  ),
+                                                   true );
+        childLoggerDefault.debug( "Executing Command: org.apache.cocoon.components.thread.DefaultRunnableManager" );
+        childLoggerDefaultControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        childLoggerDefaultControl.replay(  );
+
+        final MockControl childLoggerMyPoolControl =
+            createStrictControl( Logger.class );
+        final Logger childLoggerMyPool =
+            (Logger)childLoggerMyPoolControl.getMock(  );
+        childLoggerMyPoolControl.expectAndReturn( childLoggerMyPool.isDebugEnabled(  ),
+                                                  true );
+        childLoggerMyPool.debug( "Executing Command: EasyMock for interface java.lang.Runnable,pool=mypool" );
+        childLoggerMyPoolControl.replay(  );
+
+        final MockControl loggerControl = createStrictControl( Logger.class );
+        final Logger logger = (Logger)loggerControl.getMock(  );
+        loggerControl.expectAndReturn( logger.getChildLogger( "default" ),
+                                       childLoggerDefault );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"default\" created with maximum queue-size=2147483647,max-pool-size=5,min-pool-size=5,priority=0,isDaemon=false,keep-alive-time-ms=60000,block-policy=\"RUN\",shutdown-wait-time-ms=-1" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "starting heart" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Entering loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "No commands available. Will just wait for one" );
+        loggerControl.expectAndReturn( logger.getChildLogger( "mypool" ),
+                                       childLoggerMyPool );
+        loggerControl.expectAndReturn( logger.isInfoEnabled(  ), true );
+        logger.info( "ThreadPool named \"mypool\" created with maximum queue-size=230,max-pool-size=15,min-pool-size=12,priority=0,isDaemon=false,keep-alive-time-ms=15500,block-policy=\"DISCARD\",shutdown-wait-time-ms=22200" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Command entered: EasyMock for interface java.lang.Runnable,pool=mypool,delay=100,interval=100" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Hand over Command EasyMock for interface java.lang.Runnable to pool \"mypool\" with delay=100 and interval=100" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Exiting loop" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing all thread pools" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool mypool" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool mypool disposed" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Disposing thread pool default" );
+        loggerControl.expectAndReturn( logger.isDebugEnabled(  ), true );
+        logger.debug( "Thread pool default disposed" );
+        loggerControl.replay(  );
+
+        final DefaultRunnableManager runnableManager =
+            new DefaultRunnableManager(  );
+        runnableManager.enableLogging( logger );
+
+        try
+        {
+            runnableManager.configure( mainConfig );
+        }
+        catch( final ConfigurationException ce )
+        {
+            assertTrue( "Throw unexpected ConfigurationException", false );
+        }
+
+        final MockControl runnableControl =
+            createStrictControl( Runnable.class );
+        final Runnable runnable = (Runnable)runnableControl.getMock(  );
+        runnable.run(  );
+        runnableControl.replay(  );
+
+        try
+        {
+            runnableManager.start(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.createPool( "mypool", 230, 15, 12,
+                                        Thread.MIN_PRIORITY, false, 15500,
+                                        "DISCARD", false, 22200 );
+            runnableManager.execute( "mypool", runnable, 100, 100 );
+            Thread.yield(  );
+            Thread.sleep( 200 );
+            runnableManager.stop(  );
+            Thread.yield(  );
+            Thread.sleep( 20 );
+            runnableManager.dispose(  );
+            Thread.sleep( 20 );
+        }
+        catch( final Throwable ex )
+        {
+            ex.printStackTrace(  );
+            assertTrue( "Unexpected Exception", false );
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @throws Exception DOCUMENT ME!
+     */
+    protected void setUp(  )
+        throws Exception
+    {
+        super.setUp(  );
+        m_controls = new ArrayList(  );
+    }
+
+    /**
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown(  )
+        throws Exception
+    {
+        for( Iterator i = m_controls.iterator(  ); i.hasNext(  ); )
+        {
+            final MockControl control = (MockControl)i.next(  );
+            control.verify(  );
+        }
+
+        m_controls = null;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param value DOCUMENT ME!
+     * @param defaultValue DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private Configuration createBooleanConfigMock( final boolean value,
+                                                   final boolean defaultValue )
+    {
+        final MockControl valueConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration valueConfig =
+            (Configuration)valueConfigControl.getMock(  );
+        valueConfig.getValueAsBoolean( defaultValue );
+        valueConfigControl.setReturnValue( value );
+        valueConfigControl.replay(  );
+
+        return valueConfig;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param name DOCUMENT ME!
+     * @param value DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private Configuration createChildConfigMock( final String name,
+                                                 final Configuration value )
+    {
+        final MockControl childConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration childConfig =
+            (Configuration)childConfigControl.getMock(  );
+        childConfig.getChild( name );
+        childConfigControl.setReturnValue( value );
+        childConfigControl.replay(  );
+
+        return childConfig;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param name DOCUMENT ME!
+     * @param value DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private Configuration createChildrenConfigMock( final String name,
+                                                    final Configuration [] value )
+    {
+        final MockControl childrenConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration childrenConfig =
+            (Configuration)childrenConfigControl.getMock(  );
+        childrenConfig.getChildren( name );
+        childrenConfigControl.setReturnValue( value );
+        childrenConfigControl.replay(  );
+
+        return childrenConfig;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param value DOCUMENT ME!
+     * @param defaultValue DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private Configuration createIntegerConfigMock( final int value,
+                                                   final int defaultValue )
+    {
+        final MockControl valueConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration valueConfig =
+            (Configuration)valueConfigControl.getMock(  );
+        valueConfig.getValueAsInteger( defaultValue );
+        valueConfigControl.setReturnValue( value );
+        valueConfigControl.replay(  );
+
+        return valueConfig;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param value DOCUMENT ME!
+     * @param defaultValue DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private Configuration createLongConfigMock( final long value,
+                                                final long defaultValue )
+    {
+        final MockControl valueConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration valueConfig =
+            (Configuration)valueConfigControl.getMock(  );
+        valueConfig.getValueAsLong( defaultValue );
+        valueConfigControl.setReturnValue( value );
+        valueConfigControl.replay(  );
+
+        return valueConfig;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param clazz DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private MockControl createStrictControl( final Class clazz )
+    {
+        final MockControl control = MockControl.createStrictControl( clazz );
+        m_controls.add( control );
+
+        return control;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param value DOCUMENT ME!
+     * @param defaultValue DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private Configuration createValueConfigMock( final String value,
+                                                 final String defaultValue )
+    {
+        final MockControl valueConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration valueConfig =
+            (Configuration)valueConfigControl.getMock(  );
+        valueConfig.getValue( defaultValue );
+        valueConfigControl.setReturnValue( value );
+        valueConfigControl.replay(  );
+
+        return valueConfig;
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param value DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     *
+     * @throws ConfigurationException DOCUMENT ME!
+     */
+    private Configuration createValueConfigMock( final String value )
+        throws ConfigurationException
+    {
+        final MockControl valueConfigControl =
+            createStrictControl( Configuration.class );
+        final Configuration valueConfig =
+            (Configuration)valueConfigControl.getMock(  );
+        valueConfig.getValue(  );
+        valueConfigControl.setReturnValue( value );
+        valueConfigControl.replay(  );
+
+        return valueConfig;
+    }
+}

Added: cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/components/thread/DefaultThreadFactoryTestCase.java
==============================================================================
--- (empty file)
+++ cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/components/thread/DefaultThreadFactoryTestCase.java	Thu Nov 11 12:38:09 2004
@@ -0,0 +1,57 @@
+package org.apache.cocoon.components.thread;
+
+import junit.framework.TestCase;
+
+public class DefaultThreadFactoryTestCase
+    extends TestCase
+{
+    public final void testSetDaemon()
+    {
+        final DefaultThreadFactory factory = new DefaultThreadFactory();
+        factory.setDaemon(false);
+        final Thread thread = factory.newThread(new DummyRunnable() );
+        assertEquals( "daemon mode", false, thread.isDaemon() );
+    }
+
+    public final void testIsDaemon()
+    {
+        final DefaultThreadFactory factory = new DefaultThreadFactory();
+        factory.setDaemon(false);
+        assertEquals( "daemon mode", false, factory.isDaemon() );
+    }
+
+    public final void testSetPriority()
+    {
+        final DefaultThreadFactory factory = new DefaultThreadFactory();
+        factory.setPriority( Thread.MAX_PRIORITY );
+        final Thread thread = factory.newThread(new DummyRunnable() );
+        assertEquals( "priority", Thread.MAX_PRIORITY, thread.getPriority() );
+    }
+
+    public final void testGetPriority()
+    {
+        final DefaultThreadFactory factory = new DefaultThreadFactory();
+        factory.setPriority( Thread.MAX_PRIORITY );
+        assertEquals( "priority", Thread.MAX_PRIORITY, factory.getPriority() );
+    }
+
+    public final void testNewThread()
+    {
+        final DefaultThreadFactory factory = new DefaultThreadFactory();
+        factory.setDaemon(true);
+        factory.setPriority( Thread.MIN_PRIORITY );
+        final Thread thread = factory.newThread(new DummyRunnable() );
+        assertEquals( "new thread daemon mode", true, thread.isDaemon() );
+        assertEquals( "new thread priority", Thread.MIN_PRIORITY, thread.getPriority() );
+        assertEquals( "factory daemon mode", factory.isDaemon(), thread.isDaemon() );
+        assertEquals( "factory priority", factory.getPriority(), thread.getPriority() );
+    }
+    
+    private static class DummyRunnable implements Runnable
+    {
+        public void run()
+        {
+            // nothing
+        }
+    }
+}

Added: cocoon/branches/BRANCH_2_1_X/tools/lib/easymock-1.1.jar
==============================================================================
Binary file. No diff available.