@Test public void testMigrateConditionalBoundaryEventKeepTrigger() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CONDITIONAL_EVENT_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CONDITIONAL_EVENT_SUBPROCESS_PROCESS); // expected migration validation exception exceptionRule.expect(MigrationPlanValidationException.class); exceptionRule.expectMessage(MIGRATION_CONDITIONAL_VALIDATION_ERROR_MSG); // when conditional event sub process is migrated without update event trigger rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID) .build(); }
@Test public void testContinueProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("transaction", "transaction") .mapActivities("userTask", "userTask") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.completeTask("userTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testMigrateGatewayWithTimerEventMapEvent() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventBasedGatewayModels.TIMER_EVENT_BASED_GW_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventBasedGatewayModels.TIMER_EVENT_BASED_GW_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("eventBasedGateway", "eventBasedGateway") .mapActivities("timerCatch", "timerCatch") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.assertIntermediateTimerJobMigrated("timerCatch", "timerCatch"); Job timerJob = testHelper.snapshotAfterMigration.getJobs().get(0); rule.getManagementService().executeJob(timerJob.getId()); testHelper.completeTask("afterTimerCatch"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testDeleteMigratedInstance() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.PARALLEL_SCOPE_TASKS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.PARALLEL_SCOPE_TASKS_SUB_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask1", "userTask1") .mapActivities("userTask2", "userTask2") .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to delete the process instance String processInstanceId = testHelper.snapshotBeforeMigration.getProcessInstanceId(); rule.getRuntimeService().deleteProcessInstance(processInstanceId, null); testHelper.assertProcessEnded(processInstanceId); }
@Test public void testContinueProcessTriggerCancellation() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.CANCEL_BOUNDARY_EVENT); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("transaction", "transaction") .mapActivities("userTask", "userTask") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.completeTask("userTask"); testHelper.completeTask("afterBoundaryTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testMapSubProcessWithEventSubProcess() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.NESTED_EVENT_SUB_PROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.NESTED_EVENT_SUB_PROCESS_PROCESS); MigrationPlan migrationPlan = runtimeService .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("subProcess", "subProcess") .mapActivities("userTask", "userTask") .build(); assertThat(migrationPlan) .hasSourceProcessDefinition(sourceProcessDefinition) .hasTargetProcessDefinition(targetProcessDefinition) .hasInstructions( migrate("subProcess").to("subProcess"), migrate("userTask").to("userTask") ); }
@Test public void testMigrateGatewayWithSignalEventMapEvent() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventBasedGatewayModels.SIGNAL_EVENT_BASED_GW_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventBasedGatewayModels.SIGNAL_EVENT_BASED_GW_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("eventBasedGateway", "eventBasedGateway") .mapActivities("signalCatch", "signalCatch") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.assertEventSubscriptionMigrated("signalCatch", "signalCatch", EventBasedGatewayModels.SIGNAL_NAME); rule.getRuntimeService().signalEventReceived(EventBasedGatewayModels.SIGNAL_NAME); testHelper.completeTask("afterSignalCatch"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testMigrateGatewayWithMessageEventMapEvent() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventBasedGatewayModels.MESSAGE_EVENT_BASED_GW_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventBasedGatewayModels.MESSAGE_EVENT_BASED_GW_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("eventBasedGateway", "eventBasedGateway") .mapActivities("messageCatch", "messageCatch") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.assertEventSubscriptionMigrated("messageCatch", "messageCatch", EventBasedGatewayModels.MESSAGE_NAME); rule.getRuntimeService().correlateMessage(EventBasedGatewayModels.MESSAGE_NAME); testHelper.completeTask("afterMessageCatch"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testMigrateParallelMiBodyAddSubprocess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.PAR_MI_ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.PAR_MI_SUBPROCESS_PROCESS); try { rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(miBodyOf("userTask"), miBodyOf("subProcess")) .mapActivities("userTask", "userTask") .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures(miBodyOf("userTask"), "Must map the inner activity of a multi-instance body when the body is mapped" ); } }
@Test public void testMigrateParallelMiBodyRemoveSubprocess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.PAR_MI_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.PAR_MI_ONE_TASK_PROCESS); try { rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(miBodyOf("subProcess"), miBodyOf("userTask")) .mapActivities("userTask", "userTask") .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures(miBodyOf("subProcess"), "Cannot remove the inner activity of a multi-instance body when the body is mapped" ); } }
@Test public void testMigrateSequenatialMiBodyRemoveSubprocess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.SEQ_MI_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.SEQ_MI_ONE_TASK_PROCESS); try { rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(miBodyOf("subProcess"), miBodyOf("userTask")) .mapActivities("userTask", "userTask") .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures(miBodyOf("subProcess"), "Cannot remove the inner activity of a multi-instance body when the body is mapped" ); } }
@Test public void testMigrateSequentialMiBodyAddSubprocess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.SEQ_MI_ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(MultiInstanceProcessModels.SEQ_MI_SUBPROCESS_PROCESS); try { rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(miBodyOf("userTask"), miBodyOf("subProcess")) .mapActivities("userTask", "userTask") .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures(miBodyOf("userTask"), "Must map the inner activity of a multi-instance body when the body is mapped" ); } }
@Test public void testMigrateTransactionToEmbeddedSubProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(TransactionModels.ONE_TASK_TRANSACTION); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("transaction", "subProcess") .mapActivities("userTask", "userTask") .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then Assert.assertEquals( testHelper.getSingleActivityInstanceBeforeMigration("transaction").getId(), testHelper.getSingleActivityInstanceAfterMigration("subProcess").getId()); testHelper.completeTask("userTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testMigrateActiveErrorEventSubProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.ERROR_EVENT_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.ERROR_EVENT_SUBPROCESS_PROCESS); ProcessInstance processInstance = rule.getRuntimeService() .createProcessInstanceById(sourceProcessDefinition.getId()) .startBeforeActivity(EVENT_SUB_PROCESS_TASK_ID) .execute(); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("eventSubProcess", "eventSubProcess") .mapActivities(EVENT_SUB_PROCESS_TASK_ID, EVENT_SUB_PROCESS_TASK_ID) .build(); // when testHelper.migrateProcessInstance(migrationPlan, processInstance); // then it is possible to complete the process instance testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testMigrateActiveEscalationEventSubProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.ESCALATION_EVENT_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.ESCALATION_EVENT_SUBPROCESS_PROCESS); ProcessInstance processInstance = rule.getRuntimeService() .createProcessInstanceById(sourceProcessDefinition.getId()) .startBeforeActivity(EVENT_SUB_PROCESS_TASK_ID) .execute(); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("eventSubProcess", "eventSubProcess") .mapActivities(EVENT_SUB_PROCESS_TASK_ID, EVENT_SUB_PROCESS_TASK_ID) .build(); // when testHelper.migrateProcessInstance(migrationPlan, processInstance); // then it is possible to complete the process instance testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testRemoveEscalationBoundaryEventFromSubProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.SUBPROCESS_PROCESS) .activityBuilder("subProcess") .boundaryEvent().escalation(ESCALATION_CODE) .done() ); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("subProcess", "subProcess") .mapActivities("userTask", "userTask") .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to successfully complete the migrated instance testHelper.completeTask("userTask"); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Test public void testCanMigrateWithCompensationSubscriptionsInMigratingScope() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask2", "userTask2") .mapActivities("compensationBoundary", "compensationBoundary") .build(); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); 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.getId()); }
@Test public void testCase2() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_ONE_TASK_SUBPROCESS_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask2", "userTask2") .mapActivities("compensationBoundary", "compensationBoundary") .build(); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); 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.getId()); }
@Test public void testCase1() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_TWO_TASKS_SUBPROCESS_MODEL); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask2", "userTask2") .mapActivities("compensationBoundary", "compensationBoundary") .build(); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); 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.getId()); }
@Test public void testCase1AssertExecutionTree() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_TWO_TASKS_SUBPROCESS_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask2", "userTask2") .mapActivities("compensationBoundary", "compensationBoundary") .build(); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); testHelper.completeTask("userTask1"); // when testHelper.migrateProcessInstance(migrationPlan, processInstance); // then testHelper.assertExecutionTreeAfterMigration() .hasProcessDefinitionId(targetProcessDefinition.getId()) .matches( describeExecutionTree("userTask2").scope().id(testHelper.snapshotBeforeMigration.getProcessInstanceId()) .done()); }