use of com.evolveum.midpoint.xml.ns._public.common.common_3.ActivityTaskExecutionStateType.NOT_RUNNING in project midpoint by Evolveum.
the class TestActivities method test210SuspendingCompositeWithSubtasks.
/**
* Checks suspension of composite activity that contains delegation to subtasks.
*/
@Test
public void test210SuspendingCompositeWithSubtasks() throws Exception {
given();
Task task = getTestTask();
OperationResult result = task.getResult();
recorder.reset();
List<String> expectedRecords = new ArrayList<>();
Task root = taskAdd(TASK_210_SUSPENDING_COMPOSITE_WITH_SUBTASKS, result);
// ------------------------------------------------------------------------------------ run 1
when("run 1");
waitForTaskTreeCloseCheckingSuspensionWithError(root.getOid(), result, 10000, 500);
then("run 1");
root.refresh(result);
displayValue("Task tree", TaskDebugUtil.dumpTaskTree(root, result));
String oidOfSubtask1 = assertTaskTree(root.getOid(), "after run 1").subtask(0).getOid();
// @formatter:off
assertTaskTree(root.getOid(), "after run 1").display().assertExecutionState(TaskExecutionStateType.RUNNING).assertSchedulingState(TaskSchedulingStateType.WAITING).activityState().assertTreeRealizationInProgress().rootActivity().assertRealizationState(ActivityRealizationStateType.IN_PROGRESS_LOCAL).assertResultStatus(OperationResultStatusType.IN_PROGRESS).child("mock-simple:1").assertRealizationState(ActivityRealizationStateType.IN_PROGRESS_DELEGATED).assertResultStatus(OperationResultStatusType.IN_PROGRESS).end().end().end().rootActivityStateOverview().assertRealizationInProgress().assertStatusInProgress().assertProgressHidden().assertSingleTask(TASK_210_SUSPENDING_COMPOSITE_WITH_SUBTASKS.oid, NOT_RUNNING).child("mock-simple:1").assertRealizationInProgress().assertFatalError().assertSingleTask(oidOfSubtask1, NOT_RUNNING).assertItemsProgress(null, 1).end().end().subtask(0).display().assertExecutionState(TaskExecutionStateType.SUSPENDED).assertSchedulingState(TaskSchedulingStateType.SUSPENDED).assertFatalError().activityState().rootActivity().assertRealizationState(ActivityRealizationStateType.IN_PROGRESS_LOCAL).assertResultStatus(OperationResultStatusType.FATAL_ERROR).workStateExtension().assertPropertyValuesEqual(EXECUTION_COUNT_NAME, 1).end().end().end().getObject().getOid();
// @formatter:on
displayDumpable("recorder after run 1", recorder);
// 1st failed attempt
expectedRecords.add("#1");
assertThat(recorder.getExecutions()).as("recorder after run 1").containsExactlyElementsOf(expectedRecords);
// @formatter:off
Consumer<ActivityProgressInformationAsserter<?>> progressChecker = (asserter) -> asserter.display().assertInProgress().assertNoBucketInformation().assertNoItemsInformation().assertChildren(3).child("mock-simple:1").assertInProgress().assertNoBucketInformation().assertItems(1, null).assertNoChildren().end().child(// 1 user
"composition:1").assertNotStarted().assertNoBucketInformation().assertNoItemsInformation().assertNoChildren().end().child("mock-simple:2").assertNotStarted().assertNoBucketInformation().assertNoItemsInformation().end();
progressChecker.accept(assertProgress(root.getOid(), FULL_STATE_ONLY, "after"));
progressChecker.accept(assertProgress(root.getOid(), FULL_STATE_PREFERRED, "after"));
progressChecker.accept(assertProgress(root.getOid(), TREE_OVERVIEW_PREFERRED, "after"));
// Tree overview only would miss data from the root task
assertPerformance(root.getOid(), "after").display().assertNotApplicable().assertChildren(3).child(// 0 configs
"mock-simple:1").assertItemsProcessed(1).assertErrors(1).assertProgress(1).assertHasWallClockTime().assertHasThroughput().end().child(// 1 user
"composition:1").assertNotApplicable().assertNoChildren().end().child("mock-simple:2").assertNotApplicable().end();
// @formatter:on
// ------------------------------------------------------------------------------------ run 2
when("run 2");
taskManager.resumeTask(oidOfSubtask1, result);
waitForTaskTreeCloseCheckingSuspensionWithError(root.getOid(), result, 10000, 500);
then("run 2");
root.refresh(result);
displayValue("Task tree", TaskDebugUtil.dumpTaskTree(root, result));
// @formatter:off
assertTaskTree(root.getOid(), "after run 2").display().assertExecutionState(TaskExecutionStateType.RUNNING).assertSchedulingState(TaskSchedulingStateType.WAITING).activityState().assertTreeRealizationInProgress().rootActivity().assertRealizationState(ActivityRealizationStateType.IN_PROGRESS_LOCAL).assertResultStatus(OperationResultStatusType.IN_PROGRESS).child("mock-simple:1").assertRealizationState(ActivityRealizationStateType.IN_PROGRESS_DELEGATED).assertResultStatus(OperationResultStatusType.IN_PROGRESS).end().end().end().rootActivityStateOverview().assertRealizationInProgress().assertStatusInProgress().assertProgressHidden().assertSingleTask(TASK_210_SUSPENDING_COMPOSITE_WITH_SUBTASKS.oid, NOT_RUNNING).child("mock-simple:1").assertRealizationInProgress().assertFatalError().assertSingleTask(oidOfSubtask1, NOT_RUNNING).assertItemsProgress(null, 2).end().end().subtask(0).display().assertExecutionState(TaskExecutionStateType.SUSPENDED).assertSchedulingState(TaskSchedulingStateType.SUSPENDED).assertFatalError().activityState().rootActivity().assertRealizationState(ActivityRealizationStateType.IN_PROGRESS_LOCAL).assertResultStatus(OperationResultStatusType.FATAL_ERROR).workStateExtension().assertPropertyValuesEqual(EXECUTION_COUNT_NAME, 2).end().end().end();
// @formatter:on
displayDumpable("recorder after run 2", recorder);
// 2nd failed attempt
expectedRecords.add("#1");
assertThat(recorder.getExecutions()).as("recorder after run 2").containsExactlyElementsOf(expectedRecords);
// @formatter:off
assertProgress(root.getOid(), "after").display().assertInProgress().assertNoBucketInformation().assertNoItemsInformation().assertChildren(3).child("mock-simple:1").assertInProgress().assertNoBucketInformation().assertItems(2, null).assertNoChildren().end().child(// 1 user
"composition:1").assertNotStarted().assertNoBucketInformation().assertNoItemsInformation().assertNoChildren().end().child("mock-simple:2").assertNotStarted().assertNoBucketInformation().assertNoItemsInformation().end();
assertPerformance(root.getOid(), "after").display().assertNotApplicable().assertChildren(3).child(// 0 configs
"mock-simple:1").assertItemsProcessed(2).assertErrors(2).assertProgress(2).assertHasWallClockTime().assertHasThroughput().end().child(// 1 user
"composition:1").assertNotApplicable().assertNoChildren().end().child("mock-simple:2").assertNotApplicable().end();
// @formatter:on
// ------------------------------------------------------------------------------------ run 3
when("run 3");
taskManager.resumeTask(oidOfSubtask1, result);
waitForTaskTreeCloseCheckingSuspensionWithError(root.getOid(), result, 10000, 500);
then("run 3");
root.refresh(result);
displayValue("Task tree", TaskDebugUtil.dumpTaskTree(root, result));
Holder<String> oidOfSubtask2Holder = new Holder<>();
Holder<String> oidOfSubtask21Holder = new Holder<>();
Holder<String> oidOfSubtask22Holder = new Holder<>();
// @formatter:off
assertTaskTree(root.getOid(), "after run 3").display().subtaskForPath(ActivityPath.fromId("composition:1")).sendOid(oidOfSubtask2Holder).subtaskForPath(ActivityPath.fromId("composition:1", "mock-simple:1")).sendOid(oidOfSubtask21Holder).end().subtaskForPath(ActivityPath.fromId("composition:1", "mock-simple:2")).sendOid(oidOfSubtask22Holder).end().end().assertExecutionState(TaskExecutionStateType.RUNNING).assertSchedulingState(TaskSchedulingStateType.WAITING).activityState().assertTreeRealizationInProgress().rootActivity().assertRealizationState(ActivityRealizationStateType.IN_PROGRESS_LOCAL).assertResultStatus(OperationResultStatusType.IN_PROGRESS).child("mock-simple:1").assertRealizationState(ActivityRealizationStateType.COMPLETE).assertResultStatus(OperationResultStatusType.SUCCESS).end().child("composition:1").assertRealizationState(ActivityRealizationStateType.IN_PROGRESS_DELEGATED).assertResultStatus(OperationResultStatusType.IN_PROGRESS).end().end().end().rootActivityStateOverview().assertRealizationInProgress().assertStatusInProgress().assertProgressHidden().assertSingleTask(TASK_210_SUSPENDING_COMPOSITE_WITH_SUBTASKS.oid, NOT_RUNNING).child("mock-simple:1").assertComplete().assertSuccess().assertSingleTask(oidOfSubtask1, NOT_RUNNING).assertItemsProgress(null, 3).end().child("composition:1").assertRealizationInProgress().assertStatusInProgress().assertSingleTask(oidOfSubtask2Holder.getValue(), NOT_RUNNING).assertProgressVisible().assertNoItemsProgress().child("mock-simple:1").assertComplete().assertSuccess().assertSingleTask(oidOfSubtask21Holder.getValue(), NOT_RUNNING).assertItemsProgress(null, 1).end().child("mock-simple:2").assertRealizationInProgress().assertFatalError().assertSingleTask(oidOfSubtask22Holder.getValue(), NOT_RUNNING).assertItemsProgress(null, 1).end().child("mock-simple:3").assertNotStarted().assertNoTask().end().end().end().subtaskForPath(ActivityPath.fromId("mock-simple:1")).display().assertClosed().assertSuccess().activityState().rootActivity().assertRealizationState(ActivityRealizationStateType.COMPLETE).assertResultStatus(OperationResultStatusType.SUCCESS).workStateExtension().assertPropertyValuesEqual(EXECUTION_COUNT_NAME, 3).end().end().end().end().subtaskForPath(ActivityPath.fromId("composition:1")).display().subtaskForPath(ActivityPath.fromId("composition:1", "mock-simple:1")).display().assertClosed().end().subtaskForPath(ActivityPath.fromId("composition:1", "mock-simple:2")).display().assertSuspended().getOid();
// @formatter:on
String oidOfSubtask22 = oidOfSubtask22Holder.getValue();
displayDumpable("recorder after run 3", recorder);
// success after 2 failures
expectedRecords.add("#1");
// immediate success
expectedRecords.add("#2.1");
// 1st failure
expectedRecords.add("#2.2");
assertThat(recorder.getExecutions()).as("recorder after run 3").containsExactlyElementsOf(expectedRecords);
dumpProgressAndPerformanceInfo(root.getOid(), result);
Consumer<ActivityProgressInformationAsserter<?>> progressChecker3 = (asserter) -> asserter.display().assertInProgress().assertNoBucketInformation().assertNoItemsInformation().assertChildren(3).child("mock-simple:1").assertComplete().assertNoBucketInformation().assertItems(3, null).assertNoChildren().end().child("composition:1").assertInProgress().assertNoBucketInformation().assertNoItemsInformation().assertChildren(3).child("mock-simple:1").assertComplete().assertNoBucketInformation().assertItems(1, null).assertNoChildren().end().child("mock-simple:2").assertInProgress().assertNoBucketInformation().assertItems(1, null).assertNoChildren().end().child("mock-simple:3").assertNotStarted().assertNoBucketInformation().assertNoItemsInformation().assertNoChildren().end().end().child("mock-simple:2").assertNotStarted().assertNoBucketInformation().assertNoItemsInformation().assertNoChildren().end();
progressChecker3.accept(assertProgress(root.getOid(), FULL_STATE_ONLY, "after run 3 (full only)"));
progressChecker3.accept(assertProgress(root.getOid(), FULL_STATE_PREFERRED, "after run 3 (full preferred)"));
progressChecker3.accept(assertProgress(root.getOid(), TREE_OVERVIEW_PREFERRED, "after run 3 (tree preferred"));
// ------------------------------------------------------------------------------------ run 4
when("run 4");
taskManager.resumeTask(oidOfSubtask22, result);
waitForTaskTreeCloseCheckingSuspensionWithError(root.getOid(), result, 10000, 500);
then("run 4");
root.refresh(result);
displayValue("Task tree", TaskDebugUtil.dumpTaskTree(root, result));
String oidOfSubtask3 = assertTaskTree(root.getOid(), "after run 4").display().assertExecutionState(TaskExecutionStateType.RUNNING).assertSchedulingState(TaskSchedulingStateType.WAITING).subtaskForPath(ActivityPath.fromId("mock-simple:2")).display().assertSuspended().getOid();
displayDumpable("recorder after run 4", recorder);
// success after 1 failure
expectedRecords.add("#2.2");
expectedRecords.add("#2.3");
// 1st failure
expectedRecords.add("#3");
assertThat(recorder.getExecutions()).as("recorder after run 4").containsExactlyElementsOf(expectedRecords);
// ------------------------------------------------------------------------------------ run 5
when("run 5");
taskManager.resumeTask(oidOfSubtask3, result);
waitForTaskTreeCloseCheckingSuspensionWithError(root.getOid(), result, 10000, 500);
then("run 5");
root.refresh(result);
displayValue("Task tree", TaskDebugUtil.dumpTaskTree(root, result));
// @formatter:off
assertTaskTree(root.getOid(), "after run 5").display().assertSuccess().assertExecutionState(TaskExecutionStateType.CLOSED).activityState().assertTreeRealizationComplete();
// @formatter:on
displayDumpable("recorder after run 5", recorder);
// success after 1 failure
expectedRecords.add("#3");
assertThat(recorder.getExecutions()).as("recorder after run 5").containsExactlyElementsOf(expectedRecords);
// @formatter:off
assertProgress(root.getOid(), "after").display().assertComplete().assertNoBucketInformation().assertNoItemsInformation().assertChildren(3).child("mock-simple:1").assertComplete().assertNoBucketInformation().assertItems(3, null).assertNoChildren().end().child(// 1 user
"composition:1").assertComplete().assertNoBucketInformation().assertNoItemsInformation().assertChildren(3).child("mock-simple:1").assertComplete().assertNoBucketInformation().assertItems(1, null).end().child("mock-simple:2").assertComplete().assertNoBucketInformation().assertItems(2, null).end().child("mock-simple:3").assertComplete().assertNoBucketInformation().assertItems(1, null).end().end().child("mock-simple:2").assertComplete().assertNoBucketInformation().assertItems(2, null).assertNoChildren().end();
assertPerformance(root.getOid(), "after").display().assertNotApplicable().assertChildren(3).child("mock-simple:1").assertItemsProcessed(3).assertErrors(2).assertProgress(3).assertHasWallClockTime().assertHasThroughput().end().child("composition:1").assertNotApplicable().assertChildren(3).child("mock-simple:1").assertItemsProcessed(1).assertErrors(0).assertProgress(1).assertHasWallClockTime().assertHasThroughput().end().child("mock-simple:2").assertItemsProcessed(2).assertErrors(1).assertProgress(2).assertHasWallClockTime().assertHasThroughput().end().child("mock-simple:3").assertItemsProcessed(1).assertErrors(0).assertProgress(1).assertHasWallClockTime().assertHasThroughput().end().end().child("mock-simple:2").assertItemsProcessed(2).assertErrors(1).assertProgress(2).assertHasWallClockTime().assertHasThroughput().end();
// @formatter:on
}
Aggregations