Example #1
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testDeletesOnlyVariablesFromRemovingScope()
        public virtual void testDeletesOnlyVariablesFromRemovingScope()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.DOUBLE_SUBPROCESS_MODEL);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_ONE_TASK_SUBPROCESS_MODEL);

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("innerSubProcess", "subProcess").mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build();

            ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            Execution innerSubProcessExecution = rule.RuntimeService.createExecutionQuery().activityId("userTask1").singleResult();

            string outerSubProcessExecutionId = ((ExecutionEntity)innerSubProcessExecution).ParentId;

            rule.RuntimeService.setVariableLocal(outerSubProcessExecutionId, "outerVariable", "outerValue");
            rule.RuntimeService.setVariableLocal(innerSubProcessExecution.Id, "innerVariable", "innerValue");

            testHelper.completeTask("userTask1");

            // when
            testHelper.migrateProcessInstance(migrationPlan, processInstance);

            // then
            Assert.assertEquals(1, testHelper.snapshotAfterMigration.getVariables().Count);

            VariableInstance migratedVariable = testHelper.snapshotAfterMigration.getSingleVariable("innerVariable");

            Assert.assertNotNull(migratedVariable);
            Assert.assertEquals("innerValue", migratedVariable.Value);
        }
Example #2
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testMigrateCompensationSubscriptionAddRemoveSubProcess()
        public virtual void testMigrateCompensationSubscriptionAddRemoveSubProcess()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_ONE_TASK_SUBPROCESS_MODEL);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_ONE_TASK_SUBPROCESS_MODEL);

            // subProcess is not mapped
            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build();

            ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            testHelper.completeTask("userTask1");

            // when
            testHelper.migrateProcessInstance(migrationPlan, processInstance);

            // then
            testHelper.assertEventSubscriptionMigrated("compensationHandler", "compensationHandler", null);

            // and the compensation can be triggered and completed
            testHelper.completeTask("userTask2");
            testHelper.completeTask("compensationHandler");

            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #3
0
        /// <summary>
        /// Ensures that situations are avoided in which more tokens end up at the target gateway
        /// than it has incoming flows
        /// </summary>
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testAddGatewayIncomingSequenceFlow()
        public virtual void testAddGatewayIncomingSequenceFlow()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(GatewayModels.PARALLEL_GW);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(GatewayModels.PARALLEL_GW).flowNodeBuilder("fork").userTask("parallel3").connectTo("join").done());

            ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            testHelper.completeTask("parallel2");

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("parallel1", "parallel1").mapActivities("join", "join").build();

            // when
            testHelper.migrateProcessInstance(migrationPlan, processInstance);

            // then
            Assert.assertEquals(1, rule.TaskService.createTaskQuery().count());
            Assert.assertEquals(0, rule.TaskService.createTaskQuery().taskDefinitionKey("afterJoin").count());

            rule.RuntimeService.createProcessInstanceModification(processInstance.Id).startBeforeActivity("join").execute();
            Assert.assertEquals(0, rule.TaskService.createTaskQuery().taskDefinitionKey("afterJoin").count());

            testHelper.completeTask("parallel1");
            testHelper.completeTask("afterJoin");
            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #4
0
        public virtual void historicIncidentRemainsOpenAfterMigration()
        {
            // Given we create a new process instance
            ProcessDefinition process1        = engineRule.RepositoryService.createProcessDefinitionQuery().processDefinitionKey("calledProcess").singleResult();
            ProcessInstance   processInstance = engineRule.RuntimeService.startProcessInstanceById(process1.Id);

            LockedExternalTask task = engineRule.ExternalTaskService.fetchAndLock(1, "foo").topic("foo", 1000L).execute()[0];

            engineRule.ExternalTaskService.handleFailure(task.Id, "foo", "error", 0, 1000L);

            Incident incidentInProcess = engineRule.RuntimeService.createIncidentQuery().processDefinitionId(process1.Id).singleResult();

            // when
            ProcessDefinition process2 = engineRule.RepositoryService.createProcessDefinitionQuery().processDefinitionKey("calledProcessV2").singleResult();

            MigrationPlan migrationPlan = engineRule.RuntimeService.createMigrationPlan(process1.Id, process2.Id).mapEqualActivities().mapActivities("ServiceTask_1p58ywb", "ServiceTask_V2").build();

            engineRule.RuntimeService.newMigration(migrationPlan).processInstanceIds(processInstance.Id).execute();

            // then
            HistoricIncident historicIncidentAfterMigration = engineRule.HistoryService.createHistoricIncidentQuery().singleResult();

            assertNotNull(historicIncidentAfterMigration);
            assertNull(historicIncidentAfterMigration.EndTime);
            assertTrue(historicIncidentAfterMigration.Open);

            HistoricProcessInstance historicProcessInstanceAfterMigration = engineRule.HistoryService.createHistoricProcessInstanceQuery().withIncidents().incidentStatus("open").singleResult();

            assertNotNull(historicProcessInstanceAfterMigration);

            Incident incidentAfterMigration = engineRule.RuntimeService.createIncidentQuery().incidentId(incidentInProcess.Id).singleResult();

            assertEquals(process2.Id, incidentAfterMigration.ProcessDefinitionId);
            assertEquals("ServiceTask_V2", incidentAfterMigration.ActivityId);
        }
