aboutsummaryrefslogtreecommitdiffstats
path: root/feature-test-transaction
diff options
context:
space:
mode:
authorJorge Hernandez <jh1730@att.com>2017-09-07 00:07:32 -0500
committerJorge Hernandez <jh1730@att.com>2017-09-07 00:22:38 -0500
commitf6679d84b20e79e8f9753fbdea08ecd20b913e75 (patch)
treed8b001488ade0002828a8bb829c06f31500f289e /feature-test-transaction
parent40d0d77001e5a36e6fe799b9e1fbc26752c5c6f5 (diff)
Support environment configurations
This enables PDP-D to have knowledge of any installation property or else configured via OS environment variable or as an environment file. This allows the user to query or set via REST API of programmatically through PolicyEngine any environment variable. It also provides a means to make data globally available to all drools applications. For example: http://localhost:9696/policy/pdp/engine/environment> get HTTP/1.1 200 OK Content-Length: 749 Content-Type: application/json Date: Wed, 06 Sep 2017 23:53:57 GMT Server: Jetty(9.3.14.v20161028) { "DCAE_SERVERS": "", "DCAE_TOPIC": "", "DMAAP_SERVERS": "", "ENGINE_MANAGEMENT_HOST": "0.0.0.0", "ENGINE_MANAGEMENT_PASSWORD": "", "ENGINE_MANAGEMENT_PORT": "9696", "ENGINE_MANAGEMENT_USER": "", "HEALTHCHECK_PASSWORD": "", "HEALTHCHECK_USER": "", "JAVA_HOME": "/usr/lib/jvm/java-8-oracle", "M2_HOME": "/usr/share/maven", "PAP_HOST": "", "PAP_PASSWORD": "", "PAP_USERNAME": "", "PDPD_CONFIGURATION_API_KEY": "", "PDPD_CONFIGURATION_API_SECRET": "", "PDPD_CONFIGURATION_CONSUMER_GROUP": "", "PDPD_CONFIGURATION_CONSUMER_INSTANCE": "", "PDPD_CONFIGURATION_PARTITION_KEY": "", "PDPD_CONFIGURATION_SERVERS": "", "PDPD_CONFIGURATION_TOPIC": "PDPD-CONFIGURATION", "PDP_HOST": "", "PDP_PASSWORD": "", "PDP_USERNAME": "", "POLICY_HOME": "/home/policy/snapshot", "SQL_HOST": "", "SQL_PASSWORD": "", "SQL_USER": "" } policy@newton:~/snapshot/config$ echo -n "http://one.com/aai" | http --verbose PUT :9696/policy/pdp/engine/environment/AAI_URL Content-Type:text/plain Accept:text/plain PUT /policy/pdp/engine/environment/AAI_URL HTTP/1.1 Accept: text/plain Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 18 Content-Type: text/plain Host: localhost:9696 User-Agent: HTTPie/0.9.2 http://one.com/aai HTTP/1.1 200 OK Content-Length: 0 Content-Type: text/plain Date: Thu, 07 Sep 2017 00:05:05 GMT Server: Jetty(9.3.14.v20161028) policy@newton:~/snapshot/config$ echo -n "http://one.com/aai2" | http --verbose PUT :9696/policy/pdp/engine/environment/AAI_URL Content-Type:text/plain Accept:text/plain PUT /policy/pdp/engine/environment/AAI_URL HTTP/1.1 Accept: text/plain Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 19 Content-Type: text/plain Host: localhost:9696 User-Agent: HTTPie/0.9.2 http://one.com/aai2 HTTP/1.1 200 OK Content-Length: 18 Content-Type: text/plain Date: Thu, 07 Sep 2017 00:05:45 GMT Server: Jetty(9.3.14.v20161028) http://one.com/aai policy@newton:~/snapshot/config$ http :9696/policy/pdp/engine/environment/AAI_URL HTTP/1.1 200 OK Content-Length: 19 Content-Type: application/json Date: Thu, 07 Sep 2017 05:14:57 GMT Server: Jetty(9.3.14.v20161028) http://one.com/aai2 Change-Id: I1fcd610938af751977bb2db925b57b4e5b3f7ba4 Issue-ID: POLICY-162 Signed-off-by: Jorge Hernandez <jh1730@att.com>
Diffstat (limited to 'feature-test-transaction')
-rw-r--r--feature-test-transaction/src/main/java/org/onap/policy/drools/testtransaction/TestTransaction.java350
-rw-r--r--feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java220
2 files changed, 277 insertions, 293 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 b167898a..4da6b6ee 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
@@ -7,9 +7,9 @@
* 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,204 +24,190 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
-
import org.onap.policy.drools.controller.DroolsController;
-import org.onap.policy.drools.controller.internal.MavenDroolsController;
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();
+ 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 void register(PolicyController controller);
- public void unregister(PolicyController controller);
+ public static final TestTransaction manager = new TTImpl();
+
+ public void register(PolicyController 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.
+ * Implementation of TestTransaction interface. Controls the registering/unregistering of
+ * PolicyController objects and the management of their related TTControllerTask threads.
*/
class TTImpl implements TestTransaction {
-
- final protected Map<String, TTControllerTask> controllers = new HashMap<>();
-
- @Override
- public synchronized void register(PolicyController controller) {
- if (controllers.containsValue(controller)) {
- TTControllerTask controllerTask = controllers.get(controller.getName());
- if (controllerTask.isAlive())
- return;
-
- // continue : unregister, register operation
- }
-
- TTControllerTask controllerTask = new TTControllerTask(controller);
- controllers.put(controller.getName(), controllerTask);
- }
-
- @Override
- public synchronized void unregister(PolicyController controller) {
- if (!controllers.containsValue(controller))
- return;
-
- TTControllerTask controllerTask = controllers.get(controller.getName());
- controllerTask.stop();
-
- controllers.remove(controller.getName());
- }
+
+ final protected 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;
+
+ // continue : unregister, register operation
+ }
+
+ 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;
+
+ final TTControllerTask controllerTask = this.controllers.get(controller.getName());
+ controllerTask.stop();
+
+ 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.
- *
+ * 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 = new Thread(this);
-
- public TTControllerTask(PolicyController controller) {
- this.controller = controller;
- thread.setName("tt-controller-task-" + controller.getName());
- thread.start();
- }
-
- public PolicyController getController() {
- return controller;
- }
-
- public synchronized boolean isAlive() {
- return alive;
- }
-
- public synchronized void stop() {
- this.alive = false;
- thread.interrupt();
- try {
- thread.join(1000);
- } catch (InterruptedException e) {
- logger.error("TestTransaction thread threw", e);
- thread.interrupt();
- }
- }
-
- public Thread getThread() {
- return thread;
- }
-
- @Override
- public void run() {
- try {
- List<String> sessions =
- controller.getDrools().getSessionNames();
-
- if (!(controller.getDrools().isBrained())) {
- alive = false;
- logger.error(this + ": unknown drools controller");
- return;
- }
-
- DroolsController drools = controller.getDrools();
-
- HashMap<String,Long> fpcs = new HashMap<>();
- for (String session: sessions) {
- fpcs.put(session, -1L);
- }
-
- while (controller.isAlive() &&
- !controller.isLocked() &&
- drools.isBrained() &&
- alive) {
-
- for (String session : sessions) {
- List<Object> facts = 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! ",
- controller.getName(),
- controller.getDrools().getGroupId(),
- controller.getDrools().getArtifactId(),
- controller.getDrools().getVersion());
- break;
- }
- logger.debug("Facts: {}", facts);
-
- long fpc = (Long) facts.get(0);
- if (fpc != fpcs.get(session))
- logger.info("Controller: {} , session {} - Forward progress successful: {} -> {}",
- controller.getName(),
- session,
- fpcs.get(session),
- fpc);
- else
- logger.error("Controller: {}, session {} - Forward progress failure: {}",
- controller.getName(),
- session,
- fpc);
-
- fpcs.put(session, fpc);
- drools.getContainer().insert(session, new EventObject(TestTransaction.TT_UUID));
- }
-
- if (!alive)
- return;
-
- if (!Thread.currentThread().isInterrupted())
- Thread.sleep(TestTransaction.DEFAULT_TT_TASK_SLEEP);
- }
- } catch (InterruptedException e) {
- logger.info("{}: stopping ...", this, e);
- }
- catch (IllegalArgumentException e) {
- logger.error("{}: controller {} has not been enabled for testing: ", this, controller.getName(), e.getMessage());
- } catch (Exception e) {
- logger.error("Controller: {} is not testable - TestTransaction caught exception: {} ",
- controller.getName(),
- e.getMessage());
- logger.error("TestTransaction thread threw", e);
- } finally {
- logger.info("Exiting: {}", this);
- alive = false;
- }
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("TTControllerTask [controller=");
- builder.append(controller);
- builder.append(", alive=");
- builder.append(alive);
- builder.append(", thread=");
- builder.append(thread.getName());
- builder.append("]");
- return builder.toString();
- }
-
+ // 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 = new Thread(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 {
+ this.thread.join(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(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) {
+
+ 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));
+ }
+
+ if (!this.alive)
+ return;
+
+ if (!Thread.currentThread().isInterrupted())
+ Thread.sleep(TestTransaction.DEFAULT_TT_TASK_SLEEP);
+ }
+ } catch (final InterruptedException e) {
+ logger.info("{}: stopping ...", this, e);
+ } catch (final IllegalArgumentException e) {
+ logger.error("{}: controller {} has not been enabled for testing: ", this,
+ this.controller.getName(), e.getMessage());
+ } 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 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/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java b/feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java
index 2a44e1c1..6c60c5ac 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
@@ -7,9 +7,9 @@
* 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.
@@ -40,113 +40,111 @@ 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 */
- Path configDir = Paths.get(SystemPersistence.CONFIG_DIR_NAME);
- if (Files.notExists(configDir))
- Files.createDirectories(configDir);
- }
-
- @Test
- public void registerUnregisterTest() {
- Properties controllerProperties = new Properties();
- controllerProperties.put(PolicyProperties.PROPERTY_CONTROLLER_NAME, TEST_CONTROLLER_NAME);
- PolicyController controller = PolicyEngine.manager.createPolicyController(TEST_CONTROLLER_NAME, controllerProperties);
- Thread ttThread = null;
-
- TestTransaction.manager.register(controller);
- assertNotNull(TestTransaction.manager);
-
- /*
- * If the controller was successfully registered
- * it will have a thread created.
- */
- ttThread = getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
- assertNotNull(ttThread);
-
- /*
- * Unregistering the controller should
- * terminate its TestTransaction thread
- * if it hasn't already been terminated
- */
- TestTransaction.manager.unregister(controller);
-
- /*
- * Put this thread to sleep so the TestTransaction
- * thread has enough time to terminate before
- * we check.
- */
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
-
- }
- ttThread = getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
- assertEquals(null, ttThread);
-
-
- }
-
- /*
- * Returns thread object based on
- * String name
- */
- public Thread getThread(String threadName) {
-
- Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
- for (Thread thread : threadSet) {
- if (thread.getName().equals(threadName)) {
- return thread;
- }
-
- }
- return null;
- }
-
- /**
- * clean up working directory
- */
- protected static void cleanUpWorkingDir() {
- Path testControllerPath = Paths.get(SystemPersistence.CONFIG_DIR_NAME, TEST_CONTROLLER_FILE);
- try {
- Files.deleteIfExists(testControllerPath);
- } catch (Exception e) {
- logger.info("Problem cleaning {}", testControllerPath, e);
- }
-
- Path testControllerBakPath = Paths.get(SystemPersistence.CONFIG_DIR_NAME, TEST_CONTROLLER_FILE_BAK);
- try {
- Files.deleteIfExists(testControllerBakPath);
- } catch (Exception e) {
- logger.info("Problem cleaning {}", testControllerBakPath, e);
- }
- }
-
+ /**
+ * 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() {
+ final Properties controllerProperties = new Properties();
+ controllerProperties.put(PolicyProperties.PROPERTY_CONTROLLER_NAME, TEST_CONTROLLER_NAME);
+ final PolicyController controller =
+ PolicyEngine.manager.createPolicyController(TEST_CONTROLLER_NAME, controllerProperties);
+ Thread ttThread = null;
+
+ TestTransaction.manager.register(controller);
+ assertNotNull(TestTransaction.manager);
+
+ /*
+ * If the controller was successfully registered it will have a thread created.
+ */
+ ttThread = this.getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
+ assertNotNull(ttThread);
+
+ /*
+ * Unregistering the controller should terminate its TestTransaction thread if it hasn't already
+ * been terminated
+ */
+ TestTransaction.manager.unregister(controller);
+
+ /*
+ * Put this thread to sleep so the TestTransaction thread has enough time to terminate before we
+ * check.
+ */
+ try {
+ Thread.sleep(2000);
+ } catch (final InterruptedException e) {
+
+ }
+ ttThread = this.getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
+ assertEquals(null, ttThread);
+
+
+ }
+
+ /*
+ * Returns thread object based on String name
+ */
+ public Thread getThread(String threadName) {
+
+ 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);
+ }
+ }
+
}