public Job build() { Job mockJob = mock(Job.class); when(mockJob.getId()).thenReturn(id); when(mockJob.getDuedate()).thenReturn(dueDate); when(mockJob.getExceptionMessage()).thenReturn(exceptionMessage); when(mockJob.getExecutionId()).thenReturn(executionId); when(mockJob.getProcessInstanceId()).thenReturn(processInstanceId); when(mockJob.getProcessDefinitionId()).thenReturn(processDefinitionId); when(mockJob.getProcessDefinitionKey()).thenReturn(processDefinitionKey); when(mockJob.getRetries()).thenReturn(retries); when(mockJob.isSuspended()).thenReturn(suspended); when(mockJob.getPriority()).thenReturn(priority); when(mockJob.getJobDefinitionId()).thenReturn(jobDefinitionId); when(mockJob.getTenantId()).thenReturn(tenantId); when(mockJob.getCreateTime()).thenReturn(createTime); return mockJob; }
@Test @OperateOnDeployment("app") public void testInvokeProcessApplicationWithContextOnAsyncExecution() { runtimeService.startProcessInstanceByKey("timerProcess"); ProcessApplicationWithInvocationContext.clearInvocationContext(); Job timer = managementService.createJobQuery().timers().singleResult(); assertThat(timer, is(notNullValue())); long dueDate = timer.getDuedate().getTime(); Date afterDueDate = new Date(dueDate + 1000 * 60); ClockUtil.setCurrentTime(afterDueDate); waitForJobExecutorToProcessAllJobs(); InvocationContext invocationContext = ProcessApplicationWithInvocationContext.getInvocationContext(); assertThat(invocationContext, is(notNullValue())); assertThat(invocationContext.getExecution(), is(notNullValue())); assertThat(invocationContext.getExecution().getId(), is(timer.getExecutionId())); }
public static JobDto fromJob(Job job) { JobDto dto = new JobDto(); dto.id = job.getId(); dto.jobDefinitionId = job.getJobDefinitionId(); dto.processInstanceId = job.getProcessInstanceId(); dto.processDefinitionId = job.getProcessDefinitionId(); dto.processDefinitionKey = job.getProcessDefinitionKey(); dto.executionId = job.getExecutionId(); dto.exceptionMessage = job.getExceptionMessage(); dto.retries = job.getRetries(); dto.dueDate = job.getDuedate(); dto.suspended = job.isSuspended(); dto.priority = job.getPriority(); dto.tenantId = job.getTenantId(); dto.createTime = job.getCreateTime(); return dto; }
@Deployment(resources = {"org/camunda/bpm/engine/test/history/HistoricJobLogTest.testAsyncContinuation.bpmn20.xml"}) public void testQueryByExecutionId() { runtimeService.startProcessInstanceByKey("process"); String executionId = managementService.createJobQuery().singleResult().getExecutionId(); HistoricJobLogQuery query = historyService.createHistoricJobLogQuery().executionIdIn(executionId); verifyQueryResults(query, 1); }
public static JobDto fromJob(Job job) { JobDto dto = new JobDto(); dto.id = job.getId(); dto.jobDefinitionId = job.getJobDefinitionId(); dto.processInstanceId = job.getProcessInstanceId(); dto.processDefinitionId = job.getProcessDefinitionId(); dto.processDefinitionKey = job.getProcessDefinitionKey(); dto.executionId = job.getExecutionId(); dto.exceptionMessage = job.getExceptionMessage(); dto.retries = job.getRetries(); dto.dueDate = job.getDuedate(); dto.suspended = job.isSuspended(); dto.priority = job.getPriority(); dto.tenantId = job.getTenantId(); dto.createTime = job.getCreateTime(); return dto; }
@Deployment(resources={"org/camunda/bpm/engine/test/bpmn/async/processWithGatewayAndTwoEndEvents.bpmn20.xml"}) public void testGatewayWithTwoEndEventsLastJobReAssignedToParentExe() { String processKey = repositoryService.createProcessDefinitionQuery().singleResult().getKey(); String processInstanceId = runtimeService.startProcessInstanceByKey(processKey).getId(); List<Job> jobList = managementService.createJobQuery().processInstanceId(processInstanceId).list(); // There should be two jobs assertNotNull(jobList); assertEquals(2, jobList.size()); managementService.executeJob(jobList.get(0).getId()); // There should be only one job left jobList = managementService.createJobQuery().list(); assertEquals(1, jobList.size()); // There should only be 1 execution left - the root execution assertEquals(1, runtimeService.createExecutionQuery().list().size()); // root execution should be attached to the last job assertEquals(processInstanceId, jobList.get(0).getExecutionId()); managementService.executeJob(jobList.get(0).getId()); // There should be no more jobs jobList = managementService.createJobQuery().list(); assertEquals(0, jobList.size()); }
@Deployment(resources={"org/camunda/bpm/engine/test/bpmn/async/processGatewayAndTwoEndEventsPlusTimer.bpmn20.xml"}) public void testGatewayWithTwoEndEventsLastTimerReAssignedToParentExe() { String processKey = repositoryService.createProcessDefinitionQuery().singleResult().getKey(); String processInstanceId = runtimeService.startProcessInstanceByKey(processKey).getId(); List<Job> jobList = managementService.createJobQuery().processInstanceId(processInstanceId).list(); // There should be two jobs assertNotNull(jobList); assertEquals(2, jobList.size()); // execute timer first String timerId = managementService.createJobQuery().timers().singleResult().getId(); managementService.executeJob(timerId); // There should be only one job left jobList = managementService.createJobQuery().list(); assertEquals(1, jobList.size()); // There should only be 1 execution left - the root execution assertEquals(1, runtimeService.createExecutionQuery().list().size()); // root execution should be attached to the last job assertEquals(processInstanceId, jobList.get(0).getExecutionId()); // execute service task managementService.executeJob(jobList.get(0).getId()); // There should be no more jobs jobList = managementService.createJobQuery().list(); assertEquals(0, jobList.size()); }
@Test public void testQueryByExecutionId() { Job job = managementService.createJobQuery().processInstanceId(processInstanceIdOne).singleResult(); JobQuery query = managementService.createJobQuery().executionId(job.getExecutionId()); assertEquals(query.singleResult().getId(), job.getId()); verifyQueryResults(query, 1); }
@Deployment @Test public void testActivityInstanceTreeForConcurrentAsyncBeforeTask() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("concurrentTasksProcess"); ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId()); assertThat(tree).hasStructure( describeActivityInstanceTree(processInstance.getProcessDefinitionId()) .activity("theTask") .transition("asyncTask") .done()); TransitionInstance asyncBeforeTransitionInstance = tree.getChildTransitionInstances()[0]; String asyncExecutionId = managementService.createJobQuery().singleResult().getExecutionId(); assertEquals(asyncExecutionId, asyncBeforeTransitionInstance.getExecutionId()); }
@Deployment @Test public void testActivityInstanceTreeForNestedAsyncBeforeTask() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess"); ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId()); assertThat(tree).hasStructure( describeActivityInstanceTree(processInstance.getProcessDefinitionId()) .beginScope("subProcess") .transition("theTask") .done()); TransitionInstance asyncBeforeTransitionInstance = tree.getChildActivityInstances()[0] .getChildTransitionInstances()[0]; String asyncExecutionId = managementService.createJobQuery().singleResult().getExecutionId(); assertEquals(asyncExecutionId, asyncBeforeTransitionInstance.getExecutionId()); }
@Deployment @Test public void testActivityInstanceTreeForNestedAsyncAfterEndEvent() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("asyncEndEventProcess"); ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId()); assertThat(tree).hasStructure( describeActivityInstanceTree(processInstance.getProcessDefinitionId()) .beginScope("subProcess") .transition("theSubProcessEnd") .done()); TransitionInstance asyncAfterTransitionInstance = tree.getChildActivityInstances()[0] .getChildTransitionInstances()[0]; String asyncExecutionId = managementService.createJobQuery().singleResult().getExecutionId(); assertEquals(asyncExecutionId, asyncAfterTransitionInstance.getExecutionId()); }
@Test public void createDeletionJobsByIds() { // given rule.getProcessEngineConfiguration().setBatchJobsPerSeed(5); Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null); JobDefinition seedJobDefinition = helper.getSeedJobDefinition(batch); JobDefinition deletionJobDefinition = helper.getExecutionJobDefinition(batch);; // when helper.executeSeedJob(batch); // then List<Job> deletionJobs = helper.getJobsForDefinition(deletionJobDefinition); assertEquals(5, deletionJobs.size()); for (Job deletionJob : deletionJobs) { assertEquals(deletionJobDefinition.getId(), deletionJob.getJobDefinitionId()); assertEquals(currentTime, deletionJob.getDuedate()); assertNull(deletionJob.getProcessDefinitionId()); assertNull(deletionJob.getProcessDefinitionKey()); assertNull(deletionJob.getProcessInstanceId()); assertNull(deletionJob.getExecutionId()); } // and the seed job still exists Job seedJob = helper.getJobForDefinition(seedJobDefinition); assertNotNull(seedJob); }
@Test public void createModificationJobs() { ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); rule.getProcessEngineConfiguration().setBatchJobsPerSeed(10); Batch batch = helper.startAfterAsync("process1", 20, "user1", processDefinition.getId()); JobDefinition seedJobDefinition = helper.getSeedJobDefinition(batch); JobDefinition modificationJobDefinition = helper.getExecutionJobDefinition(batch);; helper.executeSeedJob(batch); List<Job> modificationJobs = helper.getJobsForDefinition(modificationJobDefinition); assertEquals(10, modificationJobs.size()); for (Job modificationJob : modificationJobs) { assertEquals(modificationJobDefinition.getId(), modificationJob.getJobDefinitionId()); assertEquals(currentTime, modificationJob.getDuedate()); assertNull(modificationJob.getProcessDefinitionId()); assertNull(modificationJob.getProcessDefinitionKey()); assertNull(modificationJob.getProcessInstanceId()); assertNull(modificationJob.getExecutionId()); } // and the seed job still exists Job seedJob = helper.getJobForDefinition(seedJobDefinition); assertNotNull(seedJob); }
/** * starting after a task should not respect that tasks asyncAfter setting */ @Deployment public void testStartAfterAsync() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("exclusiveGateway"); String processInstanceId = processInstance.getId(); runtimeService .createProcessInstanceModification(processInstance.getId()) .startAfterActivity("task2") .execute(); // there is now a job for the end event after task2 Job job = managementService.createJobQuery().singleResult(); assertNotNull(job); Execution jobExecution = runtimeService.createExecutionQuery().activityId("end2").executionId(job.getExecutionId()).singleResult(); assertNotNull(jobExecution); // end process completeTasksInOrder("task1"); managementService.executeJob(job.getId()); assertProcessEnded(processInstanceId); }
@Deployment @Test public void testActivityInstanceTreeForNestedAsyncAfterTask() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess"); Task task = taskService.createTaskQuery().singleResult(); taskService.complete(task.getId()); ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId()); assertThat(tree).hasStructure( describeActivityInstanceTree(processInstance.getProcessDefinitionId()) .beginScope("subProcess") .transition("theTask") .done()); TransitionInstance asyncAfterTransitionInstance = tree.getChildActivityInstances()[0] .getChildTransitionInstances()[0]; String asyncExecutionId = managementService.createJobQuery().singleResult().getExecutionId(); assertEquals(asyncExecutionId, asyncAfterTransitionInstance.getExecutionId()); }
@Test public void testMigrationJobsCreation() { ClockUtil.setCurrentTime(TEST_DATE); // reduce number of batch jobs per seed to not have to create a lot of instances engineRule.getProcessEngineConfiguration().setBatchJobsPerSeed(10); Batch batch = helper.migrateProcessInstancesAsync(20); JobDefinition seedJobDefinition = helper.getSeedJobDefinition(batch); JobDefinition migrationJobDefinition = helper.getExecutionJobDefinition(batch); String sourceDeploymentId = helper.getSourceProcessDefinition().getDeploymentId(); // when helper.executeSeedJob(batch); // then there exist migration jobs List<Job> migrationJobs = helper.getJobsForDefinition(migrationJobDefinition); assertEquals(10, migrationJobs.size()); for (Job migrationJob : migrationJobs) { assertEquals(migrationJobDefinition.getId(), migrationJob.getJobDefinitionId()); assertEquals(currentTime, migrationJob.getDuedate()); assertEquals(sourceDeploymentId, migrationJob.getDeploymentId()); assertNull(migrationJob.getProcessDefinitionId()); assertNull(migrationJob.getProcessDefinitionKey()); assertNull(migrationJob.getProcessInstanceId()); assertNull(migrationJob.getExecutionId()); } // and the seed job still exists Job seedJob = helper.getJobForDefinition(seedJobDefinition); assertNotNull(seedJob); }
@Deployment @Test public void testActivityInstanceTreeForConcurrentAsyncAfterTask() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("concurrentTasksProcess"); Task asyncTask = taskService.createTaskQuery().taskDefinitionKey("asyncTask").singleResult(); assertNotNull(asyncTask); taskService.complete(asyncTask.getId()); ActivityInstance tree = runtimeService.getActivityInstance(processInstance.getId()); assertThat(tree).hasStructure( describeActivityInstanceTree(processInstance.getProcessDefinitionId()) .activity("theTask") .transition("asyncTask") .done()); TransitionInstance asyncBeforeTransitionInstance = tree.getChildTransitionInstances()[0]; String asyncExecutionId = managementService.createJobQuery().singleResult().getExecutionId(); assertEquals(asyncExecutionId, asyncBeforeTransitionInstance.getExecutionId()); }
@Test public void testVariableAtConcurrentExecutionInTransitionAddParentScope() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_USER_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_SUBPROCESS_USER_TASK_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask", "userTask") .build(); ProcessInstance processInstance = rule.getRuntimeService() .createProcessInstanceById(sourceProcessDefinition.getId()) .startBeforeActivity("userTask") .startBeforeActivity("userTask") .execute(); Execution concurrentExecution = runtimeService.createExecutionQuery().activityId("userTask").list().get(0); Job jobForExecution = rule.getManagementService().createJobQuery().executionId(concurrentExecution.getId()).singleResult(); runtimeService.setVariableLocal(concurrentExecution.getId(), "var", "value"); // when testHelper.migrateProcessInstance(migrationPlan, processInstance); // then Job jobAfterMigration = rule.getManagementService().createJobQuery().jobId(jobForExecution.getId()).singleResult(); testHelper.assertVariableMigratedToExecution( testHelper.snapshotBeforeMigration.getSingleVariable("var"), jobAfterMigration.getExecutionId()); }
@Deployment(resources = SUBPROCESS_BOUNDARY_EVENTS_PROCESS) public void testStartBeforeEventSubscription() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("subprocess"); runtimeService.createProcessInstanceModification(processInstance.getId()).startBeforeActivity("innerTask").execute(); // then two timer jobs should have been created assertEquals(2, managementService.createJobQuery().count()); Job innerJob = managementService.createJobQuery().activityId("innerTimer").singleResult(); assertNotNull(innerJob); assertEquals(runtimeService.createExecutionQuery().activityId("innerTask").singleResult().getId(), innerJob.getExecutionId()); Job outerJob = managementService.createJobQuery().activityId("outerTimer").singleResult(); assertNotNull(outerJob); // when executing the jobs managementService.executeJob(innerJob.getId()); Task innerBoundaryTask = taskService.createTaskQuery().taskDefinitionKey("innerAfterBoundaryTask").singleResult(); assertNotNull(innerBoundaryTask); managementService.executeJob(outerJob.getId()); Task outerBoundaryTask = taskService.createTaskQuery().taskDefinitionKey("outerAfterBoundaryTask").singleResult(); assertNotNull(outerBoundaryTask); }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/mgmt/IncidentTest.testShouldCreateOneIncidentForNestedExecution.bpmn"}) public void testShouldCreateOneIncidentForNestedExecution() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("failingProcessWithNestedExecutions"); executeAvailableJobs(); Incident incident = runtimeService.createIncidentQuery().processInstanceId(processInstance.getId()).singleResult(); assertNotNull(incident); Job job = managementService.createJobQuery().processInstanceId(processInstance.getId()).singleResult(); assertNotNull(job); String executionIdOfNestedFailingExecution = job.getExecutionId(); assertFalse(processInstance.getId() == executionIdOfNestedFailingExecution); assertNotNull(incident.getId()); assertNotNull(incident.getIncidentTimestamp()); assertEquals(Incident.FAILED_JOB_HANDLER_TYPE, incident.getIncidentType()); assertEquals(AlwaysFailingDelegate.MESSAGE, incident.getIncidentMessage()); assertEquals(executionIdOfNestedFailingExecution, incident.getExecutionId()); assertEquals("theServiceTask", incident.getActivityId()); assertEquals(processInstance.getId(), incident.getProcessInstanceId()); assertEquals(incident.getId(), incident.getCauseIncidentId()); assertEquals(incident.getId(), incident.getRootCauseIncidentId()); assertEquals(job.getId(), incident.getConfiguration()); assertEquals(job.getJobDefinitionId(), incident.getJobDefinitionId()); }