Example #5
0
        public virtual void testCallActivityExternalTaskIncidentMigration()
        {
            // Given we create a new process instance
            ProcessDefinition callingProcess  = engineRule.RepositoryService.createProcessDefinitionQuery().processDefinitionKey("callingProcess").singleResult();
            ProcessInstance   processInstance = engineRule.RuntimeService.startProcessInstanceById(callingProcess.Id);

            LockedExternalTask task = engineRule.ExternalTaskService.fetchAndLock(1, "foo").topic("foo", 1000L).execute()[0];

            // creating an incident in the called and calling process
            engineRule.ExternalTaskService.handleFailure(task.Id, "foo", "error", 0, 1000L);

            Incident incidentInCallingProcess = engineRule.RuntimeService.createIncidentQuery().processDefinitionId(callingProcess.Id).singleResult();

            // when
            ProcessDefinition callingProcessV2 = engineRule.RepositoryService.createProcessDefinitionQuery().processDefinitionKey("callingProcessV2").singleResult();

            MigrationPlan migrationPlan = engineRule.RuntimeService.createMigrationPlan(callingProcess.Id, callingProcessV2.Id).mapEqualActivities().mapActivities("CallActivity", "CallActivityV2").build();

            engineRule.RuntimeService.newMigration(migrationPlan).processInstanceIds(processInstance.Id).execute();

            // then
            Incident incidentAfterMigration = engineRule.RuntimeService.createIncidentQuery().incidentId(incidentInCallingProcess.Id).singleResult();

            Assert.assertEquals(callingProcessV2.Id, incidentAfterMigration.ProcessDefinitionId);
            Assert.assertEquals("CallActivityV2", incidentAfterMigration.ActivityId);
        }
Example #6
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testJobIncidentMigration()
        public virtual void testJobIncidentMigration()
        {
            // Given we deploy process definitions
            testHelper.deploy(FAIL_CALLED_PROC, NEW_CALLED_PROC);

            ProcessDefinition failingProcess = engineRule.RepositoryService.createProcessDefinitionQuery().processDefinitionKey(FAIL_CALLED_PROC_KEY).singleResult();

            ProcessDefinition newProcess = engineRule.RepositoryService.createProcessDefinitionQuery().processDefinitionKey(NEW_CALLED_PROC_KEY).singleResult();

            //create process instance and execute job which fails
            ProcessInstance processInstance = engineRule.RuntimeService.startProcessInstanceByKey(FAIL_CALLED_PROC_KEY);

            testHelper.executeAvailableJobs();

            Incident incidentInCallingProcess = engineRule.RuntimeService.createIncidentQuery().processDefinitionId(failingProcess.Id).singleResult();

            // when
            MigrationPlan migrationPlan = engineRule.RuntimeService.createMigrationPlan(failingProcess.Id, newProcess.Id).mapEqualActivities().mapActivities("task", "taskV2").build();

            engineRule.RuntimeService.newMigration(migrationPlan).processInstanceIds(processInstance.Id).execute();

            // then
            Incident incidentAfterMigration = engineRule.RuntimeService.createIncidentQuery().incidentId(incidentInCallingProcess.Id).singleResult();

            Assert.assertEquals(newProcess.Id, incidentAfterMigration.ProcessDefinitionId);
            Assert.assertEquals("taskV2", incidentAfterMigration.ActivityId);
        }
Example #7
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCustomIncidentMigrationWithoutConfiguration()
        public virtual void testCustomIncidentMigrationWithoutConfiguration()
        {
            // given
            RuntimeService    runtimeService = engineRule.RuntimeService;
            BpmnModelInstance instance1      = Bpmn.createExecutableProcess("process1").startEvent().userTask("u1").endEvent().done();
            BpmnModelInstance instance2      = Bpmn.createExecutableProcess("process2").startEvent().userTask("u2").endEvent().done();

            testHelper.deploy(instance1, instance2);

            ProcessInstance processInstance1 = runtimeService.startProcessInstanceByKey("process1");
            ProcessInstance processInstance2 = runtimeService.startProcessInstanceByKey("process2");

            MigrationPlan migrationPlan = runtimeService.createMigrationPlan(processInstance1.ProcessDefinitionId, processInstance2.ProcessDefinitionId).mapActivities("u1", "u2").build();

            runtimeService.createIncident("custom", processInstance1.Id, null);

            // when
            runtimeService.newMigration(migrationPlan).processInstanceIds(processInstance1.Id).execute();

            // then
            Incident incident = runtimeService.createIncidentQuery().singleResult();

            assertEquals(processInstance2.ProcessDefinitionId, incident.ProcessDefinitionId);
            assertEquals("custom", incident.IncidentType);
            assertEquals(processInstance1.Id, incident.ExecutionId);
        }
Example #8
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCallBpmnProcessReconfigureCallActivity()
        public virtual void testCallBpmnProcessReconfigureCallActivity()
        {
            // given
            BpmnModelInstance model = CallActivityModels.oneBpmnCallActivityProcess("oneTaskProcess");

            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(model);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(model).callActivityBuilder("callActivity").calledElement("foo").done());

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("callActivity", "callActivity").build();

            // when
            ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan);

            // then the called instance has not changed (e.g. not been migrated to a different process definition)
            ProcessInstance calledInstance = rule.RuntimeService.createProcessInstanceQuery().processDefinitionKey("oneTaskProcess").singleResult();

            Assert.assertNotNull(calledInstance);

            // and it is possible to complete the called process instance
            testHelper.completeTask("userTask");
            // and the calling process instance
            testHelper.completeTask("userTask");

            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #9
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCallBpmnProcessSimpleMigration()
        public virtual void testCallBpmnProcessSimpleMigration()
        {
            // given
            BpmnModelInstance model = CallActivityModels.oneBpmnCallActivityProcess("oneTaskProcess");

            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(model);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(model);

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("callActivity", "callActivity").build();

            // when
            ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan);

            // then
            testHelper.assertExecutionTreeAfterMigration().hasProcessDefinitionId(targetProcessDefinition.Id).matches(describeExecutionTree(null).scope().id(testHelper.snapshotBeforeMigration.ProcessInstanceId).child("callActivity").scope().id(testHelper.getSingleExecutionIdForActivityBeforeMigration("callActivity")).done());

            testHelper.assertActivityTreeAfterMigration().hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("callActivity", testHelper.getSingleActivityInstanceBeforeMigration("callActivity").Id).done());

            // and it is possible to complete the called process instance
            testHelper.completeTask("userTask");
            // and the calling process instance
            testHelper.completeTask("userTask");

            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #10
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCallBpmnProcessParallelMultiInstance()
        public virtual void testCallBpmnProcessParallelMultiInstance()
        {
            // given
            BpmnModelInstance model = modify(CallActivityModels.oneBpmnCallActivityProcess("oneTaskProcess")).activityBuilder("callActivity").multiInstance().parallel().cardinality("1").done();

            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(model);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(model);

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("callActivity#multiInstanceBody", "callActivity#multiInstanceBody").mapActivities("callActivity", "callActivity").build();

            // when
            ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan);

            // then
            testHelper.assertExecutionTreeAfterMigration().hasProcessDefinitionId(targetProcessDefinition.Id).matches(describeExecutionTree(null).scope().id(testHelper.snapshotBeforeMigration.ProcessInstanceId).child(null).scope().id(testHelper.getSingleExecutionIdForActivityBeforeMigration("callActivity#multiInstanceBody")).child("callActivity").concurrent().noScope().id(testHelper.getSingleExecutionIdForActivityBeforeMigration("callActivity")).done());

            testHelper.assertActivityTreeAfterMigration().hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).beginMiBody("callActivity").activity("callActivity", testHelper.getSingleActivityInstanceBeforeMigration("callActivity").Id).done());

            // and the link between calling and called instance is maintained correctly

            testHelper.assertSuperExecutionOfProcessInstance(rule.RuntimeService.createProcessInstanceQuery().processDefinitionKey("oneTaskProcess").singleResult().Id, testHelper.getSingleExecutionIdForActivityAfterMigration("callActivity"));

            // and it is possible to complete the called process instance
            testHelper.completeTask("userTask");
            // and the calling process instance
            testHelper.completeTask("userTask");

            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #11
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCallCmmnCaseSequentialMultiInstanceRemoveMiBody()
        public virtual void testCallCmmnCaseSequentialMultiInstanceRemoveMiBody()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(modify(CallActivityModels.oneCmmnCallActivityProcess("oneTaskCase")).activityBuilder("callActivity").multiInstance().sequential().cardinality("1").done());
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CallActivityModels.oneCmmnCallActivityProcess("oneTaskCase"));

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("callActivity", "callActivity").build();

            // when
            ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan);

            // then
            testHelper.assertExecutionTreeAfterMigration().hasProcessDefinitionId(targetProcessDefinition.Id).matches(describeExecutionTree(null).scope().id(testHelper.snapshotBeforeMigration.ProcessInstanceId).child("callActivity").scope().done());

            testHelper.assertActivityTreeAfterMigration().hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("callActivity", testHelper.getSingleActivityInstanceBeforeMigration("callActivity").Id).done());

            // then the link between calling and called instance is maintained correctly
            testHelper.assertSuperExecutionOfCaseInstance(rule.CaseService.createCaseInstanceQuery().caseDefinitionKey("oneTaskCase").singleResult().Id, testHelper.getSingleExecutionIdForActivityAfterMigration("callActivity"));

            // and it is possible to complete the called case instance
            CaseExecution caseExecution = rule.CaseService.createCaseExecutionQuery().activityId("PI_HumanTask_1").singleResult();

            testHelper.completeTask("PI_HumanTask_1");

            // and the calling process instance
            testHelper.completeTask("userTask");

            testHelper.assertProcessEnded(processInstance.Id);

            // and close the called case instance
            rule.CaseService.withCaseExecution(caseExecution.CaseInstanceId).close();
            testHelper.assertCaseEnded(caseExecution.CaseInstanceId);
        }
Example #12
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCannotMigrateAsyncActivityInstance()
        public virtual void testCannotMigrateAsyncActivityInstance()
        {
            // given
//JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method:
            BpmnModelInstance model = ProcessModels.newModel().startEvent().serviceTask("serviceTask").camundaAsyncBefore().camundaClass(typeof(SignallableServiceTaskDelegate).FullName).endEvent().done();

            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(model);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(model);

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("serviceTask", "serviceTask").build();

            string processInstanceId = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id).Id;

            testHelper.executeAvailableJobs();

            // when
            try
            {
                rule.RuntimeService.newMigration(migrationPlan).processInstanceIds(processInstanceId).execute();

                Assert.fail("should fail");
            }
            catch (MigratingProcessInstanceValidationException e)
            {
                // then
                assertThat(e.ValidationReport).hasActivityInstanceFailures("serviceTask", "The type of the source activity is not supported for activity instance migration");
            }
        }
Example #13
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testIntermediateConditionalEventWithSetVariableOnEndListener()
        public virtual void testIntermediateConditionalEventWithSetVariableOnEndListener()
        {
            // given
//JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method:
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(Bpmn.createExecutableProcess().startEvent().subProcess().camundaExecutionListenerClass([email protected]_Fields.EVENTNAME_END, typeof(SetVariableDelegate).FullName).embeddedSubProcess().startEvent().intermediateCatchEvent(CONDITION_ID).conditionalEventDefinition().condition(VAR_CONDITION).conditionalEventDefinitionDone().userTask(TASK_AFTER_CONDITION_ID).endEvent().subProcessDone().endEvent().done());
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(Bpmn.createExecutableProcess().startEvent().intermediateCatchEvent(CONDITION_ID).conditionalEventDefinition().condition(VAR_CONDITION).conditionalEventDefinitionDone().userTask(TASK_AFTER_CONDITION_ID).endEvent().done());

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities(CONDITION_ID, CONDITION_ID).updateEventTrigger().build();

            //when sub process is removed, end listener is called and sets variable
            ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan);

            testHelper.assertEventSubscriptionMigrated(CONDITION_ID, CONDITION_ID, null);
            assertEquals(1, rule.RuntimeService.getVariable(processInstance.Id, VARIABLE_NAME));

            //then conditional event is not triggered
            assertNull(rule.TaskService.createTaskQuery().singleResult());

            //when any var is set
            testHelper.AnyVariable = processInstance.Id;

            //then condition is satisfied, since variable is already set which satisfies condition
            testHelper.completeTask(TASK_AFTER_CONDITION_ID);
            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #14
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void tesConditionalEventSubProcessWithSetVariableOnStartListener()
        public virtual void tesConditionalEventSubProcessWithSetVariableOnStartListener()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.ONE_TASK_PROCESS).addSubProcessTo(PROC_DEF_KEY).triggerByEvent().embeddedSubProcess().startEvent(EVENT_SUB_PROCESS_START_ID).condition(VAR_CONDITION).userTask(TASK_AFTER_CONDITION_ID).endEvent().done());

//JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method:
            BpmnModelInstance targetModel = modify(Bpmn.createExecutableProcess(PROC_DEF_KEY).startEvent().subProcess(SUB_PROCESS_ID).camundaExecutionListenerClass([email protected]_Fields.EVENTNAME_START, typeof(SetVariableDelegate).FullName).embeddedSubProcess().startEvent().userTask(USER_TASK_ID).endEvent().subProcessDone().endEvent().done()).addSubProcessTo(SUB_PROCESS_ID).triggerByEvent().embeddedSubProcess().startEvent().condition(VAR_CONDITION).endEvent().done();

            targetModel = modify(targetModel).addSubProcessTo(PROC_DEF_KEY).triggerByEvent().embeddedSubProcess().startEvent(EVENT_SUB_PROCESS_START_ID).condition(VAR_CONDITION).userTask(TASK_AFTER_CONDITION_ID).endEvent().done();
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetModel);

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities(USER_TASK_ID, USER_TASK_ID).mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID).updateEventTrigger().build();

            //when sub process is added, start listener is called and sets variable
            ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan);

            testHelper.assertEventSubscriptionMigrated(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID, null);
            assertEquals(1, rule.RuntimeService.getVariable(processInstance.Id, VARIABLE_NAME));

            //then conditional event is not triggered
            assertEquals(USER_TASK_ID, rule.TaskService.createTaskQuery().singleResult().TaskDefinitionKey);

            //when any var is set
            testHelper.AnyVariable = processInstance.Id;

            //then condition is satisfied, since variable is already set which satisfies condition
            testHelper.completeTask(TASK_AFTER_CONDITION_ID);
            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #15
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testVariablesInParentEventScopeStillAccessible()
        public virtual void testVariablesInParentEventScopeStillAccessible()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_ONE_TASK_SUBPROCESS_MODEL);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.DOUBLE_SUBPROCESS_MODEL);

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("subProcess", "outerSubProcess").mapActivities("compensationBoundary", "compensationBoundary").mapActivities("userTask2", "userTask2").build();

            ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            Execution subProcessExecution = rule.RuntimeService.createExecutionQuery().activityId("userTask1").singleResult();

            rule.RuntimeService.setVariableLocal(subProcessExecution.Id, "foo", "bar");

            testHelper.completeTask("userTask1");

            testHelper.migrateProcessInstance(migrationPlan, processInstance);

            // when throwing compensation
            testHelper.completeAnyTask("userTask2");

            // then the variable snapshot is available
            Task compensationTask = rule.TaskService.createTaskQuery().singleResult();

            Assert.assertEquals("bar", rule.TaskService.getVariable(compensationTask.Id, "foo"));
        }
Example #16
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testMigrateEventSubscriptionChangeCondition()
        public virtual void testMigrateEventSubscriptionChangeCondition()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ONE_CONDITION_PROCESS);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(Bpmn.createExecutableProcess().startEvent().intermediateCatchEvent(NEW_CONDITION_ID).conditionalEventDefinition().condition(NEW_VAR_CONDITION).conditionalEventDefinitionDone().userTask(USER_TASK_ID).done());

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities(CONDITION_ID, NEW_CONDITION_ID).updateEventTrigger().build();

            // when
            ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan);

            testHelper.assertEventSubscriptionMigrated(CONDITION_ID, NEW_CONDITION_ID, null);

            //and var is set with value of old condition
            testHelper.setVariable(processInstance.Id, VAR_NAME, "1");

            //then nothing happens
            assertNull(rule.TaskService.createTaskQuery().singleResult());

            //when correct value is set
            testHelper.setVariable(processInstance.Id, VAR_NAME, "2");

            //then condition is satisfied
            testHelper.completeTask(USER_TASK_ID);
            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #17
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCanOnlyTriggerCompensationInParentOfRemovedScope()
        public virtual void testCanOnlyTriggerCompensationInParentOfRemovedScope()
        {
            BpmnModelInstance sourceModel = ProcessModels.newModel().startEvent().subProcess("outerSubProcess").embeddedSubProcess().startEvent().userTask("userTask1").boundaryEvent("compensationBoundary").compensateEventDefinition().compensateEventDefinitionDone().moveToActivity("userTask1").subProcess("innerSubProcess").embeddedSubProcess().startEvent().userTask("userTask2").endEvent().subProcessDone().endEvent().subProcessDone().done();

            CompensationModels.addUserTaskCompensationHandler(sourceModel, "compensationBoundary", "compensationHandler");

            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceModel);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(CompensationModels.COMPENSATION_TWO_TASKS_SUBPROCESS_MODEL).endEventBuilder("subProcessEnd").compensateEventDefinition().waitForCompletion(true).compensateEventDefinitionDone().done());

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("innerSubProcess", "subProcess").mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build();

            ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            testHelper.completeTask("userTask1");
            testHelper.migrateProcessInstance(migrationPlan, processInstance);

            // when
            testHelper.completeTask("userTask2");

            // then compensation is not triggered from inside the inner sub process
            // but only on process definition level
            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(processInstance.Id);

            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("compensationEvent").beginScope("subProcess").activity("compensationHandler").done());
        }
Example #18
0
        public virtual void testMigrateWithSubTask()
        {
            //given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);

            MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapEqualActivities().build();

            ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            Task task    = taskService.createTaskQuery().singleResult();
            Task subTask = taskService.newTask();

            subTask.ParentTaskId = task.Id;
            taskService.saveTask(subTask);

            // when
            runtimeService.newMigration(migrationPlan).processInstanceIds(Arrays.asList(processInstance.Id)).execute();

            // then the historic sub task instance is still the same
            HistoricTaskInstance historicSubTaskAfterMigration = historyService.createHistoricTaskInstanceQuery().taskId(subTask.Id).singleResult();

            Assert.assertNotNull(historicSubTaskAfterMigration);
            Assert.assertNull(historicSubTaskAfterMigration.ProcessDefinitionId);
            Assert.assertNull(historicSubTaskAfterMigration.ProcessDefinitionKey);
            Assert.assertNull(historicSubTaskAfterMigration.ExecutionId);
            Assert.assertNull(historicSubTaskAfterMigration.ActivityInstanceId);
        }
Example #19
0
        public virtual void testMigrateHistoryUserTaskInstance()
        {
            //given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.ONE_TASK_PROCESS).changeElementId("Process", "Process2").changeElementId("userTask", "userTask2"));

            MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask", "userTask2").build();

            ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            HistoricTaskInstanceQuery sourceHistoryTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().processDefinitionId(sourceProcessDefinition.Id);
            HistoricTaskInstanceQuery targetHistoryTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().processDefinitionId(targetProcessDefinition.Id);

            ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.Id);

            //when
            assertEquals(1, sourceHistoryTaskInstanceQuery.count());
            assertEquals(0, targetHistoryTaskInstanceQuery.count());
            ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.Id);

            runtimeService.newMigration(migrationPlan).processInstanceQuery(sourceProcessInstanceQuery).execute();

            //then
            assertEquals(0, sourceHistoryTaskInstanceQuery.count());
            assertEquals(1, targetHistoryTaskInstanceQuery.count());

            HistoricTaskInstance instance = targetHistoryTaskInstanceQuery.singleResult();

            assertEquals(targetProcessDefinition.Key, instance.ProcessDefinitionKey);
            assertEquals(targetProcessDefinition.Id, instance.ProcessDefinitionId);
            assertEquals("userTask2", instance.TaskDefinitionKey);
            assertEquals(activityInstance.getActivityInstances("userTask")[0].Id, instance.ActivityInstanceId);
        }
