diff --git a/nb-engine/nb-engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioPreprocessorTest.java b/nb-engine/nb-engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioPreprocessorTest.java index 9a78ce7e2..9a00a7e0c 100644 --- a/nb-engine/nb-engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioPreprocessorTest.java +++ b/nb-engine/nb-engine-cli/src/test/java/io/nosqlbench/engine/cli/NBCLIScenarioPreprocessorTest.java @@ -234,4 +234,11 @@ public class NBCLIScenarioPreprocessorTest { .isThrownBy(() -> NBCLIScenarioPreprocessor.splitCommand(unclosedQuoteCmd)) .withMessageContaining("Unclosed quote found in scenario cmd"); } + + @Test + public void testThatSuggestionsAreShownForDirectStepNameUsage() { + assertThatExceptionOfType(BasicError.class) + .isThrownBy(() -> new NBCLIOptions(new String[]{"scenario_test", "schema"}, NBCLIOptions.Mode.ParseAllOptions)) + .withMessageContainingAll("default.schema", "schema_only.schema"); + } } diff --git a/nb-engine/nb-engine-core/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioPreprocessor.java b/nb-engine/nb-engine-core/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioPreprocessor.java index c2b3c603e..259323756 100644 --- a/nb-engine/nb-engine-core/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioPreprocessor.java +++ b/nb-engine/nb-engine-core/src/main/java/io/nosqlbench/engine/api/scenarios/NBCLIScenarioPreprocessor.java @@ -133,8 +133,20 @@ public class NBCLIScenarioPreprocessor { if (nameparts.length==1) { Map namedScenario = scenarios.getNamedScenario(scenarioName); if (namedScenario==null) { - throw new BasicError("Unable to find named scenario '" + scenarioName + "' in workload '" + workloadName - + "', but you can pick from one of: " + String.join(", ", scenarios.getScenarioNames())); + List matchingSteps = new LinkedList<>(); + for (String scenario : scenarios.getScenarioNames()) { + Map selectedScenario = scenarios.getNamedScenario(scenario); + if (selectedScenario.containsKey(scenarioName)) { + matchingSteps.add(scenario + "." + scenarioName); + } + } + if (matchingSteps.isEmpty()) { + throw new BasicError("Unable to find named scenario '" + scenarioName + "' in workload '" + workloadName + + "', but you can pick from one of: " + String.join(", ", scenarios.getScenarioNames())); + } else { + throw new BasicError("Unable to find named scenario '" + scenarioName + "' in workload '" + workloadName + + "', you might be looking for one of these scenario steps: " + String.join(", ", matchingSteps)); + } } namedSteps.putAll(namedScenario); } else {