summaryrefslogtreecommitdiffstats
path: root/feature-session-persistence/src/test/java
diff options
context:
space:
mode:
authorjhh <jorge.hernandez-herrero@att.com>2022-03-01 14:49:08 -0600
committerjhh <jorge.hernandez-herrero@att.com>2022-03-01 14:49:08 -0600
commit3cc07c90f703ef24ff04c112172ecf69d5b644f9 (patch)
tree8bcadacc14d99d0bf997396c74cdcf7c62fe2ed6 /feature-session-persistence/src/test/java
parent4a9a11e170ebcc47ef20f7055184ce66f7994415 (diff)
Remove features-session-persistence and eelf
These are unused. Issue-ID: POLICY-3922 Signed-off-by: jhh <jorge.hernandez-herrero@att.com> Change-Id: I9ef6af27d4d5ed5667a60db841a82b4d492f79f4
Diffstat (limited to 'feature-session-persistence/src/test/java')
-rw-r--r--feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/DroolsSessionEntityTest.java179
-rw-r--r--feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/EntityMgrTransTest.java562
-rw-r--r--feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/GenSchema.java59
-rw-r--r--feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/JpaDroolsSessionConnectorTest.java197
-rw-r--r--feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/PersistenceFeatureTest.java1392
5 files changed, 0 insertions, 2389 deletions
diff --git a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/DroolsSessionEntityTest.java b/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/DroolsSessionEntityTest.java
deleted file mode 100644
index bd979162..00000000
--- a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/DroolsSessionEntityTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * feature-session-persistence
- * ================================================================================
- * Copyright (C) 2017-2018, 2020-2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.persistence;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-import java.util.Date;
-import org.junit.Test;
-
-public class DroolsSessionEntityTest {
-
- @Test
- public void testHashCode() {
- DroolsSessionEntity entity = makeEnt("mynameA", 1);
-
- DroolsSessionEntity e2 = makeEnt("mynameA", 2);
-
- // session id is not part of hash code
- assertEquals(entity.hashCode(), e2.hashCode());
-
- // diff sess name
- e2 = makeEnt("mynameB", 1);
- assertNotEquals(entity.hashCode(), e2.hashCode());
- }
-
- /** Ensures that hashCode() functions as expected when the getXxx methods are overridden. */
- @Test
- public void testHashCode_Subclass() {
- DroolsSessionEntity entity = makeEnt2("mynameA", 1);
-
- DroolsSessionEntity e2 = makeEnt("mynameA", 2);
-
- // session id is not part of hash code
- assertEquals(entity.hashCode(), e2.hashCode());
-
- // diff sess name
- e2 = makeEnt("mynameB", 1);
- assertNotEquals(entity.hashCode(), e2.hashCode());
- }
-
- @Test
- public void testGetSessionName_testSetSessionName() {
- DroolsSessionEntity entity = makeEnt("mynameZ", 1);
-
- assertEquals("mynameZ", entity.getSessionName());
-
- entity.setSessionName("another");
- assertEquals("another", entity.getSessionName());
-
- // others unchanged
- assertEquals(1, entity.getSessionId());
- }
-
- @Test
- public void testGetSessionId_testSetSessionId() {
- DroolsSessionEntity entity = makeEnt("mynameA", 1);
-
- assertEquals(1, entity.getSessionId());
-
- entity.setSessionId(20);
- assertEquals(20, entity.getSessionId());
-
- // others unchanged
- assertEquals("mynameA", entity.getSessionName());
- }
-
- @Test
- public void testGetCreatedDate_testSetCreatedDate_testGetUpdatedDate_testSetUpdatedDate() {
- DroolsSessionEntity entity = new DroolsSessionEntity();
-
- Date crtdt = new Date(System.currentTimeMillis() - 100);
- entity.setCreatedDate(crtdt);
-
- Date updt = new Date(System.currentTimeMillis() - 200);
- entity.setUpdatedDate(updt);
-
- assertEquals(crtdt, entity.getCreatedDate());
- assertEquals(updt, entity.getUpdatedDate());
- }
-
- @Test
- public void testEqualsObject() {
- DroolsSessionEntity entity = makeEnt("mynameA", 1);
-
- // diff object type
- assertNotEquals(entity, "hello");
-
- // reflexive
- assertEquals(entity, entity);
-
- DroolsSessionEntity e2 = makeEnt("mynameA", 2);
-
- // session id is not part of hash code
- assertEquals(entity, e2);
- assertEquals(entity, e2);
-
- // diff sess name
- e2 = makeEnt("mynameB", 1);
- assertNotEquals(entity, e2);
- assertNotEquals(entity, e2);
- }
-
- /** Ensures that equals() functions as expected when the getXxx methods are overridden. */
- @Test
- public void testEqualsObject_Subclass() {
- DroolsSessionEntity entity = makeEnt2("mynameA", 1);
-
- // reflexive
- assertEquals(entity, entity);
-
- DroolsSessionEntity e2 = makeEnt("mynameA", 2);
-
- // session id is not part of hash code
- assertEquals(entity, e2);
- assertEquals(entity, e2);
-
- // diff sess name
- e2 = makeEnt("mynameB", 1);
- assertNotEquals(entity, e2);
- assertNotEquals(entity, e2);
- }
-
- @Test
- public void testToString() {
- DroolsSessionEntity entity = makeEnt("mynameA", 23);
-
- assertEquals("{name=mynameA, id=23}", entity.toString());
- }
-
- /**
- * Makes a session Entity. The parameters are stored into the Entity object via the setXxx
- * methods.
- *
- * @param sessnm session name
- * @param sessid session id
- * @return a new session Entity
- */
- private DroolsSessionEntity makeEnt(String sessnm, long sessid) {
-
- DroolsSessionEntity entity = new DroolsSessionEntity();
-
- entity.setSessionName(sessnm);
- entity.setSessionId(sessid);
-
- return entity;
- }
-
- /**
- * Makes a session Entity that overrides the getXxx methods. The parameters that are provided are
- * returned by the overridden methods, but they are <i>not</i> stored into the Entity object via
- * the setXxx methods.
- *
- * @param sessnm session name
- * @param sessid session id
- * @return a new session Entity
- */
- private DroolsSessionEntity makeEnt2(String sessnm, long sessid) {
- return new DroolsSessionEntity(sessnm, sessid);
- }
-}
diff --git a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/EntityMgrTransTest.java b/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/EntityMgrTransTest.java
deleted file mode 100644
index fb0d1102..00000000
--- a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/EntityMgrTransTest.java
+++ /dev/null
@@ -1,562 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * feature-session-persistence
- * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.persistence;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.UserTransaction;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onap.policy.drools.persistence.EntityMgrTrans.EntityMgrException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class EntityMgrTransTest {
-
- private static final Logger logger = LoggerFactory.getLogger(PersistenceFeatureTest.class);
-
- private static UserTransaction savetrans;
-
- private UserTransaction trans;
- private EntityManager mgr;
-
- /**
- * Configure properties for JTA.
- */
- @BeforeClass
- public static void setUpBeforeClass() {
- System.setProperty("com.arjuna.ats.arjuna.objectstore.objectStoreDir", "target/tm");
- System.setProperty("ObjectStoreEnvironmentBean.objectStoreDir", "target/tm");
-
- savetrans = EntityMgrTrans.getUserTrans();
- }
-
- @AfterClass
- public static void tearDownAfterClass() {
- EntityMgrTrans.setUserTrans(savetrans);
- }
-
- /**
- * Creates a mock transaction and entity manager. Resets the "userTrans" field of the
- * class under test.
- *
- * @throws Exception if an error occurs
- */
- @Before
- public void setUp() throws Exception {
- trans = mock(UserTransaction.class);
- mgr = mock(EntityManager.class);
-
- when(trans.getStatus()).thenReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE);
-
- EntityMgrTrans.setUserTrans(trans);
- }
-
- /**
- * Verifies that the constructor starts a transaction, but does not do anything extra
- * before being closed.
- *
- * @throws Exception if an error occurs
- */
- @Test
- public void testEntityMgrTrans_Inactive() throws Exception {
- final EntityMgrTrans emt = new EntityMgrTrans(mgr);
-
- // verify that transaction was started
- verify(trans).begin();
- verify(mgr).joinTransaction();
-
- // verify not closed, committed, or rolled back yet
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr, never()).close();
-
- emt.close();
- }
-
- /**
- * Verifies that the constructor does not start a transaction, because one is already
- * active.
- *
- * @throws Exception if an error occurs
- */
- @Test
- public void testEntityMgrTrans_Active() throws Exception {
-
- when(trans.getStatus()).thenReturn(Status.STATUS_ACTIVE);
-
- final EntityMgrTrans emt = new EntityMgrTrans(mgr);
-
- // verify that transaction was not re-started started
- verify(trans, never()).begin();
-
- // verify that transaction was joined
- verify(mgr).joinTransaction();
-
- // verify not closed, committed, or rolled back yet
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr, never()).close();
-
- emt.close();
- }
-
- @Test(expected = EntityMgrException.class)
- public void testEntityMgrTrans_RtEx() throws Exception {
-
- doThrow(new IllegalArgumentException("expected exception")).when(trans).begin();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- // Empty
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testEntityMgrTrans_NotSuppEx() throws Exception {
-
- doThrow(new NotSupportedException("expected exception")).when(trans).begin();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- // Empty
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testEntityMgrTrans_SysEx() throws Exception {
-
- doThrow(new SystemException("expected exception")).when(trans).begin();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- // Empty
- }
- }
-
- /**
- * Verifies that the transaction is not rolled back, but the manager is closed when a
- * transaction is already active.
- */
- @Test
- public void testClose_Active() throws Exception {
- when(trans.getStatus()).thenReturn(Status.STATUS_ACTIVE);
-
- EntityMgrTrans emt = new EntityMgrTrans(mgr);
- emt.close();
-
- // closed and rolled back, but not committed
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr).close();
- }
-
- /**
- * Verifies that the transaction is rolled back and the manager is closed when a
- * transaction is begun by the constructor.
- */
- @Test
- public void testClose_Begun() throws Exception {
- EntityMgrTrans emt = new EntityMgrTrans(mgr);
-
- emt.close();
-
- // closed and rolled back, but not committed
- verify(trans, never()).commit();
- verify(trans).rollback();
- verify(mgr).close();
- }
-
- /**
- * Verifies that the manager is closed, but that the transaction is <i>not</i> rolled
- * back when no transaction is active.
- */
- @Test
- public void testClose_Inactive() throws Exception {
- when(trans.getStatus()).thenReturn(Status.STATUS_NO_TRANSACTION);
-
- EntityMgrTrans emt = new EntityMgrTrans(mgr);
-
- emt.close();
-
- // closed, but not committed or rolled back
- verify(mgr).close();
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- }
-
- @Test(expected = EntityMgrException.class)
- public void testClose_IllStateEx() throws Exception {
-
- doThrow(new IllegalStateException("expected exception")).when(trans).rollback();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- // Empty
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testClose_SecEx() throws Exception {
-
- doThrow(new SecurityException("expected exception")).when(trans).rollback();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- // Empty
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testClose_SysEx() throws Exception {
-
- doThrow(new SystemException("expected exception")).when(trans).rollback();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- // Empty
- }
- }
-
- /**
- * Verifies that the manager is closed and the transaction rolled back when "try"
- * block exits normally and a transaction is active.
- */
- @Test
- public void testClose_TryWithoutExcept_Active() throws Exception {
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- // Empty
- }
-
- // closed and rolled back, but not committed
- verify(trans, never()).commit();
- verify(trans).rollback();
- verify(mgr).close();
- }
-
- /**
- * Verifies that the manager is closed, but that the transaction is <i>not</i> rolled
- * back when "try" block exits normally and no transaction is active.
- */
- @Test
- public void testClose_TryWithoutExcept_Inactive() throws Exception {
-
- when(trans.getStatus()).thenReturn(Status.STATUS_NO_TRANSACTION);
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- // Empty
- }
-
- // closed, but not rolled back or committed
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr).close();
- }
-
- /**
- * Verifies that the manager is closed and the transaction rolled back when "try"
- * block throws an exception and a transaction is active.
- */
- @Test
- public void testClose_TryWithExcept_Active() throws Exception {
- try {
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- throw new SystemException("expected exception");
- }
-
- } catch (Exception e) {
- logger.trace("expected exception", e);
- }
-
- // closed and rolled back, but not committed
- verify(trans, never()).commit();
- verify(trans).rollback();
- verify(mgr).close();
- }
-
- /**
- * Verifies that the manager is closed, but that the transaction is <i>not</i> rolled
- * back when "try" block throws an exception and no transaction is active.
- */
- @Test
- public void testClose_TryWithExcept_Inactive() throws Exception {
-
- when(trans.getStatus()).thenReturn(Status.STATUS_NO_TRANSACTION);
-
- try {
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- throw new SystemException("expected exception");
- }
-
- } catch (Exception e) {
- logger.trace("expected exception", e);
- }
-
- // closed, but not rolled back or committed
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr).close();
- }
-
- /**
- * Verifies that commit() only commits, and that the subsequent close() does not
- * re-commit.
- */
- @Test
- public void testCommit() throws Exception {
- EntityMgrTrans emt = new EntityMgrTrans(mgr);
-
- emt.commit();
-
- when(trans.getStatus()).thenReturn(Status.STATUS_COMMITTED);
-
- // committed, but not closed or rolled back
- verify(trans).commit();
- verify(trans, never()).rollback();
- verify(mgr, never()).close();
-
- // closed, but not re-committed
- emt.close();
-
- verify(trans, times(1)).commit();
- verify(mgr).close();
- }
-
- /**
- * Verifies that commit() does nothing, and that the subsequent close() does not
- * re-commit when a transaction is already active.
- */
- @Test
- public void testCommit_Active() throws Exception {
- when(trans.getStatus()).thenReturn(Status.STATUS_ACTIVE);
-
- EntityMgrTrans emt = new EntityMgrTrans(mgr);
-
- emt.commit();
-
- // nothing happened yet
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr, never()).close();
-
- // closed, but not re-committed
- emt.close();
-
- // still no commit or rollback
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr).close();
- }
-
- @Test(expected = EntityMgrException.class)
- public void testCommit_SecEx() throws Exception {
-
- doThrow(new SecurityException("expected exception")).when(trans).commit();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.commit();
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testCommit_IllStateEx() throws Exception {
-
- doThrow(new IllegalStateException("expected exception")).when(trans).commit();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.commit();
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testCommit_RbEx() throws Exception {
-
- doThrow(new RollbackException("expected exception")).when(trans).commit();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.commit();
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testCommit_HmEx() throws Exception {
-
- doThrow(new HeuristicMixedException("expected exception")).when(trans).commit();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.commit();
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testCommit_HrbEx() throws Exception {
-
- doThrow(new HeuristicRollbackException("expected exception")).when(trans).commit();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.commit();
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testCommit_SysEx() throws Exception {
-
- doThrow(new SystemException("expected exception")).when(trans).commit();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.commit();
- }
- }
-
- /**
- * Verifies that rollback() only rolls back, and that the subsequent close() does not
- * re-roll back.
- */
- @Test
- public void testRollback() throws Exception {
- EntityMgrTrans emt = new EntityMgrTrans(mgr);
-
- emt.rollback();
-
- when(trans.getStatus()).thenReturn(Status.STATUS_ROLLEDBACK);
-
- // rolled back, but not closed or committed
- verify(trans, never()).commit();
- verify(trans).rollback();
- verify(mgr, never()).close();
-
- // closed, but not re-rolled back
- emt.close();
-
- // still no commit or rollback
- verify(trans, never()).commit();
- verify(trans).rollback();
- verify(mgr).close();
- }
-
- /**
- * Verifies that rollback() does nothing, and that the subsequent close() does not
- * re-roll back when a transaction is already active.
- */
- @Test
- public void testRollback_Active() throws Exception {
- when(trans.getStatus()).thenReturn(Status.STATUS_ACTIVE);
- EntityMgrTrans emt = new EntityMgrTrans(mgr);
-
- emt.rollback();
-
- // nothing happens
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr, never()).close();
-
- emt.close();
-
- // still no commit or rollback
- verify(trans, never()).commit();
- verify(trans, never()).rollback();
- verify(mgr).close();
- }
-
- @Test(expected = EntityMgrException.class)
- public void testRollback_IllStateEx() throws Exception {
-
- doThrow(new IllegalStateException("expected exception")).when(trans).rollback();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.rollback();
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testRollback_SecEx() throws Exception {
-
- doThrow(new SecurityException("expected exception")).when(trans).rollback();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.rollback();
- }
- }
-
- @Test(expected = EntityMgrException.class)
- public void testRollback_SysEx() throws Exception {
-
- doThrow(new SystemException("expected exception")).when(trans).rollback();
-
- try (EntityMgrTrans emt = new EntityMgrTrans(mgr)) {
- emt.rollback();
- }
- }
-
- @Test
- public void testEntityMgrException() {
- SecurityException secex = new SecurityException("expected exception");
- EntityMgrException ex = new EntityMgrException(secex);
-
- assertEquals(secex, ex.getCause());
-
- }
-
- /**
- * Tests using real (i.e., not mocked) Persistence classes.
- */
- @Test
- public void testReal() {
- EntityMgrTrans.setUserTrans(savetrans);
-
- Map<String, Object> propMap = new HashMap<>();
-
- propMap.put("javax.persistence.jdbc.driver", "org.h2.Driver");
- propMap.put("javax.persistence.jdbc.url", "jdbc:h2:mem:EntityMgrTransTest");
-
- EntityManagerFactory emf = Persistence.createEntityManagerFactory("junitDroolsSessionEntityPU", propMap);
-
- try (EntityMgrTrans trans1 = new EntityMgrTrans(emf.createEntityManager())) {
-
- // nest a transaction - should still be OK
-
- try (EntityMgrTrans trans2 = new EntityMgrTrans(emf.createEntityManager())) {
- // Empty
- }
-
- } catch (Exception e) {
- logger.info("persistence error", e);
- emf.close();
- fail("persistence error");
- }
-
- emf.close();
- }
-}
diff --git a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/GenSchema.java b/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/GenSchema.java
deleted file mode 100644
index 31fcfa84..00000000
--- a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/GenSchema.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * feature-session-persistence
- * ================================================================================
- * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.persistence;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.Persistence;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/** Generates the schema DDL files. */
-public class GenSchema {
-
- private static final Logger logger = LoggerFactory.getLogger(PersistenceFeatureTest.class);
-
- /**
- * Opens the EMF, which generates the schema, as a side-effect.
- *
- * @throws Exception exception
- */
- private GenSchema() throws Exception {
- Map<String, Object> propMap = new HashMap<>();
-
- propMap.put("javax.persistence.jdbc.driver", "org.h2.Driver");
- propMap.put("javax.persistence.jdbc.url", "jdbc:h2:mem:JpaDroolsSessionConnectorTest");
-
- Persistence.createEntityManagerFactory("schemaDroolsPU", propMap).close();
- }
-
- /**
- * This is is provided as a utility for producing a basic ddl schema file in the sql directory.
- */
- public static void main(String[] args) {
- try {
- new GenSchema();
-
- } catch (Exception e) {
- logger.error("failed to generate schema", e);
- }
- }
-}
diff --git a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/JpaDroolsSessionConnectorTest.java b/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/JpaDroolsSessionConnectorTest.java
deleted file mode 100644
index c1fe08a1..00000000
--- a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/JpaDroolsSessionConnectorTest.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * feature-session-persistence
- * ================================================================================
- * Copyright (C) 2017-2018, 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.persistence;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class JpaDroolsSessionConnectorTest {
-
- private EntityManagerFactory emf;
- private JpaDroolsSessionConnector conn;
-
- @BeforeClass
- public static void setUpBeforeClass() {
- System.setProperty("com.arjuna.ats.arjuna.objectstore.objectStoreDir", "target/tm");
- System.setProperty("ObjectStoreEnvironmentBean.objectStoreDir", "target/tm");
- }
-
- /**
- * Setup.
- *
- * @throws Exception exception
- */
- @Before
- public void setUp() throws Exception {
- Map<String, Object> propMap = new HashMap<>();
-
- propMap.put("javax.persistence.jdbc.driver", "org.h2.Driver");
- propMap.put("javax.persistence.jdbc.url", "jdbc:h2:mem:JpaDroolsSessionConnectorTest");
-
- emf = Persistence.createEntityManagerFactory("junitDroolsSessionEntityPU", propMap);
-
- conn = new JpaDroolsSessionConnector(emf);
- }
-
- @After
- public void tearDown() {
- // this will cause the memory db to be dropped
- emf.close();
- }
-
- @Test
- public void testGet() {
- /*
- * Load up the DB with some data.
- */
-
- addSession("nameA", 10);
- addSession("nameY", 20);
-
- /*
- * Now test the functionality.
- */
-
- // not found
- assertNull(conn.get("unknown"));
-
- assertEquals("{name=nameA, id=10}", conn.get("nameA").toString());
-
- assertEquals("{name=nameY, id=20}", conn.get("nameY").toString());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testGet_NewEx() {
- EntityManagerFactory emf = mock(EntityManagerFactory.class);
- EntityManager em = mock(EntityManager.class);
-
- when(emf.createEntityManager()).thenReturn(em);
- when(em.find(any(), any())).thenThrow(new IllegalArgumentException("expected exception"));
-
- conn = new JpaDroolsSessionConnector(emf);
- conn.get("xyz");
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testGet_FindEx() {
- EntityManagerFactory emf = mock(EntityManagerFactory.class);
- EntityManager em = mock(EntityManager.class);
- EntityTransaction tr = mock(EntityTransaction.class);
-
- when(emf.createEntityManager()).thenReturn(em);
- when(em.getTransaction()).thenReturn(tr);
- when(em.find(any(), any())).thenThrow(new IllegalArgumentException("expected exception"));
-
- new JpaDroolsSessionConnector(emf).get("xyz");
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testGet_FindEx_CloseEx() {
- EntityManagerFactory emf = mock(EntityManagerFactory.class);
- EntityManager em = mock(EntityManager.class);
- EntityTransaction tr = mock(EntityTransaction.class);
-
- when(emf.createEntityManager()).thenReturn(em);
- when(em.getTransaction()).thenReturn(tr);
- when(em.find(any(), any())).thenThrow(new IllegalArgumentException("expected exception"));
- doThrow(new IllegalArgumentException("expected exception #2")).when(em).close();
-
- new JpaDroolsSessionConnector(emf).get("xyz");
- }
-
- @Test
- public void testReplace_Existing() {
- addSession("nameA", 10);
-
- DroolsSessionEntity sess = new DroolsSessionEntity("nameA", 30);
-
- conn.replace(sess);
-
- // id should be changed
- assertEquals(sess.toString(), conn.get("nameA").toString());
- }
-
- @Test
- public void testReplace_New() {
- DroolsSessionEntity sess = new DroolsSessionEntity("nameA", 30);
-
- conn.replace(sess);
-
- assertEquals(sess.toString(), conn.get("nameA").toString());
- }
-
- @Test
- public void testAdd() {
- DroolsSessionEntity sess = new DroolsSessionEntity("nameA", 30);
-
- conn.replace(sess);
-
- assertEquals(sess.toString(), conn.get("nameA").toString());
- }
-
- @Test
- public void testUpdate() {
- addSession("nameA", 10);
-
- DroolsSessionEntity sess = new DroolsSessionEntity("nameA", 30);
-
- conn.replace(sess);
-
- // id should be changed
- assertEquals("{name=nameA, id=30}", conn.get("nameA").toString());
- }
-
- /**
- * Adds a session to the DB.
- *
- * @param sessnm session name
- * @param sessid session id
- */
- private void addSession(String sessnm, int sessid) {
- EntityManager em = emf.createEntityManager();
-
- try (EntityMgrTrans trans = new EntityMgrTrans(em)) {
- DroolsSessionEntity ent = new DroolsSessionEntity();
-
- ent.setSessionName(sessnm);
- ent.setSessionId(sessid);
-
- em.persist(ent);
-
- trans.commit();
- }
- }
-}
diff --git a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/PersistenceFeatureTest.java b/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/PersistenceFeatureTest.java
deleted file mode 100644
index 4450b8c8..00000000
--- a/feature-session-persistence/src/test/java/org/onap/policy/drools/persistence/PersistenceFeatureTest.java
+++ /dev/null
@@ -1,1392 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * feature-session-persistence
- * ================================================================================
- * Copyright (C) 2017-2018, 2020-2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.persistence;
-
-import static org.assertj.core.api.Assertions.assertThatCode;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionSynchronizationRegistry;
-import javax.transaction.UserTransaction;
-import org.apache.commons.dbcp2.BasicDataSource;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.kie.api.KieBase;
-import org.kie.api.KieServices;
-import org.kie.api.persistence.jpa.KieStoreServices;
-import org.kie.api.runtime.Environment;
-import org.kie.api.runtime.EnvironmentName;
-import org.kie.api.runtime.KieContainer;
-import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.KieSessionConfiguration;
-import org.mockito.ArgumentCaptor;
-import org.onap.policy.drools.core.PolicyContainer;
-import org.onap.policy.drools.core.PolicySession;
-import org.onap.policy.drools.core.PolicySession.ThreadModel;
-import org.onap.policy.drools.persistence.PersistenceFeature.PersistenceFeatureException;
-import org.onap.policy.drools.persistence.PersistenceFeature.PersistentThreadModel;
-import org.onap.policy.drools.system.PolicyController;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PersistenceFeatureTest {
-
- private static final String MY_KIE_BASE = "mybase";
-
- private static final String MY_SESS_NAME = "myname";
-
- private static final String MISSING_EXCEPTION = "missing exception";
-
- private static final String EXPECTED = "expected exception";
-
- private static final Logger logger = LoggerFactory.getLogger(PersistenceFeatureTest.class);
-
- private static final String JDBC_DRIVER = "fake.driver";
- private static final String JDBC_URL = "fake.url";
- private static final String JDBC_USER = "fake.user";
- private static final String JDBC_PASSWD = "fake.password";
- private static final String JTA_OSDIR = "target";
- private static final String SRC_TEST_RESOURCES = "src/test/resources";
-
- private static Properties stdprops;
-
- private JpaDroolsSessionConnector jpa;
- private DroolsSession sess;
- private KieSession kiesess;
- private BasicDataSource bds;
- private EntityManagerFactory emf;
- private Connection conn;
- private Properties props;
- private KieServices kiesvc;
- private Environment kieenv;
- private KieSessionConfiguration kiecfg;
- private KieBase kiebase;
- private KieStoreServices kiestore;
- private TransactionManager transmgr;
- private UserTransaction usertrans;
- private TransactionSynchronizationRegistry transreg;
- private PolicyController polctlr;
- private PolicyContainer polcont;
- private PolicySession polsess;
- private int emfCount;
- private int jpaCount;
- private String propName;
-
- private PersistenceFeature feat;
-
- /**
- * Setup before class.
- *
- * @throws Exception exception
- */
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- stdprops = new Properties();
-
- stdprops.put(DroolsPersistenceProperties.DB_DRIVER, JDBC_DRIVER);
- stdprops.put(DroolsPersistenceProperties.DB_URL, JDBC_URL);
- stdprops.put(DroolsPersistenceProperties.DB_USER, JDBC_USER);
- stdprops.put(DroolsPersistenceProperties.DB_PWD, JDBC_PASSWD);
- stdprops.put(DroolsPersistenceProperties.JTA_OBJECTSTORE_DIR, JTA_OSDIR);
- stdprops.put(DroolsPersistenceProperties.DB_SESSIONINFO_TIMEOUT, "50");
-
- System.setProperty("com.arjuna.ats.arjuna.objectstore.objectStoreDir", "target/tm");
- System.setProperty("ObjectStoreEnvironmentBean.objectStoreDir", "target/tm");
- }
-
- /**
- * Setup.
- *
- * @throws Exception exception
- */
- @Before
- public void setUp() throws Exception {
- jpa = mock(JpaDroolsSessionConnector.class);
- sess = mock(DroolsSession.class);
- bds = mock(BasicDataSource.class);
- emf = mock(EntityManagerFactory.class);
- kiesess = mock(KieSession.class);
- conn = null;
- props = new Properties();
- kiesvc = mock(KieServices.class);
- kieenv = mock(Environment.class);
- kiecfg = mock(KieSessionConfiguration.class);
- kiebase = mock(KieBase.class);
- kiestore = mock(KieStoreServices.class);
- transmgr = mock(TransactionManager.class);
- usertrans = mock(UserTransaction.class);
- transreg = mock(TransactionSynchronizationRegistry.class);
- polcont = mock(PolicyContainer.class);
- polctlr = mock(PolicyController.class);
- polsess = mock(PolicySession.class);
- emfCount = 0;
- jpaCount = 0;
- propName = null;
-
- feat = new PersistenceFeatureImpl();
-
- props.putAll(stdprops);
-
- System.setProperty("com.arjuna.ats.arjuna.objectstore.objectStoreDir", "target/tm");
- System.setProperty("ObjectStoreEnvironmentBean.objectStoreDir", "target/tm");
-
- when(kiesvc.newEnvironment()).thenReturn(kieenv);
- when(kiesvc.getStoreServices()).thenReturn(kiestore);
- when(kiesvc.newKieSessionConfiguration()).thenReturn(kiecfg);
-
- KieContainer kiecont = mock(KieContainer.class);
- when(polcont.getKieContainer()).thenReturn(kiecont);
-
- when(polsess.getContainer()).thenReturn(polcont);
-
- when(kiecont.getKieBase(anyString())).thenReturn(kiebase);
- }
-
- /**
- * Tear down.
- */
- @After
- public void tearDown() {
- // this will cause the in-memory test DB to be dropped
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException e) {
- logger.warn("failed to close connection", e);
- }
- }
-
- if (emf != null) {
- try {
- emf.close();
- } catch (IllegalArgumentException e) {
- logger.trace("ignored exception", e);
- }
- }
- }
-
- @Test
- public void testGetContainerAdjunct_New() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- // force getContainerAdjunct() to be invoked
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont, times(1)).setAdjunct(any(), adjcap.capture());
-
- assertNotNull(adjcap.getValue());
- }
-
- @Test
- public void testGetContainerAdjunct_Existing() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- // force getContainerAdjunct() to be invoked
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont, times(1)).setAdjunct(any(), adjcap.capture());
-
- // return adjunct on next call
- when(polcont.getAdjunct(any())).thenReturn(adjcap.getValue());
-
- // force getContainerAdjunct() to be invoked again
- setUpKie("myname2", 999L, true);
- mockDbConn(5);
- feat.activatePolicySession(polcont, "myname2", MY_KIE_BASE);
-
- // ensure it isn't invoked again
- verify(polcont, times(1)).setAdjunct(any(), any());
- }
-
- @Test
- public void testGetContainerAdjunct_WrongType() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- // return false adjunct on next call
- when(polcont.getAdjunct(any())).thenReturn("not-a-real-adjunct");
-
- // force getContainerAdjunct() to be invoked
- setUpKie("myname2", 999L, true);
- mockDbConn(5);
- feat.activatePolicySession(polcont, "myname2", MY_KIE_BASE);
-
- ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont, times(1)).setAdjunct(any(), adjcap.capture());
-
- assertNotNull(adjcap.getValue());
- }
-
- @Test
- public void testGetSequenceNumber() {
- assertEquals(1, feat.getSequenceNumber());
- }
-
- @Test
- public void testGlobalInit() throws Exception {
-
- feat.globalInit(null, SRC_TEST_RESOURCES);
-
- // verify that various factory methods were invoked
- assertEquals("src/test/resources/feature-session-persistence.properties", propName);
- }
-
- @Test(expected = NullPointerException.class)
- public void testGlobalInitIoEx() throws Exception {
-
- feat = new PersistenceFeatureImpl() {
- @Override
- protected Properties loadProperties(String filenm) throws IOException {
- throw new IOException(EXPECTED);
- }
- };
-
- feat.globalInit(null, SRC_TEST_RESOURCES);
- }
-
- @Test
- public void testActivatePolicySession() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement ps = mockDbConn(5);
-
- feat.beforeActivate(null);
-
- KieSession session = feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(kiestore).loadKieSession(anyLong(), any(), any(), any());
- verify(kiestore, never()).newKieSession(any(), any(), any());
-
- assertEquals(session, kiesess);
-
- verify(ps).executeUpdate();
-
- verify(kieenv, times(4)).set(anyString(), any());
-
- verify(jpa).get(MY_SESS_NAME);
- verify(jpa).replace(any());
- }
-
- @Test
- public void testActivatePolicySession_NoPersistence() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement ps = mockDbConn(5);
-
- props.remove("persistence.type");
-
- feat.beforeStart(null);
-
- assertNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
-
- verify(ps, never()).executeUpdate();
- verify(kiestore, never()).loadKieSession(anyLong(), any(), any(), any());
- verify(kiestore, never()).newKieSession(any(), any(), any());
- }
-
- /** Verifies that a new KIE session is created when there is no existing session entity. */
- @Test
- public void testActivatePolicySession_New() throws Exception {
- setUpKie("noName", 999L, true);
- mockDbConn(5);
-
- KieSession session = feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(kiestore, never()).loadKieSession(anyLong(), any(), any(), any());
- verify(kiestore).newKieSession(any(), any(), any());
-
- assertEquals(session, kiesess);
-
- verify(kieenv, times(4)).set(anyString(), any());
-
- verify(jpa).get(MY_SESS_NAME);
- verify(jpa).replace(any());
- }
-
- /**
- * Verifies that a new KIE session is created when there KIE fails to load an existing session.
- */
- @Test
- public void testActivatePolicySession_LoadFailed() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- KieSession session = feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(kiestore).loadKieSession(anyLong(), any(), any(), any());
- verify(kiestore).newKieSession(any(), any(), any());
-
- assertEquals(session, kiesess);
-
- verify(kieenv, times(4)).set(anyString(), any());
-
- verify(jpa).get(MY_SESS_NAME);
-
- ArgumentCaptor<DroolsSession> drools = ArgumentCaptor.forClass(DroolsSession.class);
- verify(jpa).replace(drools.capture());
-
- assertEquals(MY_SESS_NAME, drools.getValue().getSessionName());
- assertEquals(100L, drools.getValue().getSessionId());
- }
-
- @Test
- public void testLoadDataSource() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- assertEquals(1, emfCount);
- }
-
- @Test
- public void testConfigureSysProps() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- assertEquals("60", System.getProperty("com.arjuna.ats.arjuna.coordinator.defaultTimeout"));
- assertEquals(JTA_OSDIR, System.getProperty("com.arjuna.ats.arjuna.objectstore.objectStoreDir"));
- assertEquals(JTA_OSDIR, System.getProperty("ObjectStoreEnvironmentBean.objectStoreDir"));
- }
-
- @Test
- public void testConfigureKieEnv() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(kieenv, times(4)).set(any(), any());
-
- verify(kieenv).set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
- verify(kieenv).set(EnvironmentName.TRANSACTION, usertrans);
- verify(kieenv).set(EnvironmentName.TRANSACTION_MANAGER, transmgr);
- verify(kieenv).set(EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY, transreg);
-
- verify(bds, times(1)).close();
- }
-
- @Test
- public void testConfigureKieEnv_RtEx() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat = new PersistenceFeatureMockDb() {
- @Override
- protected UserTransaction getUserTrans() {
- throw new IllegalArgumentException(EXPECTED);
- }
- };
-
- feat.globalInit(null, SRC_TEST_RESOURCES);
-
- try {
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- fail(MISSING_EXCEPTION);
-
- } catch (IllegalArgumentException ex) {
- logger.trace(EXPECTED, ex);
- }
-
- verify(bds, times(2)).close();
- }
-
- @Test
- public void testLoadKieSession() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- KieSession session = feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(kiestore).loadKieSession(999L, kiebase, kiecfg, kieenv);
- verify(kiestore, never()).newKieSession(any(), any(), any());
-
- assertEquals(session, kiesess);
- }
-
- /*
- * Verifies that loadKieSession() returns null (thus causing newKieSession()
- * to be called) when an Exception occurs.
- */
- @Test
- public void testLoadKieSession_Ex() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- when(kiestore.loadKieSession(anyLong(), any(), any(), any()))
- .thenThrow(new IllegalArgumentException(EXPECTED));
-
- KieSession session = feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(kiestore).loadKieSession(anyLong(), any(), any(), any());
- verify(kiestore).newKieSession(any(), any(), any());
-
- assertEquals(session, kiesess);
- }
-
- @Test
- public void testNewKieSession() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- KieSession session = feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(kiestore).newKieSession(kiebase, null, kieenv);
-
- assertEquals(session, kiesess);
- }
-
- @Test
- public void testLoadDataSource_DiffSession() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont).setAdjunct(any(), adjcap.capture());
-
- when(polcont.getAdjunct(any())).thenReturn(adjcap.getValue());
-
- setUpKie("myname2", 999L, false);
- mockDbConn(5);
-
- // invoke it again
- feat.activatePolicySession(polcont, "myname2", MY_KIE_BASE);
-
- assertEquals(2, emfCount);
- }
-
- @Test
- public void testSelectThreadModel_Persistent() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
-
- ThreadModel model = feat.selectThreadModel(polsess);
- assertNotNull(model);
- assertTrue(model instanceof PersistentThreadModel);
- }
-
- @Test
- public void testSelectThreadModel_NotPersistent() throws Exception {
- assertNull(feat.selectThreadModel(polsess));
- }
-
- @Test
- public void testSelectThreadModel_Start__Run_Update_Stop() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
-
- ThreadModel model = feat.selectThreadModel(polsess);
- assertNotNull(model);
- assertTrue(model instanceof PersistentThreadModel);
-
- when(polsess.getKieSession()).thenReturn(kiesess);
-
- model.start();
- new CountDownLatch(1).await(10, TimeUnit.MILLISECONDS);
- model.updated();
- model.stop();
- }
-
- @Test
- public void testDisposeKieSession() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(emf, never()).close();
-
- final ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont).setAdjunct(any(), adjcap.capture());
-
- when(polcont.getAdjunct(any())).thenReturn(adjcap.getValue());
-
- feat.disposeKieSession(polsess);
-
- // call twice to ensure it isn't re-closed
- feat.disposeKieSession(polsess);
-
- verify(emf, times(1)).close();
- }
-
- @Test
- public void testDisposeKieSession_NoAdjunct() throws Exception {
- feat.globalInit(null, SRC_TEST_RESOURCES);
-
- assertThatCode(() -> feat.disposeKieSession(polsess)).doesNotThrowAnyException();
- }
-
- @Test
- public void testDisposeKieSession_NoPersistence() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(emf, never()).close();
-
- final ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont).setAdjunct(any(), adjcap.capture());
-
- when(polcont.getAdjunct(any())).thenReturn(adjcap.getValue());
-
- // specify a session that was never loaded
- when(polsess.getName()).thenReturn("anotherName");
-
- feat.disposeKieSession(polsess);
-
- verify(emf, never()).close();
- }
-
- @Test
- public void testDestroyKieSession() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(emf, never()).close();
-
- final ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont).setAdjunct(any(), adjcap.capture());
-
- when(polcont.getAdjunct(any())).thenReturn(adjcap.getValue());
-
- feat.destroyKieSession(polsess);
-
- // call twice to ensure it isn't re-closed
- feat.destroyKieSession(polsess);
-
- verify(emf, times(1)).close();
- }
-
- @Test
- public void testDestroyKieSession_NoAdjunct() throws Exception {
- feat.globalInit(null, SRC_TEST_RESOURCES);
-
- assertThatCode(() -> feat.destroyKieSession(polsess)).doesNotThrowAnyException();
- }
-
- @Test
- public void testDestroyKieSession_NoPersistence() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(emf, never()).close();
-
- final ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont).setAdjunct(any(), adjcap.capture());
-
- when(polcont.getAdjunct(any())).thenReturn(adjcap.getValue());
-
- // specify a session that was never loaded
- when(polsess.getName()).thenReturn("anotherName");
-
- feat.destroyKieSession(polsess);
-
- verify(emf, never()).close();
- }
-
- @Test
- public void testAfterStart() {
- assertFalse(feat.afterStart(null));
- }
-
- @Test
- public void testBeforeStart() {
- assertFalse(feat.beforeStart(null));
- }
-
- @Test
- public void testBeforeShutdown() {
- assertFalse(feat.beforeShutdown(null));
- }
-
- @Test
- public void testAfterShutdown() {
- assertFalse(feat.afterShutdown(null));
- }
-
- @Test
- public void testBeforeConfigure() {
- assertFalse(feat.beforeConfigure(null, null));
- }
-
- @Test
- public void testAfterConfigure() {
- assertFalse(feat.afterConfigure(null));
- }
-
- @Test
- public void testBeforeActivate() {
- assertFalse(feat.beforeActivate(null));
- }
-
- @Test
- public void testAfterActivate() {
- assertFalse(feat.afterActivate(null));
- }
-
- @Test
- public void testBeforeDeactivate() {
- assertFalse(feat.beforeDeactivate(null));
- }
-
- @Test
- public void testAfterDeactivate() {
- assertFalse(feat.afterDeactivate(null));
- }
-
- @Test
- public void testBeforeStop() {
- assertFalse(feat.beforeStop(null));
- }
-
- @Test
- public void testAfterStop() {
- assertFalse(feat.afterStop(null));
- }
-
- @Test
- public void testBeforeLock() {
- assertFalse(feat.beforeLock(null));
- }
-
- @Test
- public void testAfterLock() {
- assertFalse(feat.afterLock(null));
- }
-
- @Test
- public void testBeforeUnlock() {
- assertFalse(feat.beforeUnlock(null));
- }
-
- @Test
- public void testAfterUnlock() {
- assertFalse(feat.afterUnlock(null));
- }
-
- @Test
- public void testGetPersistenceTimeout_Valid() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(statement).executeUpdate();
- }
-
- @Test
- public void testGetPersistenceTimeout_Missing() throws Exception {
-
- props.remove(DroolsPersistenceProperties.DB_SESSIONINFO_TIMEOUT);
-
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(0);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(statement, never()).executeUpdate();
- }
-
- @Test
- public void testGetPersistenceTimeout_Invalid() throws Exception {
- props.setProperty(DroolsPersistenceProperties.DB_SESSIONINFO_TIMEOUT, "abc");
-
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement s = mockDbConn(0);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(s, never()).executeUpdate();
- }
-
- @Test
- public void testCleanUpSessionInfo() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
-
- // use a real DB so we can verify that the "delete" works correctly
- feat = new PartialFeature();
-
- makeSessionInfoTbl(20000);
-
- // create mock entity manager for use by JPA connector
- EntityManager em = mock(EntityManager.class);
- when(emf.createEntityManager()).thenReturn(em);
-
- feat.globalInit(null, SRC_TEST_RESOURCES);
-
- feat.beforeStart(null);
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- assertEquals("[1, 4, 5]", getSessions().toString());
- }
-
- @Test
- public void testCleanUpSessionInfo_WithBeforeStart() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(0);
-
- // reset
- feat.beforeStart(null);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- verify(statement, times(1)).executeUpdate();
-
- // should not clean-up again
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- verify(statement, times(1)).executeUpdate();
-
- // reset
- feat.beforeStart(null);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- verify(statement, times(2)).executeUpdate();
-
- // should not clean-up again
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- verify(statement, times(2)).executeUpdate();
- }
-
- @Test
- public void testCleanUpSessionInfo_WithBeforeActivate() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(0);
-
- // reset
- feat.beforeActivate(null);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- verify(statement, times(1)).executeUpdate();
-
- // should not clean-up again
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- verify(statement, times(1)).executeUpdate();
-
- // reset
- feat.beforeActivate(null);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- verify(statement, times(2)).executeUpdate();
-
- // should not clean-up again
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- verify(statement, times(2)).executeUpdate();
- }
-
- @Test
- public void testCleanUpSessionInfo_NoTimeout() throws Exception {
-
- props.remove(DroolsPersistenceProperties.DB_SESSIONINFO_TIMEOUT);
-
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(0);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(statement, never()).executeUpdate();
- }
-
- @Test
- public void testCleanUpSessionInfo_NoUrl() throws Exception {
- props.remove(DroolsPersistenceProperties.DB_URL);
-
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(0);
-
- try {
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- fail(MISSING_EXCEPTION);
- } catch (RuntimeException e) {
- logger.trace(EXPECTED, e);
- }
-
- verify(statement, never()).executeUpdate();
- }
-
- @Test
- public void testCleanUpSessionInfo_NoUser() throws Exception {
- props.remove(DroolsPersistenceProperties.DB_USER);
-
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(0);
-
- try {
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- fail(MISSING_EXCEPTION);
- } catch (RuntimeException e) {
- logger.trace(EXPECTED, e);
- }
-
- verify(statement, never()).executeUpdate();
- }
-
- @Test
- public void testCleanUpSessionInfo_NoPassword() throws Exception {
- props.remove(DroolsPersistenceProperties.DB_PWD);
-
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(0);
-
- try {
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- fail(MISSING_EXCEPTION);
- } catch (RuntimeException e) {
- logger.trace(EXPECTED, e);
- }
-
- verify(statement, never()).executeUpdate();
- }
-
- @Test
- public void testCleanUpSessionInfo_SqlEx() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- final PreparedStatement statement = mockDbConn(-1);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- verify(statement).executeUpdate();
- }
-
- @Test
- public void testGetDroolsSessionConnector() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- assertEquals(1, jpaCount);
- }
-
- @Test
- public void testReplaceSession() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- final ArgumentCaptor<DroolsSession> sesscap = ArgumentCaptor.forClass(DroolsSession.class);
-
- verify(jpa).replace(sesscap.capture());
-
- assertEquals(MY_SESS_NAME, sesscap.getValue().getSessionName());
- assertEquals(999L, sesscap.getValue().getSessionId());
- }
-
- @Test
- public void testIsPersistenceEnabled_Auto() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- props.setProperty("persistence.type", "auto");
-
- assertNotNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testIsPersistenceEnabled_Native() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- props.setProperty("persistence.type", "native");
-
- assertNotNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testIsPersistenceEnabled_None() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- props.remove("persistence.type");
-
- assertNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testGetProperties_Ex() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- feat = new PersistenceFeatureMockDb() {
- @Override
- protected PolicyController getPolicyController(PolicyContainer container) {
- throw new IllegalArgumentException(EXPECTED);
- }
- };
-
- assertNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testGetProperty_Specific() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- props.remove("persistence.type");
- props.setProperty("persistence.myname.type", "auto");
-
- assertNotNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testGetProperty_Specific_None() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- props.remove("persistence.type");
- props.setProperty("persistence.xxx.type", "auto");
-
- assertNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testGetProperty_Both_SpecificOn() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- props.setProperty("persistence.type", "other");
- props.setProperty("persistence.myname.type", "auto");
-
- assertNotNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testGetProperty_Both_SpecificDisabledOff() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- props.setProperty("persistence.type", "auto");
- props.setProperty("persistence.myname.type", "other");
-
- assertNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testGetProperty_None() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, true);
- mockDbConn(5);
-
- props.remove("persistence.type");
-
- assertNull(feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE));
- }
-
- @Test
- public void testPersistenceFeatureException() {
- SecurityException secex = new SecurityException(EXPECTED);
- PersistenceFeatureException ex = new PersistenceFeatureException(secex);
-
- assertEquals(secex, ex.getCause());
- }
-
- @Test
- public void testDsEmf_RtEx() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat = new PersistenceFeatureMockDb() {
- @Override
- protected EntityManagerFactory makeEntMgrFact(Map<String, Object> props) {
- throw new IllegalArgumentException(EXPECTED);
- }
- };
-
- feat.globalInit(null, SRC_TEST_RESOURCES);
-
- try {
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
- fail(MISSING_EXCEPTION);
-
- } catch (IllegalArgumentException ex) {
- logger.trace(EXPECTED, ex);
- }
-
- verify(bds, times(2)).close();
- }
-
- @Test
- public void testDsEmf_Close_RtEx() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont, times(1)).setAdjunct(any(), adjcap.capture());
-
- // return adjunct on next call
- when(polcont.getAdjunct(any())).thenReturn(adjcap.getValue());
-
- IllegalArgumentException exception = new IllegalArgumentException(EXPECTED);
- doThrow(exception).when(emf).close();
- assertThatCode(() -> feat.destroyKieSession(polsess)).isEqualTo(exception);
-
- verify(bds, times(2)).close();
- }
-
- @Test
- public void testDsEmf_CloseDataSource_RtEx() throws Exception {
- setUpKie(MY_SESS_NAME, 999L, false);
- mockDbConn(5);
-
- feat.activatePolicySession(polcont, MY_SESS_NAME, MY_KIE_BASE);
-
- ArgumentCaptor<PersistenceFeature.ContainerAdjunct> adjcap =
- ArgumentCaptor.forClass(PersistenceFeature.ContainerAdjunct.class);
-
- verify(polcont, times(1)).setAdjunct(any(), adjcap.capture());
-
- // return adjunct on next call
- when(polcont.getAdjunct(any())).thenReturn(adjcap.getValue());
-
- SQLException cause = new SQLException(EXPECTED);
- doThrow(cause).when(bds).close();
- assertThatCode(() -> feat.destroyKieSession(polsess)).isInstanceOf(PersistenceFeatureException.class)
- .hasCause(cause);
- }
-
- /**
- * Gets an ordered list of ids of the current SessionInfo records.
- *
- * @return ordered list of SessInfo IDs
- * @throws SQLException sql exception
- * @throws IOException io exception
- */
- private List<Integer> getSessions() throws SQLException, IOException {
- attachDb();
-
- ArrayList<Integer> lst = new ArrayList<>(5);
-
- try (PreparedStatement stmt = conn.prepareStatement("SELECT id from sessioninfo order by id");
- ResultSet rs = stmt.executeQuery()) {
-
- while (rs.next()) {
- lst.add(rs.getInt(1));
- }
- }
-
- return lst;
- }
-
- /**
- * Sets up for doing invoking the newKieSession() method.
- *
- * @param sessnm name to which JPA should respond with a session
- * @param sessid session id to be returned by the session
- * @param loadOk {@code true} if loadKieSession() should return a value, {@code false} to return
- * null
- * @throws Exception exception
- */
- private void setUpKie(String sessnm, long sessid, boolean loadOk) throws Exception {
- props.setProperty("persistence.type", "auto");
-
- when(polctlr.getProperties()).thenReturn(props);
-
- when(jpa.get(sessnm)).thenReturn(sess);
-
- when(sess.getSessionId()).thenReturn(sessid);
-
- when(polsess.getContainer()).thenReturn(polcont);
- when(polsess.getName()).thenReturn(sessnm);
-
- if (loadOk) {
- when(kiesess.getIdentifier()).thenReturn(sessid);
- when(kiestore.loadKieSession(anyLong(), any(), any(), any())).thenReturn(kiesess);
-
- } else {
- // use an alternate id for the new session
- when(kiesess.getIdentifier()).thenReturn(100L);
- when(kiestore.loadKieSession(anyLong(), any(), any(), any())).thenReturn(null);
- }
-
- when(kiestore.newKieSession(any(), any(), any())).thenReturn(kiesess);
-
- feat = new PersistenceFeatureKie();
- feat.globalInit(null, SRC_TEST_RESOURCES);
- }
-
- /**
- * Creates the SessionInfo DB table and populates it with some data.
- *
- * @param expMs number of milli-seconds for expired sessioninfo records
- * @throws SQLException exception
- * @throws IOException exception
- */
- private void makeSessionInfoTbl(int expMs) throws SQLException, IOException {
-
- attachDb();
-
- try (PreparedStatement stmt =
- conn.prepareStatement("CREATE TABLE sessioninfo(id int, lastmodificationdate timestamp)")) {
-
- stmt.executeUpdate();
- }
-
- try (PreparedStatement stmt =
- conn.prepareStatement("INSERT into sessioninfo(id, lastmodificationdate) values(?, ?)")) {
-
- Timestamp ts;
-
- // current data
- ts = new Timestamp(System.currentTimeMillis());
- stmt.setTimestamp(2, ts);
-
- stmt.setInt(1, 1);
- stmt.executeUpdate();
-
- stmt.setInt(1, 4);
- stmt.executeUpdate();
-
- stmt.setInt(1, 5);
- stmt.executeUpdate();
-
- // expired data
- ts = new Timestamp(System.currentTimeMillis() - expMs);
- stmt.setTimestamp(2, ts);
-
- stmt.setInt(1, 2);
- stmt.executeUpdate();
-
- stmt.setInt(1, 3);
- stmt.executeUpdate();
- }
- }
-
- /**
- * Attaches {@link #conn} to the DB, if it isn't already attached.
- *
- * @throws SQLException sql exception
- * @throws IOException if the property file cannot be read
- */
- private void attachDb() throws SQLException, IOException {
- if (conn == null) {
- Properties props = loadDbProps();
-
- conn =
- DriverManager.getConnection(
- props.getProperty(DroolsPersistenceProperties.DB_URL),
- props.getProperty(DroolsPersistenceProperties.DB_USER),
- props.getProperty(DroolsPersistenceProperties.DB_PWD));
- conn.setAutoCommit(true);
- }
- }
-
- /**
- * Loads the DB properties from the file, <i>feature-session-persistence.properties</i>.
- *
- * @return the properties that were loaded
- * @throws IOException if the property file cannot be read
- * @throws FileNotFoundException if the property file does not exist
- */
- private Properties loadDbProps() throws IOException, FileNotFoundException {
-
- Properties props = new Properties();
-
- try (FileReader rdr =
- new FileReader("src/test/resources/feature-session-persistence.properties")) {
- props.load(rdr);
- }
-
- return props;
- }
-
- /**
- * Create a mock DB connection and statement.
- *
- * @param retval value to be returned when the statement is executed, or negative to throw an
- * exception
- * @return the statement that will be returned by the connection
- * @throws SQLException sql exception
- */
- private PreparedStatement mockDbConn(int retval) throws SQLException {
- Connection connection = mock(Connection.class);
- PreparedStatement statement = mock(PreparedStatement.class);
-
- when(bds.getConnection()).thenReturn(connection);
- when(connection.prepareStatement(anyString())).thenReturn(statement);
-
- if (retval < 0) {
- // should throw an exception
- when(statement.executeUpdate()).thenThrow(new SQLException(EXPECTED));
-
- } else {
- // should return the value
- when(statement.executeUpdate()).thenReturn(retval);
- }
-
- feat = new PersistenceFeatureMockDb();
- feat.globalInit(null, SRC_TEST_RESOURCES);
-
- return statement;
- }
-
- /**
- * Feature with a mock DB.
- */
- private class PersistenceFeatureMockDb extends PersistenceFeatureKie {
-
- @Override
- protected BasicDataSource makeDataSource(Properties dsProps) {
- return bds;
- }
- }
-
- /**
- * Feature supporting newKieSession.
- */
- private class PersistenceFeatureKie extends PersistenceFeatureImpl {
-
- @Override
- protected EntityManagerFactory makeEntMgrFact(Map<String, Object> props) {
- ++emfCount;
- return emf;
- }
-
- @Override
- protected DroolsSessionConnector makeJpaConnector(EntityManagerFactory emf) {
- ++jpaCount;
- return jpa;
- }
- }
-
- /**
- * Feature with overrides.
- */
- private class PersistenceFeatureImpl extends PartialFeature {
-
- @Override
- protected Properties loadProperties(String filenm) throws IOException {
- propName = filenm;
- return props;
- }
-
- @Override
- protected BasicDataSource makeDataSource(Properties dsProps) {
- return null;
- }
-
- @Override
- protected DroolsSessionConnector makeJpaConnector(EntityManagerFactory emf) {
- ++jpaCount;
- return null;
- }
- }
-
- /**
- * Feature with <i>some</i> overrides.
- */
- private class PartialFeature extends PersistenceFeature {
-
- @Override
- protected TransactionManager getTransMgr() {
- return transmgr;
- }
-
- @Override
- protected UserTransaction getUserTrans() {
- return usertrans;
- }
-
- @Override
- protected TransactionSynchronizationRegistry getTransSyncReg() {
- return transreg;
- }
-
- @Override
- protected KieServices getKieServices() {
- return kiesvc;
- }
-
- @Override
- protected EntityManagerFactory makeEntMgrFact(Map<String, Object> props) {
- ++emfCount;
- return emf;
- }
-
- @Override
- protected PolicyController getPolicyController(PolicyContainer container) {
- return polctlr;
- }
- }
-}