Example #20
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testDontWriteDuplicateLogOnBatchMigrationJobExecution()
        public virtual void testDontWriteDuplicateLogOnBatchMigrationJobExecution()
        {
            // given
            ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);

            ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceDefinition.Id);

            MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceDefinition.Id, targetDefinition.Id).mapEqualActivities().build();

            batch = runtimeService.newMigration(migrationPlan).processInstanceIds(Arrays.asList(processInstance.Id)).executeAsync();
            Job seedJob = managementService.createJobQuery().singleResult();

            managementService.executeJob(seedJob.Id);

            Job migrationJob = managementService.createJobQuery().jobDefinitionId(batch.BatchJobDefinitionId).singleResult();

            // when
            managementService.executeJob(migrationJob.Id);

            // then
            assertEquals(9, userOperationLogQuery().count());
            assertEquals(2, userOperationLogQuery().operationType(org.camunda.bpm.engine.history.UserOperationLogEntry_Fields.OPERATION_TYPE_CREATE).entityType(EntityTypes.DEPLOYMENT).count());
            assertEquals(1, userOperationLogQuery().operationType(org.camunda.bpm.engine.history.UserOperationLogEntry_Fields.OPERATION_TYPE_CREATE).entityType(EntityTypes.PROCESS_INSTANCE).count());
            assertEquals(3, userOperationLogQuery().operationType(org.camunda.bpm.engine.history.UserOperationLogEntry_Fields.OPERATION_TYPE_MIGRATE).entityType(EntityTypes.PROCESS_INSTANCE).count());
        }
Example #21
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testMigrateHistoricIncidentAddScope()
        public virtual void testMigrateHistoricIncidentAddScope()
        {
            // given
            ProcessDefinition sourceProcess = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_USER_TASK_PROCESS);
            ProcessDefinition targetProcess = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_SUBPROCESS_USER_TASK_PROCESS);

            MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcess.Id, targetProcess.Id).mapActivities("userTask", "userTask").build();

            ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceProcess.Id);

            Job job = managementService.createJobQuery().singleResult();

            managementService.setJobRetries(job.Id, 0);

            // when
            runtimeService.newMigration(migrationPlan).processInstanceIds(Arrays.asList(processInstance.Id)).execute();

            // then
            ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.Id);

            HistoricIncident historicIncident = historyService.createHistoricIncidentQuery().singleResult();

            Assert.assertNotNull(historicIncident);
            Assert.assertEquals(activityInstance.getTransitionInstances("userTask")[0].ExecutionId, historicIncident.ExecutionId);
        }
Example #22
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void canCreateMigrationPlanForNoTenants()
        public virtual void canCreateMigrationPlanForNoTenants()
        {
            // given
            ProcessDefinition sharedDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);


            // when
            MigrationPlan migrationPlan = engineRule.RuntimeService.createMigrationPlan(sharedDefinition.Id, sharedDefinition.Id).mapEqualActivities().build();

            // then
            Assert.assertNotNull(migrationPlan);
        }
Example #23
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Before public void initTest()
        public virtual void initTest()
        {
            runtimeService = rule.RuntimeService;
            historyService = rule.HistoryService;


            sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);
            ModifiableBpmnModelInstance modifiedModel = modify(ProcessModels.ONE_TASK_PROCESS).changeElementId("Process", "Process2").changeElementId("userTask", "userTask2");

            targetProcessDefinition = testHelper.deployAndGetDefinition(modifiedModel);
            migrationPlan           = runtimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask", "userTask2").build();
            runtimeService.startProcessInstanceById(sourceProcessDefinition.Id);
        }
Example #24
0
        public virtual void testInitParallelMigration()
        {
            // given
            ProcessInstance instance      = rule.processInstance();
            MigrationPlan   migrationPlan = rule.RuntimeService.createMigrationPlan(instance.ProcessDefinitionId, instance.ProcessDefinitionId).mapEqualActivities().build();

            // when
            rule.RuntimeService.newMigration(migrationPlan).processInstanceIds(instance.Id).execute();

            // then the receive task messages can be correlated
            rule.messageCorrelation("Message").correlateAll();
            rule.assertScenarioEnded();
        }
