ExperimentalReadShardBalancerUnitTest was being skipped; fixed
TestNG skips tests when an exception occurs in a data provider, which is what was happening here. This was due to an AWFUL AWFUL use of a non-final static for ReadShard.MAX_READS. This is fine if you assume only one instance of SAMDataSource, but with multiple tests creating multiple SAMDataSources, and each one overwriting ReadShard.MAX_READS, you have a recipe for problems. As a result of this the test ran fine individually, but not as part of the unit test suite. Quick fix for now to get the tests running -- this "mutable static" interface should really be refactored away though, when I have time.
This commit is contained in:
parent
e077347cc2
commit
f6a22e5f50
|
|
@ -34,10 +34,21 @@ import java.util.*;
|
|||
* @version 0.1
|
||||
*/
|
||||
public class ReadShard extends Shard {
|
||||
|
||||
/**
|
||||
* Default read shard buffer size
|
||||
*/
|
||||
public static final int DEFAULT_MAX_READS = 10000;
|
||||
|
||||
/**
|
||||
* What is the maximum number of reads per BAM file which should go into a read shard.
|
||||
*
|
||||
* TODO: this non-final static variable should either be made final or turned into an
|
||||
* TODO: instance variable somewhere -- as both static and mutable it wreaks havoc
|
||||
* TODO: with tests that use multiple instances of SAMDataSource (since SAMDataSource
|
||||
* TODO: changes this value)
|
||||
*/
|
||||
public static int MAX_READS = 10000;
|
||||
public static int MAX_READS = DEFAULT_MAX_READS;
|
||||
|
||||
/**
|
||||
* The reads making up this shard.
|
||||
|
|
@ -51,6 +62,9 @@ public class ReadShard extends Shard {
|
|||
/**
|
||||
* Sets the maximum number of reads buffered in a read shard. Implemented as a weirdly static interface
|
||||
* until we know what effect tuning this parameter has.
|
||||
*
|
||||
* TODO: this mutable static interface is awful and breaks tests -- need to refactor
|
||||
*
|
||||
* @param bufferSize New maximum number
|
||||
*/
|
||||
static void setReadBufferSize(final int bufferSize) {
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ public class SAMDataSource {
|
|||
validationStringency = strictness;
|
||||
this.removeProgramRecords = removeProgramRecords;
|
||||
if(readBufferSize != null)
|
||||
ReadShard.setReadBufferSize(readBufferSize);
|
||||
ReadShard.setReadBufferSize(readBufferSize); // TODO: use of non-final static variable here is just awful, especially for parallel tests
|
||||
else {
|
||||
// Choose a sensible default for the read buffer size. For the moment, we're picking 1000 reads per BAM per shard (which effectively
|
||||
// will mean per-thread once ReadWalkers are parallelized) with a max cap of 250K reads in memory at once.
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ public class ExperimentalReadShardBalancerUnitTest extends BaseTest {
|
|||
new GenomeLocParser(header.getSequenceDictionary()),
|
||||
false,
|
||||
SAMFileReader.ValidationStringency.SILENT,
|
||||
null,
|
||||
ReadShard.DEFAULT_MAX_READS, // reset ReadShard.MAX_READS to ReadShard.DEFAULT_MAX_READS for each test
|
||||
downsamplingMethod,
|
||||
new ValidationExclusion(),
|
||||
new ArrayList<ReadFilter>(),
|
||||
|
|
@ -180,10 +180,10 @@ public class ExperimentalReadShardBalancerUnitTest extends BaseTest {
|
|||
for ( int numContigs = 1; numContigs <= 3; numContigs++ ) {
|
||||
for ( int numStacksPerContig : Arrays.asList(1, 2, 4) ) {
|
||||
// Use crucial read shard boundary values as the stack sizes
|
||||
for ( int stackSize : Arrays.asList(ReadShard.MAX_READS / 2, ReadShard.MAX_READS / 2 + 10, ReadShard.MAX_READS, ReadShard.MAX_READS - 1, ReadShard.MAX_READS + 1, ReadShard.MAX_READS * 2) ) {
|
||||
for ( int numUnmappedReads : Arrays.asList(0, ReadShard.MAX_READS / 2, ReadShard.MAX_READS * 2) ) {
|
||||
for ( int stackSize : Arrays.asList(ReadShard.DEFAULT_MAX_READS / 2, ReadShard.DEFAULT_MAX_READS / 2 + 10, ReadShard.DEFAULT_MAX_READS, ReadShard.DEFAULT_MAX_READS - 1, ReadShard.DEFAULT_MAX_READS + 1, ReadShard.DEFAULT_MAX_READS * 2) ) {
|
||||
for ( int numUnmappedReads : Arrays.asList(0, ReadShard.DEFAULT_MAX_READS / 2, ReadShard.DEFAULT_MAX_READS * 2) ) {
|
||||
// The first value will result in no downsampling at all, the others in some downsampling
|
||||
for ( int downsamplingTargetCoverage : Arrays.asList(ReadShard.MAX_READS * 10, ReadShard.MAX_READS, ReadShard.MAX_READS / 2) ) {
|
||||
for ( int downsamplingTargetCoverage : Arrays.asList(ReadShard.DEFAULT_MAX_READS * 10, ReadShard.DEFAULT_MAX_READS, ReadShard.DEFAULT_MAX_READS / 2) ) {
|
||||
new ExperimentalReadShardBalancerTest(numContigs, numStacksPerContig, stackSize, numUnmappedReads, downsamplingTargetCoverage);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue