From e94637c74f6ad35904215f7cc1218becb4fa813f Mon Sep 17 00:00:00 2001 From: Miguel Ruiz Date: Fri, 20 Dec 2019 11:08:17 +0100 Subject: [PATCH] AAE-1243 Add version check before starting a process (#3039) * AAE-1243 Add version check before starting a process * AAE-1243 Add manifest file to conformance modules * AAE-1243 Add manifest file to conformance modules --- .../runtime/api/impl/ProcessRuntimeImpl.java | 10 +++++- .../api/impl/ProcessRuntimeImplTest.java | 32 +++++++++++++++---- .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ .../src/test/resources/default-app.json | 10 ++++++ 12 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set0/src/test/resources/default-app.json create mode 100644 activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set1/src/test/resources/default-app.json create mode 100644 activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set2/src/test/resources/default-app.json create mode 100644 activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set3/src/test/resources/default-app.json create mode 100644 activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set4/src/test/resources/default-app.json create mode 100644 activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set5/src/test/resources/default-app.json create mode 100644 activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-signals/src/test/resources/default-app.json create mode 100644 activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-variables/src/test/resources/default-app.json create mode 100644 activiti-examples/activiti-api-basic-connector-example/src/test/resources/default-app.json create mode 100644 activiti-examples/activiti-api-basic-process-example/src/test/resources/default-app.json diff --git a/activiti-core/activiti-api-impl/activiti-api-process-runtime-impl/src/main/java/org/activiti/runtime/api/impl/ProcessRuntimeImpl.java b/activiti-core/activiti-api-impl/activiti-api-process-runtime-impl/src/main/java/org/activiti/runtime/api/impl/ProcessRuntimeImpl.java index bee9e21713..e6368d5bb6 100644 --- a/activiti-core/activiti-api-impl/activiti-api-process-runtime-impl/src/main/java/org/activiti/runtime/api/impl/ProcessRuntimeImpl.java +++ b/activiti-core/activiti-api-impl/activiti-api-process-runtime-impl/src/main/java/org/activiti/runtime/api/impl/ProcessRuntimeImpl.java @@ -54,7 +54,6 @@ import org.activiti.core.common.spring.security.policies.SecurityPolicyAccess; import org.activiti.engine.ActivitiObjectNotFoundException; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; -import org.activiti.engine.repository.DeploymentQuery; import org.activiti.engine.repository.ProcessDefinitionQuery; import org.activiti.runtime.api.model.impl.APIDeploymentConverter; import org.activiti.runtime.api.model.impl.APIProcessDefinitionConverter; @@ -125,12 +124,21 @@ public class ProcessRuntimeImpl implements ProcessRuntime { } else { processDefinition = repositoryService.getProcessDefinition(processDefinitionId); } + + checkIfDefinitionBelongsToCurrentAppVersion(processDefinition); + if (!securityPoliciesManager.canRead(processDefinition.getKey())) { throw new ActivitiObjectNotFoundException("Unable to find process definition for the given id:'" + processDefinitionId + "'"); } return processDefinitionConverter.from(processDefinition); } + public void checkIfDefinitionBelongsToCurrentAppVersion(org.activiti.engine.repository.ProcessDefinition processDefinition){ + if (!selectLatestDeployment().getVersion().equals(processDefinition.getAppVersion())) { + throw new ActivitiForbiddenException("Process definition with the given id:'" + processDefinition.getId() + "' belongs to a different application version."); + } + } + @Override public Page processDefinitions(Pageable pageable) { return processDefinitions(pageable, diff --git a/activiti-core/activiti-api-impl/activiti-api-process-runtime-impl/src/test/java/org/activiti/runtime/api/impl/ProcessRuntimeImplTest.java b/activiti-core/activiti-api-impl/activiti-api-process-runtime-impl/src/test/java/org/activiti/runtime/api/impl/ProcessRuntimeImplTest.java index 1facfea07c..39d5139c91 100644 --- a/activiti-core/activiti-api-impl/activiti-api-process-runtime-impl/src/test/java/org/activiti/runtime/api/impl/ProcessRuntimeImplTest.java +++ b/activiti-core/activiti-api-impl/activiti-api-process-runtime-impl/src/test/java/org/activiti/runtime/api/impl/ProcessRuntimeImplTest.java @@ -16,26 +16,26 @@ package org.activiti.runtime.api.impl; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.MockitoAnnotations.initMocks; - import org.activiti.api.process.model.ProcessInstance; import org.activiti.api.process.model.builders.ProcessPayloadBuilder; import org.activiti.api.process.model.payloads.UpdateProcessPayload; +import org.activiti.api.runtime.model.impl.DeploymentImpl; import org.activiti.api.runtime.model.impl.ProcessInstanceImpl; +import org.activiti.core.common.spring.security.policies.ActivitiForbiddenException; import org.activiti.core.common.spring.security.policies.ProcessSecurityPoliciesManager; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; +import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntityImpl; import org.activiti.engine.runtime.ProcessInstanceQuery; import org.activiti.runtime.api.model.impl.APIProcessInstanceConverter; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; +import static org.mockito.Mockito.*; +import static org.mockito.MockitoAnnotations.initMocks; + public class ProcessRuntimeImplTest { private ProcessRuntimeImpl processRuntime; @@ -101,4 +101,22 @@ public class ProcessRuntimeImplTest { verifyNoMoreInteractions(internalProcess); } + @Test + public void should_ThrowException_when_ProcessDefinitionAppVersionDiffersFromCurrentDeploymentVersion(){ + + //given + DeploymentImpl deployment = new DeploymentImpl(); + deployment.setVersion(2); + + doReturn(deployment).when(processRuntime).selectLatestDeployment(); + + ProcessDefinitionEntityImpl processDefinition = new ProcessDefinitionEntityImpl(); + processDefinition.setId("processDefinitionId"); + processDefinition.setAppVersion(1); + + assertThatThrownBy(() ->processRuntime.checkIfDefinitionBelongsToCurrentAppVersion(processDefinition)) + .isInstanceOf(ActivitiForbiddenException.class) + .hasMessage("Process definition with the given id:'processDefinitionId' belongs to a different application version."); + } + } diff --git a/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set0/src/test/resources/default-app.json b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set0/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set0/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set1/src/test/resources/default-app.json b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set1/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set1/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set2/src/test/resources/default-app.json b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set2/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set2/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set3/src/test/resources/default-app.json b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set3/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set3/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set4/src/test/resources/default-app.json b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set4/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set4/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set5/src/test/resources/default-app.json b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set5/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-set5/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-signals/src/test/resources/default-app.json b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-signals/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-signals/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-variables/src/test/resources/default-app.json b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-variables/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-core/activiti-spring-conformance-tests/activiti-spring-conformance-variables/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-examples/activiti-api-basic-connector-example/src/test/resources/default-app.json b/activiti-examples/activiti-api-basic-connector-example/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-examples/activiti-api-basic-connector-example/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} diff --git a/activiti-examples/activiti-api-basic-process-example/src/test/resources/default-app.json b/activiti-examples/activiti-api-basic-process-example/src/test/resources/default-app.json new file mode 100644 index 0000000000..518220b9d0 --- /dev/null +++ b/activiti-examples/activiti-api-basic-process-example/src/test/resources/default-app.json @@ -0,0 +1,10 @@ +{ + "createdBy": "superadminuser", + "creationDate": "2019-08-16T15:58:46.056+0000", + "lastModifiedBy": "qa-modeler-1", + "lastModifiedDate": "2019-08-16T16:03:41.941+0000", + "id": "c519a458-539f-4385-a937-2edfb4045eb9", + "name": "projectA", + "description": "", + "version": "1" +} -- GitLab