@Test public void providerNotCalledForProcessDefinitionWithTenantId() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; // given a deployment with a tenant id testRule.deployForTenant(TENANT_ID, Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done()); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey(PROCESS_DEFINITION_KEY); // then the tenant id provider is not invoked assertThat(tenantIdProvider.parameters.size(), is(0)); }
@Test public void providerCalledForProcessDefinitionWithoutTenantId() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; // given a deployment without tenant id testRule.deploy(Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done()); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey(PROCESS_DEFINITION_KEY); // then the tenant id provider is invoked assertThat(tenantIdProvider.parameters.size(), is(1)); }
@Test public void providerCalledWithVariables() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; testRule.deploy(Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done()); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey(PROCESS_DEFINITION_KEY, Variables.createVariables().putValue("varName", true)); // then the tenant id provider is passed in the variable assertThat(tenantIdProvider.parameters.size(), is(1)); assertThat((Boolean) tenantIdProvider.parameters.get(0).getVariables().get("varName"), is(true)); }
@Test public void providerCalledWithProcessDefinition() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; testRule.deploy(Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done()); ProcessDefinition deployedProcessDefinition = engineRule.getRepositoryService().createProcessDefinitionQuery().singleResult(); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey(PROCESS_DEFINITION_KEY); // then the tenant id provider is passed in the process definition ProcessDefinition passedProcessDefinition = tenantIdProvider.parameters.get(0).getProcessDefinition(); assertThat(passedProcessDefinition, is(notNullValue())); assertThat(passedProcessDefinition.getId(), is(deployedProcessDefinition.getId())); }
@Test public void providerCalledForStartedProcessInstanceByStartFormWithoutTenantId() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; // given a deployment without a tenant id testRule.deploy(Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done(), "org/camunda/bpm/engine/test/api/form/util/request.form"); // when a process instance is started with a start form String processDefinitionId = engineRule.getRepositoryService() .createProcessDefinitionQuery() .singleResult() .getId(); Map<String, Object> properties = new HashMap<String, Object>(); properties.put("employeeName", "demo"); ProcessInstance procInstance = engineRule.getFormService().submitStartForm(processDefinitionId, properties); assertNotNull(procInstance); // then the tenant id provider is invoked assertThat(tenantIdProvider.parameters.size(), is(1)); }
@Test public void providerNotCalledForStartedProcessInstanceByStartFormWithTenantId() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; // given a deployment with a tenant id testRule.deployForTenant(TENANT_ID, Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done(), "org/camunda/bpm/engine/test/api/form/util/request.form"); // when a process instance is started with a start form String processDefinitionId = engineRule.getRepositoryService() .createProcessDefinitionQuery() .singleResult() .getId(); Map<String, Object> properties = new HashMap<String, Object>(); properties.put("employeeName", "demo"); ProcessInstance procInstance = engineRule.getFormService().submitStartForm(processDefinitionId, properties); assertNotNull(procInstance); // then the tenant id provider is not invoked assertThat(tenantIdProvider.parameters.size(), is(0)); }
@Test public void providerCalledForProcessDefinitionWithoutTenantId_SubProcessInstance() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; // given a deployment without tenant id testRule.deploy(Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done(), Bpmn.createExecutableProcess("superProcess").startEvent().callActivity().calledElement(PROCESS_DEFINITION_KEY).done()); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey("superProcess"); // then the tenant id provider is invoked twice assertThat(tenantIdProvider.parameters.size(), is(2)); }
@Test public void providerCalledWithVariables_SubProcessInstance() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; testRule.deploy(Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done(), Bpmn.createExecutableProcess("superProcess").startEvent().callActivity().calledElement(PROCESS_DEFINITION_KEY).camundaIn("varName", "varName").done()); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey("superProcess", Variables.createVariables().putValue("varName", true)); // then the tenant id provider is passed in the variable assertThat(tenantIdProvider.parameters.get(1).getVariables().size(), is(1)); assertThat((Boolean) tenantIdProvider.parameters.get(1).getVariables().get("varName"), is(true)); }
@Test public void providerNotCalledForProcessDefinitionWithTenantId_SubProcessInstance() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; // given a deployment with a tenant id testRule.deployForTenant(TENANT_ID, Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done(), Bpmn.createExecutableProcess("superProcess").startEvent().callActivity().calledElement(PROCESS_DEFINITION_KEY).done()); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey("superProcess"); // then the tenant id provider is not invoked assertThat(tenantIdProvider.parameters.size(), is(0)); }
@Test public void providerCalledWithProcessDefinition_SubProcessInstance() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; testRule.deploy(Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done(), Bpmn.createExecutableProcess("superProcess").startEvent().callActivity().calledElement(PROCESS_DEFINITION_KEY).done()); ProcessDefinition deployedProcessDefinition = engineRule.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey(PROCESS_DEFINITION_KEY).singleResult(); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey("superProcess"); // then the tenant id provider is passed in the process definition ProcessDefinition passedProcessDefinition = tenantIdProvider.parameters.get(1).getProcessDefinition(); assertThat(passedProcessDefinition, is(notNullValue())); assertThat(passedProcessDefinition.getId(), is(deployedProcessDefinition.getId())); }
@Override protected void setUp() { BpmnModelInstance process = Bpmn.createExecutableProcess("EmptyProcess") .startEvent().done(); BpmnModelInstance singleTaskProcess = Bpmn.createExecutableProcess("SingleTaskProcess") .startEvent() .userTask() .done(); deployment(process); deploymentForTenant(TENANT_ONE, singleTaskProcess); deploymentForTenant(TENANT_TWO, process); }
@Test public void providerCalledWithSuperProcessInstance() { ContextLoggingTenantIdProvider tenantIdProvider = new ContextLoggingTenantIdProvider(); TestTenantIdProvider.delegate = tenantIdProvider; testRule.deploy(Bpmn.createExecutableProcess(PROCESS_DEFINITION_KEY).startEvent().done(), Bpmn.createExecutableProcess("superProcess").startEvent().callActivity().calledElement(PROCESS_DEFINITION_KEY).done()); ProcessDefinition superProcessDefinition = engineRule.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("superProcess").singleResult(); // if a process instance is started engineRule.getRuntimeService().startProcessInstanceByKey("superProcess"); // then the tenant id provider is passed in the process definition DelegateExecution superExecution = tenantIdProvider.parameters.get(1).getSuperExecution(); assertThat(superExecution, is(notNullValue())); assertThat(superExecution.getProcessDefinitionId(), is(superProcessDefinition.getId())); }
.startEventBuilder(EVENT_SUB_PROCESS_START_ID) .timerWithDuration("PT50M") .done();
public void testUTF8DeploymentMethod() throws IOException { //given utf8 charset Charset utf8Charset = Charset.forName("UTF-8"); Charset defaultCharset = processEngineConfiguration.getDefaultCharset(); processEngineConfiguration.setDefaultCharset(utf8Charset); //and model instance with umlauts String umlautsString = "äöüÄÖÜß"; String resourceName = "deployment.bpmn"; BpmnModelInstance instance = Bpmn.createExecutableProcess("umlautsProcess").startEvent(umlautsString).done(); String instanceAsString = Bpmn.convertToString(instance); //when instance is deployed via addString method org.camunda.bpm.engine.repository.Deployment deployment = repositoryService.createDeployment() .addString(resourceName, instanceAsString) .deploy(); //then bytes are saved in utf-8 format InputStream inputStream = repositoryService.getResourceAsStream(deployment.getId(), resourceName); byte[] utf8Bytes = instanceAsString.getBytes(utf8Charset); checkDeployedBytes(inputStream, utf8Bytes); repositoryService.deleteDeployment(deployment.getId()); //when model instance is deployed via addModelInstance method deployment = repositoryService.createDeployment().addModelInstance(resourceName, instance).deploy(); //then also the bytes are saved in utf-8 format inputStream = repositoryService.getResourceAsStream(deployment.getId(), resourceName); checkDeployedBytes(inputStream, utf8Bytes); repositoryService.deleteDeployment(deployment.getId()); processEngineConfiguration.setDefaultCharset(defaultCharset); }
.deploy(); BpmnModelInstance changedModel2 = Bpmn.createExecutableProcess("process2").startEvent().done();
public void testPartialChangesDeployAll() { BpmnModelInstance model1 = Bpmn.createExecutableProcess("process1").done(); BpmnModelInstance model2 = Bpmn.createExecutableProcess("process2").done(); org.camunda.bpm.engine.repository.Deployment deployment1 = repositoryService.createDeployment() .enableDuplicateFiltering() .addModelInstance("process1.bpmn20.xml", model1) .addModelInstance("process2.bpmn20.xml", model2) .name("twice") .deploy(); List<String> deploymentResources = repositoryService.getDeploymentResourceNames(deployment1.getId()); assertEquals(2, deploymentResources.size()); BpmnModelInstance changedModel2 = Bpmn.createExecutableProcess("process2").startEvent().done(); org.camunda.bpm.engine.repository.Deployment deployment2 = repositoryService.createDeployment() .enableDuplicateFiltering() .addModelInstance("process1.bpmn20.xml", model1) .addModelInstance("process2.bpmn20.xml", changedModel2) .name("twice") .deploy(); List<org.camunda.bpm.engine.repository.Deployment> deploymentList = repositoryService.createDeploymentQuery().list(); assertEquals(2, deploymentList.size()); // there should be new versions of both processes assertEquals(2, repositoryService.createProcessDefinitionQuery().processDefinitionKey("process1").count()); assertEquals(2, repositoryService.createProcessDefinitionQuery().processDefinitionKey("process2").count()); repositoryService.deleteDeployment(deployment1.getId()); repositoryService.deleteDeployment(deployment2.getId()); }
@Test public void testMigrateNonInterruptingEventSubprocessMessageTrigger() { BpmnModelInstance nonInterruptingModel = modify(EventSubProcessModels.MESSAGE_EVENT_SUBPROCESS_PROCESS) .startEventBuilder(EVENT_SUB_PROCESS_START_ID) .interrupting(false) .done(); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(nonInterruptingModel); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(nonInterruptingModel); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID) .build(); // when testHelper.migrateProcessInstance(migrationPlan, processInstance); // then testHelper.assertEventSubscriptionMigrated(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID, EventSubProcessModels.MESSAGE_NAME); // and it is possible to trigger the event subprocess rule.getRuntimeService().correlateMessage(EventSubProcessModels.MESSAGE_NAME); Assert.assertEquals(2, rule.getTaskService().createTaskQuery().count()); // and complete the process instance testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.completeTask(USER_TASK_ID); testHelper.assertProcessEnded(processInstance.getId()); }
public void testPartialChangesRedeployOldVersion() { // deployment 1 deploys process version 1 BpmnModelInstance model1 = Bpmn.createExecutableProcess("process1").done(); org.camunda.bpm.engine.repository.Deployment deployment1 = repositoryService.createDeployment() .addModelInstance("process1.bpmn20.xml", model1) .name("deployment") .deploy(); // deployment 2 deploys process version 2 BpmnModelInstance changedModel1 = Bpmn.createExecutableProcess("process1").startEvent().done(); org.camunda.bpm.engine.repository.Deployment deployment2 = repositoryService.createDeployment() .enableDuplicateFiltering(true) .addModelInstance("process1.bpmn20.xml", changedModel1) .name("deployment") .deploy(); // deployment 3 deploys process version 1 again org.camunda.bpm.engine.repository.Deployment deployment3 = repositoryService.createDeployment() .enableDuplicateFiltering(true) .addModelInstance("process1.bpmn20.xml", model1) .name("deployment") .deploy(); // should result in three process definitions assertEquals(3, repositoryService.createProcessDefinitionQuery().processDefinitionKey("process1").count()); repositoryService.deleteDeployment(deployment1.getId()); repositoryService.deleteDeployment(deployment2.getId()); repositoryService.deleteDeployment(deployment3.getId()); }
.deploy(); BpmnModelInstance changedModel2 = Bpmn.createExecutableProcess("process2").startEvent().done();
assertEquals(2, deploymentResources.size()); BpmnModelInstance changedModel2 = Bpmn.createExecutableProcess("process2").startEvent().done();