diff --git a/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/TestTaskManagerContract.java b/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/TestTaskManagerContract.java index 9ca04d4f1ae..d78fc29ff7d 100644 --- a/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/TestTaskManagerContract.java +++ b/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/TestTaskManagerContract.java @@ -10,7 +10,6 @@ import static org.testng.AssertJUnit.*; -import static com.evolveum.midpoint.task.quartzimpl.TaskTestUtil.createExtensionDelta; import static com.evolveum.midpoint.test.IntegrationTestTools.waitFor; import java.io.IOException; @@ -33,14 +32,12 @@ import org.testng.annotations.Test; import org.xml.sax.SAXException; -import com.evolveum.midpoint.prism.*; -import com.evolveum.midpoint.prism.delta.ItemDelta; -import com.evolveum.midpoint.prism.delta.PropertyDelta; +import com.evolveum.midpoint.prism.PrismContainer; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismProperty; +import com.evolveum.midpoint.prism.PrismPropertyDefinition; import com.evolveum.midpoint.prism.path.ItemName; -import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.ObjectFilter; -import com.evolveum.midpoint.prism.util.PrismAsserts; -import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.SelectorOptions; @@ -48,7 +45,10 @@ import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.result.OperationResultStatus; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; -import com.evolveum.midpoint.task.api.*; +import com.evolveum.midpoint.task.api.RunningTask; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.task.api.TaskConstants; +import com.evolveum.midpoint.task.api.TaskExecutionStatus; import com.evolveum.midpoint.task.quartzimpl.cluster.ClusterManager; import com.evolveum.midpoint.task.quartzimpl.execution.JobExecutor; import com.evolveum.midpoint.test.Checker; @@ -127,72 +127,8 @@ public void test003GetProgress() throws Exception { AssertJUnit.assertEquals("Progress is not 0", 0, task.getProgress()); } - @Test(enabled = false) // this is probably OK to fail, so do not enable it (at least for now) - public void test004aTaskBigProperty() throws Exception { - OperationResult result = createOperationResult(); - - String string300 = "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-"; - String string300a = "AAAAAAAAA-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-" - + "123456789-123456789-123456789-123456789-123456789-"; - - addObjectFromFile(taskFilename()); - - TaskQuartzImpl task = getTaskWithResult(taskOid(), result); - - // property definition - ItemName bigStringQName = new ItemName("http://midpoint.evolveum.com/repo/test", "bigString"); - MutablePrismPropertyDefinition bigStringDefinition = prismContext.definitionFactory() - .createPropertyDefinition(bigStringQName, DOMUtil.XSD_STRING); - bigStringDefinition.setIndexed(false); - bigStringDefinition.setMinOccurs(0); - bigStringDefinition.setMaxOccurs(1); - System.out.println("bigstring property definition = " + bigStringDefinition); - - PrismProperty bigStringProperty = (PrismProperty) bigStringDefinition.instantiate(); - bigStringProperty.setRealValue(string300); - task.setExtensionProperty(bigStringProperty); - - task.flushPendingModifications(result); - - System.out.println("1st round: Task = " + task.debugDump()); - - logger.trace("Retrieving the task and comparing its properties..."); - - Task task001 = getTaskWithResult(taskOid(), result); - System.out.println("1st round: Task from repo: " + task001.debugDump()); - - PrismProperty bigString001 = task001.getExtensionPropertyOrClone(bigStringQName); - assertEquals("Big string not retrieved correctly (1st round)", bigStringProperty.getRealValue(), bigString001.getRealValue()); - - // second round - - bigStringProperty.setRealValue(string300a); - task001.setExtensionProperty(bigStringProperty); - - // brutal hack, because task extension property has no "indexed" flag when retrieved from repo - task001.getExtensionPropertyOrClone(bigStringQName).getDefinition().toMutable().setIndexed(false); - - System.out.println("2nd round: Task before save = " + task001.debugDump()); - task001.flushPendingModifications(result); // however, this does not work, because 'modifyObject' in repo first reads object, overwriting any existing definitions ... - - Task task002 = getTaskWithResult(taskOid(), result); - System.out.println("2nd round: Task from repo: " + task002.debugDump()); - - PrismProperty bigString002 = task002.getExtensionPropertyOrClone(bigStringQName); - assertEquals("Big string not retrieved correctly (2nd round)", bigStringProperty.getRealValue(), bigString002.getRealValue()); - } - @Test - public void test004bTaskBigProperty() throws Exception { + public void test004TaskBigProperty() throws Exception { OperationResult result = createOperationResult(); String string300 = "123456789-123456789-123456789-123456789-123456789-" @@ -208,9 +144,7 @@ public void test004bTaskBigProperty() throws Exception { + "123456789-123456789-123456789-123456789-123456789-" + "123456789-123456789-123456789-123456789-123456789-"; - // TODO inttest: TEST_NAME was set to "test004aTaskBigProperty"; WHY a and not b? it fails with B now. - // TODO fix B file or what, so we can have this here: addObjectFromFile(taskFilename()); - addObjectFromFile("src/test/resources/basic/task-004aTaskBigProperty.xml"); + addObjectFromFile(taskFilename()); TaskQuartzImpl task = getTaskWithResult(taskOid(), result); @@ -250,183 +184,6 @@ public void test004bTaskBigProperty() throws Exception { assertEquals("Big string not retrieved correctly (2nd round)", shipStateProperty.getRealValue(), bigString002.getRealValue()); } - @Test(enabled = false) - public void test004cReferenceInExtension() throws Exception { // ok to fail - OperationResult result = createOperationResult(); - addObjectFromFile(taskFilename()); - - TaskQuartzImpl task = getTaskWithResult(taskOid(), result); - - System.out.println("Task extension = " + task.getExtensionOrClone()); - - //PrismObject requestee = task.getOwner(); - //task.setRequesteeRef(requestee); - - //LOGGER.trace("Saving modifications..."); - //task.flushPendingModifications(result); // here it crashes - - //LOGGER.trace("Retrieving the task and comparing its properties..."); - //Task task001 = getTask(taskOid(test), result); - //LOGGER.trace("Task from repo: " + task001.debugDump()); - //AssertJUnit.assertEquals("RequesteeRef was not stored/retrieved correctly", requestee.getOid(), task001.getRequesteeRef().getOid()); - } - - @Test(enabled = false) - public void test004TaskProperties() throws Exception { - OperationResult result = createOperationResult(); - - addObjectFromFile(taskFilename()); - - TaskQuartzImpl task = getTaskWithResult(taskOid(), result); - - System.out.println("Task extension = " + task.getExtensionOrClone()); - - PrismPropertyDefinition delayDefinition = prismContext.definitionFactory().createPropertyDefinition(SchemaConstants.NOOP_DELAY_QNAME, DOMUtil.XSD_INT); - System.out.println("property definition = " + delayDefinition); - - PrismProperty property = (PrismProperty) delayDefinition.instantiate(); - property.setRealValue(100); - - PropertyDelta delta = prismContext.deltaFactory().property().create(ItemPath.create(TaskType.F_EXTENSION, property.getElementName()), property.getDefinition()); - //delta.addV(property.getValues()); - delta.setValuesToReplace(PrismValueCollectionsUtil.cloneCollection(property.getValues())); - - Collection> modifications = new ArrayList<>(1); - modifications.add(delta); - - // TODO fix this code -// Collection idts = DeltaConvertor.toPropertyModificationTypes(delta); -// for (ItemDeltaType idt : idts) { -// String idtxml = prismContext.getParserDom().marshalElementToString(idt, new QName("http://a/", "A")); -// System.out.println("item delta type = " + idtxml); -// -// ItemDeltaType idt2 = prismContext.getPrismJaxbProcessor().unmarshalObject(idtxml, ItemDeltaType.class); -// ItemDelta id2 = DeltaConvertor.createItemDelta(idt2, TaskType.class, prismContext); -// System.out.println("unwrapped item delta = " + id2.debugDump()); -// -// task.modifyExtension(id2); -// } - - task.flushPendingModifications(result); - System.out.println("Task = " + task.debugDump()); - - repositoryService.getObject(UserType.class, TASK_OWNER2_OID, null, result); - - task.setBindingImmediate(TaskBinding.LOOSE, result); - - // other properties will be set in batched mode - String newname = "Test task, name changed"; - task.setName(PrismTestUtil.createPolyStringType(newname)); - task.setProgress(10L); - long currentTime = System.currentTimeMillis(); - long currentTime1 = currentTime + 10000; - long currentTime2 = currentTime + 25000; - task.setLastRunStartTimestamp(currentTime); - task.setLastRunFinishTimestamp(currentTime1); - task.setExecutionStatus(TaskExecutionStatus.SUSPENDED); - task.setHandlerUri("http://no-handler.org/"); - //task.setOwner(owner2); - - ScheduleType st0 = task.getSchedule(); - - ScheduleType st1 = new ScheduleType(); - st1.setInterval(1); - st1.setMisfireAction(MisfireActionType.RESCHEDULE); - task.pushHandlerUri("http://no-handler.org/1", st1, TaskBinding.TIGHT, createExtensionDelta(delayDefinition, 1, - prismContext)); - - ScheduleType st2 = new ScheduleType(); - st2.setInterval(2); - st2.setMisfireAction(MisfireActionType.EXECUTE_IMMEDIATELY); - task.pushHandlerUri("http://no-handler.org/2", st2, TaskBinding.LOOSE, createExtensionDelta(delayDefinition, 2, - prismContext)); - - task.setRecurrenceStatus(TaskRecurrence.RECURRING); - - OperationResultType ort = result.createOperationResultType(); // to be compared with later - - task.setResult(result); - - ObjectReferenceType objectReferenceType = new ObjectReferenceType(); - objectReferenceType.setType(UserType.COMPLEX_TYPE); - String objectOid = "some-oid..."; - objectReferenceType.setOid(objectOid); - task.setObjectRef(objectReferenceType); - - logger.trace("Saving modifications..."); - - task.flushPendingModifications(result); - - logger.trace("Retrieving the task (second time) and comparing its properties..."); - - Task task001 = getTaskWithResult(taskOid(), result); - logger.trace("Task from repo: " + task001.debugDump()); - AssertJUnit.assertEquals(TaskBinding.LOOSE, task001.getBinding()); - PrismAsserts.assertEqualsPolyString("Name not", newname, task001.getName()); -// AssertJUnit.assertEquals(newname, task001.getName()); - assertEquals(task001.getProgress(), 10); - AssertJUnit.assertNotNull(task001.getLastRunStartTimestamp()); - AssertJUnit.assertEquals("Start time is not correct", (Long) (currentTime / 1000L), (Long) (task001.getLastRunStartTimestamp() / 1000L)); // e.g. MySQL cuts off millisecond information - AssertJUnit.assertNotNull(task001.getLastRunFinishTimestamp()); - AssertJUnit.assertEquals("Finish time is not correct", (Long) (currentTime1 / 1000L), (Long) (task001.getLastRunFinishTimestamp() / 1000L)); -// AssertJUnit.assertEquals(TaskExclusivityStatus.CLAIMED, task001.getExclusivityStatus()); - AssertJUnit.assertEquals(TaskExecutionStatus.SUSPENDED, task001.getExecutionStatus()); - AssertJUnit.assertEquals("Handler after 2xPUSH is not OK", "http://no-handler.org/2", task001.getHandlerUri()); - AssertJUnit.assertEquals("Schedule after 2xPUSH is not OK", st2, task001.getSchedule()); - AssertJUnit.assertEquals("Number of handlers is not OK", 3, task.getHandlersCount()); - UriStack us = task.getOtherHandlersUriStack(); - AssertJUnit.assertEquals("First handler from the handler stack does not match", "http://no-handler.org/", us.getUriStackEntry().get(0).getHandlerUri()); - AssertJUnit.assertEquals("First schedule from the handler stack does not match", st0, us.getUriStackEntry().get(0).getSchedule()); - AssertJUnit.assertEquals("Second handler from the handler stack does not match", "http://no-handler.org/1", us.getUriStackEntry().get(1).getHandlerUri()); - AssertJUnit.assertEquals("Second schedule from the handler stack does not match", st1, us.getUriStackEntry().get(1).getSchedule()); - AssertJUnit.assertTrue(task001.isRecurring()); - OperationResult r001 = task001.getResult(); - AssertJUnit.assertNotNull(r001); - //AssertJUnit.assertEquals("Owner OID is not correct", TASK_OWNER2_OID, task001.getOwner().getOid()); - - PrismProperty d = task001.getExtensionPropertyOrClone(SchemaConstants.NOOP_DELAY_QNAME); - AssertJUnit.assertNotNull("delay extension property was not found", d); - AssertJUnit.assertEquals("delay extension property has wrong value", (Integer) 100, d.getRealValue(Integer.class)); - - OperationResultType ort1 = r001.createOperationResultType(); - - // handling of operation result in tasks is extremely fragile now... - // in case of problems, just uncomment the following line ;) - AssertJUnit.assertEquals(ort, ort1); - - //AssertJUnit.assertEquals("RequesteeRef was not stored/retrieved correctly", requestee.getOid(), task001.getRequesteeRef().getOid()); - //AssertJUnit.assertEquals("RequesteeOid was not stored/retrieved correctly", requestee.getOid(), task001.getRequesteeOid()); - - AssertJUnit.assertEquals("ObjectRef OID was not stored/retrieved correctly", objectReferenceType.getOid(), task001.getObjectRefOrClone().getOid()); - AssertJUnit.assertEquals("ObjectRef ObjectType was not stored/retrieved correctly", objectReferenceType.getType(), task001.getObjectRefOrClone().getType()); - - // now pop the handlers - - task001.finishHandler(result); - task001.refresh(result); - AssertJUnit.assertEquals("Handler URI after first POP is not correct", "http://no-handler.org/1", task001.getHandlerUri()); - AssertJUnit.assertEquals("Schedule after first POP is not correct", st1, task001.getSchedule()); - AssertJUnit.assertEquals("Binding after first POP is not correct", TaskBinding.TIGHT, task001.getBinding()); - AssertJUnit.assertNotSame("Task state after first POP should not be CLOSED", TaskExecutionStatus.CLOSED, task001.getExecutionStatus()); - AssertJUnit.assertEquals("Extension element value is not correct after first POP", (Integer) 2, task001.getExtensionPropertyOrClone(SchemaConstants.NOOP_DELAY_QNAME).getRealValue(Integer.class)); - - task001.finishHandler(result); - task001.refresh(result); - AssertJUnit.assertEquals("Handler URI after second POP is not correct", "http://no-handler.org/", task001.getHandlerUri()); - AssertJUnit.assertEquals("Schedule after second POP is not correct", st0, task001.getSchedule()); - AssertJUnit.assertEquals("Binding after second POP is not correct", TaskBinding.LOOSE, task001.getBinding()); - AssertJUnit.assertNotSame("Task state after second POP should not be CLOSED", TaskExecutionStatus.CLOSED, task001.getExecutionStatus()); - AssertJUnit.assertEquals("Extension element value is not correct after second POP", (Integer) 1, task001.getExtensionPropertyOrClone(SchemaConstants.NOOP_DELAY_QNAME).getRealValue(Integer.class)); - - task001.finishHandler(result); - task001.refresh(result); - //AssertJUnit.assertNull("Handler URI after third POP is not null", task001.getHandlerUri()); - AssertJUnit.assertEquals("Handler URI after third POP is not correct", "http://no-handler.org/", task001.getHandlerUri()); - AssertJUnit.assertEquals("Task state after third POP is not CLOSED", TaskExecutionStatus.CLOSED, task001.getExecutionStatus()); - - } - - /* * Execute a single-run task. */ @@ -981,89 +738,80 @@ public boolean check() { public void timeout() { } }, 10000, 2000); - } @Test public void test016WaitForSubtasks() throws Exception { final OperationResult result = createOperationResult(); - //taskManager.getClusterManager().startClusterManagerThread(); - - try { - - Task rootTask = taskManager.createTaskInstance(addObjectFromFile(taskFilename()), result); - Task firstChildTask = taskManager.createTaskInstance(addObjectFromFile(taskFilename("-child-1")), result); - - Task firstReloaded = taskManager.getTaskByIdentifier(firstChildTask.getTaskIdentifier(), result); - assertEquals("Didn't get correct task by identifier", firstChildTask.getOid(), firstReloaded.getOid()); - - Task secondChildTask = rootTask.createSubtask(); - secondChildTask.setName("Second child"); - secondChildTask.setOwner(rootTask.getOwner()); - secondChildTask.pushHandlerUri(SINGLE_TASK_HANDLER_URI, new ScheduleType(), null); - secondChildTask.setInitialExecutionStatus(TaskExecutionStatus.SUSPENDED); // will resume it after root starts waiting for tasks - taskManager.switchToBackground(secondChildTask, result); - - Task firstPrerequisiteTask = taskManager.createTaskInstance( - addObjectFromFile(taskFilename("-prerequisite-1")), result); - - List prerequisities = rootTask.listPrerequisiteTasks(result); - assertEquals("Wrong # of prerequisite tasks", 1, prerequisities.size()); - assertEquals("Wrong OID of prerequisite task", firstPrerequisiteTask.getOid(), prerequisities.get(0).getOid()); - - Task secondPrerequisiteTask = taskManager.createTaskInstance(); - secondPrerequisiteTask.setName("Second prerequisite"); - secondPrerequisiteTask.setOwner(rootTask.getOwner()); - secondPrerequisiteTask.addDependent(rootTask.getTaskIdentifier()); - secondPrerequisiteTask.pushHandlerUri(TaskConstants.NOOP_TASK_HANDLER_URI, new ScheduleType(), null); - secondPrerequisiteTask.setExtensionPropertyValue(SchemaConstants.NOOP_DELAY_QNAME, 1500); - secondPrerequisiteTask.setExtensionPropertyValue(SchemaConstants.NOOP_STEPS_QNAME, 1); - secondPrerequisiteTask.setInitialExecutionStatus(TaskExecutionStatus.SUSPENDED); // will resume it after root starts waiting for tasks - secondPrerequisiteTask.addDependent(rootTask.getTaskIdentifier()); - taskManager.switchToBackground(secondPrerequisiteTask, result); - - logger.info("Starting waiting for child/prerequisite tasks"); - rootTask.startWaitingForTasksImmediate(result); - - firstChildTask.refresh(result); - assertEquals("Parent is not set correctly on 1st child task", rootTask.getTaskIdentifier(), firstChildTask.getParent()); - secondChildTask.refresh(result); - assertEquals("Parent is not set correctly on 2nd child task", rootTask.getTaskIdentifier(), secondChildTask.getParent()); - firstPrerequisiteTask.refresh(result); - assertEquals("Dependents are not set correctly on 1st prerequisite task (count differs)", 1, firstPrerequisiteTask.getDependents().size()); - assertEquals("Dependents are not set correctly on 1st prerequisite task (value differs)", rootTask.getTaskIdentifier(), firstPrerequisiteTask.getDependents().get(0)); - List deps = firstPrerequisiteTask.listDependents(result); - assertEquals("Dependents are not set correctly on 1st prerequisite task - listDependents - (count differs)", 1, deps.size()); - assertEquals("Dependents are not set correctly on 1st prerequisite task - listDependents - (value differs)", rootTask.getOid(), deps.get(0).getOid()); - secondPrerequisiteTask.refresh(result); - assertEquals("Dependents are not set correctly on 2nd prerequisite task (count differs)", 1, secondPrerequisiteTask.getDependents().size()); - assertEquals("Dependents are not set correctly on 2nd prerequisite task (value differs)", rootTask.getTaskIdentifier(), secondPrerequisiteTask.getDependents().get(0)); - deps = secondPrerequisiteTask.listDependents(result); - assertEquals("Dependents are not set correctly on 2nd prerequisite task - listDependents - (count differs)", 1, deps.size()); - assertEquals("Dependents are not set correctly on 2nd prerequisite task - listDependents - (value differs)", rootTask.getOid(), deps.get(0).getOid()); - - logger.info("Resuming suspended child/prerequisite tasks"); - taskManager.resumeTask(secondChildTask, result); - taskManager.resumeTask(secondPrerequisiteTask, result); - - final String rootOid = taskOid(); - - waitForTaskClose(rootOid, result, 60000, 3000); - - firstChildTask.refresh(result); - secondChildTask.refresh(result); - firstPrerequisiteTask.refresh(result); - secondPrerequisiteTask.refresh(result); - - assertEquals("1st child task should be closed", TaskExecutionStatus.CLOSED, firstChildTask.getExecutionStatus()); - assertEquals("2nd child task should be closed", TaskExecutionStatus.CLOSED, secondChildTask.getExecutionStatus()); - assertEquals("1st prerequisite task should be closed", TaskExecutionStatus.CLOSED, firstPrerequisiteTask.getExecutionStatus()); - assertEquals("2nd prerequisite task should be closed", TaskExecutionStatus.CLOSED, secondPrerequisiteTask.getExecutionStatus()); - - } finally { -// taskManager.getClusterManager().stopClusterManagerThread(10000L, result); - } + Task rootTask = taskManager.createTaskInstance(addObjectFromFile(taskFilename()), result); + Task firstChildTask = taskManager.createTaskInstance(addObjectFromFile(taskFilename("-child-1")), result); + + Task firstReloaded = taskManager.getTaskByIdentifier(firstChildTask.getTaskIdentifier(), result); + assertEquals("Didn't get correct task by identifier", firstChildTask.getOid(), firstReloaded.getOid()); + + Task secondChildTask = rootTask.createSubtask(); + secondChildTask.setName("Second child"); + secondChildTask.setOwner(rootTask.getOwner()); + secondChildTask.pushHandlerUri(SINGLE_TASK_HANDLER_URI, new ScheduleType(), null); + secondChildTask.setInitialExecutionStatus(TaskExecutionStatus.SUSPENDED); // will resume it after root starts waiting for tasks + taskManager.switchToBackground(secondChildTask, result); + + Task firstPrerequisiteTask = taskManager.createTaskInstance( + addObjectFromFile(taskFilename("-prerequisite-1")), result); + + List prerequisities = rootTask.listPrerequisiteTasks(result); + assertEquals("Wrong # of prerequisite tasks", 1, prerequisities.size()); + assertEquals("Wrong OID of prerequisite task", firstPrerequisiteTask.getOid(), prerequisities.get(0).getOid()); + + Task secondPrerequisiteTask = taskManager.createTaskInstance(); + secondPrerequisiteTask.setName("Second prerequisite"); + secondPrerequisiteTask.setOwner(rootTask.getOwner()); + secondPrerequisiteTask.addDependent(rootTask.getTaskIdentifier()); + secondPrerequisiteTask.pushHandlerUri(TaskConstants.NOOP_TASK_HANDLER_URI, new ScheduleType(), null); + secondPrerequisiteTask.setExtensionPropertyValue(SchemaConstants.NOOP_DELAY_QNAME, 1500); + secondPrerequisiteTask.setExtensionPropertyValue(SchemaConstants.NOOP_STEPS_QNAME, 1); + secondPrerequisiteTask.setInitialExecutionStatus(TaskExecutionStatus.SUSPENDED); // will resume it after root starts waiting for tasks + secondPrerequisiteTask.addDependent(rootTask.getTaskIdentifier()); + taskManager.switchToBackground(secondPrerequisiteTask, result); + + logger.info("Starting waiting for child/prerequisite tasks"); + rootTask.startWaitingForTasksImmediate(result); + + firstChildTask.refresh(result); + assertEquals("Parent is not set correctly on 1st child task", rootTask.getTaskIdentifier(), firstChildTask.getParent()); + secondChildTask.refresh(result); + assertEquals("Parent is not set correctly on 2nd child task", rootTask.getTaskIdentifier(), secondChildTask.getParent()); + firstPrerequisiteTask.refresh(result); + assertEquals("Dependents are not set correctly on 1st prerequisite task (count differs)", 1, firstPrerequisiteTask.getDependents().size()); + assertEquals("Dependents are not set correctly on 1st prerequisite task (value differs)", rootTask.getTaskIdentifier(), firstPrerequisiteTask.getDependents().get(0)); + List deps = firstPrerequisiteTask.listDependents(result); + assertEquals("Dependents are not set correctly on 1st prerequisite task - listDependents - (count differs)", 1, deps.size()); + assertEquals("Dependents are not set correctly on 1st prerequisite task - listDependents - (value differs)", rootTask.getOid(), deps.get(0).getOid()); + secondPrerequisiteTask.refresh(result); + assertEquals("Dependents are not set correctly on 2nd prerequisite task (count differs)", 1, secondPrerequisiteTask.getDependents().size()); + assertEquals("Dependents are not set correctly on 2nd prerequisite task (value differs)", rootTask.getTaskIdentifier(), secondPrerequisiteTask.getDependents().get(0)); + deps = secondPrerequisiteTask.listDependents(result); + assertEquals("Dependents are not set correctly on 2nd prerequisite task - listDependents - (count differs)", 1, deps.size()); + assertEquals("Dependents are not set correctly on 2nd prerequisite task - listDependents - (value differs)", rootTask.getOid(), deps.get(0).getOid()); + + logger.info("Resuming suspended child/prerequisite tasks"); + taskManager.resumeTask(secondChildTask, result); + taskManager.resumeTask(secondPrerequisiteTask, result); + + final String rootOid = taskOid(); + + waitForTaskClose(rootOid, result, 60000, 3000); + + firstChildTask.refresh(result); + secondChildTask.refresh(result); + firstPrerequisiteTask.refresh(result); + secondPrerequisiteTask.refresh(result); + + assertEquals("1st child task should be closed", TaskExecutionStatus.CLOSED, firstChildTask.getExecutionStatus()); + assertEquals("2nd child task should be closed", TaskExecutionStatus.CLOSED, secondChildTask.getExecutionStatus()); + assertEquals("1st prerequisite task should be closed", TaskExecutionStatus.CLOSED, firstPrerequisiteTask.getExecutionStatus()); + assertEquals("2nd prerequisite task should be closed", TaskExecutionStatus.CLOSED, secondPrerequisiteTask.getExecutionStatus()); } @Test diff --git a/repo/task-quartz-impl/src/test/resources/basic/task-004aTaskBigProperty.xml b/repo/task-quartz-impl/src/test/resources/basic/task-004TaskBigProperty.xml similarity index 100% rename from repo/task-quartz-impl/src/test/resources/basic/task-004aTaskBigProperty.xml rename to repo/task-quartz-impl/src/test/resources/basic/task-004TaskBigProperty.xml diff --git a/repo/task-quartz-impl/src/test/resources/basic/task-004TaskProperties.xml b/repo/task-quartz-impl/src/test/resources/basic/task-004TaskProperties.xml deleted file mode 100644 index 3b57217b5cb..00000000000 --- a/repo/task-quartz-impl/src/test/resources/basic/task-004TaskProperties.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - Passive task 0004 - - 91919190-76e0-59e2-86d6-3d4f02d30004 - - - waiting - - http://midpoint.evolveum.com/test/single-task-handler - - single - diff --git a/repo/task-quartz-impl/src/test/resources/basic/task-004bTaskBigProperty.xml b/repo/task-quartz-impl/src/test/resources/basic/task-004bTaskBigProperty.xml deleted file mode 100644 index b907a66c7ef..00000000000 --- a/repo/task-quartz-impl/src/test/resources/basic/task-004bTaskBigProperty.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - Passive task 0004 - - - 91919190-76e0-59e2-86d6-3d4f02d30004 - - - waiting - - http://midpoint.evolveum.com/test/single-task-handler - - single - diff --git a/repo/task-quartz-impl/src/test/resources/basic/task-004cReferenceInExtension.xml b/repo/task-quartz-impl/src/test/resources/basic/task-004cReferenceInExtension.xml deleted file mode 100644 index 2397fb7c503..00000000000 --- a/repo/task-quartz-impl/src/test/resources/basic/task-004cReferenceInExtension.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - Passive task 0004 - - 91919190-76e0-59e2-86d6-3d4f02d30004 - - - waiting - - http://midpoint.evolveum.com/test/single-task-handler - - single -