diff --git a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/TestUtil.java b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/TestUtil.java index 38def55ca6a..08f2c6841b3 100644 --- a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/TestUtil.java +++ b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/TestUtil.java @@ -259,6 +259,12 @@ public static void assertSuccess(String message, OperationResultType result) { } } + public static void assertInProgressOrSuccess(OperationResult result) { + if (!result.isInProgress()) { + assertSuccess("Operation "+result.getOperation()+" result", result); + } + } + public static void assertSuccess(OperationResult result) { assertSuccess("Operation "+result.getOperation()+" result", result); } diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestRbac.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestRbac.java index 306d2fabbf5..ffabe2d5ab8 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestRbac.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestRbac.java @@ -18,6 +18,7 @@ import static org.testng.AssertJUnit.assertNotNull; import static com.evolveum.midpoint.test.IntegrationTestTools.display; import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertTrue; import java.io.File; import java.util.ArrayList; @@ -1378,23 +1379,27 @@ public void test701JackModifyJudgeDeleteConstructionRecompute() throws Exception assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL); Task task = taskManager.createTaskInstance(TestRbac.class.getName() + "." + TEST_NAME); + task.setOwner(getUser(USER_ADMINISTRATOR_OID)); OperationResult result = task.getResult(); PrismObject userBefore = getUser(USER_JACK_OID); display("User jack before", userBefore); - modifyRoleDeleteInducement(ROLE_JUDGE_OID, 1111L); - // WHEN TestUtil.displayWhen(TEST_NAME); - recomputeUser(USER_JACK_OID, task, result); - + modifyRoleDeleteInducement(ROLE_JUDGE_OID, 1111L, true, task); + // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); - TestUtil.assertSuccess(result); + TestUtil.assertInProgressOrSuccess(result); + + assertTrue("task is not persistent", task.isPersistent()); assertAssignedRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); + + waitForTaskFinish(task.getOid(), true); + assertNoDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME); } @@ -1405,24 +1410,27 @@ public void test702JackModifyJudgeAddInducementHonorabilityRecompute() throws Ex assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL); Task task = taskManager.createTaskInstance(TestRbac.class.getName() + "." + TEST_NAME); + task.setOwner(getUser(USER_ADMINISTRATOR_OID)); OperationResult result = task.getResult(); PrismObject userBefore = getUser(USER_JACK_OID); display("User jack before", userBefore); - modifyRoleAddInducementTarget(ROLE_JUDGE_OID, ROLE_HONORABILITY_OID); - // WHEN TestUtil.displayWhen(TEST_NAME); - recomputeUser(USER_JACK_OID, task, result); - + modifyRoleAddInducementTarget(ROLE_JUDGE_OID, ROLE_HONORABILITY_OID, true, task); + // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); - TestUtil.assertSuccess(result); - + TestUtil.assertInProgressOrSuccess(result); + + assertTrue("task is not persistent", task.isPersistent()); + assertAssignedRole(USER_JACK_OID, ROLE_JUDGE_OID, task, result); - + + waitForTaskFinish(task.getOid(), true); + assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); assertDefaultDummyAccountAttribute(ACCOUNT_JACK_DUMMY_USERNAME, "title", "Honorable"); assertDefaultDummyAccountAttribute(ACCOUNT_JACK_DUMMY_USERNAME, "weapon", "mouth", "pistol"); @@ -1484,7 +1492,7 @@ public void test709JackUnAssignRoleJudge() throws Exception { TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); - + assertAssignedNoRole(USER_JACK_OID, task, result); assertNoDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME); } @@ -1496,6 +1504,7 @@ public void test710JackAssignRoleEmpty() throws Exception { assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL); Task task = taskManager.createTaskInstance(TestRbac.class.getName() + "." + TEST_NAME); + task.setOwner(getUser(USER_ADMINISTRATOR_OID)); OperationResult result = task.getResult(); PrismObject userBefore = getUser(USER_JACK_OID); @@ -1521,23 +1530,26 @@ public void test712JackModifyEmptyRoleAddInducementPirateRecompute() throws Exce assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL); Task task = taskManager.createTaskInstance(TestRbac.class.getName() + "." + TEST_NAME); + task.setOwner(getUser(USER_ADMINISTRATOR_OID)); OperationResult result = task.getResult(); PrismObject userBefore = getUser(USER_JACK_OID); display("User jack before", userBefore); - modifyRoleAddInducementTarget(ROLE_EMPTY_OID, ROLE_PIRATE_OID); - // WHEN TestUtil.displayWhen(TEST_NAME); - recomputeUser(USER_JACK_OID, task, result); - + modifyRoleAddInducementTarget(ROLE_EMPTY_OID, ROLE_PIRATE_OID, true, task); + // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); - TestUtil.assertSuccess(result); - + TestUtil.assertInProgressOrSuccess(result); + + assertTrue("task is not persistent", task.isPersistent()); + assertAssignedRole(USER_JACK_OID, ROLE_EMPTY_OID, task, result); + + waitForTaskFinish(task.getOid(), true); assertDefaultDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME, ACCOUNT_JACK_DUMMY_FULLNAME, true); assertDefaultDummyAccountAttribute(ACCOUNT_JACK_DUMMY_USERNAME, "title", "Bloody Pirate"); diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestRecomputeTask.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestRecomputeTask.java index c6c106eafea..859b1421445 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestRecomputeTask.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestRecomputeTask.java @@ -285,7 +285,7 @@ public void test110RecomputeSome() throws Exception { TestUtil.assertSuccess(result); // Now do something evil, remove "red" construction from judge role - modifyRoleDeleteInducement(ROLE_JUDGE_OID, 1111L); + modifyRoleDeleteInducement(ROLE_JUDGE_OID, 1111L, false, null); displayRoles(task, result); diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java index d311b9c3275..c16ae7d6126 100644 --- a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java +++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java @@ -24,6 +24,7 @@ import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.model.api.ModelDiagnosticService; +import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.ModelInteractionService; import com.evolveum.midpoint.model.api.ModelService; import com.evolveum.midpoint.model.api.PolicyViolationException; @@ -2599,8 +2600,10 @@ protected void modifyRoleAddConstruction(String roleOid, long inducementId, Stri TestUtil.assertSuccess(result); } - protected void modifyRoleAddInducementTarget(String roleOid, String targetOid) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { - Task task = createTask(AbstractModelIntegrationTest.class.getName() + ".modifyRoleAddInducementTarget"); + protected void modifyRoleAddInducementTarget(String roleOid, String targetOid, boolean reconcileAffected, Task task) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { + if (task == null) { + task = createTask(AbstractModelIntegrationTest.class.getName() + ".modifyRoleAddInducementTarget"); + } OperationResult result = task.getResult(); AssignmentType inducement = new AssignmentType(); ObjectReferenceType targetRef = new ObjectReferenceType(); @@ -2609,9 +2612,15 @@ protected void modifyRoleAddInducementTarget(String roleOid, String targetOid) t ObjectDelta roleDelta = ObjectDelta.createModificationAddContainer(RoleType.class, roleOid, new ItemPath(new NameItemPathSegment(RoleType.F_INDUCEMENT)), prismContext, inducement); - modelService.executeChanges(MiscSchemaUtil.createCollection(roleDelta), null, task, result); + ModelExecuteOptions options = new ModelExecuteOptions(); + options.setReconcileAffected(reconcileAffected); + modelService.executeChanges(MiscSchemaUtil.createCollection(roleDelta), options, task, result); result.computeStatus(); - TestUtil.assertSuccess(result); + if (reconcileAffected) { + TestUtil.assertInProgressOrSuccess(result); + } else { + TestUtil.assertSuccess(result); + } } protected AssignmentType findInducementByTarget(String roleOid, String targetOid) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { @@ -2639,17 +2648,25 @@ protected void modifyRoleDeleteInducementTarget(String roleOid, String targetOid TestUtil.assertSuccess(result); } - protected void modifyRoleDeleteInducement(String roleOid, long inducementId) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { - Task task = createTask(AbstractModelIntegrationTest.class.getName() + ".modifyRoleDeleteInducement"); + protected void modifyRoleDeleteInducement(String roleOid, long inducementId, boolean reconcileAffected, Task task) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { + if (task == null) { + task = createTask(AbstractModelIntegrationTest.class.getName() + ".modifyRoleDeleteInducement"); + } OperationResult result = task.getResult(); AssignmentType inducement = new AssignmentType(); inducement.setId(inducementId); ObjectDelta roleDelta = ObjectDelta.createModificationDeleteContainer(RoleType.class, roleOid, RoleType.F_INDUCEMENT, prismContext, inducement); - modelService.executeChanges(MiscSchemaUtil.createCollection(roleDelta), null, task, result); + ModelExecuteOptions options = new ModelExecuteOptions(); + options.setReconcileAffected(reconcileAffected); + modelService.executeChanges(MiscSchemaUtil.createCollection(roleDelta), options, task, result); result.computeStatus(); - TestUtil.assertSuccess(result); + if (reconcileAffected) { + TestUtil.assertInProgressOrSuccess(result); + } else { + TestUtil.assertSuccess(result); + } } protected void modifyUserAddAccount(String userOid, File accountFile, Task task, OperationResult result) throws SchemaException, IOException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException {