/* * 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 java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.junit.After; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runners.Parameterized; import org.kie.server.api.KieServerConstants; import org.kie.server.api.marshalling.MarshallingFormat; import org.kie.server.api.model.KieServerConfigItem; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.instance.ProcessInstance; import org.kie.server.client.KieServicesConfiguration; import org.kie.server.integrationtests.shared.KieServerDeployer; import org.kie.server.integrationtests.shared.KieServerSynchronization; import static org.junit.Assert.*; public class TimerIntegrationTest extends JbpmKieServerBaseIntegrationTest { private static ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "timer-project", "1.0.0.Final"); @Parameterized.Parameters(name = "{index}: {0} {1} {2}") public static Collection<Object[]> data() { KieServicesConfiguration configuration = createKieServicesRestConfiguration(); Collection<Object[]> parameterData = new ArrayList<Object[]>(Arrays.asList(new Object[][] { {MarshallingFormat.JAXB, configuration, "SINGLETON"}, {MarshallingFormat.JAXB, configuration, "PER_PROCESS_INSTANCE"} } )); return parameterData; } @Parameterized.Parameter(2) public String runtimeStrategy; @BeforeClass public static void buildAndDeployArtifacts() { KieServerDeployer.buildAndDeployCommonMavenParent(); KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/timer-project").getFile()); } @After public void disposeContainers() { disposeAllContainers(); } @Test(timeout = 60 * 1000) public void testTimerStartEvent() throws Exception { String containerId = "timer-project-" + runtimeStrategy; createContainer(containerId, releaseId, new KieServerConfigItem(KieServerConstants.PCFG_RUNTIME_STRATEGY, runtimeStrategy, String.class.getName())); List<Integer> completedOnly = Arrays.asList(2); KieServerSynchronization.waitForProcessInstanceStart(queryClient, containerId, 3, completedOnly); List<ProcessInstance> startedInstances = queryClient.findProcessInstancesByContainerId(containerId, completedOnly, 0, 10, "Id", false); assertEquals(3, startedInstances.size()); long thirdInstance = startedInstances.get(0).getDate().getTime(); long secondInstance = startedInstances.get(1).getDate().getTime(); long firstInstance = startedInstances.get(2).getDate().getTime(); // let's round it up to be on simple value double distance1 = Math.ceil((thirdInstance - secondInstance)); double distance2 = Math.ceil((secondInstance - firstInstance)); // since the expiration time is 5 seconds let's make sure it's not more than doubled of expiration time assertTrue(distance1 < 10000); assertTrue(distance2 < 10000); } }