/* * 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 static org.junit.Assert.assertNull; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import javax.naming.InitialContext; import javax.transaction.Status; import javax.transaction.UserTransaction; import org.infinispan.Cache; import org.infinispan.manager.DefaultCacheManager; import org.jbpm.persistence.InfinispanProcessPersistenceContext; import org.jbpm.persistence.processinstance.ProcessEntityHolder; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.kie.api.runtime.EnvironmentName; import org.kie.internal.KieInternalServices; import org.kie.internal.process.CorrelationKeyFactory; public class CorrelationPersistenceTest { private HashMap<String, Object> context; @Before public void before() throws Exception { context = setupWithPoolingDataSource(JBPM_PERSISTENCE_UNIT_NAME, false); CorrelationKeyFactory factory = KieInternalServices.Factory.get().newCorrelationKeyFactory(); // populate table with test data DefaultCacheManager cm = (DefaultCacheManager) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); if (ut.getStatus() == Status.STATUS_NO_TRANSACTION) { ut.begin(); } Cache <String, Object> cache = cm.getCache("jbpm-configured-cache"); cache.put("correlationInfo1", new ProcessEntityHolder("correlationInfo1", (CorrelationKeyInfo) factory.newCorrelationKey("test123"))); List<String> props = new ArrayList<String>(); props.add("test123"); props.add("123test"); cache.put("correlationInfo2", new ProcessEntityHolder("correlationInfo2", (CorrelationKeyInfo) factory.newCorrelationKey(props))); if (ut.getStatus() == Status.STATUS_ACTIVE) { ut.commit(); } } @After public void after() { try { DefaultCacheManager cm = (DefaultCacheManager) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); if (ut.getStatus() == Status.STATUS_NO_TRANSACTION) { ut.begin(); } Cache<String, Object> cache = cm.getCache("jbpm-configured-cache"); cache.clear(); if (ut.getStatus() == Status.STATUS_ACTIVE) { ut.commit(); } } catch (Exception e) { e.printStackTrace(); } cleanUp(context); } @Test public void testCreateCorrelation() throws Exception { DefaultCacheManager cm = (DefaultCacheManager) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); Cache<String, Object> cache = cm.getCache("jbpm-configured-cache"); CorrelationKeyInfo correlationKey = new CorrelationKeyInfo(); correlationKey.addProperty(new CorrelationPropertyInfo("", "test123")); Long processInstance = new InfinispanProcessPersistenceContext(cache).getProcessInstanceByCorrelationKey(correlationKey); assertNotNull(processInstance); assertEquals(correlationKey.getProcessInstanceId(), processInstance.longValue()); } @Test public void testCreateCorrelationMultiValueDoesNotMatch() throws Exception { DefaultCacheManager cm = (DefaultCacheManager) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); Cache<String, Object> cache = cm.getCache("jbpm-configured-cache"); CorrelationKeyInfo correlationKey = new CorrelationKeyInfo(); correlationKey.addProperty(new CorrelationPropertyInfo("", "asdf")); Long processInstance = new InfinispanProcessPersistenceContext(cache).getProcessInstanceByCorrelationKey(correlationKey); assertNull(processInstance); } @Test public void testCreateCorrelationMultiValueDoesMatch() throws Exception { DefaultCacheManager cm = (DefaultCacheManager) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); Cache<String, Object> cache = cm.getCache("jbpm-configured-cache"); CorrelationKeyFactory factory = KieInternalServices.Factory.get().newCorrelationKeyFactory(); List<String> props = new ArrayList<String>(); props.add("test123"); props.add("123test"); CorrelationKeyInfo correlationKey = (CorrelationKeyInfo) factory.newCorrelationKey(props); Long processInstance = new InfinispanProcessPersistenceContext(cache).getProcessInstanceByCorrelationKey(correlationKey); assertNotNull(processInstance); assertEquals(correlationKey.getProcessInstanceId(), processInstance.longValue()); } }