package betsy.bpmn.engines;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import betsy.bpmn.model.BPMNAssertions;
import betsy.common.tasks.FileTasks;
import org.apache.log4j.Logger;
import pebl.benchmark.test.TestCase;
public class BPMNEnginesUtil {
private static final Logger LOGGER = Logger.getLogger(BPMNEnginesUtil.class);
public static void substituteSpecificErrorsForGenericError(TestCase testCase, Path logDir) {
if (TestCaseUtil.getTraceAssertions(testCase).contains(BPMNAssertions.ERROR_GENERIC.toString())){
List<String> toReplace = new ArrayList<>();
toReplace.add(BPMNAssertions.ERROR_DEPLOYMENT.toString());
toReplace.add(BPMNAssertions.ERROR_RUNTIME.toString());
FileTasks.replaceLogFileContent(toReplace, BPMNAssertions.ERROR_GENERIC.toString(), logDir);
}
}
public static void checkParallelExecution(TestCase testCase, Path logFile) {
// Only check on parallelism when asked for a parallel assertion
if (!TestCaseUtil.getTraceAssertions(testCase).contains(BPMNAssertions.EXECUTION_PARALLEL.toString())) {
return;
}
String testCaseNumber = String.valueOf(testCase.getNumber());
Path logParallelOne = logFile.getParent().resolve("log" + testCaseNumber + "_parallelOne.txt");
Path logParallelTwo = logFile.getParent().resolve("log" + testCaseNumber + "_parallelTwo.txt");
try {
OverlappingTimestampChecker otc = new OverlappingTimestampChecker(logFile, logParallelOne, logParallelTwo);
otc.checkParallelism();
} catch (IllegalArgumentException e) {
LOGGER.info("Could not validate parallel execution", e);
}
}
public static void checkMarkerFileExists(TestCase testCase, Path logFile) {
if (!TestCaseUtil.getTraceAssertions(testCase).contains(BPMNAssertions.MARKER_EXISTS.toString())) {
return;
}
if (Files.exists(logFile.getParent().resolve("MARKER"))) {
BPMNAssertions.appendToFile(logFile, BPMNAssertions.MARKER_EXISTS);
}
}
public static void checkDataLog(TestCase testCase, Path logFile) {
// Only check when asked for a data type assertion
if (!TestCaseUtil.getTraceAssertions(testCase).contains(BPMNAssertions.DATA_CORRECT.toString())) {
return;
}
Path dataLog = Paths.get(logFile.toString().replaceAll("\\.txt", "_data.txt"));
try {
DataLogChecker dlc = new DataLogChecker(logFile, dataLog, "String");
dlc.checkDataTypes();
} catch (IllegalArgumentException e) {
LOGGER.info("Cloud not evaluate data log");
}
}
}