diff --git a/nb-engine/nb-engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/CmdParser.java b/nb-engine/nb-engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/CmdParser.java index 24a5def53..bcec58386 100644 --- a/nb-engine/nb-engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/CmdParser.java +++ b/nb-engine/nb-engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/session/CmdParser.java @@ -16,8 +16,10 @@ package io.nosqlbench.engine.core.lifecycle.session; +import io.nosqlbench.adapter.diag.DriverAdapterLoader; import io.nosqlbench.engine.cmdstream.Cmd; import io.nosqlbench.engine.cmdstream.CmdArg; +import io.nosqlbench.nb.annotations.ServiceSelector; import io.nosqlbench.nb.api.errors.BasicError; import java.util.*; @@ -75,6 +77,14 @@ public class CmdParser { if (params.containsKey(param.name())) { throw new BasicError("Duplicate occurrence of option: " + param.name()); } + if (Objects.equals(param.name(), "driver")) { + String driverName = param.value(); + Optional driverAdapter = + ServiceSelector.of(driverName, ServiceLoader.load(DriverAdapterLoader.class)).get(); + if (driverAdapter.isEmpty()) { + throw new BasicError("Unable to load default driver adapter '" + driverName + '\''); + } + } params.put(param.name(),CmdArg.of(cmd.name(),param.name(),param.op(),param.value())); } cmds.add(new Cmd(cmd.name(),params)); diff --git a/nb-engine/nb-engine-core/src/test/java/io/nosqlbench/engine/core/lifecycle/session/CmdParserTest.java b/nb-engine/nb-engine-core/src/test/java/io/nosqlbench/engine/core/lifecycle/session/CmdParserTest.java index 59f846fef..949039b2b 100644 --- a/nb-engine/nb-engine-core/src/test/java/io/nosqlbench/engine/core/lifecycle/session/CmdParserTest.java +++ b/nb-engine/nb-engine-core/src/test/java/io/nosqlbench/engine/core/lifecycle/session/CmdParserTest.java @@ -106,4 +106,11 @@ class CmdParserTest { .withMessageContaining("Duplicate occurrence of option: threads"); } + @Test + public void testNonExistentDriverThrowsError() { + assertThatExceptionOfType(BasicError.class) + .isThrownBy(() -> CmdParser.parseArgvCommands(new LinkedList<>(List.of("run", "driver=nonexistant")))) + .withMessageContaining("Unable to load default driver adapter 'nonexistant'"); + } + }