use of com.datastax.fallout.ops.JobFileLoggers in project fallout by datastax.
the class FalloutExecCommand method run.
private void run(Validator validator, FC configuration, Path testYamlPath, Map<String, Object> templateParams, Path credsYamlPath, Boolean useUniqueOutputDir, Path rootOutputDir) {
final var testYaml = readString(testYamlPath);
final var userCredentials = parseUserCredentials(validator, credsYamlPath);
final var test = Test.createTest(userCredentials.owner.getEmail(), getNameWithoutExtension(testYamlPath), testYaml);
final var testRun = test.createTestRun(templateParams);
testRun.setCreatedAt(new Date());
final var outputDir = useUniqueOutputDir ? rootOutputDir.resolve(Paths.get(testRun.getTestName(), testRun.getTestRunId().toString())) : rootOutputDir;
if (Files.exists(outputDir) && (!Files.isDirectory(outputDir) || Exceptions.getUncheckedIO(() -> Files.list(outputDir).findAny().isPresent()))) {
throw new UserError("%s should either not exist, or be an existing empty directory", outputDir);
}
final var loggers = new JobFileLoggers(outputDir, true, userCredentials);
final var scratchSpace = new TestRunScratchSpaceFactory(outputDir).createGlobal();
final var persistedTestRun = new AtomicallyPersistedTestRun(testRun, testRun_ -> writeTestRunJsonAtomically(testRun_, scratchSpace.getPath(), outputDir));
final var stateStorage = new TestRunStateStorage(persistedTestRun, loggers.getShared(), () -> Exceptions.getUncheckedIO(() -> Artifacts.findTestRunArtifacts(outputDir)));
final var testRunStatusUpdater = new TestRunAbortedStatusUpdater(stateStorage);
testRunStatusUpdater.setCurrentState(TestRun.State.PREPARING_RUN);
ActiveTestRun activeTestRun;
try {
try {
activeTestRun = ActiveTestRunBuilder.create().withFalloutConfiguration(configuration).withTestDefinitionFromYaml(testRun.getExpandedDefinition()).withUserCredentials(userCredentials).withTestRunArtifactPath(outputDir).withTestRunStatusUpdater(testRunStatusUpdater).withLoggers(loggers).withTestRunScratchSpace(scratchSpace).withTestRunIdentifier(testRun.getTestRunIdentifier()).withTestRun(testRun).build();
} catch (Exception e) {
loggers.getShared().error("Exception building the ActiveTestRun", e);
testRunStatusUpdater.markFailedWithReason(TestRun.State.FAILED);
testRunStatusUpdater.markInactive(Optional.empty());
throw e;
}
persistedTestRun.update(testRun_ -> testRun_.setResourceRequirements(activeTestRun.getResourceRequirements()));
activeTestRun.run((message, ex) -> {
System.err.printf("ERROR: %s\n%s", message, ex.getMessage());
});
// passing it to io.dropwizard.Application#onFatalError, which will call System.exit(1).
if (stateStorage.getCurrentState() != TestRun.State.PASSED) {
throw new TestRunFailedError();
}
} finally {
ClojureShutdown.shutdown();
}
}
use of com.datastax.fallout.ops.JobFileLoggers in project fallout by datastax.
the class EnsembleFalloutTest method createActiveTestRunBuilder.
public ActiveTestRunBuilder createActiveTestRunBuilder() {
User testUser = getTestUser();
UserCredentials userCredentials = new UserCredentials(testUser, Optional.empty());
// secret is needed for example yamls to be valid
testUser.addGenericSecret("MY_ASTRA_TOKEN", "dummy_astra_token");
JobFileLoggers loggers = new JobFileLoggers(testRunArtifactPath(), true, userCredentials);
return ActiveTestRunBuilder.create().withTestRunScratchSpace(persistentTestScratchSpace()).withTestRunArtifactPath(testRunArtifactPath()).withTestRunIdentifier(Fakes.TEST_RUN_IDENTIFIER).withLoggers(loggers).withFalloutConfiguration(falloutConfiguration()).withTestRunStatusUpdater(new TestRunAbortedStatusUpdater(new InMemoryTestRunStateStorage(TestRun.State.CREATED))).withUserCredentials(userCredentials).withCommandExecutor(new Java8LocalCommandExecutor()).destroyEnsembleAfterTest(true);
}
Aggregations