mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
scenario tests stubbed, error handling in session fixed, mvn verify works now
This commit is contained in:
parent
bed3070495
commit
945f48983c
@ -16,6 +16,7 @@
|
||||
package io.nosqlbench.engine.api.scripting;
|
||||
|
||||
import javax.script.SimpleScriptContext;
|
||||
import java.io.CharArrayWriter;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
@ -42,7 +43,7 @@ public class ScriptEnvBuffer extends SimpleScriptContext {
|
||||
synchronized(this) {
|
||||
if (stdoutBuffer==null) {
|
||||
Writer superWriter = super.getWriter();
|
||||
stdoutBuffer = new DiagWriter(superWriter, " stdout ");
|
||||
stdoutBuffer = new DiagWriter(superWriter, new InterjectingCharArrayWriter(" stdout "));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -55,7 +56,7 @@ public class ScriptEnvBuffer extends SimpleScriptContext {
|
||||
synchronized(this) {
|
||||
if (stderrBuffer==null) {
|
||||
Writer superErrorWriter = super.getErrorWriter();
|
||||
stderrBuffer = new DiagWriter(superErrorWriter, " error ");
|
||||
stderrBuffer = new DiagWriter(superErrorWriter, new InterjectingCharArrayWriter(" stderr "));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -79,24 +80,17 @@ public class ScriptEnvBuffer extends SimpleScriptContext {
|
||||
return stdinBuffer.buffer.toString();
|
||||
}
|
||||
|
||||
public String getStderrText() {
|
||||
return stderrBuffer.buffer.toString();
|
||||
}
|
||||
|
||||
public String getStdoutText() {
|
||||
return stdoutBuffer.buffer.toString();
|
||||
}
|
||||
|
||||
public List<String> getTimeLogLines() {
|
||||
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> getTimeLogLines() {
|
||||
// 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 getTimedLog() {
|
||||
return getTimeLogLines().stream().collect(Collectors.joining());
|
||||
return this.stdoutBuffer.getTimedLog()+this.stderrBuffer.getTimedLog();
|
||||
// return getTimeLogLines().stream().collect(Collectors.joining());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ public class NBDefaultSceneFixtures implements NBSceneFixtures {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ScriptParams params() {
|
||||
return params;
|
||||
|
@ -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() {
|
||||
|
@ -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) {
|
||||
|
@ -26,10 +26,11 @@ import org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction;
|
||||
import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.graalvm.polyglot.Value;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.ToDoubleFunction;
|
||||
|
||||
public class BobyqaOptimizerInstance extends NBBaseComponent {
|
||||
|
||||
@ -42,7 +43,7 @@ public class BobyqaOptimizerInstance extends NBBaseComponent {
|
||||
|
||||
private final MVParams params = new MVParams();
|
||||
|
||||
private MultivariateFunction objectiveFunctionFromScript;
|
||||
private MultivariateFunction objectiveFunction;
|
||||
private SimpleBounds bounds;
|
||||
private InitialGuess initialGuess;
|
||||
private PointValuePair result;
|
||||
@ -93,17 +94,31 @@ public class BobyqaOptimizerInstance extends NBBaseComponent {
|
||||
return this;
|
||||
}
|
||||
|
||||
public BobyqaOptimizerInstance setObjectiveFunction(Object f) {
|
||||
if (f instanceof Function) {
|
||||
// Function<Object[],Object> function = (Function<Object[],Object>)f;
|
||||
this.objectiveFunctionFromScript =
|
||||
new PolyglotMultivariateObjectScript(logger, params, f);
|
||||
} else {
|
||||
throw new RuntimeException("The objective function must be recognizable as a polyglot Function");
|
||||
}
|
||||
|
||||
public BobyqaOptimizerInstance setObjectiveFunction(ToDoubleFunction<double[]> f) {
|
||||
this.objectiveFunction = new MultivariateFunction() {
|
||||
@Override
|
||||
public double value(double[] point) {
|
||||
return f.applyAsDouble(point);
|
||||
}
|
||||
};
|
||||
return this;
|
||||
}
|
||||
public BobyqaOptimizerInstance setObjectiveFunction(MultivariateFunction f) {
|
||||
this.objectiveFunction = f;
|
||||
return this;
|
||||
}
|
||||
public BobyqaOptimizerInstance setObjectiveFunction(Value f) {
|
||||
throw new RuntimeException("replace me");
|
||||
// if (f instanceof Function) {
|
||||
//// Function<Object[],Object> function = (Function<Object[],Object>)f;
|
||||
// this.objectiveFunctionFromScript =
|
||||
// new PolyglotMultivariateObjectScript(logger, params, f);
|
||||
// } else {
|
||||
// throw new RuntimeException("The objective function must be recognizable as a polyglot Function");
|
||||
// }
|
||||
//
|
||||
// return this;
|
||||
}
|
||||
|
||||
public BobyqaOptimizerInstance setMaxEval(int maxEval) {
|
||||
this.maxEval = maxEval;
|
||||
@ -121,7 +136,7 @@ public class BobyqaOptimizerInstance extends NBBaseComponent {
|
||||
this.stoppingTrustRegionRadius
|
||||
);
|
||||
|
||||
this.mvLogger = new MVLogger(this.objectiveFunctionFromScript);
|
||||
this.mvLogger = new MVLogger(this.objectiveFunction);
|
||||
ObjectiveFunction objective = new ObjectiveFunction(this.mvLogger);
|
||||
|
||||
List<OptimizationData> od = List.of(
|
||||
|
@ -130,8 +130,8 @@ public class NBBuilders {
|
||||
// return new ExamplePlugin(component);
|
||||
// }
|
||||
|
||||
public BobyqaOptimizerInstance bobyqaOptimizer(final NBComponent component) {
|
||||
return new BobyqaOptimizerInstance(component);
|
||||
public BobyqaOptimizerInstance bobyqaOptimizer() {
|
||||
return new BobyqaOptimizerInstance(base);
|
||||
}
|
||||
|
||||
public FileAccess fileAccess(String filename) {
|
||||
|
@ -22,256 +22,44 @@ import java.io.CharArrayWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.Writer;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class DiagWriter extends PrintWriter {
|
||||
|
||||
Writer wrapped;
|
||||
private final String prefix;
|
||||
CharArrayWriter buffer = new CharArrayWriter();
|
||||
private final List<String> timedLog = new ArrayList<String>();
|
||||
private final StringBuilder sb = new StringBuilder();
|
||||
private int checkpoint = 0;
|
||||
|
||||
private final DateTimeFormatter tsformat = DateTimeFormatter.ISO_DATE_TIME;
|
||||
Writer wrapped;
|
||||
InterjectingCharArrayWriter buffer;
|
||||
|
||||
public DiagWriter(Writer wrapped, String prefix) {
|
||||
super(wrapped);
|
||||
public DiagWriter(Writer wrapped, InterjectingCharArrayWriter buffer) {
|
||||
super(new FanWriter(buffer,wrapped));
|
||||
this.wrapped = wrapped;
|
||||
this.prefix = prefix;
|
||||
this.buffer = buffer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(char[] cbuf, int off, int len) {
|
||||
buffer.write(cbuf, off, len);
|
||||
String text = new String(cbuf, off, len);
|
||||
|
||||
sb.append(text);
|
||||
checkpointIf();
|
||||
|
||||
super.write(cbuf, off, len);
|
||||
public String getBuf() {
|
||||
return this.buffer.toString();
|
||||
}
|
||||
|
||||
private void check() {
|
||||
if (sb.substring(checkpoint,sb.length()).contains("\n")) {
|
||||
checkpoint();
|
||||
private final static Pattern nl = Pattern.compile("([^\n]*\n?)");
|
||||
public String getTimedLog() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
long[] times = buffer.getTimes();
|
||||
int idx=0;
|
||||
Matcher finder = nl.matcher(buffer.toString());
|
||||
while (finder.find()) {
|
||||
String tsprefix = LocalDateTime.ofInstant(Instant.ofEpochMilli(times[idx++]), ZoneId.systemDefault()).format(tsformat);
|
||||
sb.append(tsprefix).append(" ").append(finder.group(0));
|
||||
}
|
||||
}
|
||||
|
||||
private void checkpointIf() {
|
||||
if (checkpoint==sb.length()) {
|
||||
return;
|
||||
}
|
||||
if (sb.substring(checkpoint,sb.length()).contains("\n")) {
|
||||
checkpoint();
|
||||
checkpointIf();
|
||||
}
|
||||
}
|
||||
private void checkpoint() {
|
||||
String tsprefix = LocalDateTime.now().format(tsformat);
|
||||
String msgs = sb.toString();
|
||||
String extra = msgs.substring(msgs.lastIndexOf("\n") + 1);
|
||||
sb.setLength(0);
|
||||
sb.append(extra);
|
||||
String[] parts = msgs.substring(0, msgs.length() - extra.length()).split("\n");
|
||||
for (String part : parts) {
|
||||
if (!part.isBlank()) {
|
||||
String tslogEntry = tsprefix + prefix + part + "\n";
|
||||
timedLog.add(tslogEntry);
|
||||
}
|
||||
}
|
||||
checkpoint = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(int c) {
|
||||
this.buffer.write(c);
|
||||
sb.append((char)c);
|
||||
checkpointIf();
|
||||
super.write(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull char[] buf) {
|
||||
try {
|
||||
this.buffer.write(buf);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
sb.append(buf);
|
||||
checkpointIf();
|
||||
super.write(buf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull String s, int off, int len) {
|
||||
this.buffer.write(s,off,len);
|
||||
sb.append(s);
|
||||
checkpointIf();
|
||||
super.write(s, off, len);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull String s) {
|
||||
try {
|
||||
sb.append(s);
|
||||
this.buffer.write(s);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
checkpointIf();
|
||||
super.write(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(boolean b) {
|
||||
super.print(b);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(char c) {
|
||||
super.print(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(int i) {
|
||||
super.print(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(long l) {
|
||||
super.print(l);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(float f) {
|
||||
super.print(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(double d) {
|
||||
super.print(d);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(@NotNull char[] s) {
|
||||
super.print(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(String s) {
|
||||
super.print(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(Object obj) {
|
||||
super.print(obj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println() {
|
||||
super.println();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(boolean x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(char x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(int x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(long x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(float x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(double x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(@NotNull char[] x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(String x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void println(Object x) {
|
||||
super.println(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter printf(@NotNull String format, Object... args) {
|
||||
return super.printf(format, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter printf(Locale l, @NotNull String format, Object... args) {
|
||||
return super.printf(l, format, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter format(@NotNull String format, Object... args) {
|
||||
return super.format(format, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter format(Locale l, @NotNull String format, Object... args) {
|
||||
return super.format(l, format, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter append(CharSequence csq) {
|
||||
return super.append(csq);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter append(CharSequence csq, int start, int end) {
|
||||
return super.append(csq, start, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter append(char c) {
|
||||
return super.append(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() {
|
||||
buffer.flush();
|
||||
checkpoint();
|
||||
super.flush();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
buffer.close();
|
||||
checkpoint();
|
||||
super.close();
|
||||
}
|
||||
|
||||
public List<String> getTimedLog() {
|
||||
return timedLog;
|
||||
finder.appendTail(sb);
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,54 @@
|
||||
package io.nosqlbench.engine.api.scripting;
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
|
||||
final class FanWriter extends Writer {
|
||||
private final Writer[] writers;
|
||||
|
||||
public FanWriter(Writer... writers) {
|
||||
this.writers = writers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(char @NotNull [] cbuf, int off, int len) throws IOException {
|
||||
for (Writer writer : writers) {
|
||||
writer.write(cbuf, off, len);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() throws IOException {
|
||||
for (Writer writer : writers) {
|
||||
writer.flush();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
for (Writer writer : writers) {
|
||||
writer.close();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,106 @@
|
||||
package io.nosqlbench.engine.api.scripting;
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.CharArrayWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class InterjectingCharArrayWriter extends CharArrayWriter {
|
||||
private final DateTimeFormatter tsformat = DateTimeFormatter.ISO_DATE_TIME;
|
||||
private final String prefix;
|
||||
private int offset = 0;
|
||||
private long[] times = new long[10];
|
||||
private int timeidx = 0;
|
||||
|
||||
public InterjectingCharArrayWriter(String prefix) {
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
public long[] getTimes() {
|
||||
return times;
|
||||
}
|
||||
@Override
|
||||
public void write(int c) {
|
||||
super.write(c);
|
||||
markTime();
|
||||
}
|
||||
|
||||
private void markTime() {
|
||||
long now = -1L;
|
||||
if (offset == 0) {
|
||||
now = appendTime(-1);
|
||||
}
|
||||
if (count > offset) {
|
||||
for (int i = offset; i < count; i++) {
|
||||
if (buf[i]=='\n') {
|
||||
appendTime(now);
|
||||
}
|
||||
}
|
||||
}
|
||||
offset=count;
|
||||
}
|
||||
|
||||
private long appendTime(long time) {
|
||||
if (time < 0) {
|
||||
time = System.currentTimeMillis();
|
||||
}
|
||||
if (times.length < timeidx) {
|
||||
long[] realloc = new long[times.length << 1];
|
||||
System.arraycopy(times, 0, realloc, 0, times.length);
|
||||
this.times = realloc;
|
||||
}
|
||||
this.times[timeidx++] = time;
|
||||
return time;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(Writer out) throws IOException {
|
||||
super.writeTo(out);
|
||||
markTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(char[] c, int off, int len) {
|
||||
super.write(c, off, len);
|
||||
markTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull char[] cbuf) throws IOException {
|
||||
super.write(cbuf);
|
||||
markTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull String str) throws IOException {
|
||||
super.write(str);
|
||||
markTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(String str, int off, int len) {
|
||||
super.write(str,off,len);
|
||||
markTime();
|
||||
}
|
||||
}
|
@ -39,7 +39,7 @@ public abstract class SCBaseScenario extends NBScenario {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void runScenario(NBSceneFixtures shell) {
|
||||
protected final void runScenario(NBSceneFixtures shell) {
|
||||
this.component = shell.component();
|
||||
this.stdin = shell.in();
|
||||
this.stdout = shell.out();
|
||||
|
@ -1,288 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.nbr.examples;
|
||||
|
||||
import io.nosqlbench.api.config.standard.TestComponent;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenarioResult;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenariosExecutor;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenariosResults;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.script.NBScriptedScenario;
|
||||
import org.apache.commons.compress.utils.IOUtils;
|
||||
import org.assertj.core.data.Offset;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.parallel.Execution;
|
||||
import org.junit.jupiter.api.parallel.ExecutionMode;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@Disabled
|
||||
@Execution(ExecutionMode.SAME_THREAD)
|
||||
public class ScriptExampleTests {
|
||||
|
||||
public static ScenarioResult runScenario(String scriptname, String... params) {
|
||||
if ((params.length % 2) != 0) {
|
||||
throw new RuntimeException("params must be pairwise key, value, ...");
|
||||
}
|
||||
Map<String, String> paramsMap = new HashMap<>();
|
||||
|
||||
for (int i = 0; i < params.length; i += 2) {
|
||||
paramsMap.put(params[i], params[i + 1]);
|
||||
}
|
||||
String scenarioName = "scenario " + scriptname;
|
||||
System.out.println("=".repeat(29) + " Running integration test for example scenario: " + scenarioName);
|
||||
|
||||
ScenariosExecutor executor = new ScenariosExecutor(new TestComponent("test","test"),ScriptExampleTests.class.getSimpleName() + ":" + scriptname, 1);
|
||||
NBScriptedScenario s = NBScriptedScenario.ofScripted(scenarioName,Map.of(),new TestComponent("test","test"), NBScriptedScenario.Invocation.EXECUTE_SCRIPT);
|
||||
|
||||
// s.addScenarioScriptParams(paramsMap);
|
||||
|
||||
ClassLoader cl = ScriptExampleTests.class.getClassLoader();
|
||||
String script;
|
||||
try {
|
||||
String scriptPath = "scripts/examples/" + scriptname + ".js";
|
||||
InputStream sstream = cl.getResourceAsStream(scriptPath);
|
||||
if (sstream==null) {
|
||||
throw new RuntimeException("Integrated test tried to load '" + scriptPath + "', but it was not there.");
|
||||
}
|
||||
byte[] bytes = IOUtils.toByteArray(sstream);
|
||||
script = new String(bytes, StandardCharsets.UTF_8);
|
||||
} catch (IOException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
s.addScriptText(script);
|
||||
// s.addScriptText("load('classpath:scripts/async/" + scriptname + ".js');");
|
||||
executor.execute(s,paramsMap);
|
||||
ScenariosResults scenariosResults = executor.awaitAllResults();
|
||||
ScenarioResult scenarioResult = scenariosResults.getOne();
|
||||
executor.shutdownNow();
|
||||
return scenarioResult;
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@BeforeAll
|
||||
public static void logit() {
|
||||
System.out.println("Running ASYNC version of Script Integration Tests.");
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void testLinkedInput() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("linkedinput");
|
||||
// Pattern p = Pattern.compile(".*started leader.*started follower.*stopped leader.*stopped follower.*",
|
||||
// Pattern.DOTALL);
|
||||
// assertThat(p.matcher(scenarioResult.getIOLog()).matches()).isTrue();
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testCycleRate() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("cycle_rate");
|
||||
// String iolog = scenarioResult.getIOLog();
|
||||
// System.out.println("iolog\n" + iolog);
|
||||
// Pattern p = Pattern.compile(".*mean cycle rate = (\\d[.\\d]+).*", Pattern.DOTALL);
|
||||
// Matcher m = p.matcher(iolog);
|
||||
// assertThat(m.matches()).isTrue();
|
||||
//
|
||||
// String digits = m.group(1);
|
||||
// assertThat(digits).isNotEmpty();
|
||||
// double rate = Double.parseDouble(digits);
|
||||
// assertThat(rate).isCloseTo(500, Offset.offset(100.0));
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testExtensionPoint() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("extensions");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("sum is 46");
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testOptimo() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("optimo");
|
||||
// String iolog = scenarioResult.getIOLog();
|
||||
// System.out.println("iolog\n" + iolog);
|
||||
// assertThat(iolog).contains("map of result was");
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testExtensionCsvMetrics() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("extension_csvmetrics");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("started new csvmetrics: logs/csvmetricstestdir");
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testScriptParamsVariable() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("params_variable", "one", "two", "three", "four");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("params[\"one\"]='two'");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("params[\"three\"]='four'");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("overridden[\"three\"] [overridden-three-five]='five'");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("defaulted.get[\"four\"] [defaulted-four-niner]='niner'");
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testScriptParamsUndefVariableWithOverride() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("undef_param", "one", "two", "three", "four");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("before: params[\"three\"]:four");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("before: params.three:four");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("after: params[\"three\"]:undefined");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("after: params.three:undefined");
|
||||
// }
|
||||
|
||||
// TODO - length >= 2 expected, not passing with changes for metrics
|
||||
// @Test
|
||||
// public void testExtensionHistoStatsLogger() throws IOException {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("extension_histostatslogger");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("stdout started " +
|
||||
// "logging to logs/histostats.csv");
|
||||
// List<String> strings = Files.readAllLines(Paths.get(
|
||||
// "logs/histostats.csv"));
|
||||
// String logdata = strings.stream().collect(Collectors.joining("\n"));
|
||||
// assertThat(logdata).contains("min,p25,p50,p75,p90,p95,");
|
||||
// assertThat(logdata.split("Tag=testhistostatslogger.cycles_servicetime,").length).isGreaterThanOrEqualTo(1);
|
||||
// }
|
||||
|
||||
@Test
|
||||
public void testExtensionCsvOutput() throws IOException {
|
||||
ScenarioResult scenarioResult = runScenario("extension_csvoutput");
|
||||
List<String> strings = Files.readAllLines(Paths.get(
|
||||
"logs/csvoutputtestfile.csv"));
|
||||
String logdata = strings.stream().collect(Collectors.joining("\n"));
|
||||
assertThat(logdata).contains("header1,header2");
|
||||
assertThat(logdata).contains("value1,value2");
|
||||
}
|
||||
|
||||
// TODO - length >= 2 expected, not passing with changes for metrics
|
||||
// @Test
|
||||
// public void testExtensionHistogramLogger() throws IOException {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("extension_histologger");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("stdout started logging to hdrhistodata.log");
|
||||
// List<String> strings = Files.readAllLines(Paths.get("hdrhistodata.log"));
|
||||
// String logdata = strings.stream().collect(Collectors.joining("\n"));
|
||||
// assertThat(logdata).contains(",HIST");
|
||||
// assertThat(logdata.split("Tag=testhistologger.cycles_servicetime,").length).isGreaterThanOrEqualTo(1);
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testBlockingRun() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("blockingrun");
|
||||
// int a1end = scenarioResult.getIOLog().indexOf("blockingactivity1 finished");
|
||||
// int a2start = scenarioResult.getIOLog().indexOf("running blockingactivity2");
|
||||
// assertThat(a1end).isLessThan(a2start);
|
||||
// }
|
||||
|
||||
@Test
|
||||
public void testAwaitFinished() {
|
||||
ScenarioResult scenarioResult = runScenario("awaitfinished");
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void testStartStop() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("startstopdiag");
|
||||
// int startedAt = scenarioResult.getIOLog().indexOf("starting activity teststartstopdiag");
|
||||
// int stoppedAt = scenarioResult.getIOLog().indexOf("stopped activity teststartstopdiag");
|
||||
// assertThat(startedAt).isGreaterThan(0);
|
||||
// assertThat(stoppedAt).isGreaterThan(startedAt);
|
||||
// }
|
||||
|
||||
// TODO: find out why this causes a long delay after stop is called.
|
||||
// @Test
|
||||
// public void testThreadChange() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("threadchange");
|
||||
// int changedTo1At = scenarioResult.getIOLog().indexOf("threads now 1");
|
||||
// int changedTo5At = scenarioResult.getIOLog().indexOf("threads now 5");
|
||||
// System.out.println("IOLOG:\n"+scenarioResult.getIOLog());
|
||||
// assertThat(changedTo1At).isGreaterThan(0);
|
||||
// assertThat(changedTo5At).isGreaterThan(changedTo1At);
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testReadMetric() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("readmetrics");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("count: ");
|
||||
// }
|
||||
|
||||
@Test
|
||||
public void testShutdownHook() {
|
||||
ScenarioResult scenarioResult = runScenario("extension_shutdown_hook");
|
||||
assertThat(scenarioResult.getIOLog()).doesNotContain("shutdown hook running").describedAs(
|
||||
"shutdown hooks should not run in the same IO context as the main scenario"
|
||||
);
|
||||
}
|
||||
// @Test
|
||||
// public void testReportedCoDelayBursty() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("cocycledelay_bursty");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("step1 metrics.waittime=");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("step2 metrics.waittime=");
|
||||
// String iolog = scenarioResult.getIOLog();
|
||||
// System.out.println(iolog);
|
||||
// assertThat(iolog).contains("waittime trended back down as expected");
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testReportedCoDelayStrict() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("cocycledelay_strict");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("step1 cycles_waittime=");
|
||||
// assertThat(scenarioResult.getIOLog()).contains("step2 cycles_waittime=");
|
||||
// String iolog = scenarioResult.getIOLog();
|
||||
// System.out.println(iolog);
|
||||
// // TODO: ensure that waittime is staying the same or increasing
|
||||
// // after investigating minor decreasing effect
|
||||
// }
|
||||
|
||||
// @Test
|
||||
// public void testCycleRateChangeNewMetrics() {
|
||||
// ExecutionMetricsResult scenarioResult = runScenario("cycle_rate_change");
|
||||
// String ioLog = scenarioResult.getIOLog();
|
||||
// assertThat(ioLog).contains("cycles adjusted, exiting on iteration");
|
||||
// }
|
||||
|
||||
@Test
|
||||
public void testErrorPropagationFromAdapterOperation() {
|
||||
ScenarioResult scenarioResult = runScenario(
|
||||
"basicdiag",
|
||||
"driver", "diag", "cyclerate", "5", "erroroncycle", "10", "cycles", "2000"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testErrorPropagationFromMotorThread() {
|
||||
ScenarioResult scenarioResult = runScenario("activity_error");
|
||||
assertThat(scenarioResult.getException()).isNotNull();
|
||||
assertThat(scenarioResult.getException().getMessage()).contains("For input string: \"unparsable\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testErrorPropagationFromActivityInitialization() {
|
||||
ScenarioResult scenarioResult = runScenario("activity_init_error");
|
||||
assertThat(scenarioResult.getException()).isNotNull();
|
||||
assertThat(scenarioResult.getException().getMessage()).contains("Unknown config parameter 'unknown_config'");
|
||||
assertThat(scenarioResult.getException()).isNotNull();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -16,6 +16,7 @@
|
||||
package io.nosqlbench.nbr.examples;
|
||||
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenarioResult;
|
||||
import io.nosqlbench.nbr.examples.injavascript.ScriptExampleTests;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
|
@ -23,11 +23,15 @@ import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenarioResult;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenariosExecutor;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenariosResults;
|
||||
import io.nosqlbench.nbr.examples.injava.*;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class DirectRuntimeScenarioTests {
|
||||
|
||||
private final TestComponent testC = new TestComponent("testroot", "testroot");
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void testDirect() {
|
||||
TestComponent testC = new TestComponent("testroot", "testroot");
|
||||
@ -38,6 +42,7 @@ public class DirectRuntimeScenarioTests {
|
||||
System.out.println(results);
|
||||
}
|
||||
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void testSC_activit_init_error() {
|
||||
SC_start_stop_diag scenario = new SC_start_stop_diag(testC, "SC_start_stop_diag");
|
||||
@ -45,119 +50,145 @@ public class DirectRuntimeScenarioTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled("enable before merge")
|
||||
public void test_SC_activity_error() {
|
||||
NBScenario scenario = new SC_activity_error(testC,"test_SC_activity_error");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_activity_error"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_activity_init_error() {
|
||||
NBScenario scenario = new SC_activity_init_error(testC,"test_SC_activity_init_error");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_activity_init_error"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_await_finished() {
|
||||
NBScenario scenario = new SC_await_finished(testC,"test_SC_await_finished");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_await_finished"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_basicdiag() {
|
||||
NBScenario scenario = new SC_basicdiag(testC,"test_SC_basicdiag");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_basicdiag"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_blockingrun() {
|
||||
NBScenario scenario = new SC_blockingrun(testC,"test_SC_blockingrun");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_blockingrun"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_cocycledelay_bursty() {
|
||||
NBScenario scenario = new SC_cocycledelay_bursty(testC,"test_SC_cocycledelay_bursty");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_cocycledelay_bursty"));
|
||||
result.report();
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_cocycledelay_strict() {
|
||||
NBScenario scenario = new SC_cocycledelay_strict(testC,"test_SC_cocycledelay_strict");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_cocycledelay_strict"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_cycle_rate() {
|
||||
NBScenario scenario = new SC_cycle_rate(testC,"test_SC_cycle_rate");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_cycle_rate"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_cycle_rate_change() {
|
||||
NBScenario scenario = new SC_cycle_rate_change(testC,"test_SC_cycle_rate_change");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_cycle_rate_change"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_extension_csvmetrics() {
|
||||
NBScenario scenario = new SC_extension_csvmetrics(testC,"test_SC_extension_csvmetrics");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_extension_csvmetrics"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_extension_csvoutput() {
|
||||
NBScenario scenario = new SC_extension_csvoutput(testC,"test_SC_extension_csvoutput");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_extension_csvoutput"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_extension_histostatslogger() {
|
||||
NBScenario scenario = new SC_extension_histostatslogger(testC,"test_SC_extension_histostatslogger");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_extension_histostatslogger"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_extension_shutdown_hook() {
|
||||
NBScenario scenario = new SC_extension_shutdown_hook(testC,"test_SC_extension_shutdown_hook");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_extension_shutdown_hook"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_histologger() {
|
||||
NBScenario scenario = new SC_histologger(testC,"test_SC_histologger");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_histologger"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_linkedinput() {
|
||||
NBScenario scenario = new SC_linkedinput(testC,"test_SC_linkedinput");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_linkedinput"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_optimo() {
|
||||
NBScenario scenario = new SC_optimo(testC,"test_SC_optimo");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_optimo"));
|
||||
System.out.println(result);
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_params_variable() {
|
||||
NBScenario scenario = new SC_params_variable(testC,"test_SC_params_variable");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_params_variable"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_readmetrics() {
|
||||
NBScenario scenario = new SC_readmetrics(testC,"test_SC_readmetrics");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_readmetrics"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_speedcheck() {
|
||||
NBScenario scenario = new SC_speedcheck(testC,"test_SC_speedcheck");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_speedcheck"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_start_stop_diag() {
|
||||
NBScenario scenario = new SC_start_stop_diag(testC,"test_SC_start_stop_diag");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_start_stop_diag"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_threadchange() {
|
||||
NBScenario scenario = new SC_threadchange(testC,"test_SC_threadchange");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_threadchange"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_threadspeeds() {
|
||||
NBScenario scenario = new SC_threadspeeds(testC,"test_SC_threadspeeds");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_threadspeeds"));
|
||||
}
|
||||
@Disabled("enable before merge")
|
||||
@Test
|
||||
public void test_SC_undef_param() {
|
||||
NBScenario scenario = new SC_undef_param(testC, "test_SC_undef_param");
|
||||
ScenarioResult result = scenario.apply(NBSceneBuffer.init("test_SC_undef_param"));
|
||||
String out = result.getIOLog();
|
||||
assertThat(out).contains("foobar");
|
||||
}
|
||||
}
|
||||
|
@ -16,9 +16,13 @@
|
||||
|
||||
package io.nosqlbench.nbr.examples.injava;
|
||||
|
||||
import io.nosqlbench.api.optimizers.BobyqaOptimizerInstance;
|
||||
import io.nosqlbench.api.optimizers.MVResult;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nbr.examples.SCBaseScenario;
|
||||
|
||||
import java.util.function.ToDoubleFunction;
|
||||
|
||||
public class SC_optimo extends SCBaseScenario {
|
||||
public SC_optimo(NBComponent parentComponent, String scenarioName) {
|
||||
super(parentComponent, scenarioName);
|
||||
@ -54,6 +58,21 @@ public class SC_optimo extends SCBaseScenario {
|
||||
*/
|
||||
@Override
|
||||
public void invoke() {
|
||||
BobyqaOptimizerInstance bobby = create().bobyqaOptimizer();
|
||||
bobby.param("pa", 0.0d, 200000.0d);
|
||||
bobby.param("pb", 0.0d, 2000000d);
|
||||
|
||||
bobby.setInitialRadius(10000.0).setStoppingRadius(0.001).setMaxEval(1000);
|
||||
|
||||
ToDoubleFunction<double[]> f = new ToDoubleFunction<double[]>() {
|
||||
@Override
|
||||
public double applyAsDouble(double[] value) {
|
||||
return 10000000 - ((Math.abs(100-value[0])) + (Math.abs(100-value[1])));
|
||||
}
|
||||
};
|
||||
bobby.setObjectiveFunction(f);
|
||||
MVResult result = bobby.optimize();
|
||||
stdout.println("optimized result was " + result);
|
||||
stdout.println("map of result was " + result.getMap());
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ package io.nosqlbench.nbr.examples.injava;
|
||||
import io.nosqlbench.components.NBComponent;
|
||||
import io.nosqlbench.nbr.examples.SCBaseScenario;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class SC_undef_param extends SCBaseScenario {
|
||||
public SC_undef_param(NBComponent parentComponent, String scenarioName) {
|
||||
super(parentComponent, scenarioName);
|
||||
@ -43,6 +45,15 @@ public class SC_undef_param extends SCBaseScenario {
|
||||
*/
|
||||
@Override
|
||||
public void invoke() {
|
||||
|
||||
stdout.println("params from command line:");
|
||||
stdout.println(params.toString());
|
||||
stdout.println("before: params.get(\"three\"):" + params.get("three"));
|
||||
var overrides = Map.of(
|
||||
"three", "undef"
|
||||
);
|
||||
params=params.withOverrides(Map.of(
|
||||
"three","UNDEF"
|
||||
));
|
||||
stdout.println("after overriding with three:UNDEF: params.get(\"three\"):" + params.get("three"));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,310 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.nbr.examples.injavascript;
|
||||
|
||||
import io.nosqlbench.api.config.standard.TestComponent;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenarioResult;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenariosExecutor;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.ScenariosResults;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.script.NBScriptedScenario;
|
||||
import org.apache.commons.compress.utils.IOUtils;
|
||||
import org.assertj.core.data.Offset;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.parallel.Execution;
|
||||
import org.junit.jupiter.api.parallel.ExecutionMode;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@Disabled
|
||||
@Execution(ExecutionMode.SAME_THREAD)
|
||||
public class ScriptExampleTests {
|
||||
|
||||
public static ScenarioResult runScenario(String scriptname, String... params) {
|
||||
if ((params.length % 2) != 0) {
|
||||
throw new RuntimeException("params must be pairwise key, value, ...");
|
||||
}
|
||||
Map<String, String> paramsMap = new HashMap<>();
|
||||
|
||||
for (int i = 0; i < params.length; i += 2) {
|
||||
paramsMap.put(params[i], params[i + 1]);
|
||||
}
|
||||
String scenarioName = "scenario " + scriptname;
|
||||
System.out.println("=".repeat(29) + " Running integration test for example scenario: " + scenarioName);
|
||||
|
||||
ScenariosExecutor executor = new ScenariosExecutor(new TestComponent("test","test"),ScriptExampleTests.class.getSimpleName() + ":" + scriptname, 1);
|
||||
NBScriptedScenario s = NBScriptedScenario.ofScripted(scenarioName,Map.of(),new TestComponent("test","test"), NBScriptedScenario.Invocation.EXECUTE_SCRIPT);
|
||||
|
||||
// s.addScenarioScriptParams(paramsMap);
|
||||
|
||||
ClassLoader cl = ScriptExampleTests.class.getClassLoader();
|
||||
String script;
|
||||
try {
|
||||
String scriptPath = "scripts/examples/" + scriptname + ".js";
|
||||
InputStream sstream = cl.getResourceAsStream(scriptPath);
|
||||
if (sstream==null) {
|
||||
throw new RuntimeException("Integrated test tried to load '" + scriptPath + "', but it was not there.");
|
||||
}
|
||||
byte[] bytes = IOUtils.toByteArray(sstream);
|
||||
script = new String(bytes, StandardCharsets.UTF_8);
|
||||
} catch (IOException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
s.addScriptText(script);
|
||||
// s.addScriptText("load('classpath:scripts/async/" + scriptname + ".js');");
|
||||
executor.execute(s,paramsMap);
|
||||
ScenariosResults scenariosResults = executor.awaitAllResults();
|
||||
ScenarioResult scenarioResult = scenariosResults.getOne();
|
||||
executor.shutdownNow();
|
||||
return scenarioResult;
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@BeforeAll
|
||||
public static void logit() {
|
||||
System.out.println("Running ASYNC version of Script Integration Tests.");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testLinkedInput() {
|
||||
ScenarioResult scenarioResult = runScenario("linkedinput");
|
||||
Pattern p = Pattern.compile(".*started leader.*started follower.*stopped leader.*stopped follower.*",
|
||||
Pattern.DOTALL);
|
||||
assertThat(p.matcher(scenarioResult.getIOLog()).matches()).isTrue();
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testCycleRate() {
|
||||
ScenarioResult scenarioResult = runScenario("cycle_rate");
|
||||
String iolog = scenarioResult.getIOLog();
|
||||
System.out.println("iolog\n" + iolog);
|
||||
Pattern p = Pattern.compile(".*mean cycle rate = (\\d[.\\d]+).*", Pattern.DOTALL);
|
||||
Matcher m = p.matcher(iolog);
|
||||
assertThat(m.matches()).isTrue();
|
||||
|
||||
String digits = m.group(1);
|
||||
assertThat(digits).isNotEmpty();
|
||||
double rate = Double.parseDouble(digits);
|
||||
assertThat(rate).isCloseTo(500, Offset.offset(100.0));
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testExtensionPoint() {
|
||||
ScenarioResult scenarioResult = runScenario("extensions");
|
||||
assertThat(scenarioResult.getIOLog()).contains("sum is 46");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testOptimo() {
|
||||
ScenarioResult scenarioResult = runScenario("optimo");
|
||||
String iolog = scenarioResult.getIOLog();
|
||||
System.out.println("iolog\n" + iolog);
|
||||
assertThat(iolog).contains("map of result was");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testExtensionCsvMetrics() {
|
||||
ScenarioResult scenarioResult = runScenario("extension_csvmetrics");
|
||||
assertThat(scenarioResult.getIOLog()).contains("started new csvmetrics: logs/csvmetricstestdir");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testScriptParamsVariable() {
|
||||
ScenarioResult scenarioResult = runScenario("params_variable", "one", "two", "three", "four");
|
||||
assertThat(scenarioResult.getIOLog()).contains("params[\"one\"]='two'");
|
||||
assertThat(scenarioResult.getIOLog()).contains("params[\"three\"]='four'");
|
||||
assertThat(scenarioResult.getIOLog()).contains("overridden[\"three\"] [overridden-three-five]='five'");
|
||||
assertThat(scenarioResult.getIOLog()).contains("defaulted.get[\"four\"] [defaulted-four-niner]='niner'");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testScriptParamsUndefVariableWithOverride() {
|
||||
ScenarioResult scenarioResult = runScenario("undef_param", "one", "two", "three", "four");
|
||||
assertThat(scenarioResult.getIOLog()).contains("before: params[\"three\"]:four");
|
||||
assertThat(scenarioResult.getIOLog()).contains("before: params.three:four");
|
||||
assertThat(scenarioResult.getIOLog()).contains("after: params[\"three\"]:undefined");
|
||||
assertThat(scenarioResult.getIOLog()).contains("after: params.three:undefined");
|
||||
}
|
||||
|
||||
// TODO - length >= 2 expected, not passing with changes for metrics
|
||||
@Disabled
|
||||
@Test
|
||||
public void testExtensionHistoStatsLogger() throws IOException {
|
||||
ScenarioResult scenarioResult = runScenario("extension_histostatslogger");
|
||||
assertThat(scenarioResult.getIOLog()).contains("stdout started " +
|
||||
"logging to logs/histostats.csv");
|
||||
List<String> strings = Files.readAllLines(Paths.get(
|
||||
"logs/histostats.csv"));
|
||||
String logdata = strings.stream().collect(Collectors.joining("\n"));
|
||||
assertThat(logdata).contains("min,p25,p50,p75,p90,p95,");
|
||||
assertThat(logdata.split("Tag=testhistostatslogger.cycles_servicetime,").length).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testExtensionCsvOutput() throws IOException {
|
||||
ScenarioResult scenarioResult = runScenario("extension_csvoutput");
|
||||
List<String> strings = Files.readAllLines(Paths.get(
|
||||
"logs/csvoutputtestfile.csv"));
|
||||
String logdata = strings.stream().collect(Collectors.joining("\n"));
|
||||
assertThat(logdata).contains("header1,header2");
|
||||
assertThat(logdata).contains("value1,value2");
|
||||
}
|
||||
|
||||
// TODO - length >= 2 expected, not passing with changes for metrics
|
||||
@Disabled
|
||||
@Test
|
||||
public void testExtensionHistogramLogger() throws IOException {
|
||||
ScenarioResult scenarioResult = runScenario("extension_histologger");
|
||||
assertThat(scenarioResult.getIOLog()).contains("stdout started logging to hdrhistodata.log");
|
||||
List<String> strings = Files.readAllLines(Paths.get("hdrhistodata.log"));
|
||||
String logdata = strings.stream().collect(Collectors.joining("\n"));
|
||||
assertThat(logdata).contains(",HIST");
|
||||
assertThat(logdata.split("Tag=testhistologger.cycles_servicetime,").length).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testBlockingRun() {
|
||||
ScenarioResult scenarioResult = runScenario("blockingrun");
|
||||
int a1end = scenarioResult.getIOLog().indexOf("blockingactivity1 finished");
|
||||
int a2start = scenarioResult.getIOLog().indexOf("running blockingactivity2");
|
||||
assertThat(a1end).isLessThan(a2start);
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testAwaitFinished() {
|
||||
ScenarioResult scenarioResult = runScenario("awaitfinished");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testStartStop() {
|
||||
ScenarioResult scenarioResult = runScenario("startstopdiag");
|
||||
int startedAt = scenarioResult.getIOLog().indexOf("starting activity teststartstopdiag");
|
||||
int stoppedAt = scenarioResult.getIOLog().indexOf("stopped activity teststartstopdiag");
|
||||
assertThat(startedAt).isGreaterThan(0);
|
||||
assertThat(stoppedAt).isGreaterThan(startedAt);
|
||||
}
|
||||
|
||||
// TODO: find out why this causes a long delay after stop is called.
|
||||
@Disabled
|
||||
@Test
|
||||
public void testThreadChange() {
|
||||
ScenarioResult scenarioResult = runScenario("threadchange");
|
||||
int changedTo1At = scenarioResult.getIOLog().indexOf("threads now 1");
|
||||
int changedTo5At = scenarioResult.getIOLog().indexOf("threads now 5");
|
||||
System.out.println("IOLOG:\n"+scenarioResult.getIOLog());
|
||||
assertThat(changedTo1At).isGreaterThan(0);
|
||||
assertThat(changedTo5At).isGreaterThan(changedTo1At);
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testReadMetric() {
|
||||
ScenarioResult scenarioResult = runScenario("readmetrics");
|
||||
assertThat(scenarioResult.getIOLog()).contains("count: ");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testShutdownHook() {
|
||||
ScenarioResult scenarioResult = runScenario("extension_shutdown_hook");
|
||||
assertThat(scenarioResult.getIOLog()).doesNotContain("shutdown hook running").describedAs(
|
||||
"shutdown hooks should not run in the same IO context as the main scenario"
|
||||
);
|
||||
}
|
||||
@Disabled
|
||||
@Test
|
||||
public void testReportedCoDelayBursty() {
|
||||
ScenarioResult scenarioResult = runScenario("cocycledelay_bursty");
|
||||
assertThat(scenarioResult.getIOLog()).contains("step1 metrics.waittime=");
|
||||
assertThat(scenarioResult.getIOLog()).contains("step2 metrics.waittime=");
|
||||
String iolog = scenarioResult.getIOLog();
|
||||
System.out.println(iolog);
|
||||
assertThat(iolog).contains("waittime trended back down as expected");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testReportedCoDelayStrict() {
|
||||
ScenarioResult scenarioResult = runScenario("cocycledelay_strict");
|
||||
assertThat(scenarioResult.getIOLog()).contains("step1 cycles_waittime=");
|
||||
assertThat(scenarioResult.getIOLog()).contains("step2 cycles_waittime=");
|
||||
String iolog = scenarioResult.getIOLog();
|
||||
System.out.println(iolog);
|
||||
// TODO: ensure that waittime is staying the same or increasing
|
||||
// after investigating minor decreasing effect
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testCycleRateChangeNewMetrics() {
|
||||
ScenarioResult scenarioResult = runScenario("cycle_rate_change");
|
||||
String ioLog = scenarioResult.getIOLog();
|
||||
assertThat(ioLog).contains("cycles adjusted, exiting on iteration");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testErrorPropagationFromAdapterOperation() {
|
||||
ScenarioResult scenarioResult = runScenario(
|
||||
"basicdiag",
|
||||
"driver", "diag", "cyclerate", "5", "erroroncycle", "10", "cycles", "2000"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testErrorPropagationFromMotorThread() {
|
||||
ScenarioResult scenarioResult = runScenario("activity_error");
|
||||
assertThat(scenarioResult.getException()).isNotNull();
|
||||
assertThat(scenarioResult.getException().getMessage()).contains("For input string: \"unparsable\"");
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testErrorPropagationFromActivityInitialization() {
|
||||
ScenarioResult scenarioResult = runScenario("activity_init_error");
|
||||
assertThat(scenarioResult.getException()).isNotNull();
|
||||
assertThat(scenarioResult.getException().getMessage()).contains("Unknown config parameter 'unknown_config'");
|
||||
assertThat(scenarioResult.getException()).isNotNull();
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user