Skip to content

Commit

Permalink
More Flowable5 unit test fixes + http test fix for windows
Browse files Browse the repository at this point in the history
  • Loading branch information
tijsrademakers committed Aug 3, 2023
1 parent 00c8f81 commit eeb859f
Show file tree
Hide file tree
Showing 13 changed files with 90 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,8 @@ ProcessInstance startProcessInstance(String processDefinitionKey, String process
void deleteJob(String jobId);

void leaveExecution(DelegateExecution execution);

void leaveMIExecution(DelegateExecution execution, Object v5MultiInstanceActivityBehavior);

void propagateError(BpmnError bpmnError, DelegateExecution execution);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.flowable.engine.impl.delegate.ActivityBehavior;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.impl.util.Flowable5Util;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;

/**
Expand All @@ -38,6 +39,8 @@ public class AbstractBpmnActivityBehavior extends FlowNodeActivityBehavior {
private static final long serialVersionUID = 1L;

protected MultiInstanceActivityBehavior multiInstanceActivityBehavior;

protected Object v5MultiInstanceActivityBehavior;

/**
* Subclasses that call leave() will first pass through this method, before the regular {@link FlowNodeActivityBehavior#leave(DelegateExecution)} is called. This way, we can check if the activity
Expand All @@ -53,7 +56,12 @@ public void leave(DelegateExecution execution) {
if (!hasLoopCharacteristics()) {
super.leave(execution);
} else if (hasMultiInstanceCharacteristics()) {
multiInstanceActivityBehavior.leave(execution);
if (multiInstanceActivityBehavior != null) {
multiInstanceActivityBehavior.leave(execution);

} else if (v5MultiInstanceActivityBehavior != null) {
Flowable5Util.getFlowable5CompatibilityHandler().leaveMIExecution(execution, v5MultiInstanceActivityBehavior);
}
}
}

Expand Down Expand Up @@ -105,7 +113,7 @@ protected boolean hasLoopCharacteristics() {
}

protected boolean hasMultiInstanceCharacteristics() {
return multiInstanceActivityBehavior != null;
return multiInstanceActivityBehavior != null || v5MultiInstanceActivityBehavior != null;
}

public MultiInstanceActivityBehavior getMultiInstanceActivityBehavior() {
Expand All @@ -116,4 +124,11 @@ public void setMultiInstanceActivityBehavior(MultiInstanceActivityBehavior multi
this.multiInstanceActivityBehavior = multiInstanceActivityBehavior;
}

public Object getV5MultiInstanceActivityBehavior() {
return v5MultiInstanceActivityBehavior;
}

public void setV5MultiInstanceActivityBehavior(Object v5MultiInstanceActivityBehavior) {
this.v5MultiInstanceActivityBehavior = v5MultiInstanceActivityBehavior;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,15 @@

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jakarta.servlet.MultipartConfigElement;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jetty.http.HttpVersion;
Expand All @@ -48,6 +44,13 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

import jakarta.servlet.MultipartConfigElement;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;

/**
* Http Server and API to test HTTP Activity
*
Expand All @@ -72,24 +75,26 @@ public class HttpServiceTaskTestServer {
new HttpConnectionFactory(httpConfig));
httpConnector.setPort(HTTP_PORT);

// https connector configuration
// keytool -selfcert -alias Flowable -keystore keystore -genkey -keyalg RSA -sigalg SHA256withRSA -validity 36500
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
sslContextFactory.setKeyStorePath(ReflectUtil.getResource("flowable.keystore").getFile());
sslContextFactory.setKeyStorePassword("Flowable");

HttpConfiguration httpsConfig = new HttpConfiguration();

SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString());
sslConnectionFactory.setEnsureSecureRequestCustomizer(false);
ServerConnector httpsConnector = new ServerConnector(server,
sslConnectionFactory,
new HttpConnectionFactory(httpsConfig));
httpsConnector.setPort(HTTPS_PORT);

server.setConnectors(new Connector[]{httpConnector, httpsConnector});

try {
// https connector configuration
// keytool -selfcert -alias Flowable -keystore keystore -genkey -keyalg RSA -sigalg SHA256withRSA -validity 36500
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
URL keystoreURL = ReflectUtil.getResource("flowable.keystore");
Path keystorePath = Paths.get(keystoreURL.toURI());
sslContextFactory.setKeyStorePath(keystorePath.toString());
sslContextFactory.setKeyStorePassword("Flowable");

HttpConfiguration httpsConfig = new HttpConfiguration();

SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString());
sslConnectionFactory.setEnsureSecureRequestCustomizer(false);
ServerConnector httpsConnector = new ServerConnector(server,
sslConnectionFactory,
new HttpConnectionFactory(httpsConfig));
httpsConnector.setPort(HTTPS_PORT);

server.setConnectors(new Connector[]{httpConnector, httpsConnector});

ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/");
MultipartConfigElement multipartConfig = new MultipartConfigElement((String) null);
Expand Down
5 changes: 5 additions & 0 deletions modules/flowable5-camel-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,11 @@
<artifactId>java-uuid-generator</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ public class TestReturnValueFromFlowable extends SpringFlowableTestCase {
@Autowired
RuntimeService runtimeService;

@EndpointInject(uri = "mock:result")
@EndpointInject("mock:result")
protected MockEndpoint resultEndpoint;

@Produce(uri = "direct:startReturnResultTest")
@Produce("direct:startReturnResultTest")
protected ProducerTemplate template;

public void setUp() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.activiti.engine.impl.JobProcessorContextImpl;
import org.activiti.engine.impl.asyncexecutor.AsyncJobUtil;
import org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
import org.activiti.engine.impl.bpmn.helper.ErrorPropagation;
import org.activiti.engine.impl.bpmn.helper.ErrorThrowingEventListener;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
Expand Down Expand Up @@ -971,6 +972,15 @@ public void leaveExecution(DelegateExecution execution) {
handleActivitiException(e);
}
}

@Override
public void leaveMIExecution(DelegateExecution execution, Object v5MultiInstanceActivityBehavior) {
try {
((MultiInstanceActivityBehavior) v5MultiInstanceActivityBehavior).execute(execution);
} catch (org.activiti.engine.ActivitiException e) {
handleActivitiException(e);
}
}

@Override
public void propagateError(BpmnError bpmnError, DelegateExecution execution) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.pvm.runtime.AtomicOperation;
import org.activiti.engine.impl.pvm.runtime.InterpretableExecution;
import org.flowable.common.engine.api.FlowableException;
import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
Expand Down Expand Up @@ -63,7 +64,7 @@ public abstract class MultiInstanceActivityBehavior extends FlowNodeActivityBeha

// Instance members
protected ActivityImpl activity;
protected AbstractBpmnActivityBehavior innerActivityBehavior;
protected ActivityBehavior innerActivityBehavior;
protected Expression loopCardinalityExpression;
protected Expression completionConditionExpression;
protected Expression collectionExpression;
Expand All @@ -76,7 +77,7 @@ public abstract class MultiInstanceActivityBehavior extends FlowNodeActivityBeha
* @param activity
* @param innerActivityBehavior The original {@link ActivityBehavior} of the activity that will be wrapped inside this behavior.
*/
public MultiInstanceActivityBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
public MultiInstanceActivityBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
this.activity = activity;
setInnerActivityBehavior(innerActivityBehavior);
}
Expand Down Expand Up @@ -104,7 +105,11 @@ public void execute(DelegateExecution execution) {
// Intercepts signals, and delegates it to the wrapped {@link ActivityBehavior}.
@Override
public void signal(ActivityExecution execution, String signalName, Object signalData) throws Exception {
innerActivityBehavior.signal(execution, signalName, signalData);
if (innerActivityBehavior instanceof org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior) {
throw new FlowableException("Not supported to signal this execution");
} else {
((AbstractBpmnActivityBehavior) this.innerActivityBehavior).signal(execution, signalName, signalData);
}
}

// required for supporting embedded subprocesses
Expand Down Expand Up @@ -330,12 +335,16 @@ public void setCollectionElementIndexVariable(String collectionElementIndexVaria
this.collectionElementIndexVariable = collectionElementIndexVariable;
}

public void setInnerActivityBehavior(AbstractBpmnActivityBehavior innerActivityBehavior) {
public void setInnerActivityBehavior(ActivityBehavior innerActivityBehavior) {
this.innerActivityBehavior = innerActivityBehavior;
this.innerActivityBehavior.setMultiInstanceActivityBehavior(this);
if (innerActivityBehavior instanceof org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior) {
((org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior) innerActivityBehavior).setV5MultiInstanceActivityBehavior(this);
} else {
((AbstractBpmnActivityBehavior) this.innerActivityBehavior).setMultiInstanceActivityBehavior(this);
}
}

public AbstractBpmnActivityBehavior getInnerActivityBehavior() {
public ActivityBehavior getInnerActivityBehavior() {
return innerActivityBehavior;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
public class ParallelMultiInstanceBehavior extends MultiInstanceActivityBehavior {

public ParallelMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior originalActivityBehavior) {
public ParallelMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior originalActivityBehavior) {
super(activity, originalActivityBehavior);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
public class SequentialMultiInstanceBehavior extends MultiInstanceActivityBehavior {

public SequentialMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
public SequentialMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
super(activity, innerActivityBehavior);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
*/
package org.activiti.engine.impl.bpmn.parser.factory;

import org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.CancelBoundaryEventActivityBehavior;
Expand Down Expand Up @@ -144,9 +143,9 @@ public interface ActivityBehaviorFactory {

public abstract EventBasedGatewayActivityBehavior createEventBasedGatewayActivityBehavior(EventGateway eventGateway);

public abstract SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior);
public abstract SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior);

public abstract ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior);
public abstract ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior);

public abstract SubProcessActivityBehavior createSubprocActivityBehavior(SubProcess subProcess);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import java.util.List;

import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.BusinessRuleTaskActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
Expand Down Expand Up @@ -336,12 +335,12 @@ public EventBasedGatewayActivityBehavior createEventBasedGatewayActivityBehavior
// Multi Instance

@Override
public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
return new SequentialMultiInstanceBehavior(activity, innerActivityBehavior);
}

@Override
public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
return new ParallelMultiInstanceBehavior(activity, innerActivityBehavior);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ protected void createMultiInstanceLoopCharacteristics(BpmnParse bpmnParse, Activ

if (loopCharacteristics.isSequential()) {
miActivityBehavior = bpmnParse.getActivityBehaviorFactory().createSequentialMultiInstanceBehavior(
activity, (AbstractBpmnActivityBehavior) activity.getActivityBehavior());
activity, activity.getActivityBehavior());
} else {
miActivityBehavior = bpmnParse.getActivityBehaviorFactory().createParallelMultiInstanceBehavior(
activity, (AbstractBpmnActivityBehavior) activity.getActivityBehavior());
activity, activity.getActivityBehavior());
}

// ActivityImpl settings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import java.util.Map;
import java.util.Set;

import org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.CancelBoundaryEventActivityBehavior;
Expand Down Expand Up @@ -260,13 +259,13 @@ public EventBasedGatewayActivityBehavior createEventBasedGatewayActivityBehavior

@Override
public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(
ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
return wrappedActivityBehaviorFactory.createSequentialMultiInstanceBehavior(activity, innerActivityBehavior);
}

@Override
public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(
ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
return wrappedActivityBehaviorFactory.createParallelMultiInstanceBehavior(activity, innerActivityBehavior);
}

Expand Down

0 comments on commit eeb859f

Please sign in to comment.