提交 047a23a7 编写于 作者: T tombaeyens

ACT-60 resolved test failures in the 'disappeared' part of the engine test suite

上级 c81d5f4c
......@@ -94,16 +94,7 @@
<exclude>**/*TestCase.java</exclude>
<exclude>**/HistoricDataServiceImplTest.java</exclude>
<exclude>**/HistoricDataServiceTest.java</exclude>
<exclude>**/DeploymentTest.java</exclude>
<exclude>**/ProcessServiceTest.java</exclude>
<exclude>**/ProcessInstanceQueryTest.java</exclude>
<exclude>**/ProcessServiceTest.java</exclude>
<exclude>**/TaskQueryTest.java</exclude>
<exclude>**/TaskServiceTest.java</exclude>
<exclude>**/JobExecutorCmdExceptionTest.java</exclude>
<exclude>**/SubProcessTest.java</exclude>
<exclude>**/ConditionalSequenceFlowTest.java</exclude>
<exclude>**/ExclusiveGatewayTest.java</exclude>
</excludes>
</configuration>
</plugin>
......
......@@ -24,10 +24,14 @@ import java.util.List;
public interface JobQuery {
JobQuery processInstanceId(String processInstanceId);
JobQuery withRetriesLeft();
JobQuery executable();
//JobQuery timers();
// JobQuery messages();
//JobQuery messages();
long count();
......
......@@ -13,6 +13,7 @@
package org.activiti.engine.impl;
import java.util.Date;
import java.util.List;
import org.activiti.engine.Job;
......@@ -20,6 +21,7 @@ import org.activiti.engine.JobQuery;
import org.activiti.engine.Page;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.CommandExecutor;
import org.activiti.engine.impl.util.ClockUtil;
/**
......@@ -30,6 +32,8 @@ public class JobQueryImpl extends AbstractQuery<Job> implements JobQuery {
protected String processInstanceId;
protected String executionId;
protected boolean retriesLeft;
protected boolean executable;
public JobQueryImpl() {
}
......@@ -47,7 +51,17 @@ public class JobQueryImpl extends AbstractQuery<Job> implements JobQuery {
this.executionId = executionId;
return this;
}
public JobQuery withRetriesLeft() {
retriesLeft = true;
return this;
}
public JobQuery executable() {
executable = true;
return this;
}
public JobQueryImpl orderAsc(String column) {
super.addOrder(column, SORTORDER_ASC);
return this;
......@@ -77,4 +91,16 @@ public class JobQueryImpl extends AbstractQuery<Job> implements JobQuery {
public String getExecutionId() {
return executionId;
}
public boolean getRetriesLeft() {
return retriesLeft;
}
public boolean getExecutable() {
return executable;
}
public Date getNow() {
return ClockUtil.getCurrentTime();
}
}
......@@ -70,38 +70,33 @@ public class BpmnActivityBehavior {
log.fine("Leaving activity '" + execution.getActivity().getId() + "'");
}
List<PvmTransition> transitionsToTake = new ArrayList<PvmTransition>();
List<PvmTransition> outgoingTransitions = execution.getActivity().getOutgoingTransitions();
if (outgoingTransitions.size() == 1) {
execution.take(outgoingTransitions.get(0));
for (PvmTransition outgoingTransition: outgoingTransitions) {
Condition condition = (Condition) outgoingTransition.getProperty(BpmnParse.PROPERTYNAME_CONDITION);
if (condition == null
|| !checkConditions
|| condition.evaluate(execution)) {
transitionsToTake.add(outgoingTransition);
}
}
if (transitionsToTake.size() == 1) {
execution.take(transitionsToTake.get(0));
} else if (outgoingTransitions.size() > 1) {
} else if (transitionsToTake.size() >= 1) {
execution.inactivate();
List<ActivityExecution> joinedExecutions = new ArrayList<ActivityExecution>();
joinedExecutions.add(execution);
List<PvmTransition> transitionsToTake = new ArrayList<PvmTransition>();
for (PvmTransition outgoingTransition: outgoingTransitions) {
Condition condition = (Condition) outgoingTransition.getProperty(BpmnParse.PROPERTYNAME_CONDITION);
if (condition == null
|| !checkConditions
|| condition.evaluate(execution)) {
transitionsToTake.add(outgoingTransition);
}
}
execution.takeAll(transitionsToTake, joinedExecutions);
} else {
if (log.isLoggable(Level.FINE)) {
log.fine("No outgoing sequence flow found for " + execution.getActivity().getId()
} else if (log.isLoggable(Level.FINE)) {
log.fine("No outgoing sequence flow found for " + execution.getActivity().getId()
+ ". Ending execution.");
}
execution.end();
}
}
}
}
......@@ -38,19 +38,24 @@ public class DeleteTaskCmd implements Command<Void> {
public Void execute(CommandContext commandContext) {
if (taskId != null) {
commandContext
.getDbSqlSession()
.delete(TaskEntity.class, taskId);
deleteTask(commandContext, taskId);
}
if (taskIds != null) {
for (String taskId : taskIds) {
commandContext
.getDbSqlSession()
.delete(TaskEntity.class, taskId);
deleteTask(commandContext, taskId);
}
}
return null;
}
protected void deleteTask(CommandContext commandContext, String taskId) {
TaskEntity task = commandContext
.getTaskSession()
.findTaskById(taskId);
if (task!=null) {
task.delete();
}
}
}
......@@ -12,6 +12,7 @@
*/
package org.activiti.engine.impl.cmd;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.repository.ProcessDefinitionEntity;
......@@ -29,6 +30,9 @@ public class FindProcessDefinitionCmd implements Command<ProcessDefinitionEntity
}
public ProcessDefinitionEntity execute(CommandContext commandContext) {
if (processDefinitionId==null) {
throw new ActivitiException("processDefinitionId is null");
}
return commandContext
.getRepositorySession()
.findProcessDefinitionById(processDefinitionId);
......
......@@ -18,7 +18,6 @@ import java.util.GregorianCalendar;
import java.util.List;
import org.activiti.engine.Page;
import org.activiti.engine.impl.cfg.RuntimeSession;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.runtime.JobEntity;
......@@ -37,15 +36,15 @@ public class AcquireJobsCmd implements Command<AcquiredJobs> {
}
public AcquiredJobs execute(CommandContext commandContext) {
RuntimeSession runtimeSession = commandContext.getRuntimeSession();
String lockOwner = jobExecutor.getLockOwner();
int lockTimeInMillis = jobExecutor.getLockTimeInMillis();
int maxJobsPerAcquisition = jobExecutor.getMaxJobsPerAcquisition();
AcquiredJobs acquiredJobs = new AcquiredJobs();
List<JobEntity> jobs = runtimeSession.findNextJobsToExecute(new Page(0, maxJobsPerAcquisition));
List<JobEntity> jobs = commandContext
.getRuntimeSession()
.findNextJobsToExecute(new Page(0, maxJobsPerAcquisition));
for (JobEntity job: jobs) {
List<String> jobIds = new ArrayList<String>();
......
......@@ -18,7 +18,6 @@ import java.util.Map;
import org.activiti.engine.Job;
import org.activiti.engine.Page;
import org.activiti.engine.Task;
import org.activiti.engine.impl.JobQueryImpl;
import org.activiti.engine.impl.TaskQueryImpl;
import org.activiti.engine.impl.cfg.RuntimeSession;
......
......@@ -279,7 +279,11 @@ public class ProcessEngineTestCase extends PvmTestCase {
}
public boolean areJobsAvailable() {
return !managementService.createJobQuery().list().isEmpty();
return !managementService
.createJobQuery()
.executable()
.list()
.isEmpty();
}
private static class InteruptTask extends TimerTask {
......
......@@ -82,6 +82,13 @@
<if test="executionId != null">
EXECUTION_ID_ = #{executionId}
</if>
<if test="retriesLeft">
RETRIES_ &gt; 0
</if>
<if test="executable">
(RETRIES_ &gt; 0)
and (DUEDATE_ is null or DUEDATE_ &lt;= #{now, jdbcType=TIMESTAMP})
</if>
</where>
</sql>
......
......@@ -70,7 +70,7 @@ public class ExclusiveGatewayTest extends ProcessEngineTestCase {
CollectionUtil.singletonMap("input", 1));
}
@Deployment(resources = {"/org/activiti/test/bpmn/gateway/ExclusiveGatewayTest.testDivergingExclusiveGateway.bpmn20.xml"})
@Deployment(resources = {"org/activiti/engine/test/bpmn/gateway/ExclusiveGatewayTest.testDivergingExclusiveGateway.bpmn20.xml"})
public void testUnknownVariableInExpression() {
// Instead of 'input' we're starting a process instance with the name 'iinput' (ie. a typo)
try {
......
......@@ -13,6 +13,8 @@
package org.activiti.engine.test.bpmn.sequenceflow;
import java.util.Map;
import org.activiti.engine.ProcessInstance;
import org.activiti.engine.Task;
import org.activiti.engine.impl.util.CollectionUtil;
......@@ -27,11 +29,14 @@ public class ConditionalSequenceFlowTest extends ProcessEngineTestCase {
@Deployment
public void testUelValueExpression() {
ProcessInstance pi = runtimeService.startProcessInstanceByKey(
"condSeqFlowUelValueExpr", CollectionUtil.singletonMap("input", "right"));
Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
Map<String, Object> variables = CollectionUtil.singletonMap("input", "right");
ProcessInstance pi = runtimeService.startProcessInstanceByKey("condSeqFlowUelValueExpr", variables);
Task task = taskService
.createTaskQuery()
.processInstanceId(pi.getId())
.singleResult();
assertEquals("task right", task.getName());
}
}
}
\ No newline at end of file
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.engine.test.deploy;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import org.activiti.engine.Deployment;
import org.activiti.engine.impl.util.IoUtil;
import org.activiti.engine.test.ProcessEngineTestCase;
/**
* @author Tom Baeyens
* @author Joram Barrez
*/
public class DeploymentTest extends ProcessEngineTestCase {
private static final String TO_REPLACE = "to_replace";
private static final String MINIMAL_PROC_DEF = "<definitions xmlns='http://www.omg.org/spec/BPMN/20100524/MODEL' "
+ " targetNamespace='http://www.activiti.org/bpmn2.0' >" + " <process id='" + TO_REPLACE + "' />" + "</definitions>";
public void testDefinitionsOnly() {
repositoryService.createDeployment().addString("xmlString.bpmn20.xml",
"<definitions xmlns='http://www.omg.org/spec/BPMN/20100524/MODEL' targetNamespace='http://www.activiti.org/bpmn2.0' />");
}
public void testMultipleStringResources() throws Exception {
List<String> deploymentIds = deployTestProcesses();
List<Deployment> deployments = repositoryService.findDeployments();
assertEquals(3, deployments.size());
// Results should be ordered by deployment time
assertEquals("idrDeployment", deployments.get(0).getName());
assertEquals("expenseDeployment", deployments.get(1).getName());
assertEquals("hiringDeployment", deployments.get(2).getName());
// Resources should be ordered by name
String deploymentId = deploymentIds.get(0);
List<String> resources = repositoryService.findDeploymentResourceNames(deploymentId);
assertEquals(2, resources.size());
assertEquals("idr_process01.bpmn20.xml", resources.get(0));
assertEquals("idr_process02.bpmn20.xml", resources.get(1));
// Validate the content of the deployment resources
InputStream resourceIs = repositoryService.getResourceAsStream(deploymentId, resources.get(0));
assertEquals(MINIMAL_PROC_DEF.replace(TO_REPLACE, "IDR1"), new String(IoUtil.readInputStream(resourceIs, null)));
resourceIs.close();
resourceIs = repositoryService.getResourceAsStream(deploymentId, resources.get(1));
assertEquals(MINIMAL_PROC_DEF.replace(TO_REPLACE, "IDR2"), new String(IoUtil.readInputStream(resourceIs, null)));
resourceIs.close();
}
/*
* Deploys two test processes: - one deployment called 'idrDeployment' with
* two bpmn processes - one deployment called 'expenseDeployment' with one
* bpmn process - one deployment called 'hiringDeployment' with three bpmn
* processes
*
* The list that is returned contains the ids of the deployments, in the order
* as defined above.
*/
private List<String> deployTestProcesses() {
final String idrDeploymentName = "idrDeployment";
final String expenseDeploymentName = "expenseDeployment";
final String hiringDeploymentName = "hiringDeployment";
Deployment deployment1 = repositoryService.createDeployment().name(idrDeploymentName).addString("idr_process01.bpmn20.xml",
MINIMAL_PROC_DEF.replace(TO_REPLACE, "IDR1")).addString("idr_process02.bpmn20.xml", MINIMAL_PROC_DEF.replace(TO_REPLACE, "IDR2")).deploy();
Deployment deployment2 = repositoryService.createDeployment().name(expenseDeploymentName).addString("expense_proc.bpmn20.xml",
MINIMAL_PROC_DEF.replace(TO_REPLACE, "EXP")).deploy();
Deployment deployment3 = repositoryService.createDeployment().name(hiringDeploymentName).addString("hiring_process.bpmn20.xml",
MINIMAL_PROC_DEF.replace(TO_REPLACE, "HIR")).addString("hiring_remote_employee.bpmn20.xml", MINIMAL_PROC_DEF.replace(TO_REPLACE, "HIR_REM"))
.addString("hiring_process_sales.bpmn20.xml", MINIMAL_PROC_DEF.replace(TO_REPLACE, "HIR_SAL")).deploy();
assertEquals(idrDeploymentName, deployment1.getName());
assertEquals(expenseDeploymentName, deployment2.getName());
return Arrays.asList(deployment1.getId(), deployment2.getId(), deployment3.getId());
}
}
......@@ -22,14 +22,13 @@ import org.activiti.engine.test.ProcessEngineTestCase;
public class ProcessInstanceQueryTest extends ProcessEngineTestCase {
private static String PROCESS_KEY = "oneTaskProcess";
private static String PROCESS_KEY_2 = "oneTaskProcess2";
protected void setUp() throws Exception {
super.setUp();
repositoryService.createDeployment()
.addClasspathResource("oneTaskProcess.bpmn20.xml")
.addClasspathResource("oneTaskProcess2.bpmn20.xml")
.addClasspathResource("org/activiti/engine/test/processinstance/oneTaskProcess.bpmn20.xml")
.addClasspathResource("org/activiti/engine/test/processinstance/oneTaskProcess2.bpmn20.xml")
.deploy();
for (int i = 0; i < 4; i++) {
......@@ -37,10 +36,10 @@ public class ProcessInstanceQueryTest extends ProcessEngineTestCase {
}
runtimeService.startProcessInstanceByKey(PROCESS_KEY_2);
}
protected void tearDown() throws Exception {
for (org.activiti.engine.Deployment deployment : repositoryService.findDeployments()) {
repositoryService.deleteDeployment(deployment.getId());
repositoryService.deleteDeploymentCascade(deployment.getId());
}
super.tearDown();
}
......
......@@ -16,16 +16,16 @@ import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ProcessDefinition;
import org.activiti.engine.ProcessInstance;
import org.activiti.engine.test.Deployment;
import org.activiti.engine.test.ProcessEngineTestCase;
/**
* @author Joram Barrez
*/
public class ProcessServiceTest extends ProcessEngineTestCase {
public class RepositoryServiceTest extends ProcessEngineTestCase {
@Deployment(resources = {"oneTaskProcess.bpmn20.xml"})
@Deployment(resources = {
"org/activiti/engine/test/service/oneTaskProcess.bpmn20.xml"})
public void testStartProcessInstanceById() {
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().list();
assertEquals(1, processDefinitions.size());
......@@ -33,13 +33,10 @@ public class ProcessServiceTest extends ProcessEngineTestCase {
ProcessDefinition processDefinition = processDefinitions.get(0);
assertEquals("oneTaskProcess", processDefinition.getKey());
assertNotNull(processDefinition.getId());
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId());
assertNotNull(processInstance);
assertNotNull(taskService.createTaskQuery().singleResult());
}
@Deployment(resources={"oneTaskProcess.bpmn20.xml"})
@Deployment(resources={
"org/activiti/engine/test/service/oneTaskProcess.bpmn20.xml"})
public void testFindProcessDefinitionById() {
List<ProcessDefinition> definitions = repositoryService.createProcessDefinitionQuery().list();
assertEquals(1, definitions.size());
......@@ -55,7 +52,7 @@ public class ProcessServiceTest extends ProcessEngineTestCase {
repositoryService.findProcessDefinitionById(null);
fail();
} catch (ActivitiException e) {
assertTextPresent("Couldn't find process definiton", e.getMessage());
assertTextPresent("processDefinitionId is null", e.getMessage());
}
}
}
......@@ -25,7 +25,8 @@ import org.activiti.engine.test.ProcessEngineTestCase;
*/
public class TaskServiceTest extends ProcessEngineTestCase {
@Deployment(resources={"twoTasksProcess.bpmn20.xml"})
@Deployment(resources={
"org/activiti/engine/test/service/twoTasksProcess.bpmn20.xml"})
public void testCompleteWithParametersTask() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("twoTasksProcess");
......
......@@ -23,8 +23,8 @@ import org.activiti.engine.ManagementService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineInfo;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.identity.Group;
import org.activiti.engine.impl.util.json.JSONObject;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册