use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class TaskAssigningServiceTest method onSolutionImproved.
@Test
@SuppressWarnings("unchecked")
void onSolutionImproved() throws Exception {
prepareStart();
doReturn(WAIT_FOR_IMPROVED_SOLUTION_DURATION).when(config).getWaitForImprovedSolutionDuration();
doReturn(TIMER_ID).when(vertx).setTimer(anyLong(), any(Handler.class));
TaskAssigningSolution initialSolution = buildSolutionWithScore(INITIAL_SCORE);
taskAssigningService.onBestSolutionChange(mockEvent(initialSolution));
verify(managedExecutor, never()).runAsync(any());
verify(vertx).setTimer(anyLong(), any(Handler.class));
TaskAssigningSolution newSolution = buildSolutionWithScore(IMPROVED_SCORE);
taskAssigningService.onBestSolutionChange(mockEvent(newSolution));
verify(managedExecutor, never()).runAsync(any());
verify(taskAssigningService, never()).executeSolutionChange(any());
taskAssigningService.onSolutionImprovedEvent(new TaskAssigningService.SolutionImprovedEvent(TIMER_ID, initialSolution));
verify(managedExecutor).runAsync(managedExecutorCaptor.capture());
managedExecutorCaptor.getValue().run();
verify(taskAssigningService).executeSolutionChange(newSolution);
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class TaskAssigningServiceTest method onSolutionChangeWhenApplyingPlanningExecutionResult.
@Test
void onSolutionChangeWhenApplyingPlanningExecutionResult() throws Exception {
prepareStart();
TaskAssigningSolution initialSolution = buildSolution();
context.setTaskPublished(TASK_1_ID, false);
context.setTaskPublished(TASK_2_ID, true);
context.setTaskPublished(TASK_3_ID, true);
context.setTaskPublished(TASK_4_ID, true);
taskAssigningService.onBestSolutionChange(mockEvent(initialSolution, true, true));
verify(managedExecutor).runAsync(managedExecutorCaptor.capture());
managedExecutorCaptor.getValue().run();
verify(planningExecutor).start(planningCaptor.capture(), any());
assertThat(planningCaptor.getValue()).isNotNull().hasSize(1);
PlanningItem planningItem = new PlanningItem(Task.newBuilder().id(TASK_1_ID).build(), USER_1_ID);
PlanningExecutionResult executionResult = new PlanningExecutionResult(Collections.singletonList(new PlanningExecutionResultItem(planningItem)));
taskAssigningService.onPlanningExecuted(executionResult);
List<DataEvent<?>> eventList = Arrays.asList(mockTaskDataEvent(TASK_1_ID, TaskState.COMPLETED.value(), TASK_1_LAST_UPDATE.plusSeconds(1)), mockTaskDataEvent(TASK_2_ID, TaskState.ABORTED.value(), TASK_2_LAST_UPDATE.plusSeconds(1)));
doReturn(eventList).when(serviceEventConsumer).pollEvents();
TaskAssigningSolution newSolution = buildSolution();
context.setCurrentChangeSetId(context.nextChangeSetId());
taskAssigningService.onBestSolutionChange(mockEvent(newSolution, true, true));
verify(managedExecutor, times(2)).runAsync(managedExecutorCaptor.capture());
managedExecutorCaptor.getValue().run();
verify(solverExecutor, times(2)).addProblemFactChanges(problemFactChangesCaptor.capture());
List<ProblemFactChange<TaskAssigningSolution>> changes = problemFactChangesCaptor.getAllValues().get(1);
assertHasRemoveTaskChangeForTask(changes, TASK_1_ID);
assertHasRemoveTaskChangeForTask(changes, TASK_2_ID);
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class TaskAssigningServiceTest method prepareOnSolutionUpdatedOnBackground.
@SuppressWarnings("unchecked")
private void prepareOnSolutionUpdatedOnBackground(BendableLongScore initialSolutionScore, TaskAssigningSolution newBestSolution) throws Exception {
prepareStart();
TaskAssigningSolution initialSolution = buildSolutionWithScore(initialSolutionScore);
context.setTaskPublished(TASK_1_ID, true);
context.setTaskPublished(TASK_2_ID, true);
context.setTaskPublished(TASK_3_ID, true);
context.setTaskPublished(TASK_4_ID, true);
doReturn(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION).when(config).getImproveSolutionOnBackgroundDuration();
doReturn(TIMER_ID).when(vertx).setTimer(eq(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION.toMillis()), any(Handler.class));
taskAssigningService.onBestSolutionChange(mockEvent(initialSolution));
verify(managedExecutor).runAsync(managedExecutorCaptor.capture());
managedExecutorCaptor.getValue().run();
taskAssigningService.onBestSolutionChange(mockEvent(newBestSolution));
List<DataEvent<?>> eventList = Collections.singletonList(new SolutionUpdatedOnBackgroundDataEvent(TIMER_ID, ZonedDateTime.now()));
dataEventsConsumerCaptor.getValue().accept(eventList);
verify(managedExecutor, times(2)).runAsync(managedExecutorCaptor.capture());
managedExecutorCaptor.getValue().run();
verify(taskAssigningService).executeSolutionChange(initialSolution);
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class TaskAssigningServiceTest method getCurrentSolution.
@Test
void getCurrentSolution() throws Exception {
prepareStart();
TaskAssigningSolution solution = new TaskAssigningSolution("1", new ArrayList<>(), new ArrayList<>());
taskAssigningService.executeSolutionChange(solution);
assertThat(taskAssigningService.getCurrentSolution()).isEqualTo(solution);
}
use of org.kie.kogito.taskassigning.core.model.TaskAssigningSolution in project kogito-apps by kiegroup.
the class AbstractTaskAssigningCoreTest method createDaemonSolver.
protected Solver<TaskAssigningSolution> createDaemonSolver() {
SolverConfig config = createBaseConfig();
config.setDaemon(true);
SolverFactory<TaskAssigningSolution> solverFactory = SolverFactory.create(config);
return solverFactory.buildSolver();
}
Aggregations