blob: 3169e3ad2a466869b165af3207551e31c3700440 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.logger.ConsoleLogger;
import org.easymock.MockControl;
/**
* The $classType$ class ...
*
* @author <a href="mailto:giacomo.at.apache.org">Giacomo Pati</a>
* @version $Id$
*/
public class DefaultThreadPoolTestCase extends AbstractTestCase
{
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*/
public final void testDefaultThreadPool( )
{
final DefaultThreadPool pool = new DefaultThreadPool( );
pool.enableLogging( new ConsoleLogger( ConsoleLogger.LEVEL_DEBUG ) );
pool.setName( "mypool" );
// We cannot mock the DefaultThreadFactory as the underlying
// PooledExecutor of the DefaultThreadPool will again wrapp it into a
// PooledExecutor.Worker instance that does some bookeeping.
// Using a easymocked DefaultThreadFactory will prevent the
// PooledExecutor from shutting down and thus hangs forever.
final ThreadFactory threadFactory = new DefaultThreadFactory();
threadFactory.setPriority( Thread.MAX_PRIORITY );
pool.setThreadFactory( threadFactory );
pool.setQueue( 230 );
pool.setMaximumPoolSize( 15 );
pool.setMinimumPoolSize( 9 );
pool.setKeepAliveTime( 11000 );
pool.setBlockPolicy( "ABORT" );
pool.setShutdownGraceful( false );
pool.setShutdownWaitTimeMs( 12345 );
assertEquals( "block-policy", "ABORT", pool.getBlockPolicy( ) );
assertEquals( "keep-alive-time-ms", 11000L, pool.getKeepAliveTime( ) );
assertEquals( "max-queueu-size", 230, pool.getMaximumQueueSize( ) );
assertEquals( "max-pool-size", 15, pool.getMaximumPoolSize( ) );
assertEquals( "min-pool-size", 9, pool.getMinimumPoolSize( ) );
assertEquals( "name", "mypool", pool.getName( ) );
assertEquals( "priority", Thread.MAX_PRIORITY, pool.getPriority( ) );
assertEquals( "queue-size", 0, pool.getQueueSize( ) );
assertEquals( "isQueued", true, pool.isQueued( ) );
assertEquals( "isTerminatedAfterShutdown", false,
pool.isTerminatedAfterShutdown( ) );
verify( );
}
/*
* Class under test for void execute(Runnable)
*/
public final void testExecuteRunnable( )
throws InterruptedException
{
final MockControl runnableControl =
createStrictControl( Runnable.class );
final Runnable runnable = (Runnable)runnableControl.getMock( );
runnable.run( );
runnableControl.replay( );
final DefaultThreadPool pool = new DefaultThreadPool( );
pool.enableLogging( new ConsoleLogger( ConsoleLogger.LEVEL_DEBUG ) );
pool.setName( "mypool" );
// We cannot mock the DefaultThreadFactory as the underlying
// PooledExecutor of the DefaultThreadPool will again wrapp it into a
// PooledExecutor.Worker instance that does some bookeeping.
// Using a easymocked DefaultThreadFactory will prevent the
// PooledExecutor from shutting down and thus hangs forever.
pool.setThreadFactory( new DefaultThreadFactory() );
pool.setQueue( 230 );
pool.setMaximumPoolSize( 15 );
pool.setMinimumPoolSize( 9 );
pool.setKeepAliveTime( 100 );
pool.setBlockPolicy( "ABORT" );
pool.setShutdownGraceful( false );
pool.setShutdownWaitTimeMs( 1234 );
pool.execute( runnable );
Thread.yield( );
Thread.sleep( 100 );
pool.shutdown();
verify( );
}
/**
* DOCUMENT ME!
*
* @throws InterruptedException DOCUMENT ME!
*/
public final void testShutdown( )
throws InterruptedException
{
final Runnable runnable = new Runnable(){
public void run()
{
final ConsoleLogger logger = new ConsoleLogger( ConsoleLogger.LEVEL_DEBUG );
logger.info( "runnable runs" );
try
{
Thread.sleep( 1000 );
}
catch( final InterruptedException ie )
{
logger.info( "runnable has been interrupted ");
}
logger.info( "runnable terminated" );
}
};
final DefaultThreadPool pool = new DefaultThreadPool( );
pool.enableLogging( new ConsoleLogger( ConsoleLogger.LEVEL_DEBUG ) );
pool.setName( "mypool" );
pool.setThreadFactory( new DefaultThreadFactory() );
pool.setQueue( 0 );
pool.setMaximumPoolSize( 15 );
pool.setMinimumPoolSize( 9 );
pool.setKeepAliveTime( 1000 );
pool.setBlockPolicy( "ABORT" );
pool.setShutdownGraceful( true );
pool.setShutdownWaitTimeMs( 100 );
pool.execute( runnable );
pool.execute( runnable );
Thread.yield();
Thread.sleep( 200 );
pool.shutdown( );
Thread.sleep( 200 );
verify( );
}
}