use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.
the class WfTestHelper method waitForCaseClose.
public CaseType waitForCaseClose(CaseType aCase, final int timeout) throws Exception {
final OperationResult waitResult = new OperationResult(AbstractIntegrationTest.class + ".waitForCaseClose");
Holder<CaseType> currentCaseHolder = new Holder<>();
Checker checker = new Checker() {
@Override
public boolean check() throws CommonException {
CaseType currentCase = repositoryService.getObject(CaseType.class, aCase.getOid(), null, waitResult).asObjectable();
currentCaseHolder.setValue(currentCase);
if (verbose)
AbstractIntegrationTest.display("Case", currentCase);
return SchemaConstants.CASE_STATE_CLOSED.equals(currentCase.getState());
}
@Override
public void timeout() {
PrismObject<CaseType> currentCase;
try {
currentCase = repositoryService.getObject(CaseType.class, aCase.getOid(), null, waitResult);
currentCaseHolder.setValue(currentCase.asObjectable());
} catch (ObjectNotFoundException | SchemaException e) {
throw new AssertionError("Couldn't retrieve case " + aCase, e);
}
LOGGER.debug("Timed-out case:\n{}", currentCase.debugDump());
assert false : "Timeout (" + timeout + ") while waiting for " + currentCase + " to finish";
}
};
IntegrationTestTools.waitFor("Waiting for " + aCase + " finish", checker, timeout, 1000);
return currentCaseHolder.getValue();
}
use of com.evolveum.midpoint.util.Holder 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
}
use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.
the class AbstractSecurityTest method assumePowerOfAttorneyAllow.
protected MidPointPrincipal assumePowerOfAttorneyAllow(String donorOid) throws Exception {
Holder<MidPointPrincipal> principalHolder = new Holder<>();
assertAllow("assumePowerOfAttorney", (task, result) -> {
PrismObject<UserType> donor = repositoryService.getObject(UserType.class, donorOid, null, result);
MidPointPrincipal donorPrincipal = modelInteractionService.assumePowerOfAttorney(donor, task, result);
principalHolder.setValue(donorPrincipal);
});
return principalHolder.getValue();
}
use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.
the class AbstractSecurityTest method assumePowerOfAttorneyDeny.
protected MidPointPrincipal assumePowerOfAttorneyDeny(String donorOid) throws Exception {
Holder<MidPointPrincipal> principalHolder = new Holder<>();
assertDeny("assumePowerOfAttorney", (task, result) -> {
PrismObject<UserType> donor = repositoryService.getObject(UserType.class, donorOid, null, result);
MidPointPrincipal donorPrincipal = modelInteractionService.assumePowerOfAttorney(donor, task, result);
principalHolder.setValue(donorPrincipal);
});
return principalHolder.getValue();
}
use of com.evolveum.midpoint.util.Holder in project midpoint by Evolveum.
the class TransformationalAsyncUpdateMessageListener method createChange.
@NotNull
private UcfAsyncUpdateChange createChange(UcfChangeType changeBean, OperationResult result, int changeSequentialNumber, AcknowledgementSink acknowledgeSink) throws SchemaException {
QName objectClassName = changeBean.getObjectClass();
if (objectClassName == null) {
throw new SchemaException("Object class name is null in " + changeBean);
}
ResourceSchema resourceSchema = getResourceSchema(result);
ResourceObjectDefinition objectClassDef = resourceSchema.findDefinitionForObjectClass(objectClassName);
if (objectClassDef == null) {
throw new SchemaException("Object class " + objectClassName + " not found in " + resourceSchema);
}
ObjectDelta<ShadowType> delta;
ObjectDeltaType deltaBean = changeBean.getObjectDelta();
if (deltaBean != null) {
setFromDefaults((ShadowType) deltaBean.getObjectToAdd(), objectClassName);
if (deltaBean.getObjectType() == null) {
deltaBean.setObjectType(ShadowType.COMPLEX_TYPE);
}
delta = DeltaConvertor.createObjectDelta(deltaBean, getPrismContext());
} else {
delta = null;
}
setFromDefaults(changeBean.getObject(), objectClassName);
Holder<Object> primaryIdentifierRealValueHolder = new Holder<>();
Collection<ResourceAttribute<?>> identifiers = getIdentifiers(changeBean, objectClassDef, primaryIdentifierRealValueHolder);
if (identifiers.isEmpty()) {
throw new SchemaException("No identifiers in async update change bean " + changeBean);
}
boolean notificationOnly = changeBean.getObject() == null && delta == null;
return new UcfAsyncUpdateChange(changeSequentialNumber, primaryIdentifierRealValueHolder.getValue(), objectClassDef.getObjectClassDefinition(), identifiers, delta, asPrismObject(changeBean.getObject()), notificationOnly, acknowledgeSink);
}
Aggregations