/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * 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.kie.server.integrationtests.jbpm; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Assume; import org.junit.Test; import org.junit.experimental.categories.Category; import org.kie.internal.executor.api.STATUS; import org.kie.server.api.model.instance.JobRequestInstance; import org.kie.server.api.model.instance.RequestInfoInstance; import org.kie.server.integrationtests.category.JMSOnly; import org.kie.server.integrationtests.config.TestConfig; import org.kie.server.integrationtests.shared.KieServerSynchronization; @Category(JMSOnly.class) public class JobServiceJmsIntegrationTest extends JbpmKieServerBaseIntegrationTest { private static final long NUMBER_OF_JOBS = 10; private static final long MAXIMUM_PROCESSING_TIME = 20000; @Test public void testScheduleSeveralJobs() throws Exception { // Test is using JMS, isn't available for local execution. Assume.assumeFalse(TestConfig.isLocalServer()); String businessKey = "test key"; String command = "org.jbpm.executor.commands.PrintOutCommand"; Map<String, Object> data = new HashMap<String, Object>(); data.put("businessKey", businessKey); JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(command); jobRequestInstance.setData(data); List<Long> jobIds = new ArrayList<Long>(); long startTime = Calendar.getInstance().getTimeInMillis(); // Start 10 jobs at once. for (int i=0; i<NUMBER_OF_JOBS; i++) { Long jobId = jobServicesClient.scheduleRequest(jobRequestInstance); assertNotNull(jobId); assertTrue( jobId.longValue() > 0); jobIds.add(jobId); } // All jobs are processed successfully. for (Long jobId : jobIds) { KieServerSynchronization.waitForJobToFinish(jobServicesClient, jobId); RequestInfoInstance jobRequest = jobServicesClient.getRequestById(jobId, false, false); assertNotNull(jobRequest); assertEquals(jobId, jobRequest.getId()); assertEquals(businessKey, jobRequest.getBusinessKey()); assertEquals(STATUS.DONE.toString(), jobRequest.getStatus()); assertEquals(command, jobRequest.getCommandName()); } long durationTime = Calendar.getInstance().getTimeInMillis() - startTime; // All jobs should be processed and done in less than 20 s. assertTrue("Job processing exceeded expected time! Actual time: " + durationTime + "ms", durationTime < MAXIMUM_PROCESSING_TIME); } }