protected void verifyMigrationPlanExecutionProcessInstanceQuery(InOrder inOrder) { ArgumentCaptor<ProcessInstanceQuery> queryCapture = ArgumentCaptor.forClass(ProcessInstanceQuery.class); inOrder.verify(migrationPlanExecutionBuilderMock).processInstanceQuery(queryCapture.capture()); ProcessInstanceQueryImpl actualQuery = (ProcessInstanceQueryImpl) queryCapture.getValue(); assertThat(actualQuery).isNotNull(); assertThat(actualQuery.getProcessDefinitionId()).isEqualTo(EXAMPLE_PROCESS_DEFINITION_ID); }
protected MigrationPlanExecutionBuilder createMigrationPlanExecutionBuilder(MigrationExecutionDto migrationExecution) { MigrationPlan migrationPlan = createMigrationPlan(migrationExecution.getMigrationPlan()); List<String> processInstanceIds = migrationExecution.getProcessInstanceIds(); MigrationPlanExecutionBuilder executionBuilder = processEngine.getRuntimeService() .newMigration(migrationPlan).processInstanceIds(processInstanceIds); ProcessInstanceQueryDto processInstanceQueryDto = migrationExecution.getProcessInstanceQuery(); if (processInstanceQueryDto != null) { ProcessInstanceQuery processInstanceQuery = processInstanceQueryDto.toQuery(getProcessEngine()); executionBuilder.processInstanceQuery(processInstanceQuery); } if (migrationExecution.isSkipCustomListeners()) { executionBuilder.skipCustomListeners(); } if (migrationExecution.isSkipIoMappings()) { executionBuilder.skipIoMappings(); } return executionBuilder; }
protected MigrationPlanExecutionBuilder createMigrationPlanExecutionBuilder(MigrationExecutionDto migrationExecution) { MigrationPlan migrationPlan = createMigrationPlan(migrationExecution.getMigrationPlan()); List<String> processInstanceIds = migrationExecution.getProcessInstanceIds(); MigrationPlanExecutionBuilder executionBuilder = processEngine.getRuntimeService() .newMigration(migrationPlan).processInstanceIds(processInstanceIds); ProcessInstanceQueryDto processInstanceQueryDto = migrationExecution.getProcessInstanceQuery(); if (processInstanceQueryDto != null) { ProcessInstanceQuery processInstanceQuery = processInstanceQueryDto.toQuery(getProcessEngine()); executionBuilder.processInstanceQuery(processInstanceQuery); } if (migrationExecution.isSkipCustomListeners()) { executionBuilder.skipCustomListeners(); } if (migrationExecution.isSkipIoMappings()) { executionBuilder.skipIoMappings(); } return executionBuilder; }
@Test public void testNullProcessInstanceQuery() { ProcessDefinition testProcessDefinition = migrationRule.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(testProcessDefinition.getId(), testProcessDefinition.getId()) .mapEqualActivities() .build(); try { runtimeService.newMigration(migrationPlan).processInstanceQuery(null).executeAsync(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("process instance ids is empty")); } }
@Test public void testNullProcessInstanceQuery() { ProcessDefinition testProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(testProcessDefinition.getId(), testProcessDefinition.getId()) .mapEqualActivities() .build(); try { runtimeService.newMigration(migrationPlan).processInstanceQuery(null).execute(); fail("Should not be able to migrate"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), CoreMatchers.containsString("process instance ids is empty")); } }
@Test public void testEmptyProcessInstanceQuery() { ProcessDefinition testProcessDefinition = migrationRule.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(testProcessDefinition.getId(), testProcessDefinition.getId()) .mapEqualActivities() .build(); ProcessInstanceQuery emptyProcessInstanceQuery = runtimeService.createProcessInstanceQuery(); assertEquals(0, emptyProcessInstanceQuery.count()); try { runtimeService.newMigration(migrationPlan).processInstanceQuery(emptyProcessInstanceQuery).executeAsync(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("process instance ids is empty")); } }
@Test public void testEmptyProcessInstanceQuery() { ProcessDefinition testProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(testProcessDefinition.getId(), testProcessDefinition.getId()) .mapEqualActivities() .build(); ProcessInstanceQuery emptyProcessInstanceQuery = runtimeService.createProcessInstanceQuery(); assertEquals(0, emptyProcessInstanceQuery.count()); try { runtimeService.newMigration(migrationPlan).processInstanceQuery(emptyProcessInstanceQuery).execute(); fail("Should not be able to migrate"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), CoreMatchers.containsString("process instance ids is empty")); } }
@Test public void testBatchCreationWithOverlappingProcessInstanceIdsAndQuery() { RuntimeService runtimeService = engineRule.getRuntimeService(); int processInstanceCount = 15; ProcessDefinition sourceProcessDefinition = migrationRule.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = migrationRule.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); List<String> processInstanceIds = new ArrayList<String>(); for (int i = 0; i < processInstanceCount; i++) { processInstanceIds.add( runtimeService.startProcessInstanceById(sourceProcessDefinition.getId()).getId() ); } MigrationPlan migrationPlan = engineRule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapEqualActivities() .build(); ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.getId()); assertEquals(processInstanceCount, sourceProcessInstanceQuery.count()); // when Batch batch = runtimeService.newMigration(migrationPlan) .processInstanceIds(processInstanceIds) .processInstanceQuery(sourceProcessInstanceQuery) .executeAsync(); // then a batch is created assertBatchCreated(batch, processInstanceCount); }
@Test public void canMigrateWithProcessInstanceQueryAllInstancesOfAuthenticatedTenant() { // given ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = engineRule .getRuntimeService() .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapEqualActivities() .build(); ProcessInstance processInstance1 = startInstanceForTenant(sourceDefinition, TENANT_ONE); ProcessInstance processInstance2 = startInstanceForTenant(sourceDefinition, TENANT_TWO); // when engineRule.getIdentityService().setAuthentication("user", null, Arrays.asList(TENANT_ONE)); engineRule.getRuntimeService() .newMigration(migrationPlan) .processInstanceQuery(engineRule.getRuntimeService().createProcessInstanceQuery()) .execute(); engineRule.getIdentityService().clearAuthentication(); // then assertInstanceOfDefinition(processInstance1, targetDefinition); assertInstanceOfDefinition(processInstance2, sourceDefinition); }
@Test public void canMigrateWithProcessInstanceQueryAllInstancesOfAuthenticatedTenants() { // given ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = engineRule .getRuntimeService() .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapEqualActivities() .build(); ProcessInstance processInstance1 = startInstanceForTenant(sourceDefinition, TENANT_ONE); ProcessInstance processInstance2 = startInstanceForTenant(sourceDefinition, TENANT_TWO); // when engineRule.getIdentityService().setAuthentication("user", null, Arrays.asList(TENANT_ONE, TENANT_TWO)); engineRule.getRuntimeService() .newMigration(migrationPlan) .processInstanceQuery(engineRule.getRuntimeService().createProcessInstanceQuery()) .execute(); engineRule.getIdentityService().clearAuthentication(); // then assertInstanceOfDefinition(processInstance1, targetDefinition); assertInstanceOfDefinition(processInstance2, targetDefinition); }
@Test public void testProcessInstanceIdsAndQuery() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapEqualActivities() .build(); ProcessInstance processInstance1 = runtimeService.startProcessInstanceById(sourceProcessDefinition.getId()); ProcessInstance processInstance2 = runtimeService.startProcessInstanceById(sourceProcessDefinition.getId()); ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processInstanceId(processInstance2.getId()); ProcessInstanceQuery targetProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(targetProcessDefinition.getId()); assertEquals(0, targetProcessInstanceQuery.count()); runtimeService.newMigration(migrationPlan) .processInstanceIds(Collections.singletonList(processInstance1.getId())) .processInstanceQuery(sourceProcessInstanceQuery) .execute(); assertEquals(2, targetProcessInstanceQuery.count()); }
@Test public void testOverlappingProcessInstanceIdsAndQuery() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapEqualActivities() .build(); ProcessInstance processInstance1 = runtimeService.startProcessInstanceById(sourceProcessDefinition.getId()); ProcessInstance processInstance2 = runtimeService.startProcessInstanceById(sourceProcessDefinition.getId()); ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.getId()); ProcessInstanceQuery targetProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(targetProcessDefinition.getId()); assertEquals(0, targetProcessInstanceQuery.count()); runtimeService.newMigration(migrationPlan) .processInstanceIds(Arrays.asList(processInstance1.getId(), processInstance2.getId())) .processInstanceQuery(sourceProcessInstanceQuery) .execute(); assertEquals(2, targetProcessInstanceQuery.count()); }
@Test public void testProcessInstanceQueryOfWrongProcessDefinition() { ProcessDefinition testProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition wrongProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); runtimeService.startProcessInstanceById(wrongProcessDefinition.getId()); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(testProcessDefinition.getId(), testProcessDefinition.getId()) .mapEqualActivities() .build(); ProcessInstanceQuery wrongProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(wrongProcessDefinition.getId()); assertEquals(1, wrongProcessInstanceQuery.count()); try { runtimeService.newMigration(migrationPlan).processInstanceQuery(wrongProcessInstanceQuery).execute(); fail("Should not be able to migrate"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), CoreMatchers.startsWith("ENGINE-23002")); } }
@Test public void testBatchCreationWithProcessInstanceQuery() { RuntimeService runtimeService = engineRule.getRuntimeService(); int processInstanceCount = 15; ProcessDefinition sourceProcessDefinition = migrationRule.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = migrationRule.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); for (int i = 0; i < processInstanceCount; i++) { runtimeService.startProcessInstanceById(sourceProcessDefinition.getId()); } MigrationPlan migrationPlan = engineRule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapEqualActivities() .build(); ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.getId()); assertEquals(processInstanceCount, sourceProcessInstanceQuery.count()); // when Batch batch = runtimeService.newMigration(migrationPlan) .processInstanceQuery(sourceProcessInstanceQuery) .executeAsync(); // then a batch is created assertBatchCreated(batch, processInstanceCount); }
@Test @RequiredHistoryLevel(ProcessEngineConfiguration.HISTORY_ACTIVITY) public void testMigrateHistoryProcessInstance() { //given HistoricProcessInstanceQuery sourceHistoryProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() .processDefinitionId(sourceProcessDefinition.getId()); HistoricProcessInstanceQuery targetHistoryProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() .processDefinitionId(targetProcessDefinition.getId()); //when assertEquals(1, sourceHistoryProcessInstanceQuery.count()); assertEquals(0, targetHistoryProcessInstanceQuery.count()); ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.getId()); runtimeService.newMigration(migrationPlan) .processInstanceQuery(sourceProcessInstanceQuery) .execute(); //then assertEquals(0, sourceHistoryProcessInstanceQuery.count()); assertEquals(1, targetHistoryProcessInstanceQuery.count()); HistoricProcessInstance instance = targetHistoryProcessInstanceQuery.singleResult(); assertEquals(instance.getProcessDefinitionKey(), targetProcessDefinition.getKey()); }
@Test public void testMigrateProcessInstanceQuery() { int processInstanceCount = 10; ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapEqualActivities() .build(); for(int i = 0; i < processInstanceCount; i++) { runtimeService.startProcessInstanceById(sourceProcessDefinition.getId()); } ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.getId()); ProcessInstanceQuery targetProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(targetProcessDefinition.getId()); assertEquals(processInstanceCount, sourceProcessInstanceQuery.count()); assertEquals(0, targetProcessInstanceQuery.count()); runtimeService.newMigration(migrationPlan) .processInstanceQuery(sourceProcessInstanceQuery) .execute(); assertEquals(0, sourceProcessInstanceQuery.count()); assertEquals(processInstanceCount, targetProcessInstanceQuery.count()); }
@Test public void testMigrateWithQuery() { // given ProcessDefinition sourceDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.ONE_TASK_PROCESS) .changeElementId(ProcessModels.PROCESS_KEY, "new" + ProcessModels.PROCESS_KEY)); ProcessInstance instance1 = engineRule.getRuntimeService().startProcessInstanceById(sourceDefinition.getId()); ProcessInstance instance2 = engineRule.getRuntimeService().startProcessInstanceById(sourceDefinition.getId()); grantAuthorization("user", Resources.PROCESS_INSTANCE, instance2.getId(), Permissions.READ); grantAuthorization("user", Resources.PROCESS_DEFINITION, "*", Permissions.MIGRATE_INSTANCE); MigrationPlan migrationPlan = engineRule.getRuntimeService() .createMigrationPlan(sourceDefinition.getId(), targetDefinition.getId()) .mapEqualActivities() .build(); ProcessInstanceQuery query = engineRule.getRuntimeService().createProcessInstanceQuery(); // when authRule.enableAuthorization("user"); engineRule.getRuntimeService().newMigration(migrationPlan) .processInstanceQuery(query) .execute(); authRule.disableAuthorization(); // then ProcessInstance instance1AfterMigration = engineRule .getRuntimeService() .createProcessInstanceQuery() .processInstanceId(instance1.getId()) .singleResult(); Assert.assertEquals(sourceDefinition.getId(), instance1AfterMigration.getProcessDefinitionId()); }
.processInstanceQuery(query) .executeAsync();
.processInstanceQuery(query) .execute();
ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.getId()); runtimeService.newMigration(migrationPlan) .processInstanceQuery(sourceProcessInstanceQuery) .execute();