@Deployment(resources = {"org/camunda/bpm/engine/test/api/mgmt/SuspensionTest.testBase.bpmn"}) public void testActivationByJobDefinitionId_shouldActivateJob() { // given // a running process instance with a failed job Map<String, Object> params = new HashMap<String, Object>(); params.put("fail", Boolean.TRUE); runtimeService.startProcessInstanceByKey("suspensionProcess", params); // suspended job definitions and corresponding jobs managementService.suspendJobDefinitionByProcessDefinitionKey("suspensionProcess", true); // the job definition JobDefinition jobDefinition = managementService.createJobDefinitionQuery().singleResult(); // the failed job JobQuery jobQuery = managementService.createJobQuery(); Job job = jobQuery.singleResult(); assertTrue(job.isSuspended()); // when // the job will be activated managementService.activateJobByJobDefinitionId(jobDefinition.getId()); // then // the job should be activated assertEquals(0, jobQuery.suspended().count()); assertEquals(1, jobQuery.active().count()); Job activeJob = jobQuery.active().singleResult(); assertEquals(job.getId(), activeJob.getId()); assertEquals(jobDefinition.getId(), activeJob.getJobDefinitionId()); assertFalse(activeJob.isSuspended()); }
@Deployment /** see http://jira.codehaus.org/browse/ACT-1106 */ public void testReceiveTaskWithBoundaryTimer() { // Set the clock fixed Date startTime = new Date(); HashMap<String, Object> variables = new HashMap<String, Object>(); variables.put("timeCycle", "R/PT1H"); // After process start, there should be a timer created ProcessInstance pi = runtimeService.startProcessInstanceByKey("nonInterruptingCycle", variables); JobQuery jobQuery = managementService.createJobQuery().processInstanceId(pi.getId()); List<Job> jobs = jobQuery.list(); assertEquals(1, jobs.size()); // The Execution Query should work normally and find executions in state "task" List<Execution> executions = runtimeService.createExecutionQuery().activityId("task").list(); assertEquals(1, executions.size()); List<String> activeActivityIds = runtimeService.getActiveActivityIds(executions.get(0).getId()); assertEquals(1, activeActivityIds.size()); assertEquals("task", activeActivityIds.get(0)); runtimeService.signal(executions.get(0).getId()); // // After setting the clock to time '1 hour and 5 seconds', the second timer should fire // ClockUtil.setCurrentTime(new Date(startTime.getTime() + ((60 * 60 * 1000) + 5000))); // waitForJobExecutorToProcessAllJobs(5000L); // assertEquals(0L, jobQuery.count()); // which means the process has ended assertProcessEnded(pi.getId()); }
private JobQuery setUpMockJobQuery(List<Job> mockedJobs) { JobQuery sampleJobQuery = mock(JobQuery.class); when(sampleJobQuery.list()).thenReturn(mockedJobs); when(sampleJobQuery.count()).thenReturn((long) mockedJobs.size()); when(processEngine.getManagementService().createJobQuery()).thenReturn(sampleJobQuery); return sampleJobQuery; }
@Deployment( resources = { "org/camunda/bpm/engine/test/api/mgmt/ManagementServiceTest.testGetJobExceptionStacktrace.bpmn20.xml" }) public void testSetJobRetriesByJobDefinitionId() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("exceptionInJobExecution"); executeAvailableJobs(); JobQuery query = managementService.createJobQuery().processInstanceId(processInstance.getId()); JobDefinition jobDefinition = managementService.createJobDefinitionQuery().singleResult(); Job timerJob = query.singleResult(); assertNotNull("No job found for process instance", timerJob); assertEquals(0, timerJob.getRetries()); managementService.setJobRetriesByJobDefinitionId(jobDefinition.getId(), 5); timerJob = query.singleResult(); assertEquals(5, timerJob.getRetries()); }
public void testMultipleActivationByProcessDefinitionKey_shouldActivateJob() { // given String key = "suspensionProcess"; // Deploy three processes and start for each deployment a process instance // with a failed job int nrOfProcessDefinitions = 3; for (int i = 0; i < nrOfProcessDefinitions; i++) { repositoryService .createDeployment() .addClasspathResource("org/camunda/bpm/engine/test/api/mgmt/SuspensionTest.testBase.bpmn") .deploy(); Map<String, Object> params = new HashMap<String, Object>(); params.put("fail", Boolean.TRUE); runtimeService.startProcessInstanceByKey(key, params); } // suspended job definitions and corresponding jobs managementService.suspendJobDefinitionByProcessDefinitionKey(key, true); // when // the job will be suspended managementService.activateJobByProcessDefinitionKey(key); // then // the job should be activated JobQuery jobQuery = managementService.createJobQuery(); assertEquals(0, jobQuery.suspended().count()); assertEquals(3, jobQuery.active().count()); // Clean DB for (org.camunda.bpm.engine.repository.Deployment deployment : repositoryService.createDeploymentQuery().list()) { repositoryService.deleteDeployment(deployment.getId(), true); } }
@Deployment public void testMultipleTimersOnUserTask() { // Set the clock fixed Date startTime = new Date(); // After process start, there should be 3 timers created ProcessInstance pi = runtimeService.startProcessInstanceByKey("nonInterruptingTimersOnUserTask"); Task task1 = taskService.createTaskQuery().singleResult(); assertEquals("First Task", task1.getName()); JobQuery jobQuery = managementService.createJobQuery().processInstanceId(pi.getId()); List<Job> jobs = jobQuery.list(); assertEquals(2, jobs.size()); // After setting the clock to time '1 hour and 5 seconds', the first timer should fire ClockUtil.setCurrentTime(new Date(startTime.getTime() + ((60 * 60 * 1000) + 5000))); waitForJobExecutorToProcessAllJobs(5000L); // we still have one timer more to fire assertEquals(1L, jobQuery.count()); // and we are still in the first state, but in the second state as well! assertEquals(2L, taskService.createTaskQuery().count()); List<Task> taskList = taskService.createTaskQuery().orderByTaskName().desc().list(); assertEquals("First Task", taskList.get(0).getName()); assertEquals("Escalation Task 1", taskList.get(1).getName()); // complete the task and end the forked execution taskService.complete(taskList.get(1).getId()); // but we still have the original executions assertEquals(1L, taskService.createTaskQuery().count()); assertEquals("First Task", taskService.createTaskQuery().singleResult().getName()); // After setting the clock to time '2 hour and 5 seconds', the second timer should fire ClockUtil.setCurrentTime(new Date(startTime.getTime() + ((2 * 60 * 60 * 1000) + 5000))); waitForJobExecutorToProcessAllJobs(5000L); // no more timers to fire assertEquals(0L, jobQuery.count()); // and we are still in the first state, but in the next escalation state as well assertEquals(2L, taskService.createTaskQuery().count()); taskList = taskService.createTaskQuery().orderByTaskName().desc().list(); assertEquals("First Task", taskList.get(0).getName()); assertEquals("Escalation Task 2", taskList.get(1).getName()); // This time we end the main task taskService.complete(taskList.get(0).getId()); // but we still have the escalation task assertEquals(1L, taskService.createTaskQuery().count()); Task escalationTask = taskService.createTaskQuery().singleResult(); assertEquals("Escalation Task 2", escalationTask.getName()); taskService.complete(escalationTask.getId()); // now we are really done :-) assertProcessEnded(pi.getId()); }