/* 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.bpmn.async;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.impl.history.HistoryLevel;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.test.Deployment;
public class AsyncExclusiveJobsTest extends PluggableActivitiTestCase {
/**
* Test for https://activiti.atlassian.net/browse/ACT-4035.
*/
@Deployment
public void testExclusiveJobs() {
if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.AUDIT)) {
// The process has two script tasks in parallel, both exclusive.
// They should be executed with at least 6 seconds in between (as they both sleep for 6 seconds)
runtimeService.startProcessInstanceByKey("testExclusiveJobs");
waitForJobExecutorToProcessAllJobs(20000L, 500L);
HistoricActivityInstance scriptTaskAInstance = historyService.createHistoricActivityInstanceQuery().activityId("scriptTaskA").singleResult();
HistoricActivityInstance scriptTaskBInstance = historyService.createHistoricActivityInstanceQuery().activityId("scriptTaskB").singleResult();
long endTimeA = scriptTaskAInstance.getEndTime().getTime();
long endTimeB = scriptTaskBInstance.getEndTime().getTime();
long endTimeDifference = 0;
if (endTimeB > endTimeA) {
endTimeDifference = endTimeB - endTimeA;
} else {
endTimeDifference = endTimeA - endTimeB;
}
assertTrue(endTimeDifference > 6000); // > 6000 -> jobs were executed in parallel
}
}
}