private void verifyParameterQueryInvocations() { Map<String, Object> parameters = getCompleteParameters(); verify(mockQuery).jobId((String) parameters.get("jobId")); verify(mockQuery).processInstanceId((String) parameters.get("processInstanceId")); verify(mockQuery).processDefinitionId((String) parameters.get("processDefinitionId")); verify(mockQuery).processDefinitionKey((String) parameters.get("processDefinitionKey")); verify(mockQuery).executionId((String) parameters.get("executionId")); verify(mockQuery).activityId((String) parameters.get("activityId")); verify(mockQuery).withRetriesLeft(); verify(mockQuery).executable(); verify(mockQuery).timers(); verify(mockQuery).withException(); verify(mockQuery).exceptionMessage((String) parameters.get("exceptionMessage")); verify(mockQuery).noRetriesLeft(); verify(mockQuery).active(); verify(mockQuery).suspended(); verify(mockQuery).priorityLowerThanOrEquals(JOB_QUERY_MAX_PRIORITY); verify(mockQuery).priorityHigherThanOrEquals(JOB_QUERY_MIN_PRIORITY); verify(mockQuery).jobDefinitionId(MockProvider.EXAMPLE_JOB_DEFINITION_ID); }
@Test public void testQueryByOnlyTimers() { JobQuery query = managementService.createJobQuery().timers(); verifyQueryResults(query, 3); }
@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())); }
@Test public void testInvalidOnlyTimersUsage() { try { managementService.createJobQuery().timers().messages().list(); fail(); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Cannot combine onlyTimers() with onlyMessages() in the same query")); } }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/repository/ProcessDefinitionSuspensionTest.testSuspendStartTimerOnProcessDefinitionSuspension.bpmn20.xml"}) public void testSuspendStartTimerOnProcessDefinitionSuspensionByKey() { Job startTimer = managementService.createJobQuery().timers().singleResult(); assertFalse(startTimer.isSuspended()); // when repositoryService.suspendProcessDefinitionByKey("process"); // then // refresh job startTimer = managementService.createJobQuery().timers().singleResult(); assertTrue(startTimer.isSuspended()); }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/repository/ProcessDefinitionSuspensionTest.testSuspendStartTimerOnProcessDefinitionSuspension.bpmn20.xml"}) public void testActivateStartTimerOnProcessDefinitionSuspensionByKey() { repositoryService.suspendProcessDefinitionByKey("process"); Job startTimer = managementService.createJobQuery().timers().singleResult(); assertTrue(startTimer.isSuspended()); // when repositoryService.activateProcessDefinitionByKey("process"); // then // refresh job startTimer = managementService.createJobQuery().timers().singleResult(); assertFalse(startTimer.isSuspended()); }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/repository/ProcessDefinitionSuspensionTest.testSuspendStartTimerOnProcessDefinitionSuspension.bpmn20.xml"}) public void testSuspendStartTimerOnProcessDefinitionSuspensionById() { ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().singleResult(); Job startTimer = managementService.createJobQuery().timers().singleResult(); assertFalse(startTimer.isSuspended()); // when repositoryService.suspendProcessDefinitionById(pd.getId()); // then // refresh job startTimer = managementService.createJobQuery().timers().singleResult(); assertTrue(startTimer.isSuspended()); }
@Test @Deployment(resources = {"org/camunda/bpm/engine/test/bpmn/executionlistener/ExecutionListenerTest.testOnBoundaryEvents.bpmn20.xml"}) public void testOnBoundaryEvents() { RecorderExecutionListener.clear(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process"); Job firstTimer = managementService.createJobQuery().timers().singleResult(); managementService.executeJob(firstTimer.getId()); Job secondTimer = managementService.createJobQuery().timers().singleResult(); managementService.executeJob(secondTimer.getId()); assertProcessEnded(processInstance.getId()); List<RecordedEvent> recordedEvents = RecorderExecutionListener.getRecordedEvents(); assertEquals(2, recordedEvents.size()); assertEquals("timer1", recordedEvents.get(0).getActivityId()); assertEquals("start boundary listener", recordedEvents.get(0).getParameter()); assertEquals("start", recordedEvents.get(0).getEventName()); assertThat(recordedEvents.get(0).isCanceled(), is(false)); assertEquals("timer2", recordedEvents.get(1).getActivityId()); assertEquals("end boundary listener", recordedEvents.get(1).getParameter()); assertEquals("end", recordedEvents.get(1).getEventName()); assertThat(recordedEvents.get(1).isCanceled(), is(false)); }
@Test @Deployment(resources = {"org/camunda/bpm/engine/test/bpmn/executionlistener/ExecutionListenerTest.testOnCancellingBoundaryEvent.bpmn"}) public void testOnCancellingBoundaryEvents() { RecorderExecutionListener.clear(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process"); Job timer = managementService.createJobQuery().timers().singleResult(); managementService.executeJob(timer.getId()); assertProcessEnded(processInstance.getId()); List<RecordedEvent> recordedEvents = RecorderExecutionListener.getRecordedEvents(); assertThat(recordedEvents, hasSize(1)); assertEquals("UserTask_1", recordedEvents.get(0).getActivityId()); assertEquals("end", recordedEvents.get(0).getEventName()); assertThat(recordedEvents.get(0).isCanceled(), is(true)); }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/repository/ProcessDefinitionSuspensionTest.testSuspendStartTimerOnProcessDefinitionSuspension.bpmn20.xml"}) public void testActivateStartTimerOnProcessDefinitionSuspensionById() { ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().singleResult(); repositoryService.suspendProcessDefinitionById(pd.getId()); Job startTimer = managementService.createJobQuery().timers().singleResult(); assertTrue(startTimer.isSuspended()); // when repositoryService.activateProcessDefinitionById(pd.getId()); // then // refresh job startTimer = managementService.createJobQuery().timers().singleResult(); assertFalse(startTimer.isSuspended()); }
@Deployment public void testTimerOnNestingOfSubprocesses() { runtimeService.startProcessInstanceByKey("timerOnNestedSubprocesses"); List<Task> tasks = taskService.createTaskQuery().orderByTaskName().asc().list(); assertEquals(2, tasks.size()); assertEquals("Inner subprocess task 1", tasks.get(0).getName()); assertEquals("Inner subprocess task 2", tasks.get(1).getName()); Job timer = managementService.createJobQuery().timers().singleResult(); managementService.executeJob(timer.getId()); Task task = taskService.createTaskQuery().singleResult(); assertEquals("task outside subprocess", task.getName()); }
@Test public void delayedSuspendJobDefinitionsForAllTenants() { // given activated job definitions engineRule.getManagementService() .updateJobDefinitionSuspensionState() .byProcessDefinitionKey(PROCESS_DEFINITION_KEY) .executionDate(tomorrow()) .suspend(); JobDefinitionQuery query = engineRule.getManagementService().createJobDefinitionQuery(); assertThat(query.active().count(), is(3L)); assertThat(query.suspended().count(), is(0L)); // when execute the job to suspend the job definitions Job job = engineRule.getManagementService().createJobQuery().timers().singleResult(); assertThat(job, is(notNullValue())); engineRule.getManagementService().executeJob(job.getId()); assertThat(query.active().count(), is(0L)); assertThat(query.suspended().count(), is(3L)); }
@Test public void delayedSuspendProcessDefinitionsForAllTenants() { // given activated process definitions engineRule.getRepositoryService() .updateProcessDefinitionSuspensionState() .byProcessDefinitionKey(PROCESS_DEFINITION_KEY) .executionDate(tomorrow()) .suspend(); ProcessDefinitionQuery query = engineRule.getRepositoryService().createProcessDefinitionQuery(); assertThat(query.active().count(), is(3L)); assertThat(query.suspended().count(), is(0L)); // when execute the job to suspend the process definitions Job job = engineRule.getManagementService().createJobQuery().timers().singleResult(); assertThat(job, is(notNullValue())); engineRule.getManagementService().executeJob(job.getId()); assertThat(query.active().count(), is(0L)); assertThat(query.suspended().count(), is(3L)); }
@Test public void delayedSuspendProcessDefinitionsForNonTenant() { // given activated process definitions engineRule.getRepositoryService() .updateProcessDefinitionSuspensionState() .byProcessDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionWithoutTenantId() .executionDate(tomorrow()) .suspend(); ProcessDefinitionQuery query = engineRule.getRepositoryService().createProcessDefinitionQuery(); assertThat(query.active().count(), is(3L)); assertThat(query.suspended().count(), is(0L)); // when execute the job to suspend the process definition Job job = engineRule.getManagementService().createJobQuery().timers().singleResult(); assertThat(job, is(notNullValue())); engineRule.getManagementService().executeJob(job.getId()); assertThat(query.active().count(), is(2L)); assertThat(query.suspended().count(), is(1L)); assertThat(query.suspended().withoutTenantId().count(), is(1L)); }
@Test public void delayedSuspendJobDefinitionsForTenant() { // given activated job definitions engineRule.getManagementService() .updateJobDefinitionSuspensionState() .byProcessDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionTenantId(TENANT_ONE) .executionDate(tomorrow()) .suspend(); JobDefinitionQuery query = engineRule.getManagementService().createJobDefinitionQuery(); assertThat(query.active().count(), is(3L)); assertThat(query.suspended().count(), is(0L)); // when execute the job to suspend the job definitions Job job = engineRule.getManagementService().createJobQuery().timers().singleResult(); assertThat(job, is(notNullValue())); engineRule.getManagementService().executeJob(job.getId()); assertThat(query.active().count(), is(2L)); assertThat(query.suspended().count(), is(1L)); assertThat(query.suspended().tenantIdIn(TENANT_ONE).count(), is(1L)); }
@Test public void delayedSuspendProcessDefinitionsForTenant() { // given activated process definitions engineRule.getRepositoryService() .updateProcessDefinitionSuspensionState() .byProcessDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionTenantId(TENANT_ONE) .executionDate(tomorrow()) .suspend(); ProcessDefinitionQuery query = engineRule.getRepositoryService().createProcessDefinitionQuery(); assertThat(query.active().count(), is(3L)); assertThat(query.suspended().count(), is(0L)); // when execute the job to suspend the process definition Job job = engineRule.getManagementService().createJobQuery().timers().singleResult(); assertThat(job, is(notNullValue())); engineRule.getManagementService().executeJob(job.getId()); assertThat(query.active().count(), is(2L)); assertThat(query.suspended().count(), is(1L)); assertThat(query.suspended().tenantIdIn(TENANT_ONE).count(), is(1L)); }
@Test public void delayedSuspendJobDefinitionsForNonTenant() { // given activated job definitions engineRule.getManagementService() .updateJobDefinitionSuspensionState() .byProcessDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionWithoutTenantId() .executionDate(tomorrow()) .suspend(); JobDefinitionQuery query = engineRule.getManagementService().createJobDefinitionQuery(); assertThat(query.active().count(), is(3L)); assertThat(query.suspended().count(), is(0L)); // when execute the job to suspend the job definitions Job job = engineRule.getManagementService().createJobQuery().timers().singleResult(); assertThat(job, is(notNullValue())); engineRule.getManagementService().executeJob(job.getId()); assertThat(query.active().count(), is(2L)); assertThat(query.suspended().count(), is(1L)); assertThat(query.suspended().withoutTenantId().count(), is(1L)); }
@Test public void delayedActivateJobDefinitionsForAllTenants() { // given suspend job definitions engineRule.getManagementService() .updateJobDefinitionSuspensionState() .byProcessDefinitionKey(PROCESS_DEFINITION_KEY) .suspend(); engineRule.getManagementService() .updateJobDefinitionSuspensionState() .byProcessDefinitionKey(PROCESS_DEFINITION_KEY) .executionDate(tomorrow()) .activate(); JobDefinitionQuery query = engineRule.getManagementService().createJobDefinitionQuery(); assertThat(query.active().count(), is(0L)); assertThat(query.suspended().count(), is(3L)); // when execute the job to activate the job definitions Job job = engineRule.getManagementService().createJobQuery().timers().singleResult(); assertThat(job, is(notNullValue())); engineRule.getManagementService().executeJob(job.getId()); assertThat(query.suspended().count(), is(0L)); assertThat(query.active().count(), is(3L)); }
@Deployment public void testCancelTimer() { ProcessInstance pi = runtimeService.startProcessInstanceByKey("process"); TaskQuery taskQuery = taskService.createTaskQuery(); JobQuery jobQuery = managementService.createJobQuery().timers(); Task task = taskQuery.singleResult(); assertNotNull(task); assertEquals("taskBeforeInterruptingEventSuprocess", task.getTaskDefinitionKey()); Job timer = jobQuery.singleResult(); assertNotNull(timer); runtimeService.messageEventReceived("newMessage", pi.getId()); task = taskQuery.singleResult(); assertNotNull(task); assertEquals("taskAfterMessageStartEvent", task.getTaskDefinitionKey()); assertEquals(0, jobQuery.count()); taskService.complete(task.getId()); assertProcessEnded(pi.getId()); }
@Deployment public void testTimeCycle() { String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); EventSubscriptionQuery eventSubscriptionQuery = runtimeService.createEventSubscriptionQuery(); assertEquals(0, eventSubscriptionQuery.count()); TaskQuery taskQuery = taskService.createTaskQuery(); assertEquals(1, taskQuery.count()); Task task = taskQuery.singleResult(); assertEquals("task", task.getTaskDefinitionKey()); JobQuery jobQuery = managementService.createJobQuery().timers(); assertEquals(1, jobQuery.count()); String jobId = jobQuery.singleResult().getId(); managementService.executeJob(jobId); assertEquals(0, jobQuery.count()); assertEquals(1, taskQuery.count()); task = taskQuery.singleResult(); assertEquals("eventSubProcessTask", task.getTaskDefinitionKey()); taskService.complete(task.getId()); assertProcessEnded(processInstanceId); }