private void extractDuplicateFilteringForDeployment(MultipartFormData payload, DeploymentBuilder deploymentBuilder) { boolean enableDuplicateFiltering = false; boolean deployChangedOnly = false; FormPart deploymentEnableDuplicateFiltering = payload.getNamedPart(ENABLE_DUPLICATE_FILTERING); if (deploymentEnableDuplicateFiltering != null) { enableDuplicateFiltering = Boolean.parseBoolean(deploymentEnableDuplicateFiltering.getTextContent()); } FormPart deploymentDeployChangedOnly = payload.getNamedPart(DEPLOY_CHANGED_ONLY); if (deploymentDeployChangedOnly != null) { deployChangedOnly = Boolean.parseBoolean(deploymentDeployChangedOnly.getTextContent()); } // deployChangedOnly overrides the enableDuplicateFiltering setting if (deployChangedOnly) { deploymentBuilder.enableDuplicateFiltering(true); } else if (enableDuplicateFiltering) { deploymentBuilder.enableDuplicateFiltering(false); } }
private void extractDuplicateFilteringForDeployment(MultipartFormData payload, DeploymentBuilder deploymentBuilder) { boolean enableDuplicateFiltering = false; boolean deployChangedOnly = false; FormPart deploymentEnableDuplicateFiltering = payload.getNamedPart(ENABLE_DUPLICATE_FILTERING); if (deploymentEnableDuplicateFiltering != null) { enableDuplicateFiltering = Boolean.parseBoolean(deploymentEnableDuplicateFiltering.getTextContent()); } FormPart deploymentDeployChangedOnly = payload.getNamedPart(DEPLOY_CHANGED_ONLY); if (deploymentDeployChangedOnly != null) { deployChangedOnly = Boolean.parseBoolean(deploymentDeployChangedOnly.getTextContent()); } // deployChangedOnly overrides the enableDuplicateFiltering setting if (deployChangedOnly) { deploymentBuilder.enableDuplicateFiltering(true); } else if (enableDuplicateFiltering) { deploymentBuilder.enableDuplicateFiltering(false); } }
/** * @see https://app.camunda.com/jira/browse/CAM-2128 */ public void testDuplicateFiltering() throws InterruptedException { deployOnTwoConcurrentThreads( createDeploymentBuilder().enableDuplicateFiltering(false), createDeploymentBuilder().enableDuplicateFiltering(false)); // ensure that although both transactions were run concurrently, only one deployment was constructed. DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery(); assertThat(deploymentQuery.count(), is(1L)); }
@Test public void testCreateCompleteDeploymentDeployChangedOnly() throws Exception { resourceNames.addAll( Arrays.asList("data", "more-data") ); given() .multiPart("data", "unspecified", createMockDeploymentResourceByteData()) .multiPart("deploy-changed-only", "true") .expect() .statusCode(Status.OK.getStatusCode()) .when() .post(CREATE_DEPLOYMENT_URL); verify(mockDeploymentBuilder).enableDuplicateFiltering(true); }
@Test public void testCreateCompleteDeploymentConflictingDuplicateSetting() throws Exception { resourceNames.addAll( Arrays.asList("data", "more-data") ); // deploy-changed-only should override enable-duplicate-filtering given() .multiPart("data", "unspecified", createMockDeploymentResourceByteData()) .multiPart("enable-duplicate-filtering", "false") .multiPart("deploy-changed-only", "true") .expect() .statusCode(Status.OK.getStatusCode()) .when() .post(CREATE_DEPLOYMENT_URL); verify(mockDeploymentBuilder).enableDuplicateFiltering(true); }
@Test public void testCreateCompleteCmmnDeployment() throws Exception { // given DeploymentWithDefinitions mockDeployment = MockProvider.createMockDeploymentWithDefinitions(); when(mockDeployment.getDeployedDecisionDefinitions()).thenReturn(null); when(mockDeployment.getDeployedProcessDefinitions()).thenReturn(null); when(mockDeployment.getDeployedDecisionRequirementsDefinitions()).thenReturn(null); when(mockDeploymentBuilder.deployWithResult()).thenReturn(mockDeployment); // when resourceNames.addAll(Arrays.asList("data", "more-data")); Response response = given() .multiPart("data", "unspecified", createMockDeploymentResourceByteData()) .multiPart("more-data", "unspecified", createMockDeploymentResourceBpmnData()) .multiPart("deployment-name", MockProvider.EXAMPLE_DEPLOYMENT_ID) .multiPart("enable-duplicate-filtering", "true") .expect() .statusCode(Status.OK.getStatusCode()) .when() .post(CREATE_DEPLOYMENT_URL); // then verifyCreatedCmmnDeployment(mockDeployment, response); verify(mockDeploymentBuilder).name(MockProvider.EXAMPLE_DEPLOYMENT_ID); verify(mockDeploymentBuilder).enableDuplicateFiltering(false); }
@Test public void testCreateCompleteDmnDeployment() throws Exception { // given DeploymentWithDefinitions mockDeployment = MockProvider.createMockDeploymentWithDefinitions(); when(mockDeployment.getDeployedCaseDefinitions()).thenReturn(null); when(mockDeployment.getDeployedProcessDefinitions()).thenReturn(null); when(mockDeployment.getDeployedDecisionRequirementsDefinitions()).thenReturn(null); when(mockDeploymentBuilder.deployWithResult()).thenReturn(mockDeployment); // when resourceNames.addAll(Arrays.asList("data", "more-data")); Response response = given() .multiPart("data", "unspecified", createMockDeploymentResourceByteData()) .multiPart("more-data", "unspecified", createMockDeploymentResourceBpmnData()) .multiPart("deployment-name", MockProvider.EXAMPLE_DEPLOYMENT_ID) .multiPart("enable-duplicate-filtering", "true") .expect() .statusCode(Status.OK.getStatusCode()) .when() .post(CREATE_DEPLOYMENT_URL); // then verifyCreatedDmnDeployment(mockDeployment, response); verify(mockDeploymentBuilder).name(MockProvider.EXAMPLE_DEPLOYMENT_ID); verify(mockDeploymentBuilder).enableDuplicateFiltering(false); }
@Test public void testCreateCompleteDrdDeployment() throws Exception { // given DeploymentWithDefinitions mockDeployment = MockProvider.createMockDeploymentWithDefinitions(); when(mockDeployment.getDeployedCaseDefinitions()).thenReturn(null); when(mockDeployment.getDeployedProcessDefinitions()).thenReturn(null); when(mockDeploymentBuilder.deployWithResult()).thenReturn(mockDeployment); // when resourceNames.addAll(Arrays.asList("data", "more-data")); Response response = given() .multiPart("data", "unspecified", createMockDeploymentResourceByteData()) .multiPart("more-data", "unspecified", createMockDeploymentResourceBpmnData()) .multiPart("deployment-name", MockProvider.EXAMPLE_DEPLOYMENT_ID) .multiPart("enable-duplicate-filtering", "true") .expect() .statusCode(Status.OK.getStatusCode()) .when() .post(CREATE_DEPLOYMENT_URL); // then verifyCreatedDrdDeployment(mockDeployment, response); verify(mockDeploymentBuilder).name(MockProvider.EXAMPLE_DEPLOYMENT_ID); verify(mockDeploymentBuilder).enableDuplicateFiltering(false); }
@Test public void testCreateCompleteBpmnDeployment() throws Exception { // given DeploymentWithDefinitions mockDeployment = MockProvider.createMockDeploymentWithDefinitions(); when(mockDeployment.getDeployedDecisionDefinitions()).thenReturn(null); when(mockDeployment.getDeployedCaseDefinitions()).thenReturn(null); when(mockDeployment.getDeployedDecisionRequirementsDefinitions()).thenReturn(null); when(mockDeploymentBuilder.deployWithResult()).thenReturn(mockDeployment); // when resourceNames.addAll(Arrays.asList("data", "more-data")); Response response = given() .multiPart("data", "unspecified", createMockDeploymentResourceByteData()) .multiPart("more-data", "unspecified", createMockDeploymentResourceBpmnData()) .multiPart("deployment-name", MockProvider.EXAMPLE_DEPLOYMENT_ID) .multiPart("enable-duplicate-filtering", "true") .expect() .statusCode(Status.OK.getStatusCode()) .when() .post(CREATE_DEPLOYMENT_URL); // then verifyCreatedBpmnDeployment(mockDeployment, response); verify(mockDeploymentBuilder).name(MockProvider.EXAMPLE_DEPLOYMENT_ID); verify(mockDeploymentBuilder).enableDuplicateFiltering(false); }
@Test public void deploymentWithDuplicateFilteringIgnoreDeploymentForNoTenant() { // given: a deployment without tenant ID createDeploymentBuilder() .enableDuplicateFiltering(false) .name("twice") .deploy(); // if the same process is deployed with tenant ID createDeploymentBuilder() .enableDuplicateFiltering(false) .name("twice") .tenantId(TENANT_ONE) .deploy(); // then a new deployment is created assertThat(repositoryService.createDeploymentQuery().count(), is(2L)); }
@Test public void deploymentWithDuplicateFilteringIgnoreDeploymentForTenant() { // given: a deployment with tenant ID createDeploymentBuilder() .enableDuplicateFiltering(false) .name("twice") .tenantId(TENANT_ONE) .deploy(); // if the same process is deployed without tenant ID createDeploymentBuilder() .enableDuplicateFiltering(false) .name("twice") .deploy(); // then a new deployment is created assertThat(repositoryService.createDeploymentQuery().count(), is(2L)); }
@Test public void testCreateCompleteDeployment() throws Exception { resourceNames.addAll( Arrays.asList("data", "more-data") ); Response response = given() .multiPart("data", "unspecified", createMockDeploymentResourceByteData()) .multiPart("more-data", "unspecified", createMockDeploymentResourceBpmnData()) .multiPart("deployment-name", MockProvider.EXAMPLE_DEPLOYMENT_ID) .multiPart("enable-duplicate-filtering", "true") .expect() .statusCode(Status.OK.getStatusCode()) .when() .post(CREATE_DEPLOYMENT_URL); verifyCreatedDeployment(mockDeployment, response); verify(mockDeploymentBuilder).name(MockProvider.EXAMPLE_DEPLOYMENT_ID); verify(mockDeploymentBuilder).enableDuplicateFiltering(false); }
public void testDeploySameFileTwice() { String bpmnResourceName = "org/camunda/bpm/engine/test/bpmn/deployment/BpmnDeploymentTest.testGetBpmnXmlFileThroughService.bpmn20.xml"; repositoryService.createDeployment().enableDuplicateFiltering().addClasspathResource(bpmnResourceName).name("twice").deploy(); String deploymentId = repositoryService.createDeploymentQuery().singleResult().getId(); List<String> deploymentResources = repositoryService.getDeploymentResourceNames(deploymentId); // verify bpmn file name assertEquals(1, deploymentResources.size()); assertEquals(bpmnResourceName, deploymentResources.get(0)); repositoryService.createDeployment().enableDuplicateFiltering().addClasspathResource(bpmnResourceName).name("twice").deploy(); List<org.camunda.bpm.engine.repository.Deployment> deploymentList = repositoryService.createDeploymentQuery().list(); assertEquals(1, deploymentList.size()); repositoryService.deleteDeployment(deploymentId); }
public void testDeployDifferentFiles() { String bpmnResourceName = "org/camunda/bpm/engine/test/bpmn/deployment/BpmnDeploymentTest.testGetBpmnXmlFileThroughService.bpmn20.xml"; repositoryService.createDeployment().enableDuplicateFiltering(false).addClasspathResource(bpmnResourceName).name("twice").deploy(); String deploymentId = repositoryService.createDeploymentQuery().singleResult().getId(); List<String> deploymentResources = repositoryService.getDeploymentResourceNames(deploymentId); // verify bpmn file name assertEquals(1, deploymentResources.size()); assertEquals(bpmnResourceName, deploymentResources.get(0)); bpmnResourceName = "org/camunda/bpm/engine/test/bpmn/deployment/BpmnDeploymentTest.testProcessDiagramResource.bpmn20.xml"; repositoryService.createDeployment().enableDuplicateFiltering().addClasspathResource(bpmnResourceName).name("twice").deploy(); List<org.camunda.bpm.engine.repository.Deployment> deploymentList = repositoryService.createDeploymentQuery().list(); assertEquals(2, deploymentList.size()); deleteDeployments(deploymentList); }
@Test public void deploymentWithDuplicateFilteringForSameTenant() { // given: a deployment with tenant ID createDeploymentBuilder() .enableDuplicateFiltering(false) .name("twice") .tenantId(TENANT_ONE) .deploy(); // if the same process is deployed with the same tenant ID again createDeploymentBuilder() .enableDuplicateFiltering(false) .name("twice") .tenantId(TENANT_ONE) .deploy(); // then it does not create a new deployment assertThat(repositoryService.createDeploymentQuery().count(), is(1L)); }
@Test public void deploymentWithDuplicateFilteringForDifferentTenants() { // given: a deployment with tenant ID createDeploymentBuilder() .enableDuplicateFiltering(false) .name("twice") .tenantId(TENANT_ONE) .deploy(); // if the same process is deployed with the another tenant ID createDeploymentBuilder() .enableDuplicateFiltering(false) .name("twice") .tenantId(TENANT_TWO) .deploy(); // then a new deployment is created assertThat(repositoryService.createDeploymentQuery().count(), is(2L)); }
public void testDeployTwoProcessesWithDuplicateIdAtTheSameTime() { try { String bpmnResourceName = "org/camunda/bpm/engine/test/bpmn/deployment/BpmnDeploymentTest.testGetBpmnXmlFileThroughService.bpmn20.xml"; String bpmnResourceName2 = "org/camunda/bpm/engine/test/bpmn/deployment/BpmnDeploymentTest.testGetBpmnXmlFileThroughService2.bpmn20.xml"; repositoryService.createDeployment().enableDuplicateFiltering() .addClasspathResource(bpmnResourceName) .addClasspathResource(bpmnResourceName2) .name("duplicateAtTheSameTime").deploy(); fail(); } catch (Exception e) { // Verify that nothing is deployed assertEquals(0, repositoryService.createDeploymentQuery().count()); } }
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()); }
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()); }
public void testRedeployEnableDuplcateChecking() { // given ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery(); BpmnModelInstance model1 = createProcessWithServiceTask(PROCESS_1_KEY); Deployment deployment1 = repositoryService .createDeployment() .name(DEPLOYMENT_NAME) .addModelInstance(RESOURCE_1_NAME, model1) .deploy(); verifyQueryResults(query.processDefinitionKey(PROCESS_1_KEY), 1); // when Deployment deployment2 = repositoryService .createDeployment() .name(DEPLOYMENT_NAME) .addDeploymentResources(deployment1.getId()) .enableDuplicateFiltering(true) .deploy(); assertEquals(deployment1.getId(), deployment2.getId()); verifyQueryResults(query.processDefinitionKey(PROCESS_1_KEY), 1); deleteDeployments(deployment1); }