direct test for command error handling in session

This commit is contained in:
Jonathan Shook 2024-01-31 09:05:56 -06:00
parent 5f3813c83e
commit a8801488ac
5 changed files with 61 additions and 4 deletions

View File

@ -92,6 +92,15 @@ public class ExecutionResult {
public Exception getException() {
return exception;
}
public void rethrow() {
if (exception!=null) {
if (exception instanceof RuntimeException rte) {
throw rte;
} else {
throw new RuntimeException("Exception in result:" + exception,exception);
}
}
}
public Status getStatus() {
return this.status;

View File

@ -33,6 +33,10 @@ public class CMD_error extends NBBaseCommand {
@Override
public Object invoke(NBCommandParams params, PrintWriter stdout, PrintWriter stderr, Reader stdin, ContainerActivitiesController controller) {
throw new RuntimeException("Command '" + this + "' throws ERROR.");
StringBuilder sb = new StringBuilder();
for (String pkey : params.keySet()) {
sb.append(pkey).append("=").append(params.get(pkey)).append(" ");
}
throw new RuntimeException("Command '" + this + "' throws ERROR. params:" + sb);
}
}

View File

@ -20,7 +20,7 @@ import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
import io.nosqlbench.nb.annotations.Service;
@Service(value = NBCommandInfo.class,selector = "test_error")
@Service(value = NBCommandInfo.class,selector = "error")
public class INFO_error extends NBCommandInfo {
@Override
public Class<? extends NBInvokableCommand> getType() {

View File

@ -20,8 +20,8 @@ import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
import io.nosqlbench.nb.annotations.Service;
@Service(value = NBCommandInfo.class,selector = "test_ok")
public class INFO_test_ok extends NBCommandInfo {
@Service(value = NBCommandInfo.class,selector = "ok")
public class INFO_ok extends NBCommandInfo {
@Override
public Class<? extends NBInvokableCommand> getType() {
return CMD_ok.class;

View File

@ -0,0 +1,44 @@
/*
* Copyright (c) 2024 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.injava;
import io.nosqlbench.engine.cmdstream.Cmd;
import io.nosqlbench.engine.core.lifecycle.ExecutionResult;
import io.nosqlbench.engine.core.lifecycle.session.CmdParser;
import io.nosqlbench.engine.core.lifecycle.session.NBSession;
import io.nosqlbench.nb.api.labels.NBLabeledElement;
import org.junit.jupiter.api.Test;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class DirectNBSessionTests {
@Test
public void testThatSessionShortCircuitsOnFailedCommand() {
LinkedList<Cmd> cmds = CmdParser.parseArgvCommands(new LinkedList<>(List.of("ok", "id=1", "error", "id=2","ok", "id=3")));
try (NBSession session = new NBSession(NBLabeledElement.EMPTY, "shortcircuit", Map.of())) {
final ExecutionResult[] result = new ExecutionResult[1];
assertThrows(RuntimeException.class, () -> session.apply(cmds).rethrow());
}
}
}