Search in sources :

Example 1 with TestRunStateStorage

use of com.datastax.fallout.runner.TestRunStateStorage 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();
    }
}
Also used : JobFileLoggers(com.datastax.fallout.ops.JobFileLoggers) TestRunAbortedStatusUpdater(com.datastax.fallout.harness.TestRunAbortedStatusUpdater) TestRunScratchSpaceFactory(com.datastax.fallout.ops.TestRunScratchSpaceFactory) AtomicallyPersistedTestRun(com.datastax.fallout.runner.AtomicallyPersistedTestRun) ActiveTestRun(com.datastax.fallout.harness.ActiveTestRun) TestRunStateStorage(com.datastax.fallout.runner.TestRunStateStorage) Date(java.util.Date)

Aggregations

ActiveTestRun (com.datastax.fallout.harness.ActiveTestRun)1 TestRunAbortedStatusUpdater (com.datastax.fallout.harness.TestRunAbortedStatusUpdater)1 JobFileLoggers (com.datastax.fallout.ops.JobFileLoggers)1 TestRunScratchSpaceFactory (com.datastax.fallout.ops.TestRunScratchSpaceFactory)1 AtomicallyPersistedTestRun (com.datastax.fallout.runner.AtomicallyPersistedTestRun)1 TestRunStateStorage (com.datastax.fallout.runner.TestRunStateStorage)1 Date (java.util.Date)1