@Deployment(resources = {"org/camunda/bpm/engine/test/api/runtime/oneTaskProcess.bpmn20.xml"}) public void testDelayedSuspendProcessDefinition() { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult(); Date startTime = new Date(); ClockUtil.setCurrentTime(startTime); // Suspend process definition in one week from now long oneWeekFromStartTime = startTime.getTime() + (7 * 24 * 60 * 60 * 1000); repositoryService.suspendProcessDefinitionById( processDefinition.getId(), false, new Date(oneWeekFromStartTime)); // Verify we can just start process instances runtimeService.startProcessInstanceById(processDefinition.getId()); assertEquals(1, runtimeService.createProcessInstanceQuery().count()); assertEquals(1, repositoryService.createProcessDefinitionQuery().active().count()); assertEquals(0, repositoryService.createProcessDefinitionQuery().suspended().count()); // Move clock 8 days further and let job executor run long eightDaysSinceStartTime = oneWeekFromStartTime + (24 * 60 * 60 * 1000); ClockUtil.setCurrentTime(new Date(eightDaysSinceStartTime)); waitForJobExecutorToProcessAllJobs(5000L); // Try to start process instance. It should fail now. try { runtimeService.startProcessInstanceById(processDefinition.getId()); fail(); } catch (SuspendedEntityInteractionException e) { assertTextPresentIgnoreCase("suspended", e.getMessage()); } assertEquals(1, runtimeService.createProcessInstanceQuery().count()); assertEquals(0, repositoryService.createProcessDefinitionQuery().active().count()); assertEquals(1, repositoryService.createProcessDefinitionQuery().suspended().count()); // Activate again repositoryService.activateProcessDefinitionById(processDefinition.getId()); runtimeService.startProcessInstanceById(processDefinition.getId()); assertEquals(2, runtimeService.createProcessInstanceQuery().count()); assertEquals(1, repositoryService.createProcessDefinitionQuery().active().count()); assertEquals(0, repositoryService.createProcessDefinitionQuery().suspended().count()); }
@Deployment(resources = {"org/camunda/bpm/engine/test/db/processOne.bpmn20.xml"}) public void testStartProcessInstanceForSuspendedProcessDefinition() { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult(); repositoryService.suspendProcessDefinitionById(processDefinition.getId()); // By id try { runtimeService.startProcessInstanceById(processDefinition.getId()); fail("Exception is expected but not thrown"); } catch (SuspendedEntityInteractionException e) { assertTextPresentIgnoreCase("is suspended", e.getMessage()); } // By Key try { runtimeService.startProcessInstanceByKey(processDefinition.getKey()); fail("Exception is expected but not thrown"); } catch (SuspendedEntityInteractionException e) { assertTextPresentIgnoreCase("is suspended", e.getMessage()); } }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/runtime/oneTaskProcess.bpmn20.xml"}) public void testDelayedActivateProcessDefinition() { Date startTime = new Date(); ClockUtil.setCurrentTime(startTime); ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult(); repositoryService.suspendProcessDefinitionById(processDefinition.getId()); // Try to start process instance. It should fail now. try { runtimeService.startProcessInstanceById(processDefinition.getId()); fail(); } catch (SuspendedEntityInteractionException e) { assertTextPresentIgnoreCase("suspended", e.getMessage()); } assertEquals(0, runtimeService.createProcessInstanceQuery().count()); assertEquals(0, repositoryService.createProcessDefinitionQuery().active().count()); assertEquals(1, repositoryService.createProcessDefinitionQuery().suspended().count()); // Activate in a day from now long oneDayFromStart = startTime.getTime() + (24 * 60 * 60 * 1000); repositoryService.activateProcessDefinitionById( processDefinition.getId(), false, new Date(oneDayFromStart)); // Move clock two days and let job executor run long twoDaysFromStart = startTime.getTime() + (2 * 24 * 60 * 60 * 1000); ClockUtil.setCurrentTime(new Date(twoDaysFromStart)); waitForJobExecutorToProcessAllJobs(5000L); // Starting a process instance should now succeed runtimeService.startProcessInstanceById(processDefinition.getId()); assertEquals(1, runtimeService.createProcessInstanceQuery().count()); assertEquals(1, repositoryService.createProcessDefinitionQuery().active().count()); assertEquals(0, repositoryService.createProcessDefinitionQuery().suspended().count()); }