scenario tests stubbed, error handling in session fixed, mvn verify works now

This commit is contained in:
Jonathan Shook
2023-10-07 17:48:19 -05:00
parent bed3070495
commit 945f48983c
17 changed files with 647 additions and 632 deletions

View File

@@ -92,6 +92,7 @@ public class NBDefaultSceneFixtures implements NBSceneFixtures {
);
}
@Override
public ScriptParams params() {
return params;

View File

@@ -20,8 +20,10 @@ import io.nosqlbench.api.config.standard.TestComponent;
import io.nosqlbench.components.NBComponent;
import io.nosqlbench.engine.api.scripting.DiagReader;
import io.nosqlbench.engine.api.scripting.DiagWriter;
import io.nosqlbench.engine.api.scripting.InterjectingCharArrayWriter;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.Extensions;
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.ArrayList;
@@ -37,8 +39,8 @@ public class NBSceneBuffer implements NBSceneFixtures {
public NBSceneBuffer(NBSceneFixtures fixtures) {
this.fixtures = fixtures;
stdoutBuffer = new DiagWriter(fixtures.out(), " stdout ");
stderrBuffer = new DiagWriter(fixtures.err(), " stderr ");
stdoutBuffer = new DiagWriter(fixtures.out(), new InterjectingCharArrayWriter(" stdout "));
stderrBuffer = new DiagWriter(fixtures.err(), new InterjectingCharArrayWriter(" stderr "));
stdinBuffer = new DiagReader(fixtures.in(), " stdin ");
}
@@ -77,17 +79,17 @@ public class NBSceneBuffer implements NBSceneFixtures {
return stdinBuffer;
}
public List<String> getTimedLogLines() {
List<String> log = new ArrayList<String>();
Optional.ofNullable(this.stdinBuffer).map(DiagReader::getTimedLog).ifPresent(log::addAll);
Optional.ofNullable(this.stderrBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
Optional.ofNullable(this.stdoutBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
log = log.stream().map(l -> l.endsWith("\n") ? l : l+"\n").collect(Collectors.toList());
return log;
}
// public List<String> getTimedLogLines() {
// List<String> log = new ArrayList<String>();
// Optional.ofNullable(this.stdinBuffer).map(DiagReader::getTimedLog).ifPresent(log::addAll);
// Optional.ofNullable(this.stderrBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
// Optional.ofNullable(this.stdoutBuffer).map(DiagWriter::getTimedLog).ifPresent(log::addAll);
// log = log.stream().map(l -> l.endsWith("\n") ? l : l+"\n").collect(Collectors.toList());
// return log;
// }
public String getIOLog() {
return String.join("",getTimedLogLines());
return this.stdoutBuffer.getTimedLog()+this.stderrBuffer.getTimedLog();
}
public NBSceneFixtures asFixtures() {

View File

@@ -30,10 +30,7 @@ import org.graalvm.polyglot.EnvironmentAccess;
import org.graalvm.polyglot.HostAccess;
import org.graalvm.polyglot.PolyglotAccess;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.*;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
@@ -66,7 +63,7 @@ public class NBScriptedScenario extends NBScenario {
private ActivitiesProgressIndicator activitiesProgressIndicator;
private String progressInterval = "console:1m";
// private ScenarioScriptShell scriptEnv;
// private ScenarioScriptShell scriptEnv;
private final String scenarioName;
private ScriptParams scenarioScriptParams;
private final Engine engine = Engine.Graalvm;
@@ -88,7 +85,9 @@ public class NBScriptedScenario extends NBScenario {
public static NBScriptedScenario ofScripted(String name, Map<String, String> params, NBComponent parent, Invocation invocation) {
return new NBScriptedScenario(name, parent);
};
}
;
public NBScriptedScenario addScriptText(final String scriptText) {
@@ -117,7 +116,7 @@ public class NBScriptedScenario extends NBScenario {
private BufferedScriptContext initializeScriptContext(NBSceneFixtures fixtures) {
BufferedScriptContext ctx = new BufferedScriptContext(fixtures);
// this.scriptEngine.setContext(ctx);
ctx.getBindings(ScriptContext.ENGINE_SCOPE).put("scenario",new PolyglotScenarioController(fixtures.controller()));
ctx.getBindings(ScriptContext.ENGINE_SCOPE).put("scenario", new PolyglotScenarioController(fixtures.controller()));
return ctx;
}
@@ -142,68 +141,40 @@ public class NBScriptedScenario extends NBScenario {
scriptEngine = GraalJSScriptEngine.create(polyglotEngine, contextSettings);
}
protected synchronized void runScenario(NBSceneFixtures shell) {
if (null == result) {
try {
this.logger.debug("Initializing scripting engine for {}.", scenarioName);
this.initializeScriptingEngine();
this.context = this.initializeScriptContext(shell);
this.logger.debug("Running control script for {}.", scenarioName);
this.executeScenarioScripts();
} catch (final Exception e) {
error = e;
} finally {
this.logger.debug("{} scenario run", null == this.error ? "NORMAL" : "ERRORED");
}
protected final void runScenario(NBSceneFixtures shell) {
try {
this.logger.debug("Initializing scripting engine for {}.", scenarioName);
this.initializeScriptingEngine();
this.context = this.initializeScriptContext(shell);
this.logger.debug("Running control script for {}.", scenarioName);
this.executeScenarioScripts();
} catch (ScriptException e) {
throw new RuntimeException(e);
} finally {
this.endedAtMillis = System.currentTimeMillis();
// this.logger.debug("{} scenario run", null == this.error ? "NORMAL" : "ERRORED");
}
// String iolog = error != null ? error.toString() : this.scriptEnv.getTimedLog();
// result = new ExecutionMetricsResult(startedAtMillis, endedAtMillis, iolog, this.error);
// this.result.reportMetricsSummaryToLog();
}
private void executeScenarioScripts() throws ScriptException {
for (final String script : this.scripts) {
if ((scriptEngine instanceof Compilable compilableEngine)) {
this.logger.debug("Using direct script compilation");
final CompiledScript compiled = compilableEngine.compile(script);
this.logger.debug("-> invoking main scenario script (compiled)");
compiled.eval(this.context);
this.logger.debug("<- scenario script completed (compiled)");
} else {
this.logger.debug("-> invoking main scenario script (interpreted)");
this.scriptEngine.eval(script);
this.logger.debug("<- scenario control script completed (interpreted)");
}
}
}
private void executeScenarioScripts() {
for (final String script : this.scripts)
try {
Object result = null;
if ((scriptEngine instanceof Compilable compilableEngine)) {
this.logger.debug("Using direct script compilation");
final CompiledScript compiled = compilableEngine.compile(script);
this.logger.debug("-> invoking main scenario script (compiled)");
result = compiled.eval(this.context);
this.logger.debug("<- scenario script completed (compiled)");
}
// else if ((null != scriptfile) && !this.scriptfile.isEmpty()) {
// final String filename = this.scriptfile.replace("_SESSION_", this.scenarioName);
// this.logger.debug("-> invoking main scenario script (interpreted from {})", filename);
// final Path written = Files.writeString(
// Path.of(filename),
// script,
// StandardOpenOption.TRUNCATE_EXISTING,
// StandardOpenOption.CREATE
// );
// final BufferedReader reader = Files.newBufferedReader(written);
// this.scriptEngine.eval(reader);
// this.logger.debug("<- scenario control script completed (interpreted) from {})", filename);
// }
else {
this.logger.debug("-> invoking main scenario script (interpreted)");
result = this.scriptEngine.eval(script);
this.logger.debug("<- scenario control script completed (interpreted)");
}
if (null != result)
this.logger.debug("scenario result: type({}): value:{}", result.getClass().getCanonicalName(), result);
} catch (final Exception e) {
error = e;
this.logger.error("Error in scenario, shutting down. ({})", e);
} finally {
this.endedAtMillis = System.currentTimeMillis();
System.out.flush();
System.err.flush();
}
}
@Override
public boolean equals(final Object o) {