summaryrefslogtreecommitdiffstats
path: root/feature-test-transaction
diff options
context:
space:
mode:
Diffstat (limited to 'feature-test-transaction')
-rw-r--r--feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java347
-rw-r--r--feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransactionFeature.java53
-rw-r--r--feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java172
3 files changed, 289 insertions, 283 deletions
diff --git a/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java b/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java
index 5e209faa..3adecddc 100644
--- a/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java
+++ b/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* feature-test-transaction
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * 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.
@@ -17,6 +17,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
+
package org.onap.policy.drools.testtransaction;
import java.util.EventObject;
@@ -29,203 +30,219 @@ import org.onap.policy.drools.system.PolicyController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * TestTransaction interface
- *
- */
+/** TestTransaction interface. */
public interface TestTransaction {
- public static final String TT_FPC = "TT.FPC";
- public static final String TT_COUNTER = "$ttc";
- public static final String TT_UUID = "43868e59-d1f3-43c2-bd6f-86f89a61eea5";
- public static long DEFAULT_TT_TASK_SLEEP = 20000;
-
- public static final TestTransaction manager = new TTImpl();
-
- /**
- * register a controller for monitoring test transactions
- *
- * @param controller policy controller
- */
- public void register(PolicyController controller);
-
- /**
- * unregisters a controller for monitoring test transactions
- *
- * @param controller policy controller
- */
- public void unregister(PolicyController controller);
+ public static final String TT_FPC = "TT.FPC";
+ public static final String TT_COUNTER = "$ttc";
+ public static final String TT_UUID = "43868e59-d1f3-43c2-bd6f-86f89a61eea5";
+ public static long DEFAULT_TT_TASK_SLEEP = 20000;
+
+ public static final TestTransaction manager = new TTImpl();
+
+ /**
+ * register a controller for monitoring test transactions.
+ *
+ * @param controller policy controller
+ */
+ public void register(PolicyController controller);
+
+ /**
+ * unregisters a controller for monitoring test transactions.
+ *
+ * @param controller policy controller
+ */
+ public void unregister(PolicyController controller);
}
-
/**
* Implementation of TestTransaction interface. Controls the registering/unregistering of
* PolicyController objects and the management of their related TTControllerTask threads.
*/
class TTImpl implements TestTransaction {
- protected final Map<String, TTControllerTask> controllers = new HashMap<>();
+ protected final Map<String, TTControllerTask> controllers = new HashMap<>();
- @Override
- public synchronized void register(PolicyController controller) {
- if (this.controllers.containsValue(controller)) {
- final TTControllerTask controllerTask = this.controllers.get(controller.getName());
- if (controllerTask.isAlive())
- return;
+ @Override
+ public synchronized void register(PolicyController controller) {
+ if (this.controllers.containsValue(controller)) {
+ final TTControllerTask controllerTask = this.controllers.get(controller.getName());
+ if (controllerTask.isAlive()) {
+ return;
+ }
- // continue : unregister, register operation
- }
+ // continue : unregister, register operation
+ }
- final TTControllerTask controllerTask = new TTControllerTask(controller);
- this.controllers.put(controller.getName(), controllerTask);
- }
+ final TTControllerTask controllerTask = new TTControllerTask(controller);
+ this.controllers.put(controller.getName(), controllerTask);
+ }
- @Override
- public synchronized void unregister(PolicyController controller) {
- if (!this.controllers.containsValue(controller))
- return;
+ @Override
+ public synchronized void unregister(PolicyController controller) {
+ if (!this.controllers.containsValue(controller)) {
+ return;
+ }
- final TTControllerTask controllerTask = this.controllers.get(controller.getName());
- controllerTask.stop();
+ final TTControllerTask controllerTask = this.controllers.get(controller.getName());
+ controllerTask.stop();
- this.controllers.remove(controller.getName());
- }
+ this.controllers.remove(controller.getName());
+ }
}
-
/**
* TTControllerTask implements the Runnabale interface Carries out the injection of an event into a
* drools session and subsequent query of a counter to ensure that forward progress is occuring.
- *
*/
class TTControllerTask implements Runnable {
- // get an instance of logger
- private static final Logger logger = LoggerFactory.getLogger(TTControllerTask.class);
-
- protected final PolicyController controller;
+ // get an instance of logger
+ private static final Logger logger = LoggerFactory.getLogger(TTControllerTask.class);
- protected volatile boolean alive = true;
- protected final Thread thread = new Thread(this);
+ protected final PolicyController controller;
- public TTControllerTask(PolicyController controller) {
- this.controller = controller;
- this.thread.setName("tt-controller-task-" + controller.getName());
- this.thread.start();
- }
+ protected volatile boolean alive = true;
+ protected final Thread thread = new Thread(this);
- public PolicyController getController() {
- return this.controller;
- }
+ public TTControllerTask(PolicyController controller) {
+ this.controller = controller;
+ this.thread.setName("tt-controller-task-" + controller.getName());
+ this.thread.start();
+ }
- public synchronized boolean isAlive() {
- return this.alive;
- }
+ public PolicyController getController() {
+ return this.controller;
+ }
- public synchronized void stop() {
- this.alive = false;
- this.thread.interrupt();
- try {
- this.thread.join(1000);
- } catch (final InterruptedException e) {
- logger.error("TestTransaction thread threw", e);
- this.thread.interrupt();
+ public synchronized boolean isAlive() {
+ return this.alive;
}
- }
- public Thread getThread() {
- return this.thread;
- }
+ public synchronized void stop() {
+ this.alive = false;
+ this.thread.interrupt();
+ try {
+ this.thread.join(1000);
+ } catch (final InterruptedException e) {
+ logger.error("TestTransaction thread threw", e);
+ this.thread.interrupt();
+ }
+ }
- @Override
- public void run() {
- try {
- final List<String> sessions = this.controller.getDrools().getSessionNames();
+ public Thread getThread() {
+ return this.thread;
+ }
- if (!(this.controller.getDrools().isBrained())) {
- this.alive = false;
- logger.error(this + ": unknown drools controller");
- return;
- }
-
- final DroolsController drools = this.controller.getDrools();
-
- final HashMap<String, Long> fpcs = new HashMap<>();
- for (final String session : sessions) {
- fpcs.put(session, -1L);
- }
-
- while (this.controller.isAlive() && !this.controller.isLocked() && drools.isBrained()
- && this.alive) {
-
- injectTxIntoSessions(sessions, fpcs, drools);
-
- if (!this.alive)
- return;
-
- if (!Thread.currentThread().isInterrupted())
- Thread.sleep(TestTransaction.DEFAULT_TT_TASK_SLEEP);
- }
- } catch (final InterruptedException e) {
- logger.info("{}: stopping ...", this, e);
- Thread.currentThread().interrupt();
- } catch (final IllegalArgumentException e) {
- logger.error("{}: controller {} has not been enabled for testing: ", this,
- this.controller.getName(), e.getMessage(), e);
- } catch (final Exception e) {
- logger.error("Controller: {} is not testable - TestTransaction caught exception: {} ",
- this.controller.getName(), e.getMessage());
- logger.error("TestTransaction thread threw", e);
- } finally {
- logger.info("Exiting: {}", this);
- this.alive = false;
+ @Override
+ public void run() {
+ try {
+ final List<String> sessions = this.controller.getDrools().getSessionNames();
+
+ if (!(this.controller.getDrools().isBrained())) {
+ this.alive = false;
+ logger.error(this + ": unknown drools controller");
+ return;
+ }
+
+ final DroolsController drools = this.controller.getDrools();
+
+ final HashMap<String, Long> fpcs = new HashMap<>();
+ for (final String session : sessions) {
+ fpcs.put(session, -1L);
+ }
+
+ while (this.controller.isAlive()
+ && !this.controller.isLocked()
+ && drools.isBrained()
+ && this.alive) {
+
+ injectTxIntoSessions(sessions, fpcs, drools);
+
+ if (!this.alive) {
+ return;
+ }
+
+ if (!Thread.currentThread().isInterrupted()) {
+ Thread.sleep(TestTransaction.DEFAULT_TT_TASK_SLEEP);
+ }
+ }
+ } catch (final InterruptedException e) {
+ logger.info("{}: stopping ...", this, e);
+ Thread.currentThread().interrupt();
+ } catch (final IllegalArgumentException e) {
+ logger.error(
+ "{}: controller {} has not been enabled for testing: ",
+ this,
+ this.controller.getName(),
+ e.getMessage(),
+ e);
+ } catch (final Exception e) {
+ logger.error(
+ "Controller: {} is not testable - TestTransaction caught exception: {} ",
+ this.controller.getName(),
+ e.getMessage());
+ logger.error("TestTransaction thread threw", e);
+ } finally {
+ logger.info("Exiting: {}", this);
+ this.alive = false;
+ }
}
- }
-
- private void injectTxIntoSessions(List<String> sessions, HashMap<String, Long> fpcs, DroolsController drools) {
-
- for (final String session : sessions) {
- final List<Object> facts = this.controller.getDrools().factQuery(session,
- TestTransaction.TT_FPC, TestTransaction.TT_COUNTER, false);
- if (facts == null || facts.size() != 1) {
- /*
- * unexpected something wrong here, can't expect to recover note this exception is
- * caught right below at the exit of run()
- */
- logger.error(
- "Controller: {}, with rules artifact: (group) {}, (artifact) {}, (version) {} - FPC query failed after EventObject insertion! ",
- this.controller.getName(), this.controller.getDrools().getGroupId(),
- this.controller.getDrools().getArtifactId(),
- this.controller.getDrools().getVersion());
- break;
+
+ private void injectTxIntoSessions(
+ List<String> sessions, HashMap<String, Long> fpcs, DroolsController drools) {
+
+ for (final String session : sessions) {
+ final List<Object> facts =
+ this.controller
+ .getDrools()
+ .factQuery(session, TestTransaction.TT_FPC, TestTransaction.TT_COUNTER, false);
+ if (facts == null || facts.size() != 1) {
+ /*
+ * unexpected something wrong here, can't expect to recover note this exception is
+ * caught right below at the exit of run()
+ */
+ logger.error(
+ "Controller: {}, with rules artifact: (group) {}, (artifact) {}, (version) {} "
+ + "- FPC query failed after EventObject insertion! ",
+ this.controller.getName(),
+ this.controller.getDrools().getGroupId(),
+ this.controller.getDrools().getArtifactId(),
+ this.controller.getDrools().getVersion());
+ break;
+ }
+ logger.debug("Facts: {}", facts);
+
+ final long fpc = (Long) facts.get(0);
+ if (fpc != fpcs.get(session)) {
+ logger.info(
+ "Controller: {} , session {} - Forward progress successful: {} -> {}",
+ this.controller.getName(),
+ session,
+ fpcs.get(session),
+ fpc);
+ } else {
+ logger.error(
+ "Controller: {}, session {} - Forward progress failure: {}",
+ this.controller.getName(),
+ session,
+ fpc);
+ }
+ fpcs.put(session, fpc);
+ drools.getContainer().insert(session, new EventObject(TestTransaction.TT_UUID));
}
- logger.debug("Facts: {}", facts);
-
- final long fpc = (Long) facts.get(0);
- if (fpc != fpcs.get(session))
- logger.info("Controller: {} , session {} - Forward progress successful: {} -> {}",
- this.controller.getName(), session, fpcs.get(session), fpc);
- else
- logger.error("Controller: {}, session {} - Forward progress failure: {}",
- this.controller.getName(), session, fpc);
-
- fpcs.put(session, fpc);
- drools.getContainer().insert(session, new EventObject(TestTransaction.TT_UUID));
- }
-
- }
-
-
- @Override
- public String toString() {
- final StringBuilder builder = new StringBuilder();
- builder.append("TTControllerTask [controller=");
- builder.append(this.controller);
- builder.append(", alive=");
- builder.append(this.alive);
- builder.append(", thread=");
- builder.append(this.thread.getName());
- builder.append("]");
- return builder.toString();
- }
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("TTControllerTask [controller=");
+ builder.append(this.controller);
+ builder.append(", alive=");
+ builder.append(this.alive);
+ builder.append(", thread=");
+ builder.append(this.thread.getName());
+ builder.append("]");
+ return builder.toString();
+ }
}
diff --git a/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransactionFeature.java b/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransactionFeature.java
index e78668ab..956304b9 100644
--- a/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransactionFeature.java
+++ b/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransactionFeature.java
@@ -2,14 +2,14 @@
* ============LICENSE_START=======================================================
* feature-test-transaction
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * 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.
@@ -24,55 +24,52 @@ import org.onap.policy.drools.features.PolicyControllerFeatureAPI;
import org.onap.policy.drools.system.PolicyController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
/**
- * TestTransactionFeature implements the PolicyControllerFeatureAPI.
- * TestTransactionFeature is the interface to the TestTransaction feature logic.
- *
+ * TestTransactionFeature implements the PolicyControllerFeatureAPI. TestTransactionFeature is the
+ * interface to the TestTransaction feature logic.
*/
public class TestTransactionFeature implements PolicyControllerFeatureAPI {
- // get an instance of logger
- private static final Logger logger = LoggerFactory.getLogger(TestTransactionFeature.class);
-
+ // get an instance of logger
+ private static final Logger logger = LoggerFactory.getLogger(TestTransactionFeature.class);
+
@Override
- public boolean afterStart(PolicyController controller){
-
+ public boolean afterStart(PolicyController controller) {
+
logger.info("TEST_TRANSACTION FEATURE LOADED");
-
- if (controller.isAlive() &&
- !controller.isLocked() &&
- controller.getDrools().isBrained())
- TestTransaction.manager.register(controller);
-
+
+ if (controller.isAlive() && !controller.isLocked() && controller.getDrools().isBrained()) {
+ TestTransaction.manager.register(controller);
+ }
return false;
}
-
+
@Override
public boolean afterLock(PolicyController controller) {
logger.info("controller {} locked", controller.getName());
-
+
TestTransaction.manager.unregister(controller);
return false;
}
-
+
@Override
public boolean afterUnlock(PolicyController controller) {
logger.info("controller {} unlocked", controller.getName());
-
- if (controller.isAlive() &&
- !controller.isLocked() &&
- controller.getDrools().isBrained())
- TestTransaction.manager.register(controller);
-
+
+ if (controller.isAlive() && !controller.isLocked() && controller.getDrools().isBrained()) {
+ TestTransaction.manager.register(controller);
+ }
+
return false;
}
@Override
public boolean beforeStop(PolicyController controller) {
logger.info("controller {} stopping", controller.getName());
-
+
TestTransaction.manager.unregister(controller);
-
+
return false;
}
diff --git a/feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java b/feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java
index fd373a1d..09be93f9 100644
--- a/feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java
+++ b/feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* feature-test-transaction
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * 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.
@@ -40,101 +40,93 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestTransactionTest {
- /**
- * Test JUnit Controller Name
- */
- public static final String TEST_CONTROLLER_NAME = "unnamed";
- /**
- * Controller Configuration File
- */
- public static final String TEST_CONTROLLER_FILE = TEST_CONTROLLER_NAME + "-controller.properties";
-
- /**
- * Controller Configuration Backup File
- */
- public static final String TEST_CONTROLLER_FILE_BAK =
- TEST_CONTROLLER_NAME + "-controller.properties.bak";
-
-
- /**
- * logger
- */
- private static Logger logger = LoggerFactory.getLogger(TestTransactionTest.class);
-
-
-
- @BeforeClass
- public static void startUp() throws IOException {
- logger.info("enter");
-
- cleanUpWorkingDir();
-
- /* ensure presence of config directory */
- SystemPersistence.manager.setConfigurationDir(null);
- }
-
- @Test
- public void registerUnregisterTest() throws InterruptedException {
- final Properties controllerProperties = new Properties();
- controllerProperties.put(DroolsProperties.PROPERTY_CONTROLLER_NAME, TEST_CONTROLLER_NAME);
- final PolicyController controller =
- PolicyEngine.manager.createPolicyController(TEST_CONTROLLER_NAME, controllerProperties);
- assertNotNull(PolicyController.factory.get(TEST_CONTROLLER_NAME));
- logger.info(controller.toString());
-
- Thread ttThread = null;
-
- TestTransaction.manager.register(controller);
- assertNotNull(TestTransaction.manager);
-
- /*
- * Unregistering the controller should terminate its TestTransaction thread if it hasn't already
- * been terminated
+ /** Test JUnit Controller Name. */
+ public static final String TEST_CONTROLLER_NAME = "unnamed";
+ /** Controller Configuration File. */
+ public static final String TEST_CONTROLLER_FILE = TEST_CONTROLLER_NAME + "-controller.properties";
+
+ /** Controller Configuration Backup File. */
+ public static final String TEST_CONTROLLER_FILE_BAK =
+ TEST_CONTROLLER_NAME + "-controller.properties.bak";
+
+ /** logger. */
+ private static Logger logger = LoggerFactory.getLogger(TestTransactionTest.class);
+
+ /**
+ * Start up.
+ *
+ * @throws IOException exception
*/
- TestTransaction.manager.unregister(controller);
-
- ttThread = this.getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
- assertEquals(null, ttThread);
-
-
- }
+ @BeforeClass
+ public static void startUp() throws IOException {
+ logger.info("enter");
- /*
- * Returns thread object based on String name
- */
- public Thread getThread(String threadName) throws InterruptedException {
- // give a chance to the transaction thread to be spawned/destroyed
- Thread.sleep(5000L);
-
- final Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
- for (final Thread thread : threadSet) {
- if (thread.getName().equals(threadName)) {
- return thread;
- }
+ cleanUpWorkingDir();
+ /* ensure presence of config directory */
+ SystemPersistence.manager.setConfigurationDir(null);
}
- return null;
- }
-
- /**
- * clean up working directory
- */
- protected static void cleanUpWorkingDir() {
- final Path testControllerPath = Paths
- .get(SystemPersistence.manager.getConfigurationPath().toString(), TEST_CONTROLLER_FILE);
- try {
- Files.deleteIfExists(testControllerPath);
- } catch (final Exception e) {
- logger.info("Problem cleaning {}", testControllerPath, e);
+
+ @Test
+ public void registerUnregisterTest() throws InterruptedException {
+ final Properties controllerProperties = new Properties();
+ controllerProperties.put(DroolsProperties.PROPERTY_CONTROLLER_NAME, TEST_CONTROLLER_NAME);
+ final PolicyController controller =
+ PolicyEngine.manager.createPolicyController(TEST_CONTROLLER_NAME, controllerProperties);
+ assertNotNull(PolicyController.factory.get(TEST_CONTROLLER_NAME));
+ logger.info(controller.toString());
+
+ TestTransaction.manager.register(controller);
+ assertNotNull(TestTransaction.manager);
+
+ /*
+ * Unregistering the controller should terminate its TestTransaction thread if it hasn't already
+ * been terminated
+ */
+ TestTransaction.manager.unregister(controller);
+
+ Thread ttThread = this.getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
+ assertEquals(null, ttThread);
}
- final Path testControllerBakPath = Paths
- .get(SystemPersistence.manager.getConfigurationPath().toString(), TEST_CONTROLLER_FILE_BAK);
- try {
- Files.deleteIfExists(testControllerBakPath);
- } catch (final Exception e) {
- logger.info("Problem cleaning {}", testControllerBakPath, e);
+ /**
+ * Returns thread object based on String name.
+ *
+ * @param threadName thread name
+ * @return the thread
+ * @throws InterruptedException exception
+ */
+ public Thread getThread(String threadName) throws InterruptedException {
+ // give a chance to the transaction thread to be spawned/destroyed
+ Thread.sleep(5000L);
+
+ final Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
+ for (final Thread thread : threadSet) {
+ if (thread.getName().equals(threadName)) {
+ return thread;
+ }
+ }
+ return null;
}
- }
+ /** clean up working directory. */
+ protected static void cleanUpWorkingDir() {
+ final Path testControllerPath =
+ Paths.get(
+ SystemPersistence.manager.getConfigurationPath().toString(), TEST_CONTROLLER_FILE);
+ try {
+ Files.deleteIfExists(testControllerPath);
+ } catch (final Exception e) {
+ logger.info("Problem cleaning {}", testControllerPath, e);
+ }
+
+ final Path testControllerBakPath =
+ Paths.get(
+ SystemPersistence.manager.getConfigurationPath().toString(), TEST_CONTROLLER_FILE_BAK);
+ try {
+ Files.deleteIfExists(testControllerBakPath);
+ } catch (final Exception e) {
+ logger.info("Problem cleaning {}", testControllerBakPath, e);
+ }
+ }
}