Fix tests that were consistently or intermittently failing when run in parallel on the farm
-Make MaxRuntimeIntegrationTest more lenient by assuming that startup overhead might be as long as 120 seconds on a very slow node, rather than the original assumption of 20 seconds -In TraverseActiveRegionsUnitTest, write temp bam file to the temp directory, not to the current working directory -SimpleTimerUnitTest: This test was internally inconsistent. It asserted that a particular operation should take no more than 10 milliseconds, and then asserted again that this same operation should take no more than 100 microseconds (= 0.1 millisecond). On a slow node it could take slightly longer than 100 microseconds, however. Changed the test to assert that the operation should require no more than 10000 microseconds (= 10 milliseconds) -change global default test timeout from 20 to 40 minutes (things just take longer on the farm!) -build.xml: allow runtestonly target to work with scala test classes
This commit is contained in:
parent
7d833256e8
commit
3ab78543a7
|
|
@ -1473,6 +1473,7 @@
|
||||||
<property name="testng.classpath" value="testng.default.classpath" />
|
<property name="testng.classpath" value="testng.default.classpath" />
|
||||||
<property name="test.maxmemory" value="${test.default.maxmemory}"/>
|
<property name="test.maxmemory" value="${test.default.maxmemory}"/>
|
||||||
<property name="include.contracts" value="true" />
|
<property name="include.contracts" value="true" />
|
||||||
|
<property name="include.scala" value="true" />
|
||||||
|
|
||||||
<run-test testtype="${single}" outputdir="${report}/${single}" runfailed="false"/>
|
<run-test testtype="${single}" outputdir="${report}/${single}" runfailed="false"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ import java.lang.reflect.Method;
|
||||||
/**
|
/**
|
||||||
* Provide default @Test values for GATK testng tests.
|
* Provide default @Test values for GATK testng tests.
|
||||||
*
|
*
|
||||||
* Currently only sets the maximum runtime to 10 minutes, if it's not been specified.
|
* Currently only sets the maximum runtime to 40 minutes, if it's not been specified.
|
||||||
*
|
*
|
||||||
* See http://beust.com/weblog/2006/10/18/annotation-transformers-in-java/
|
* See http://beust.com/weblog/2006/10/18/annotation-transformers-in-java/
|
||||||
*
|
*
|
||||||
|
|
@ -44,7 +44,7 @@ import java.lang.reflect.Method;
|
||||||
* @version 0.1
|
* @version 0.1
|
||||||
*/
|
*/
|
||||||
public class TestNGTestTransformer implements IAnnotationTransformer {
|
public class TestNGTestTransformer implements IAnnotationTransformer {
|
||||||
public static final long DEFAULT_TIMEOUT = 1000 * 60 * 20; // 20 minutes max per test
|
public static final long DEFAULT_TIMEOUT = 1000 * 60 * 40; // 40 minutes max per test
|
||||||
|
|
||||||
final static Logger logger = Logger.getLogger(TestNGTestTransformer.class);
|
final static Logger logger = Logger.getLogger(TestNGTestTransformer.class);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ import java.util.concurrent.TimeUnit;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class MaxRuntimeIntegrationTest extends WalkerTest {
|
public class MaxRuntimeIntegrationTest extends WalkerTest {
|
||||||
private static final long STARTUP_TIME = TimeUnit.NANOSECONDS.convert(20, TimeUnit.SECONDS);
|
private static final long STARTUP_TIME = TimeUnit.NANOSECONDS.convert(120, TimeUnit.SECONDS);
|
||||||
|
|
||||||
private class MaxRuntimeTestProvider extends TestDataProvider {
|
private class MaxRuntimeTestProvider extends TestDataProvider {
|
||||||
final long maxRuntime;
|
final long maxRuntime;
|
||||||
|
|
@ -68,7 +68,7 @@ public class MaxRuntimeIntegrationTest extends WalkerTest {
|
||||||
//
|
//
|
||||||
// Loop over errors to throw, make sure they are the errors we get back from the engine, regardless of NT type
|
// Loop over errors to throw, make sure they are the errors we get back from the engine, regardless of NT type
|
||||||
//
|
//
|
||||||
@Test(enabled = true, dataProvider = "MaxRuntimeProvider", timeOut = 60 * 1000)
|
@Test(enabled = true, dataProvider = "MaxRuntimeProvider", timeOut = 300 * 1000)
|
||||||
public void testMaxRuntime(final MaxRuntimeTestProvider cfg) {
|
public void testMaxRuntime(final MaxRuntimeTestProvider cfg) {
|
||||||
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
|
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
|
||||||
"-T PrintReads -R " + hg18Reference
|
"-T PrintReads -R " + hg18Reference
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ import org.testng.annotations.Test;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -86,11 +87,10 @@ public class TraverseActiveRegionsUnitTest extends BaseTest {
|
||||||
|
|
||||||
private List<GenomeLoc> intervals;
|
private List<GenomeLoc> intervals;
|
||||||
|
|
||||||
private static final String testBAM = "TraverseActiveRegionsUnitTest.bam";
|
private File testBAM;
|
||||||
private static final String testBAI = "TraverseActiveRegionsUnitTest.bai";
|
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
private void init() throws FileNotFoundException {
|
private void init() throws IOException {
|
||||||
//reference = new CachingIndexedFastaSequenceFile(new File("/Users/depristo/Desktop/broadLocal/localData/human_g1k_v37.fasta")); // hg19Reference));
|
//reference = new CachingIndexedFastaSequenceFile(new File("/Users/depristo/Desktop/broadLocal/localData/human_g1k_v37.fasta")); // hg19Reference));
|
||||||
reference = new CachingIndexedFastaSequenceFile(new File(hg19Reference));
|
reference = new CachingIndexedFastaSequenceFile(new File(hg19Reference));
|
||||||
dictionary = reference.getSequenceDictionary();
|
dictionary = reference.getSequenceDictionary();
|
||||||
|
|
@ -133,17 +133,18 @@ public class TraverseActiveRegionsUnitTest extends BaseTest {
|
||||||
createBAM(reads);
|
createBAM(reads);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createBAM(List<GATKSAMRecord> reads) {
|
private void createBAM(List<GATKSAMRecord> reads) throws IOException {
|
||||||
File outFile = new File(testBAM);
|
testBAM = File.createTempFile("TraverseActiveRegionsUnitTest", ".bam");
|
||||||
outFile.deleteOnExit();
|
testBAM.deleteOnExit();
|
||||||
File indexFile = new File(testBAI);
|
|
||||||
indexFile.deleteOnExit();
|
|
||||||
|
|
||||||
SAMFileWriter out = new SAMFileWriterFactory().setCreateIndex(true).makeBAMWriter(reads.get(0).getHeader(), true, outFile);
|
SAMFileWriter out = new SAMFileWriterFactory().setCreateIndex(true).makeBAMWriter(reads.get(0).getHeader(), true, testBAM);
|
||||||
for (GATKSAMRecord read : ReadUtils.sortReadsByCoordinate(reads)) {
|
for (GATKSAMRecord read : ReadUtils.sortReadsByCoordinate(reads)) {
|
||||||
out.addAlignment(read);
|
out.addAlignment(read);
|
||||||
}
|
}
|
||||||
out.close();
|
out.close();
|
||||||
|
|
||||||
|
new File(testBAM.getAbsolutePath().replace(".bam", ".bai")).deleteOnExit();
|
||||||
|
new File(testBAM.getAbsolutePath() + ".bai").deleteOnExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(enabled = true && ! DEBUG, dataProvider = "TraversalEngineProvider")
|
@Test(enabled = true && ! DEBUG, dataProvider = "TraversalEngineProvider")
|
||||||
|
|
@ -400,7 +401,7 @@ public class TraverseActiveRegionsUnitTest extends BaseTest {
|
||||||
return getActiveRegions(t, walker, intervals, testBAM);
|
return getActiveRegions(t, walker, intervals, testBAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<GenomeLoc, ActiveRegion> getActiveRegions(TraverseActiveRegions t, DummyActiveRegionWalker walker, List<GenomeLoc> intervals, final String bam) {
|
private Map<GenomeLoc, ActiveRegion> getActiveRegions(TraverseActiveRegions t, DummyActiveRegionWalker walker, List<GenomeLoc> intervals, final File bam) {
|
||||||
for (LocusShardDataProvider dataProvider : createDataProviders(t, walker, intervals, bam))
|
for (LocusShardDataProvider dataProvider : createDataProviders(t, walker, intervals, bam))
|
||||||
t.traverse(walker, dataProvider, 0);
|
t.traverse(walker, dataProvider, 0);
|
||||||
|
|
||||||
|
|
@ -466,13 +467,13 @@ public class TraverseActiveRegionsUnitTest extends BaseTest {
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<LocusShardDataProvider> createDataProviders(TraverseActiveRegions traverseActiveRegions, final Walker walker, List<GenomeLoc> intervals, String bamFile) {
|
private List<LocusShardDataProvider> createDataProviders(TraverseActiveRegions traverseActiveRegions, final Walker walker, List<GenomeLoc> intervals, File bamFile) {
|
||||||
GenomeAnalysisEngine engine = new GenomeAnalysisEngine();
|
GenomeAnalysisEngine engine = new GenomeAnalysisEngine();
|
||||||
engine.setGenomeLocParser(genomeLocParser);
|
engine.setGenomeLocParser(genomeLocParser);
|
||||||
traverseActiveRegions.initialize(engine, walker);
|
traverseActiveRegions.initialize(engine, walker);
|
||||||
|
|
||||||
Collection<SAMReaderID> samFiles = new ArrayList<SAMReaderID>();
|
Collection<SAMReaderID> samFiles = new ArrayList<SAMReaderID>();
|
||||||
SAMReaderID readerID = new SAMReaderID(new File(bamFile), new Tags());
|
SAMReaderID readerID = new SAMReaderID(bamFile, new Tags());
|
||||||
samFiles.add(readerID);
|
samFiles.add(readerID);
|
||||||
|
|
||||||
SAMDataSource dataSource = new SAMDataSource(samFiles, new ThreadAllocation(), null, genomeLocParser,
|
SAMDataSource dataSource = new SAMDataSource(samFiles, new ThreadAllocation(), null, genomeLocParser,
|
||||||
|
|
@ -594,7 +595,7 @@ public class TraverseActiveRegionsUnitTest extends BaseTest {
|
||||||
walker.setStates(readStates);
|
walker.setStates(readStates);
|
||||||
|
|
||||||
final TraverseActiveRegions traversal = new TraverseActiveRegions<Integer, Integer>();
|
final TraverseActiveRegions traversal = new TraverseActiveRegions<Integer, Integer>();
|
||||||
final Map<GenomeLoc, ActiveRegion> activeRegionsMap = getActiveRegions(traversal, walker, intervals, bamBuilder.makeTemporarilyBAMFile().toString());
|
final Map<GenomeLoc, ActiveRegion> activeRegionsMap = getActiveRegions(traversal, walker, intervals, bamBuilder.makeTemporarilyBAMFile());
|
||||||
|
|
||||||
final Set<String> alreadySeenReads = new HashSet<String>(); // for use with the primary / non-primary
|
final Set<String> alreadySeenReads = new HashSet<String>(); // for use with the primary / non-primary
|
||||||
for ( final ActiveRegion region : activeRegionsMap.values() ) {
|
for ( final ActiveRegion region : activeRegionsMap.values() ) {
|
||||||
|
|
@ -666,7 +667,7 @@ public class TraverseActiveRegionsUnitTest extends BaseTest {
|
||||||
final DummyActiveRegionWalker walker = new DummyActiveRegionWalker(activeRegions, false);
|
final DummyActiveRegionWalker walker = new DummyActiveRegionWalker(activeRegions, false);
|
||||||
|
|
||||||
final TraverseActiveRegions traversal = new TraverseActiveRegions<Integer, Integer>();
|
final TraverseActiveRegions traversal = new TraverseActiveRegions<Integer, Integer>();
|
||||||
final Map<GenomeLoc, ActiveRegion> activeRegionsMap = getActiveRegions(traversal, walker, intervals, bamBuilder.makeTemporarilyBAMFile().toString());
|
final Map<GenomeLoc, ActiveRegion> activeRegionsMap = getActiveRegions(traversal, walker, intervals, bamBuilder.makeTemporarilyBAMFile());
|
||||||
|
|
||||||
final ActiveRegion region = activeRegionsMap.values().iterator().next();
|
final ActiveRegion region = activeRegionsMap.values().iterator().next();
|
||||||
int nReadsExpectedInRegion = 0;
|
int nReadsExpectedInRegion = 0;
|
||||||
|
|
|
||||||
|
|
@ -118,8 +118,8 @@ public class SimpleTimerUnitTest extends BaseTest {
|
||||||
Assert.assertTrue(secs < 0.01, "Fast operation said to take longer than 10 milliseconds: elapsed time in seconds " + secs);
|
Assert.assertTrue(secs < 0.01, "Fast operation said to take longer than 10 milliseconds: elapsed time in seconds " + secs);
|
||||||
|
|
||||||
Assert.assertTrue(nano > 0, "Nanosecond timer doesn't appear to count properly: elapsed time is " + nano);
|
Assert.assertTrue(nano > 0, "Nanosecond timer doesn't appear to count properly: elapsed time is " + nano);
|
||||||
final long maxTimeInMicro = 100;
|
final long maxTimeInMicro = 10000;
|
||||||
final long maxTimeInNano = TimeUnit.MICROSECONDS.toNanos(100);
|
final long maxTimeInNano = TimeUnit.MICROSECONDS.toNanos(maxTimeInMicro);
|
||||||
Assert.assertTrue(nano < maxTimeInNano, "Fast operation said to take longer than " + maxTimeInMicro + " microseconds: elapsed time in nano " + nano + " micro " + TimeUnit.NANOSECONDS.toMicros(nano));
|
Assert.assertTrue(nano < maxTimeInNano, "Fast operation said to take longer than " + maxTimeInMicro + " microseconds: elapsed time in nano " + nano + " micro " + TimeUnit.NANOSECONDS.toMicros(nano));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue