Count the number of warnings and errors during SAM file validation #855

Merged
merged 1 commit into from Apr 19, 2017
Jump to file or symbol
Failed to load files and symbols.
+43 −5
Split
@@ -96,6 +96,8 @@
private boolean bisulfiteSequenced;
private IndexValidationStringency indexValidationStringency;
private boolean sequenceDictionaryEmptyAndNoWarningEmitted;
+ private int numWarnings;
+ private int numErrors;
private final int maxTempFiles;
@@ -111,6 +113,8 @@ public SamFileValidator(final PrintWriter out, final int maxTempFiles) {
this.ignoreWarnings = false;
this.bisulfiteSequenced = false;
this.sequenceDictionaryEmptyAndNoWarningEmitted = false;
+ this.numWarnings = 0;
+ this.numErrors = 0;
}
Histogram<Type> getErrorsByType() {
@@ -566,11 +570,41 @@ private void validateHeader(final SAMFileHeader fileHeader) {
}
}
+ /**
+ * Number of warnings during SAM file validation
+ *
+ * @return number of warnings
+ */
+ public int getNumWarnings() {
+ return this.numWarnings;
+ }
+
+ /**
+ * Number of errors during SAM file validation
+ *
+ * @return number of errors
+ */
+ public int getNumErrors() {
+ return this.numErrors;
+ }
+
private void addError(final SAMValidationError error) {
// Just ignore an error if it's of a type we're not interested in
if (this.errorsToIgnore.contains(error.getType())) return;
- if (this.ignoreWarnings && error.getType().severity == SAMValidationError.Severity.WARNING) return;
+ switch (error.getType().severity) {
+ case WARNING:
+ if ( this.ignoreWarnings ) {
+ return;
+ }
+ this.numWarnings++;
+ break;
+ case ERROR:
+ this.numErrors++;
+ break;
+ default:
+ throw new SAMException("Unknown SAM validation error severity: " + error.getType().severity);
+ }
this.errorsByType.increment(error.getType());
if (verbose) {
@@ -119,7 +119,9 @@ public void testVerbose() throws IOException {
validator.validateSamFileVerbose(samBuilder.getSamReader(), null);
final int lineCount = results.toString().split("\n").length;
- Assert.assertEquals(lineCount, 11);
+ Assert.assertEquals(lineCount, 11); // 1 extra message added to indicate maximum number of errors
+ Assert.assertEquals(validator.getNumErrors(), 6);
+ Assert.assertEquals(validator.getNumWarnings(), 4);
}
@Test
@@ -522,16 +524,18 @@ public void tagCorrectlyProcessTest(byte[] bytesFromFile,
@DataProvider(name = "validateBamFileTerminationData")
public Object[][] validateBamFileTerminationData() throws IOException {
return new Object[][]{
- {getBrokenFile(TERMINATION_GZIP_BLOCK_SIZE), SAMValidationError.Type.BAM_FILE_MISSING_TERMINATOR_BLOCK},
- {getBrokenFile(RANDOM_NUMBER_TRUNC_BYTE), SAMValidationError.Type.TRUNCATED_FILE}
+ {getBrokenFile(TERMINATION_GZIP_BLOCK_SIZE), SAMValidationError.Type.BAM_FILE_MISSING_TERMINATOR_BLOCK, 1, 0},
+ {getBrokenFile(RANDOM_NUMBER_TRUNC_BYTE), SAMValidationError.Type.TRUNCATED_FILE, 0, 1}
};
}
@Test(dataProvider = "validateBamFileTerminationData")
- public void validateBamFileTerminationTest(File file, SAMValidationError.Type errorType) throws IOException {
+ public void validateBamFileTerminationTest(final File file, final SAMValidationError.Type errorType, final int numWarnings, final int numErrors) throws IOException {
final SamFileValidator samFileValidator = new SamFileValidator(new PrintWriter(System.out), 8000);
samFileValidator.validateBamFileTermination(file);
Assert.assertEquals(samFileValidator.getErrorsByType().get(errorType).getValue(), 1.0);
+ Assert.assertEquals(samFileValidator.getNumWarnings(), numWarnings);
+ Assert.assertEquals(samFileValidator.getNumErrors(), numErrors);
}
private Histogram<String> executeValidation(final SamReader samReader, final ReferenceSequenceFile reference,