only emit a warning if the tribble index is out of date, don't remove and replace it for them. Added a test case where the log4j appender checks the logging messages for the appropriate output.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3393 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
aaron 2010-05-19 15:12:48 +00:00
parent 017ab6b690
commit ca386439be
2 changed files with 59 additions and 0 deletions

View File

@ -138,6 +138,11 @@ public class TribbleRMDTrackBuilder extends PluginManager<FeatureCodec> implemen
try {
// if the file exists, and we can read it, load the index from disk
if (indexFile.exists() && indexFile.canRead() && obtainedLock) {
// check to see if the index file is out of date
if (indexFile.lastModified() < inputFile.lastModified())
logger.warn("Tribble index file " + indexFile + " is older than the track file " + inputFile + ", this can lead to unexpected behavior");
logger.info("Loading Tribble index from disk for file " + inputFile);
return LinearIndex.createIndex(indexFile);
}

View File

@ -24,6 +24,9 @@
package org.broadinstitute.sting.gatk.refdata.tracks.builders;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
import org.broad.tribble.vcf.VCFCodec;
import org.broadinstitute.sting.BaseTest;
import org.junit.Assert;
@ -71,4 +74,55 @@ public class TribbleRMDTrackBuilderUnitTest extends BaseTest {
Assert.assertTrue(Math.abs(1274210993000l - new File(vcfFile + TribbleRMDTrackBuilder.linearIndexExtension).lastModified()) < 100);
}
@Test
public void testBuilderIndexOutOfDate() {
Logger logger = Logger.getLogger(TribbleRMDTrackBuilder.class);
ValidationAppender appender = new ValidationAppender("Tribble index file /humgen/gsa-hpprojects/GATK/data/Validation_Data/ROD_validation/newerTribbleTrack.vcf.idx is older than the track file /humgen/gsa-hpprojects/GATK/data/Validation_Data/ROD_validation/newerTribbleTrack.vcf, this can lead to unexpected behavior");
logger.addAppender(appender);
File vcfFile = new File(validationDataLocation + "/ROD_validation/newerTribbleTrack.vcf");
try {
builder.loadIndex(vcfFile,new VCFCodec(), true);
} catch (IOException e) {
e.printStackTrace();
Assert.fail("IO exception unexpected" + e.getMessage());
}
// check to make sure the appender saw the target string
Assert.assertTrue(appender.foundString());
}
}
/**
* this appender looks for a specific message in the log4j stream.
* It can be used to verify that a specific message was generated to the logging system.
*/
class ValidationAppender extends AppenderSkeleton {
private boolean foundString = false;
private String targetString = "";
public ValidationAppender(String target) {
targetString = target;
}
@Override
protected void append(LoggingEvent loggingEvent) {
if (loggingEvent.getMessage().equals(targetString))
foundString = true;
}
@Override
public void close() {
// do nothing
}
@Override
public boolean requiresLayout() {
return false;
}
public boolean foundString() {
return foundString;
}
}