summaryrefslogtreecommitdiffstats
path: root/feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java
diff options
context:
space:
mode:
Diffstat (limited to 'feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java')
-rw-r--r--feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java222
1 files changed, 2 insertions, 220 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 452825c0..03a0e4b7 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-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 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.
@@ -20,15 +20,7 @@
package org.onap.policy.drools.testtransaction;
-import java.util.EventObject;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.onap.policy.drools.controller.DroolsController;
import org.onap.policy.drools.system.PolicyController;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/** TestTransaction interface. */
public interface TestTransaction {
@@ -38,7 +30,7 @@ public interface TestTransaction {
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();
+ public static final TestTransaction manager = new TtImpl();
/**
* register a controller for monitoring test transactions.
@@ -54,213 +46,3 @@ public interface TestTransaction {
*/
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<>();
-
- @Override
- public synchronized void register(PolicyController controller) {
- TTControllerTask controllerTask = this.controllers.get(controller.getName());
- if (controllerTask != null && controllerTask.isAlive()) {
- return;
- }
-
- // continue : unregister, register operation
-
- controllerTask = makeControllerTask(controller);
- this.controllers.put(controller.getName(), controllerTask);
- }
-
- @Override
- public synchronized void unregister(PolicyController controller) {
- final TTControllerTask controllerTask = this.controllers.remove(controller.getName());
- if (controllerTask != null) {
- controllerTask.stop();
- }
- }
-
- // these may be overridden by junit tests
-
- protected TTControllerTask makeControllerTask(PolicyController controller) {
- return new TTControllerTask(controller);
- }
-}
-
-/**
- * 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;
-
- protected volatile boolean alive = true;
- protected final Thread thread = makeThread(this);
-
- public TTControllerTask(PolicyController controller) {
- this.controller = controller;
- this.thread.setName("tt-controller-task-" + controller.getName());
- this.thread.start();
- }
-
- public PolicyController getController() {
- return this.controller;
- }
-
- public synchronized boolean isAlive() {
- return this.alive;
- }
-
- public synchronized void stop() {
- this.alive = false;
- this.thread.interrupt();
- try {
- joinThread(1000);
- } catch (final InterruptedException e) {
- logger.error("TestTransaction thread threw", e);
- this.thread.interrupt();
- }
- }
-
- public Thread getThread() {
- return this.thread;
- }
-
- @Override
- public void run() {
- try {
- final List<String> sessions = this.controller.getDrools().getSessionNames();
-
- if (!(this.controller.getDrools().isBrained())) {
- this.alive = false;
- logger.error("{}: unknown drools controller", this);
- 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 (!getCurrentThread().isInterrupted()) {
- doSleep(TestTransaction.DEFAULT_TT_TASK_SLEEP);
- }
- }
- } catch (final InterruptedException e) {
- logger.info("{}: stopping ...", this, e);
- getCurrentThread().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;
- }
- 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();
- }
-
- // these may be overridden by junit tests
-
- protected Thread makeThread(Runnable action) {
- return new Thread(action);
- }
-
- protected void joinThread(long waitTimeMs) throws InterruptedException {
- this.thread.join(waitTimeMs);
- }
-
- protected void doSleep(long sleepMs) throws InterruptedException {
- Thread.sleep(sleepMs);
- }
-
- protected Thread getCurrentThread() {
- return Thread.currentThread();
- }
-}