Example #25
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void canCreateMigrationPlanForSharedDefinitionsWithNoAuthenticatedTenants()
        public virtual void canCreateMigrationPlanForSharedDefinitionsWithNoAuthenticatedTenants()
        {
            // given
            ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);

            // when
            engineRule.IdentityService.setAuthentication("user", null, null);
            MigrationPlan migrationPlan = engineRule.RuntimeService.createMigrationPlan(sourceDefinition.Id, targetDefinition.Id).mapEqualActivities().build();

            // then
            Assert.assertNotNull(migrationPlan);
        }
Example #26
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void canCreateMigrationPlanForDefinitionsOfAuthenticatedTenant()
        public virtual void canCreateMigrationPlanForDefinitionsOfAuthenticatedTenant()
        {
            // given
            ProcessDefinition tenant1Definition = testHelper.deployForTenantAndGetDefinition(TENANT_ONE, ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition tenant2Definition = testHelper.deployForTenantAndGetDefinition(TENANT_ONE, ProcessModels.ONE_TASK_PROCESS);


            // when
            engineRule.IdentityService.setAuthentication("user", null, Arrays.asList(TENANT_ONE));
            MigrationPlan migrationPlan = engineRule.RuntimeService.createMigrationPlan(tenant1Definition.Id, tenant2Definition.Id).mapEqualActivities().build();

            // then
            Assert.assertNotNull(migrationPlan);
        }
Example #27
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void canCreateMigrationPlanWithDisabledTenantCheck()
        public virtual void canCreateMigrationPlanWithDisabledTenantCheck()
        {
            // given
            ProcessDefinition tenant1Definition = testHelper.deployForTenantAndGetDefinition(TENANT_ONE, ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition tenant2Definition = testHelper.deployForTenantAndGetDefinition(TENANT_ONE, ProcessModels.ONE_TASK_PROCESS);

            // when
            engineRule.IdentityService.setAuthentication("user", null, null);
            engineRule.ProcessEngineConfiguration.TenantCheckEnabled = false;
            MigrationPlan migrationPlan = engineRule.RuntimeService.createMigrationPlan(tenant1Definition.Id, tenant2Definition.Id).mapEqualActivities().build();

            // then
            Assert.assertNotNull(migrationPlan);
        }
Example #28
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testContinueProcess()
        public virtual void testContinueProcess()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION);

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("transaction", "transaction").mapActivities("userTask", "userTask").build();

            // when
            ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan);

            // then
            testHelper.completeTask("userTask");
            testHelper.assertProcessEnded(processInstance.Id);
        }
Example #29
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void canMigrateInstanceWithTenantIdToDefinitionWithoutTenantId()
        public virtual void canMigrateInstanceWithTenantIdToDefinitionWithoutTenantId()
        {
            // given
            ProcessDefinition sourceDefinition = testHelper.deployForTenantAndGetDefinition(TENANT_ONE, ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);

            ProcessInstance processInstance = engineRule.RuntimeService.startProcessInstanceById(sourceDefinition.Id);
            MigrationPlan   migrationPlan   = engineRule.RuntimeService.createMigrationPlan(sourceDefinition.Id, targetDefinition.Id).mapEqualActivities().build();

            // when
            engineRule.RuntimeService.newMigration(migrationPlan).processInstanceIds(Arrays.asList(processInstance.Id)).execute();

            // then
            assertMigratedTo(processInstance, targetDefinition);
        }
Example #30
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void canMigrateInstanceBetweenSameTenantCase2()
        public virtual void canMigrateInstanceBetweenSameTenantCase2()
        {
            // given
            ProcessDefinition sharedDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition targetDefinition = testHelper.deployForTenantAndGetDefinition(TENANT_ONE, ProcessModels.ONE_TASK_PROCESS);

            ProcessInstance processInstance = startInstanceForTenant(sharedDefinition, TENANT_ONE);
            MigrationPlan   migrationPlan   = engineRule.RuntimeService.createMigrationPlan(sharedDefinition.Id, targetDefinition.Id).mapEqualActivities().build();

            // when
            engineRule.RuntimeService.newMigration(migrationPlan).processInstanceIds(Arrays.asList(processInstance.Id)).execute();

            // then
            assertInstanceOfDefinition(processInstance, targetDefinition);
        }