Search in sources :

Example 31 with TaskAssigningSolution

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);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) Handler(io.vertx.core.Handler) Test(org.junit.jupiter.api.Test)

Example 32 with TaskAssigningSolution

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);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) TaskDataEvent(org.kie.kogito.taskassigning.service.event.TaskDataEvent) UserDataEvent(org.kie.kogito.taskassigning.service.event.UserDataEvent) SolutionUpdatedOnBackgroundDataEvent(org.kie.kogito.taskassigning.service.event.SolutionUpdatedOnBackgroundDataEvent) DataEvent(org.kie.kogito.taskassigning.service.event.DataEvent) AssignTaskProblemFactChange(org.kie.kogito.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange) ProblemFactChange(org.optaplanner.core.api.solver.ProblemFactChange) AddUserProblemFactChange(org.kie.kogito.taskassigning.core.model.solver.realtime.AddUserProblemFactChange) RemoveTaskProblemFactChange(org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange) AddTaskProblemFactChange(org.kie.kogito.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange) Test(org.junit.jupiter.api.Test)

Example 33 with TaskAssigningSolution

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);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) Handler(io.vertx.core.Handler) TaskDataEvent(org.kie.kogito.taskassigning.service.event.TaskDataEvent) UserDataEvent(org.kie.kogito.taskassigning.service.event.UserDataEvent) SolutionUpdatedOnBackgroundDataEvent(org.kie.kogito.taskassigning.service.event.SolutionUpdatedOnBackgroundDataEvent) DataEvent(org.kie.kogito.taskassigning.service.event.DataEvent) SolutionUpdatedOnBackgroundDataEvent(org.kie.kogito.taskassigning.service.event.SolutionUpdatedOnBackgroundDataEvent)

Example 34 with TaskAssigningSolution

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);
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) Test(org.junit.jupiter.api.Test)

Example 35 with TaskAssigningSolution

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();
}
Also used : TaskAssigningSolution(org.kie.kogito.taskassigning.core.model.TaskAssigningSolution) SolverConfig(org.optaplanner.core.config.solver.SolverConfig)

Aggregations

TaskAssigningSolution (org.kie.kogito.taskassigning.core.model.TaskAssigningSolution)65 Test (org.junit.jupiter.api.Test)30 User (org.kie.kogito.taskassigning.core.model.User)24 TaskAssignment (org.kie.kogito.taskassigning.core.model.TaskAssignment)23 ArrayList (java.util.ArrayList)15 AssignTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange)12 TaskUtil.fromTaskData (org.kie.kogito.taskassigning.service.util.TaskUtil.fromTaskData)12 AddTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange)11 TestUtil.mockTaskData (org.kie.kogito.taskassigning.service.TestUtil.mockTaskData)11 ProblemFactChange (org.optaplanner.core.api.solver.ProblemFactChange)11 RemoveTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange)10 AddUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.AddUserProblemFactChange)9 DisableUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange)7 ReleaseTaskProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange)7 RemoveUserProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange)7 UserPropertyChangeProblemFactChange (org.kie.kogito.taskassigning.core.model.solver.realtime.UserPropertyChangeProblemFactChange)7 List (java.util.List)5 BeforeEach (org.junit.jupiter.api.BeforeEach)5 Task (org.kie.kogito.taskassigning.core.model.Task)5 UserDataEvent (org.kie.kogito.taskassigning.service.event.UserDataEvent)5