Skip to content

Commit c570d34

Browse files
committed
VAL-446 Improve error handling & reporting around file handling
1 parent 0208b12 commit c570d34

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

src/main/java/org/ihtsdo/rvf/core/service/DroolsRulesValidationService.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ private List<InvalidContent> validateFiles(ValidationRunConfig validationConfig,
304304
!uuidAssertionMap.get(UUID.fromString(item.getRuleId())).getGroups().contains("int-authoring"))
305305
|| ((uuidAssertionMap.get(UUID.fromString(item.getRuleId())).getGroups().contains("common-authoring") ||
306306
uuidAssertionMap.get(UUID.fromString(item.getRuleId())).getGroups().contains("int-authoring"))
307-
&& modules.contains(item.getComponent().getModuleId()))).collect(Collectors.toList());
307+
&& modules.contains(item.getComponent().getModuleId()))).toList();
308308
}
309309
}
310310

@@ -342,6 +342,7 @@ private List<InvalidContent> checkAgainstWhiteListedItems(List<InvalidContent> i
342342
}
343343

344344
private void extractFiles(ValidationRunConfig validationConfig, Set<String> extractedRF2FilesDirectories, Set<String> previousReleaseDirectories) throws RVFExecutionException, ReleaseImportException, IOException {
345+
verifyLocalFile("extracting prospective file", validationConfig.getLocalProspectiveFile());
345346
try (InputStream testedReleaseFileStream = new FileInputStream(validationConfig.getLocalProspectiveFile())) {
346347
// If the validation is Delta validation, previous snapshot file must be loaded to snapshot files list.
347348
if (validationConfig.isRf2DeltaOnly()) {
@@ -364,18 +365,26 @@ private void extractFiles(ValidationRunConfig validationConfig, Set<String> extr
364365
if (StringUtils.isBlank(validationConfig.getExtensionDependency()) || !validationConfig.getExtensionDependency().endsWith(EXT_ZIP)) {
365366
throw new RVFExecutionException("Drools validation cannot execute when Extension Dependency is empty or not a .zip file: " + validationConfig.getExtensionDependency());
366367
}
368+
verifyLocalFile("extracting dependency file", validationConfig.getLocalDependencyReleaseFile());
367369
try (InputStream dependencyStream = new FileInputStream(validationConfig.getLocalDependencyReleaseFile())) {
368370
extractedRF2FilesDirectories.add(new ReleaseImporter().unzipRelease(dependencyStream, ReleaseImporter.ImportType.SNAPSHOT).getAbsolutePath());
369371
}
370372
}
371373

372374
if (StringUtils.isNotBlank(validationConfig.getPreviousRelease()) && validationConfig.getPreviousRelease().endsWith(EXT_ZIP)) {
375+
verifyLocalFile("extracting previous release file", validationConfig.getLocalPreviousReleaseFile());
373376
try (InputStream previousReleaseStream = new FileInputStream(validationConfig.getLocalPreviousReleaseFile())) {
374377
previousReleaseDirectories.add(new ReleaseImporter().unzipRelease(previousReleaseStream, ReleaseImporter.ImportType.SNAPSHOT).getAbsolutePath());
375378
}
376379
}
377380
}
378381

382+
private void verifyLocalFile(String step, File file) throws RVFExecutionException {
383+
if (file == null || !file.exists() || !file.canRead()) {
384+
throw new RVFExecutionException("Drools validation failure while " + step + " as it is null, not found, or cannot be read. File name: '" + file + "'");
385+
}
386+
}
387+
379388
private UUID parseUUID(String uuid) {
380389
try{
381390
return UUID.fromString(uuid);

src/main/java/org/ihtsdo/rvf/core/service/MysqlValidationService.java

+16-10
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package org.ihtsdo.rvf.core.service;
22

3-
import org.apache.commons.lang3.exception.ExceptionUtils;
3+
44
import org.ihtsdo.otf.rest.client.RestClientException;
55
import org.ihtsdo.otf.rest.exception.BusinessServiceException;
6+
import org.ihtsdo.otf.utils.ExceptionUtils;
67
import org.ihtsdo.rvf.core.data.model.*;
78
import org.ihtsdo.rvf.core.service.config.MysqlExecutionConfig;
89
import org.ihtsdo.rvf.core.service.config.ValidationRunConfig;
@@ -76,25 +77,30 @@ public ValidationStatusReport runRF2MysqlValidations(ValidationRunConfig validat
7677
}
7778

7879
String reportStorage = validationConfig.getStorageLocation();
80+
String lastItemLoadAttempted = "Item Unknown";
7981
try {
8082
// prepare release data for testing
83+
lastItemLoadAttempted = "Previous Release - " + executionConfig.getPreviousVersion();
8184
releaseVersionLoader.loadPreviousVersion(executionConfig);
8285
if (releaseVersionLoader.isUnknownVersion(executionConfig.getPreviousVersion())) {
8386
statusReport.addFailureMessage("Failed to load previous release " + executionConfig.getPreviousVersion());
8487
}
8588

8689
// load dependency release
8790
releaseVersionLoader.loadDependencyVersion(executionConfig);
91+
lastItemLoadAttempted = "Dependency Release - " + executionConfig.getExtensionDependencyVersion();
8892
if (releaseVersionLoader.isUnknownVersion(executionConfig.getExtensionDependencyVersion())) {
8993
statusReport.addFailureMessage("Failed to load dependency release " + executionConfig.getExtensionDependencyVersion());
9094
}
9195
// load prospective version
96+
lastItemLoadAttempted = "Prospective Release - " + executionConfig.getProspectiveVersion();
9297
releaseVersionLoader.loadProspectiveVersion(statusReport, executionConfig, validationConfig);
9398
} catch (Exception e) {
94-
String errorMsg = String.format("Failed to load data into MySql due to %s", ExceptionUtils.getRootCauseMessage(e));
95-
LOGGER.error(errorMsg, e);
96-
statusReport.addFailureMessage(errorMsg);
97-
statusReport.getReportSummary().put(TestType.SQL.name(), errorMsg);
99+
String errorMsg = String.format("Failed to load data (%s) into MySql", lastItemLoadAttempted);
100+
String errorMsgWithCause = ExceptionUtils.getExceptionCause(errorMsg, e);
101+
LOGGER.error(errorMsgWithCause, e);
102+
statusReport.addFailureMessage(errorMsgWithCause);
103+
statusReport.getReportSummary().put(TestType.SQL.name(), errorMsgWithCause);
98104
return statusReport;
99105
}
100106
if (executionConfig.isExtensionValidation()) {
@@ -138,10 +144,10 @@ private void runExtensionReleaseValidation(ValidationStatusReport statusReport,
138144
releaseVersionLoader.combineCurrentExtensionWithDependencySnapshot(executionConfig, validationConfig);
139145
this.legacyProspectiveVersions.add(executionConfig.getProspectiveVersion());
140146
} catch (BusinessServiceException e) {
141-
String msg = String.format("Failed to prepare data for extension testing due to error %s", ExceptionUtils.getRootCauseMessage(e));
142-
statusReport.addFailureMessage(msg);
143-
LOGGER.error(msg, e);
144-
statusReport.getReportSummary().put(TestType.SQL.name(), msg);
147+
String errMsg = ExceptionUtils.getExceptionCause("Failed to prepare data for extension testing", e);
148+
statusReport.addFailureMessage(errMsg);
149+
LOGGER.error(errMsg, e);
150+
statusReport.getReportSummary().put(TestType.SQL.name(), errMsg);
145151
}
146152
}
147153
testItems.addAll(runAssertionTests(executionConfig, noneReleaseTypeAssertions, reportStorage, true));
@@ -289,7 +295,7 @@ private void constructTestReport(ValidationStatusReport statusReport, MysqlExecu
289295
report.addFailedAssertions(Collections.emptyList());
290296
report.addWarningAssertions(Collections.emptyList());
291297
report.addPassedAssertions(Collections.emptyList());
292-
statusReport.addFailureMessage(String.format("Failed to extract test results caused by %s", ExceptionUtils.getRootCauseMessage(exception)));
298+
statusReport.addFailureMessage(ExceptionUtils.getExceptionCause("Failed to extract test results",exception));
293299
}
294300

295301
final long timeEnd = System.currentTimeMillis();

src/main/java/org/ihtsdo/rvf/core/service/ValidationVersionLoader.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void loadPreviousVersion(MysqlExecutionConfig executionConfig) throws Bus
8484
String rvfDbSchema = loadRelease(executionConfig.getPreviousVersion());
8585
executionConfig.setPreviousVersion(rvfDbSchema);
8686
} else {
87-
throw new BusinessServiceException("Previous release specified is not found "
87+
throw new BusinessServiceException("Previous release specified is not found: "
8888
+ executionConfig.getPreviousVersion());
8989
}
9090
}

0 commit comments

Comments
 (0)