blob: 64fa7190c012848b9932eedd7b4508385e319bc1 [file] [log] [blame]
package org.apache.maven.surefire.api.runorder;
/*
* 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.
*/
import java.util.List;
import junit.framework.TestCase;
import org.apache.maven.surefire.api.util.internal.ClassMethod;
/**
* @author Kristian Rosenvold
*/
public class ThreadedExecutionSchedulerTest
extends TestCase
{
private final RunEntryStatistics a1 = fromValues( 200, 2, A.class, "at1" );
private final RunEntryStatistics a2 = fromValues( 300, 2, A.class, "at2" );
private final RunEntryStatistics b1 = fromValues( 400, 2, B.class, "bt1" );
private final RunEntryStatistics b2 = fromValues( 300, 2, B.class, "bt2" );
private final RunEntryStatistics c1 = fromValues( 400, 2, C.class, "ct1" );
private final RunEntryStatistics c2 = fromValues( 200, 2, C.class, "ct2" );
private final RunEntryStatistics d1 = fromValues( 401, 2, D.class, "ct2" );
private final RunEntryStatistics e1 = fromValues( 200, 2, E.class, "ct2" );
public void testAddTest()
{
ThreadedExecutionScheduler threadedExecutionScheduler = new ThreadedExecutionScheduler( 2 );
addPrioritizedTests( threadedExecutionScheduler );
final List<Class<?>> result = threadedExecutionScheduler.getResult();
assertEquals( 5, result.size() );
assertEquals( B.class, result.get( 0 ) );
assertEquals( C.class, result.get( 1 ) );
assertEquals( D.class, result.get( 2 ) );
assertEquals( A.class, result.get( 3 ) );
assertEquals( E.class, result.get( 4 ) );
}
public void testAddTestJaggedResult()
{
ThreadedExecutionScheduler threadedExecutionScheduler = new ThreadedExecutionScheduler( 4 );
addPrioritizedTests( threadedExecutionScheduler );
final List<Class<?>> result = threadedExecutionScheduler.getResult();
assertEquals( 5, result.size() );
}
private void addPrioritizedTests( ThreadedExecutionScheduler threadedExecutionScheduler )
{
threadedExecutionScheduler.addTest( new PrioritizedTest( B.class, createPriority( b1, b2 ) ) );
threadedExecutionScheduler.addTest( new PrioritizedTest( C.class, createPriority( c1, c2 ) ) );
threadedExecutionScheduler.addTest( new PrioritizedTest( A.class, createPriority( a1, a2 ) ) );
threadedExecutionScheduler.addTest( new PrioritizedTest( D.class, createPriority( d1 ) ) );
threadedExecutionScheduler.addTest( new PrioritizedTest( E.class, createPriority( e1 ) ) );
}
private Priority createPriority( RunEntryStatistics runEntryStatistics )
{
final Priority priority = new Priority( A.class.getName() );
priority.addItem( runEntryStatistics );
return priority;
}
private Priority createPriority( RunEntryStatistics runEntryStatistics, RunEntryStatistics runEntryStatistics2 )
{
final Priority priority = new Priority( A.class.getName() );
priority.addItem( runEntryStatistics );
priority.addItem( runEntryStatistics2 );
return priority;
}
private static RunEntryStatistics fromValues( int runTime, int successfulBuilds, Class clazz, String testName )
{
ClassMethod classMethod = new ClassMethod( clazz.getName(), testName );
return new RunEntryStatistics( runTime, successfulBuilds, classMethod );
}
class A
{
} // 500 total
class B
{
} // 700 total
class C
{
} // 600 total
class D
{
} // 400 total
class E
{
} // 200 total
}