/* * 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.jbpm.persistence.correlation; import static org.jbpm.persistence.util.PersistenceUtil.JBPM_PERSISTENCE_UNIT_NAME; import static org.jbpm.persistence.util.PersistenceUtil.cleanUp; import static org.jbpm.persistence.util.PersistenceUtil.setupWithPoolingDataSource; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.List; import javax.naming.InitialContext; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Query; import javax.transaction.UserTransaction; import org.jbpm.test.util.AbstractBaseTest; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.kie.internal.KieInternalServices; import org.kie.internal.process.CorrelationKeyFactory; import org.kie.api.runtime.EnvironmentName; @RunWith(Parameterized.class) public class CorrelationPersistenceTest extends AbstractBaseTest { private HashMap<String, Object> context; public CorrelationPersistenceTest(boolean locking) { this.useLocking = locking; } @Parameters public static Collection<Object[]> persistence() { Object[][] data = new Object[][] { { false }, { true } }; return Arrays.asList(data); }; @Before public void before() throws Exception { context = setupWithPoolingDataSource(JBPM_PERSISTENCE_UNIT_NAME); CorrelationKeyFactory factory = KieInternalServices.Factory.get().newCorrelationKeyFactory(); // populate table with test data EntityManagerFactory emf = (EntityManagerFactory) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); EntityManager em = emf.createEntityManager(); em.persist(factory.newCorrelationKey("test123")); List<String> props = new ArrayList<String>(); props.add("test123"); props.add("123test"); em.persist(factory.newCorrelationKey(props)); ut.commit(); } @After public void after() { try { EntityManagerFactory emf = (EntityManagerFactory) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); EntityManager em = emf.createEntityManager(); em.createQuery("delete from CorrelationPropertyInfo").executeUpdate(); em.createQuery("delete from CorrelationKeyInfo").executeUpdate(); ut.commit(); } catch (Exception e) { e.printStackTrace(); } cleanUp(context); } @Test public void testCreateCorrelation() throws Exception { EntityManagerFactory emf = (EntityManagerFactory) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery("GetProcessInstanceIdByCorrelation"); query.setParameter("ckey", "test123"); List<Long> processInstances = query.getResultList(); em.close(); assertNotNull(processInstances); assertEquals(1, processInstances.size()); } @Test public void testCreateCorrelationMultiValueDoesNotMatch() throws Exception { EntityManagerFactory emf = (EntityManagerFactory) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery("GetProcessInstanceIdByCorrelation"); query.setParameter("ckey", "test1234"); List<Long> processInstances = query.getResultList(); em.close(); assertNotNull(processInstances); assertEquals(0, processInstances.size()); } @Test public void testCreateCorrelationMultiValueDoesMatch() throws Exception { EntityManagerFactory emf = (EntityManagerFactory) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery("GetProcessInstanceIdByCorrelation"); query.setParameter("ckey", "test123:123test"); List<Long> processInstances = query.getResultList(); em.close(); assertNotNull(processInstances); assertEquals(1, processInstances.size()); } }