Search in sources :

Example 1 with ActivityProgressInformationAsserter

use of com.evolveum.midpoint.test.asserter.ActivityProgressInformationAsserter 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
}
Also used : IntStream(java.util.stream.IntStream) DirtiesContext(org.springframework.test.annotation.DirtiesContext) java.util(java.util) CommonTaskBeans(com.evolveum.midpoint.repo.common.activity.run.CommonTaskBeans) Listeners(org.testng.annotations.Listeners) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) Autowired(org.springframework.beans.factory.annotation.Autowired) com.evolveum.midpoint.schema.util.task(com.evolveum.midpoint.schema.util.task) Test(org.testng.annotations.Test) DebugUtil(com.evolveum.midpoint.util.DebugUtil) NOT_RUNNING(com.evolveum.midpoint.xml.ns._public.common.common_3.ActivityTaskExecutionStateType.NOT_RUNNING) BucketingConfigurationOverrides(com.evolveum.midpoint.repo.common.activity.run.buckets.BucketingConfigurationOverrides) WorkDefinitionUtil(com.evolveum.midpoint.schema.util.task.work.WorkDefinitionUtil) AbstractRepoCommonTest(com.evolveum.midpoint.repo.common.AbstractRepoCommonTest) PrismContext(com.evolveum.midpoint.prism.PrismContext) SimpleReportReader(com.evolveum.midpoint.repo.common.activity.run.reports.SimpleReportReader) ListUtils(org.apache.commons.collections4.ListUtils) ActivityProgressInformationAsserter(com.evolveum.midpoint.test.asserter.ActivityProgressInformationAsserter) EXECUTION_COUNT_NAME(com.evolveum.midpoint.repo.common.tasks.handlers.CommonMockActivityHelper.EXECUTION_COUNT_NAME) InformationSource(com.evolveum.midpoint.schema.util.task.ActivityProgressInformationBuilder.InformationSource) NoOpActivityHandler(com.evolveum.midpoint.repo.common.activity.handlers.NoOpActivityHandler) Holder(com.evolveum.midpoint.util.Holder) ObjectNotFoundException(com.evolveum.midpoint.util.exception.ObjectNotFoundException) WorkDefinitionWrapper(com.evolveum.midpoint.schema.util.task.work.WorkDefinitionWrapper) MiscUtil(com.evolveum.midpoint.util.MiscUtil) ObjectAlreadyExistsException(com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException) PrismObject(com.evolveum.midpoint.prism.PrismObject) Task(com.evolveum.midpoint.task.api.Task) Collectors(java.util.stream.Collectors) TreeNode(com.evolveum.midpoint.util.TreeNode) File(java.io.File) ActivityReportUtil(com.evolveum.midpoint.repo.common.activity.run.reports.ActivityReportUtil) Consumer(java.util.function.Consumer) CommonException(com.evolveum.midpoint.util.exception.CommonException) TestResource(com.evolveum.midpoint.test.TestResource) SynchronizationSituationType(com.evolveum.midpoint.xml.ns._public.common.common_3.SynchronizationSituationType) ActionsExecutedInformationUtil(com.evolveum.midpoint.schema.statistics.ActionsExecutedInformationUtil) MockRecorder(com.evolveum.midpoint.repo.common.tasks.handlers.MockRecorder) ContextConfiguration(org.springframework.test.context.ContextConfiguration) QName(javax.xml.namespace.QName) TaskDebugUtil(com.evolveum.midpoint.task.api.TaskDebugUtil) ChangeTypeType(com.evolveum.prism.xml.ns._public.types_3.ChangeTypeType) Task(com.evolveum.midpoint.task.api.Task) Holder(com.evolveum.midpoint.util.Holder) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ActivityProgressInformationAsserter(com.evolveum.midpoint.test.asserter.ActivityProgressInformationAsserter) Test(org.testng.annotations.Test) AbstractRepoCommonTest(com.evolveum.midpoint.repo.common.AbstractRepoCommonTest)

Aggregations

PrismContext (com.evolveum.midpoint.prism.PrismContext)1 PrismObject (com.evolveum.midpoint.prism.PrismObject)1 AbstractRepoCommonTest (com.evolveum.midpoint.repo.common.AbstractRepoCommonTest)1 NoOpActivityHandler (com.evolveum.midpoint.repo.common.activity.handlers.NoOpActivityHandler)1 CommonTaskBeans (com.evolveum.midpoint.repo.common.activity.run.CommonTaskBeans)1 BucketingConfigurationOverrides (com.evolveum.midpoint.repo.common.activity.run.buckets.BucketingConfigurationOverrides)1 ActivityReportUtil (com.evolveum.midpoint.repo.common.activity.run.reports.ActivityReportUtil)1 SimpleReportReader (com.evolveum.midpoint.repo.common.activity.run.reports.SimpleReportReader)1 EXECUTION_COUNT_NAME (com.evolveum.midpoint.repo.common.tasks.handlers.CommonMockActivityHelper.EXECUTION_COUNT_NAME)1 MockRecorder (com.evolveum.midpoint.repo.common.tasks.handlers.MockRecorder)1 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)1 ActionsExecutedInformationUtil (com.evolveum.midpoint.schema.statistics.ActionsExecutedInformationUtil)1 com.evolveum.midpoint.schema.util.task (com.evolveum.midpoint.schema.util.task)1 InformationSource (com.evolveum.midpoint.schema.util.task.ActivityProgressInformationBuilder.InformationSource)1 WorkDefinitionUtil (com.evolveum.midpoint.schema.util.task.work.WorkDefinitionUtil)1 WorkDefinitionWrapper (com.evolveum.midpoint.schema.util.task.work.WorkDefinitionWrapper)1 Task (com.evolveum.midpoint.task.api.Task)1 TaskDebugUtil (com.evolveum.midpoint.task.api.TaskDebugUtil)1 TestResource (com.evolveum.midpoint.test.TestResource)1 ActivityProgressInformationAsserter (com.evolveum.midpoint.test.asserter.ActivityProgressInformationAsserter)1