use of org.drools.scenariosimulation.backend.runner.model.ScenarioExpect in project drools by kiegroup.
the class AbstractRunnerHelper method extractExpectedValues.
protected List<ScenarioExpect> extractExpectedValues(List<FactMappingValue> factMappingValues) {
List<ScenarioExpect> scenarioExpect = new ArrayList<>();
Map<FactIdentifier, List<FactMappingValue>> groupByFactIdentifier = groupByFactIdentifierAndFilter(factMappingValues, FactMappingType.EXPECT);
Set<FactIdentifier> inputFacts = factMappingValues.stream().filter(elem -> FactMappingType.GIVEN.equals(elem.getExpressionIdentifier().getType())).filter(elem -> !isFactMappingValueToSkip(elem)).map(FactMappingValue::getFactIdentifier).collect(Collectors.toSet());
for (Map.Entry<FactIdentifier, List<FactMappingValue>> entry : groupByFactIdentifier.entrySet()) {
FactIdentifier factIdentifier = entry.getKey();
scenarioExpect.add(new ScenarioExpect(factIdentifier, entry.getValue(), !inputFacts.contains(factIdentifier)));
}
return scenarioExpect;
}
use of org.drools.scenariosimulation.backend.runner.model.ScenarioExpect in project drools by kiegroup.
the class RuleScenarioRunnerHelper method getScenarioResultsFromGivenFacts.
protected List<ScenarioResult> getScenarioResultsFromGivenFacts(ScesimModelDescriptor scesimModelDescriptor, List<ScenarioExpect> scenarioOutputsPerFact, InstanceGiven input, ExpressionEvaluatorFactory expressionEvaluatorFactory) {
Object factInstance = input.getValue();
List<ScenarioResult> scenarioResults = new ArrayList<>();
for (ScenarioExpect scenarioExpect : scenarioOutputsPerFact) {
if (scenarioExpect.isNewFact()) {
continue;
}
for (FactMappingValue expectedResult : scenarioExpect.getExpectedResult()) {
ExpressionEvaluator expressionEvaluator = expressionEvaluatorFactory.getOrCreate(expectedResult);
ScenarioResult scenarioResult = fillResult(expectedResult, () -> createExtractorFunction(expressionEvaluator, expectedResult, scesimModelDescriptor).apply(factInstance), expressionEvaluator);
scenarioResults.add(scenarioResult);
}
}
return scenarioResults;
}
use of org.drools.scenariosimulation.backend.runner.model.ScenarioExpect in project drools by kiegroup.
the class RuleScenarioRunnerHelper method executeScenario.
@Override
protected Map<String, Object> executeScenario(KieContainer kieContainer, ScenarioRunnerData scenarioRunnerData, ExpressionEvaluatorFactory expressionEvaluatorFactory, ScesimModelDescriptor scesimModelDescriptor, Settings settings) {
if (!Type.RULE.equals(settings.getType())) {
throw new ScenarioException("Impossible to run a not-RULE simulation with RULE runner");
}
RuleScenarioExecutableBuilder ruleScenarioExecutableBuilder = createBuilderWrapper(kieContainer, settings);
if (settings.getRuleFlowGroup() != null) {
ruleScenarioExecutableBuilder.setActiveRuleFlowGroup(settings.getRuleFlowGroup());
}
loadInputData(scenarioRunnerData.getBackgrounds(), ruleScenarioExecutableBuilder);
loadInputData(scenarioRunnerData.getGivens(), ruleScenarioExecutableBuilder);
// all new facts should be verified internally to the working memory
scenarioRunnerData.getExpects().stream().filter(ScenarioExpect::isNewFact).flatMap(output -> output.getExpectedResult().stream().map(ScenarioResult::new)).forEach(scenarioResult -> {
Class<?> clazz = ScenarioBeanUtil.loadClass(scenarioResult.getFactIdentifier().getClassName(), kieContainer.getClassLoader());
ExpressionEvaluator expressionEvaluator = expressionEvaluatorFactory.getOrCreate(scenarioResult.getFactMappingValue());
scenarioRunnerData.addResult(scenarioResult);
ruleScenarioExecutableBuilder.addInternalCondition(clazz, createExtractorFunction(expressionEvaluator, scenarioResult.getFactMappingValue(), scesimModelDescriptor), scenarioResult);
});
return ruleScenarioExecutableBuilder.run();
}
use of org.drools.scenariosimulation.backend.runner.model.ScenarioExpect in project drools by kiegroup.
the class DMNScenarioRunnerHelperTest method executeScenario.
@Test
public void executeScenario() {
ArgumentCaptor<Object> setValueCaptor = ArgumentCaptor.forClass(Object.class);
ArgumentCaptor<String> setKeyCaptor = ArgumentCaptor.forClass(String.class);
FactIdentifier bookFactIdentifier = FactIdentifier.create("Book", "Book");
FactIdentifier importedPersonFactIdentifier = FactIdentifier.create(IMPORTED_PREFIX + ".Person", IMPORTED_PREFIX + ".Person", IMPORTED_PREFIX);
FactIdentifier importedDisputeFactIdentifier = FactIdentifier.create(IMPORTED_PREFIX + ".Dispute", IMPORTED_PREFIX + ".Dispute", IMPORTED_PREFIX);
FactIdentifier importedBookFactIdentifier = FactIdentifier.create(IMPORTED_PREFIX + ".Book", IMPORTED_PREFIX + ".Book", IMPORTED_PREFIX);
FactIdentifier importedWrBookFactIdentifier = FactIdentifier.create(IMPORTED_PREFIX + ".wr.Book", IMPORTED_PREFIX + ".wr.Book", IMPORTED_PREFIX);
AbstractMap.SimpleEntry<String, Object> backgroundDisputeFactData = new AbstractMap.SimpleEntry<>("description", "Nice");
AbstractMap.SimpleEntry<String, Object> backgroundPersonFactData = new AbstractMap.SimpleEntry<>("name", "Carl");
AbstractMap.SimpleEntry<String, Object> backgroundPersonFactData2 = new AbstractMap.SimpleEntry<>("age", 2);
AbstractMap.SimpleEntry<String, Object> backgroundImportedDisputeFactData = new AbstractMap.SimpleEntry<>("description", "Bad");
AbstractMap.SimpleEntry<String, Object> backgroundImportedPersonFactData = new AbstractMap.SimpleEntry<>("name", "Max");
AbstractMap.SimpleEntry<String, Object> backgroundImportedPersonFactData2 = new AbstractMap.SimpleEntry<>("age", 34);
AbstractMap.SimpleEntry<String, Object> givenPersonFactData = new AbstractMap.SimpleEntry<>("surname", "Brown");
AbstractMap.SimpleEntry<String, Object> givenPersonFactData2 = new AbstractMap.SimpleEntry<>("age", 23);
AbstractMap.SimpleEntry<String, Object> givenBookFactData = new AbstractMap.SimpleEntry<>("Author", "Resey Rema");
AbstractMap.SimpleEntry<String, Object> givenBookFactData2 = new AbstractMap.SimpleEntry<>("Name", "The mighty Test Scenario!");
AbstractMap.SimpleEntry<String, Object> givenImportedBookFactData = new AbstractMap.SimpleEntry<>("Author", "Mr Y");
AbstractMap.SimpleEntry<String, Object> givenImportedBookFactData2 = new AbstractMap.SimpleEntry<>("Title", "The awesome Test Scenario!");
AbstractMap.SimpleEntry<String, Object> givenImportedPersonFactData = new AbstractMap.SimpleEntry<>("surname", "White");
AbstractMap.SimpleEntry<String, Object> givenImportedPersonFactData2 = new AbstractMap.SimpleEntry<>("age", 67);
AbstractMap.SimpleEntry<String, Object> givenImportedWrBookFactData = new AbstractMap.SimpleEntry<>("Title", "I hate name with multi dots");
ScenarioRunnerData scenarioRunnerData = new ScenarioRunnerData();
scenarioRunnerData.addBackground(new InstanceGiven(disputeFactIdentifier, instantiateMap(backgroundDisputeFactData)));
scenarioRunnerData.addBackground(new InstanceGiven(personFactIdentifier, instantiateMap(backgroundPersonFactData, backgroundPersonFactData2)));
scenarioRunnerData.addBackground(new InstanceGiven(importedPersonFactIdentifier, instantiateMap(backgroundImportedPersonFactData, backgroundImportedPersonFactData2)));
scenarioRunnerData.addBackground(new InstanceGiven(importedDisputeFactIdentifier, instantiateMap(backgroundImportedDisputeFactData)));
scenarioRunnerData.addGiven(new InstanceGiven(personFactIdentifier, instantiateMap(givenPersonFactData, givenPersonFactData2)));
scenarioRunnerData.addGiven(new InstanceGiven(importedPersonFactIdentifier, instantiateMap(givenImportedPersonFactData, givenImportedPersonFactData2)));
scenarioRunnerData.addGiven(new InstanceGiven(bookFactIdentifier, instantiateMap(givenBookFactData, givenBookFactData2)));
scenarioRunnerData.addGiven(new InstanceGiven(importedBookFactIdentifier, instantiateMap(givenImportedBookFactData, givenImportedBookFactData2)));
scenarioRunnerData.addGiven(new InstanceGiven(importedWrBookFactIdentifier, instantiateMap(givenImportedWrBookFactData)));
FactMappingValue factMappingValue = new FactMappingValue(personFactIdentifier, firstNameExpectedExpressionIdentifier, NAME);
scenarioRunnerData.addExpect(new ScenarioExpect(personFactIdentifier, singletonList(factMappingValue), false));
scenarioRunnerData.addExpect(new ScenarioExpect(personFactIdentifier, singletonList(factMappingValue), true));
List<String> expectedInputDataToLoad = asList(personFactIdentifier.getName(), disputeFactIdentifier.getName(), bookFactIdentifier.getName(), IMPORTED_PREFIX);
int inputObjects = expectedInputDataToLoad.size();
runnerHelper.executeScenario(kieContainerMock, scenarioRunnerData, expressionEvaluatorFactory, simulation.getScesimModelDescriptor(), settings);
verify(dmnScenarioExecutableBuilderMock, times(1)).setActiveModel(DMN_FILE_PATH);
verify(dmnScenarioExecutableBuilderMock, times(inputObjects)).setValue(setKeyCaptor.capture(), setValueCaptor.capture());
assertTrue(setKeyCaptor.getAllValues().containsAll(expectedInputDataToLoad));
for (int i = 0; i < inputObjects; i++) {
String key = setKeyCaptor.getAllValues().get(i);
Map<String, Object> value = (Map<String, Object>) setValueCaptor.getAllValues().get(i);
if (personFactIdentifier.getName().equals(key)) {
assertEquals(backgroundPersonFactData.getValue(), value.get(backgroundPersonFactData.getKey()));
assertNotEquals(backgroundPersonFactData2.getValue(), value.get(backgroundPersonFactData2.getKey()));
assertEquals(givenPersonFactData.getValue(), value.get(givenPersonFactData.getKey()));
assertEquals(givenPersonFactData2.getValue(), value.get(givenPersonFactData2.getKey()));
assertEquals(3, value.size());
} else if (disputeFactIdentifier.getName().equals(key)) {
assertEquals(backgroundDisputeFactData.getValue(), value.get(backgroundDisputeFactData.getKey()));
assertEquals(1, value.size());
} else if (bookFactIdentifier.getName().equals(key)) {
assertEquals(givenBookFactData.getValue(), value.get(givenBookFactData.getKey()));
assertEquals(givenBookFactData2.getValue(), value.get(givenBookFactData2.getKey()));
assertEquals(2, value.size());
} else if (IMPORTED_PREFIX.equals(key)) {
Map<String, Object> subValueDispute = (Map<String, Object>) value.get("Dispute");
assertEquals(backgroundImportedDisputeFactData.getValue(), subValueDispute.get(backgroundImportedDisputeFactData.getKey()));
assertEquals(1, subValueDispute.size());
Map<String, Object> subValueBook = (Map<String, Object>) value.get("Book");
assertEquals(givenImportedBookFactData.getValue(), subValueBook.get(givenImportedBookFactData.getKey()));
assertEquals(givenImportedBookFactData2.getValue(), subValueBook.get(givenImportedBookFactData2.getKey()));
assertEquals(2, subValueBook.size());
Map<String, Object> subValuePerson = (Map<String, Object>) value.get("Person");
assertEquals(backgroundImportedPersonFactData.getValue(), subValuePerson.get(backgroundImportedPersonFactData.getKey()));
assertNotEquals(backgroundImportedPersonFactData2.getValue(), subValuePerson.get(backgroundImportedPersonFactData2.getKey()));
assertEquals(givenImportedPersonFactData.getValue(), subValuePerson.get(givenImportedPersonFactData.getKey()));
assertEquals(givenImportedPersonFactData2.getValue(), subValuePerson.get(givenImportedPersonFactData2.getKey()));
assertEquals(3, subValuePerson.size());
Map<String, Object> subValueWrBook = (Map<String, Object>) value.get("wr.Book");
assertEquals(givenImportedWrBookFactData.getValue(), subValueWrBook.get(givenImportedWrBookFactData.getKey()));
assertEquals(1, subValueWrBook.size());
assertEquals(4, value.size());
} else {
fail("Unexpected key: " + key);
}
}
verify(dmnScenarioExecutableBuilderMock, times(1)).run();
// test not rule error
settings.setType(ScenarioSimulationModel.Type.RULE);
assertThatThrownBy(() -> runnerHelper.executeScenario(kieContainerMock, scenarioRunnerData, expressionEvaluatorFactory, simulation.getScesimModelDescriptor(), settings)).isInstanceOf(ScenarioException.class).hasMessageStartingWith("Impossible to run");
}
use of org.drools.scenariosimulation.backend.runner.model.ScenarioExpect in project drools by kiegroup.
the class RuleScenarioRunnerHelperTest method verifyConditionsTest.
@Test
public void verifyConditionsTest() {
List<InstanceGiven> scenario1Inputs = runnerHelper.extractGivenValues(simulation.getScesimModelDescriptor(), scenario1.getUnmodifiableFactMappingValues(), classLoader, expressionEvaluatorFactory);
List<ScenarioExpect> scenario1Outputs = runnerHelper.extractExpectedValues(scenario1.getUnmodifiableFactMappingValues());
ScenarioRunnerData scenarioRunnerData1 = new ScenarioRunnerData();
scenario1Inputs.forEach(scenarioRunnerData1::addGiven);
scenario1Outputs.forEach(scenarioRunnerData1::addExpect);
runnerHelper.verifyConditions(simulation.getScesimModelDescriptor(), scenarioRunnerData1, expressionEvaluatorFactory, null);
assertEquals(1, scenarioRunnerData1.getResults().size());
List<InstanceGiven> scenario2Inputs = runnerHelper.extractGivenValues(simulation.getScesimModelDescriptor(), scenario2.getUnmodifiableFactMappingValues(), classLoader, expressionEvaluatorFactory);
List<ScenarioExpect> scenario2Outputs = runnerHelper.extractExpectedValues(scenario2.getUnmodifiableFactMappingValues());
ScenarioRunnerData scenarioRunnerData2 = new ScenarioRunnerData();
scenario2Inputs.forEach(scenarioRunnerData2::addGiven);
scenario2Outputs.forEach(scenarioRunnerData2::addExpect);
runnerHelper.verifyConditions(simulation.getScesimModelDescriptor(), scenarioRunnerData2, expressionEvaluatorFactory, null);
assertEquals(2, scenarioRunnerData2.getResults().size());
}
Aggregations