summaryrefslogtreecommitdiffstats
path: root/policy-core
diff options
context:
space:
mode:
Diffstat (limited to 'policy-core')
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java56
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java54
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureAPI.java129
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmx.java42
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxListener.java63
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxMBean.java7
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/lock/Lock.java8
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPI.java41
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockManager.java18
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/core/lock/SimpleLockManager.java89
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/util/FeatureEnabledChecker.java2
-rw-r--r--policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java28
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java610
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/PolicySessionFeatureApiTest.java137
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/TestPolicySessionFeatureAPI.java157
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/lock/LockTest.java5
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPITest.java4
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockManagerTest.java8
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/lock/SimpleLockManagerTest.java59
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/core/lock/TestingUtils.java (renamed from policy-core/src/test/java/org/onap/policy/drools/core/lock/TestUtils.java)6
-rw-r--r--policy-core/src/test/java/org/onap/policy/drools/util/FeatureEnabledCheckerTest.java1
-rw-r--r--policy-core/src/test/resources/META-INF/services/org.onap.policy.drools.core.PolicySessionFeatureAPI2
22 files changed, 771 insertions, 755 deletions
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java b/policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java
index 8a86a5c5..f2a084e4 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/PolicyContainer.java
@@ -79,7 +79,7 @@ public class PolicyContainer implements Startable {
* dependencies from the Maven repository to create the 'PolicyContainer' and associated
* 'KieContainer'.
*
- * An exception occurs if the creation of the 'KieContainer' fails.
+ * <p>An exception occurs if the creation of the 'KieContainer' fails.
*
* @param groupId the 'groupId' associated with the artifact
* @param artifactId the artifact name
@@ -94,7 +94,7 @@ public class PolicyContainer implements Startable {
* associated artifact and remaining dependencies from the Maven repository to create the
* 'PolicyContainer' and associated 'KieContainer'.
*
- * An exception occurs if the creation of the 'KieContainer' fails.
+ * <p>An exception occurs if the creation of the 'KieContainer' fails.
*
* @param releaseId indicates the artifact that is to be installed in this container
*/
@@ -109,7 +109,7 @@ public class PolicyContainer implements Startable {
}
synchronized (containers) {
if (newReleaseId != null) {
- logger.info("Add a new kieContainer in containers: releaseId: " + newReleaseId.toString());
+ logger.info("Add a new kieContainer in containers: releaseId: {}", newReleaseId.toString());
} else {
logger.warn("input releaseId is null");
}
@@ -133,7 +133,7 @@ public class PolicyContainer implements Startable {
private ReleaseId loadArtifact(String groupId, String artifactId, String version) {
String[] versions = version.split(",");
if (versions.length > 1) {
- logger.info("Multiple KieContainer versions are specified: " + version);
+ logger.info("Multiple KieContainer versions are specified: {}", version);
}
// indicates a 'newKieContainer' call failed
@@ -147,7 +147,7 @@ public class PolicyContainer implements Startable {
try {
// Create a 'ReleaseId' object describing the artifact, and
// create a 'KieContainer' based upon it.
- logger.info("Create new KieContainer start, version = " + ver + " ...");
+ logger.info("Create new KieContainer start, version = {} ...", ver);
releaseId = kieServices.newReleaseId(groupId, artifactId, ver);
kieContainer = kieServices.newKieContainer(releaseId);
@@ -168,6 +168,8 @@ public class PolicyContainer implements Startable {
}
/**
+ * Get name.
+ *
* @return the name of the container, which is the String equivalent of the 'ReleaseId'. It has
* the form:
*
@@ -181,6 +183,8 @@ public class PolicyContainer implements Startable {
}
/**
+ * Get kie container.
+ *
* @return the associated 'KieContainer' instance
*/
public KieContainer getKieContainer() {
@@ -188,6 +192,8 @@ public class PolicyContainer implements Startable {
}
/**
+ * Get class loader.
+ *
* @return the 'ClassLoader' associated with the 'KieContainer' instance
*/
public ClassLoader getClassLoader() {
@@ -195,6 +201,8 @@ public class PolicyContainer implements Startable {
}
/**
+ * Get group Id.
+ *
* @return the Maven GroupId of the top-level artifact wrapped by the container.
*/
public String getGroupId() {
@@ -202,6 +210,8 @@ public class PolicyContainer implements Startable {
}
/**
+ * Get artifact id.
+ *
* @return the Maven ArtifactId of the top-level artifact wrapped by the container.
*/
public String getArtifactId() {
@@ -209,6 +219,8 @@ public class PolicyContainer implements Startable {
}
/**
+ * Get version.
+ *
* @return the version of the top-level artifact wrapped by the container (this may change as
* updates occur)
*/
@@ -236,10 +248,10 @@ public class PolicyContainer implements Startable {
*/
private PolicySession activatePolicySession(String name, String kieBaseName) {
synchronized (sessions) {
- logger.info("activatePolicySession:name :" + name);
+ logger.info("activatePolicySession:name :{}", name);
PolicySession session = sessions.get(name);
if (session != null) {
- logger.info("activatePolicySession:session - " + session.getFullName() + " is returned.");
+ logger.info("activatePolicySession:session - {} is returned.", session.getFullName());
return session;
}
KieSession kieSession = null;
@@ -275,7 +287,7 @@ public class PolicyContainer implements Startable {
logger.error(ERROR_STRING + feature.getClass().getName(), e);
}
}
- logger.info("activatePolicySession:new session was added in sessions with name " + name);
+ logger.info("activatePolicySession:new session was added in sessions with name {}", name);
}
logger.info("activatePolicySession:session - " + (session == null ? "null" : session.getFullName())
+ " is returned.");
@@ -310,15 +322,15 @@ public class PolicyContainer implements Startable {
// fetch KieBase, and verify it belongs to this KieContainer
boolean match = false;
KieBase kieBase = kieSession.getKieBase();
- logger.info("adoptKieSession:kieBase: " + kieBase);
+ logger.info("adoptKieSession:kieBase: {}", kieBase);
for (String kieBaseName : kieContainer.getKieBaseNames()) {
- logger.info("adoptKieSession:kieBaseName: " + kieBaseName);
+ logger.info("adoptKieSession:kieBaseName: {}", kieBaseName);
if (kieBase == kieContainer.getKieBase(kieBaseName)) {
match = true;
break;
}
}
- logger.info("adoptKieSession:match " + match);
+ logger.info("adoptKieSession:match {}", match);
// if we don't have a match yet, the last chance is to look at the
// default KieBase, if it exists
if (!match && kieBase != kieContainer.getKieBase()) {
@@ -333,7 +345,7 @@ public class PolicyContainer implements Startable {
// create the new 'PolicySession', add it to the table,
// and return the object to the caller
- logger.info("adoptKieSession:create a new policySession with name " + name);
+ logger.info("adoptKieSession:create a new policySession with name {}", name);
PolicySession policySession = new PolicySession(name, this, kieSession);
sessions.put(name, policySession);
@@ -378,7 +390,7 @@ public class PolicyContainer implements Startable {
if (releaseId == null) {
logger.warn("updateToVersion:input releaseId is null");
} else {
- logger.info("updateToVersion:releaseId " + releaseId.toString());
+ logger.info("updateToVersion:releaseId {}", releaseId);
}
// stop all session threads
@@ -399,6 +411,8 @@ public class PolicyContainer implements Startable {
}
/**
+ * Get policy containers.
+ *
* @return all existing 'PolicyContainer' instances
*/
public static Collection<PolicyContainer> getPolicyContainers() {
@@ -408,6 +422,8 @@ public class PolicyContainer implements Startable {
}
/**
+ * Get policy sessions.
+ *
* @return all of the 'PolicySession' instances
*/
public Collection<PolicySession> getPolicySessions() {
@@ -454,7 +470,7 @@ public class PolicyContainer implements Startable {
}
/**
- * Insert a fact into a specific named session
+ * Insert a fact into a specific named session.
*
* @param name this is the session name
* @param object this is the fact to be inserted into the session
@@ -475,7 +491,7 @@ public class PolicyContainer implements Startable {
}
/**
- * Insert a fact into all sessions associated with this container
+ * Insert a fact into all sessions associated with this container.
*
* @param object this is the fact to be inserted into the sessions
* @return 'true' if the fact was inserted into at least one session, 'false' if not
@@ -660,15 +676,15 @@ public class PolicyContainer implements Startable {
/**
* This method does the following:
*
- * 1) Initializes logging 2) Starts the DroolsPDP Integrity Monitor 3) Initilaizes persistence
+ * <p>1) Initializes logging 2) Starts the DroolsPDP Integrity Monitor 3) Initilaizes persistence
*
- * It no longer reads in properties files, o creates 'PolicyContainer' instances.
+ * <p>It no longer reads in properties files, o creates 'PolicyContainer' instances.
*
* @param args standard 'main' arguments, which are currently ignored
*/
public static void globalInit(String[] args) {
String configDir = "config";
- logger.info("PolicyContainer.main: configDir=" + configDir);
+ logger.info("PolicyContainer.main: configDir={}", configDir);
// invoke 'globalInit' on all of the features
for (PolicySessionFeatureAPI feature : PolicySessionFeatureAPI.impl.getList()) {
@@ -681,7 +697,7 @@ public class PolicyContainer implements Startable {
}
/**
- * Fetch the adjunct object associated with a given feature
+ * Fetch the adjunct object associated with a given feature.
*
* @param object this is typically the singleton feature object that is used as a key, but it
* might also be useful to use nested objects within the feature as keys.
@@ -692,7 +708,7 @@ public class PolicyContainer implements Startable {
}
/**
- * Store the adjunct object associated with a given feature
+ * Store the adjunct object associated with a given feature.
*
* @param object this is typically the singleton feature object that is used as a key, but it
* might also be useful to use nested objects within the feature as keys.
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java b/policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java
index 7646225e..bb2148c0 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/PolicySession.java
@@ -44,8 +44,8 @@ import org.slf4j.LoggerFactory;
/**
* This class is a wrapper around 'KieSession', which adds the following:
- * <p>
- * 1) A thread running 'KieSession.fireUntilHalt()'
+ *
+ * <p>1) A thread running 'KieSession.fireUntilHalt()'
* 2) Access to UEB
* 3) Logging of events
*/
@@ -75,7 +75,7 @@ public class PolicySession
new ThreadLocal<>();
/**
- * Internal constructor - create a 'PolicySession' instance
+ * Internal constructor - create a 'PolicySession' instance.
*
* @param name the name of this 'PolicySession' (and 'kieSession')
* @param container the 'PolicyContainer' instance containing this session
@@ -91,6 +91,8 @@ public class PolicySession
}
/**
+ * Get policy container.
+ *
* @return the 'PolicyContainer' object containing this session
*/
public PolicyContainer getPolicyContainer() {
@@ -98,6 +100,8 @@ public class PolicySession
}
/**
+ * Get Kie Session.
+ *
* @return the associated 'KieSession' instance
*/
public KieSession getKieSession() {
@@ -105,17 +109,21 @@ public class PolicySession
}
/**
+ * Get name.
+ *
* @return the local name of this session, which should either match the
- * name specified in 'kmodule.xml' file associated with this session, or the
- * name passed on the 'PolicyContainer.adoptKieSession' method.
+ * name specified in 'kmodule.xml' file associated with this session, or the
+ * name passed on the 'PolicyContainer.adoptKieSession' method.
*/
public String getName() {
return name;
}
/**
+ * Get full name.
+ *
* @return the 'PolicyContainer' name, followed by ':', followed by the
- * local name of the session. It should be useful in log messages.
+ * local name of the session. It should be useful in log messages.
*/
public String getFullName() {
return container.getName() + ":" + name;
@@ -137,8 +145,9 @@ public class PolicySession
for (PolicySessionFeatureAPI feature :
PolicySessionFeatureAPI.impl.getList()) {
try {
- if ((threadModel = feature.selectThreadModel(this)) != null)
+ if ((threadModel = feature.selectThreadModel(this)) != null) {
break;
+ }
} catch (Exception e) {
logger.error("ERROR: Feature API: "
+ feature.getClass().getName(), e);
@@ -164,7 +173,7 @@ public class PolicySession
}
/**
- * Notification that 'updateToVersion' was called on the container
+ * Notification that 'updateToVersion' was called on the container.
*/
void updated() {
if (threadModel != null) {
@@ -183,29 +192,31 @@ public class PolicySession
}
/**
+ * Get current session.
+ *
* @return the 'PolicySession' instance associated with the current thread
- * (Note that this only works if the current thread is the one running
- * 'kieSession.fireUntilHalt()'.)
+ * (Note that this only works if the current thread is the one running
+ * 'kieSession.fireUntilHalt()'.)
*/
public static PolicySession getCurrentSession() {
return policySess.get();
}
/**
- * Fetch the adjunct object associated with a given feature
+ * Fetch the adjunct object associated with a given feature.
*
* @param object this is typically the singleton feature object that is
* used as a key, but it might also be useful to use nested objects
* within the feature as keys.
* @return a feature-specific object associated with the key, or 'null'
- * if it is not found.
+ * if it is not found.
*/
public Object getAdjunct(Object object) {
return adjuncts.get(object);
}
/**
- * Store the adjunct object associated with a given feature
+ * Store the adjunct object associated with a given feature.
*
* @param object this is typically the singleton feature object that is
* used as a key, but it might also be useful to use nested objects
@@ -253,8 +264,7 @@ public class PolicySession
* {@inheritDoc}
*/
@Override
- public void afterRuleFlowGroupDeactivated
- (RuleFlowGroupDeactivatedEvent event) {
+ public void afterRuleFlowGroupDeactivated(RuleFlowGroupDeactivatedEvent event) {
if (logger.isDebugEnabled()) {
logger.debug("afterRuleFlowGroupDeactivated: " + getFullName()
+ ": AgendaEventListener.afterRuleFlowGroupDeactivated("
@@ -302,8 +312,7 @@ public class PolicySession
* {@inheritDoc}
*/
@Override
- public void beforeRuleFlowGroupActivated
- (RuleFlowGroupActivatedEvent event) {
+ public void beforeRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event) {
if (logger.isDebugEnabled()) {
logger.debug("beforeRuleFlowGroupActivated: " + getFullName()
+ ": AgendaEventListener.beforeRuleFlowGroupActivated("
@@ -315,8 +324,7 @@ public class PolicySession
* {@inheritDoc}
*/
@Override
- public void beforeRuleFlowGroupDeactivated
- (RuleFlowGroupDeactivatedEvent event) {
+ public void beforeRuleFlowGroupDeactivated(RuleFlowGroupDeactivatedEvent event) {
if (logger.isDebugEnabled()) {
logger.debug("beforeRuleFlowGroupDeactivated: " + getFullName()
+ ": AgendaEventListener.beforeRuleFlowGroupDeactivated("
@@ -391,12 +399,12 @@ public class PolicySession
*/
public interface ThreadModel {
/**
- * Start the thread or threads that do the 'KieSession' processing
+ * Start the thread or threads that do the 'KieSession' processing.
*/
public void start();
/**
- * Stop the thread or threads that do the 'KieSession' processing
+ * Stop the thread or threads that do the 'KieSession' processing.
*/
public void stop();
@@ -425,7 +433,7 @@ public class PolicySession
volatile boolean repeat = true;
/**
- * Constructor - initialize 'session' and create thread
+ * Constructor - initialize 'session' and create thread.
*
* @param session the 'PolicySession' instance
*/
@@ -435,6 +443,8 @@ public class PolicySession
}
/**
+ * Get thread name.
+ *
* @return the String to use as the thread name
*/
private String getThreadName() {
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureAPI.java b/policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureAPI.java
index 867325cd..3e49ee5b 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureAPI.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/PolicySessionFeatureAPI.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* policy-core
* ================================================================================
- * 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.
@@ -32,76 +32,71 @@ import org.onap.policy.drools.utils.OrderedServiceImpl;
* return a 'void' value. In other cases, such as 'activatePolicySession',
* may
*/
-public interface PolicySessionFeatureAPI extends OrderedService
-{
- /**
- * 'FeatureAPI.impl.getList()' returns an ordered list of objects
- * implementing the 'FeatureAPI' interface.
- */
- public static OrderedServiceImpl<PolicySessionFeatureAPI> impl =
- new OrderedServiceImpl<>(PolicySessionFeatureAPI.class);
+public interface PolicySessionFeatureAPI extends OrderedService {
+ /**
+ * 'FeatureAPI.impl.getList()' returns an ordered list of objects
+ * implementing the 'FeatureAPI' interface.
+ */
+ public static OrderedServiceImpl<PolicySessionFeatureAPI> impl =
+ new OrderedServiceImpl<>(PolicySessionFeatureAPI.class);
- /**
- * This method is called during initialization at a point right after
- * 'PolicyContainer' initialization has completed.
- *
- * @param args standard 'main' arguments, which are currently ignored
- * @param configDir the relative directory containing configuration files
- */
- public default void globalInit(String[] args, String configDir) {}
+ /**
+ * This method is called during initialization at a point right after
+ * 'PolicyContainer' initialization has completed.
+ *
+ * @param args standard 'main' arguments, which are currently ignored
+ * @param configDir the relative directory containing configuration files
+ */
+ public default void globalInit(String[] args, String configDir) {}
- /**
- * This method is used to create a 'KieSession' as part of a
- * 'PolicyContainer'. The caller of this method will iterate over the
- * implementers of this interface until one returns a non-null value.
- *
- * @param policyContainer the 'PolicyContainer' instance containing this
- * session
- * @param name the name of the KieSession (which is also the name of
- * the associated PolicySession)
- * @param kieBaseName the name of the 'KieBase' instance containing
- * this session
- * @return a new KieSession, if one was created, or 'null' if not
- * (this depends on the capabilities and state of the object implementing
- * this interface)
- */
- public default KieSession activatePolicySession
- (PolicyContainer policyContainer, String name, String kieBaseName)
- {
- return null;
- }
+ /**
+ * This method is used to create a 'KieSession' as part of a
+ * 'PolicyContainer'. The caller of this method will iterate over the
+ * implementers of this interface until one returns a non-null value.
+ *
+ * @param policyContainer the 'PolicyContainer' instance containing this
+ * session
+ * @param name the name of the KieSession (which is also the name of
+ * the associated PolicySession)
+ * @param kieBaseName the name of the 'KieBase' instance containing
+ * this session
+ * @return a new KieSession, if one was created, or 'null' if not
+ * (this depends on the capabilities and state of the object implementing
+ * this interface)
+ */
+ public default KieSession activatePolicySession(PolicyContainer policyContainer, String name, String kieBaseName) {
+ return null;
+ }
- /**
- * This method is called after a new 'PolicySession' has been initialized,
- * and linked to the 'PolicyContainer'.
- *
- * @param policySession the new 'PolicySession' instance
- */
- public default void newPolicySession(PolicySession policySession) {}
+ /**
+ * This method is called after a new 'PolicySession' has been initialized,
+ * and linked to the 'PolicyContainer'.
+ *
+ * @param policySession the new 'PolicySession' instance
+ */
+ public default void newPolicySession(PolicySession policySession) {}
- /**
- * This method is called to select the 'ThreadModel' instance associated
- * with a 'PolicySession' instance.
- */
- public default PolicySession.ThreadModel selectThreadModel
- (PolicySession session)
- {
- return null;
- }
+ /**
+ * This method is called to select the 'ThreadModel' instance associated
+ * with a 'PolicySession' instance.
+ */
+ public default PolicySession.ThreadModel selectThreadModel(PolicySession session) {
+ return null;
+ }
- /**
- * This method is called after 'KieSession.dispose()' is called
- *
- * @param policySession the 'PolicySession' object that wrapped the
- * 'KieSession'
- */
- public default void disposeKieSession(PolicySession policySession) {}
+ /**
+ * This method is called after 'KieSession.dispose()' is called.
+ *
+ * @param policySession the 'PolicySession' object that wrapped the
+ * 'KieSession'
+ */
+ public default void disposeKieSession(PolicySession policySession) {}
- /**
- * This method is called after 'KieSession.destroy()' is called
- *
- * @param policySession the 'PolicySession' object that wrapped the
- * 'KieSession'
- */
- public default void destroyKieSession(PolicySession policySession) {}
+ /**
+ * This method is called after 'KieSession.destroy()' is called.
+ *
+ * @param policySession the 'PolicySession' object that wrapped the
+ * 'KieSession'
+ */
+ public default void destroyKieSession(PolicySession policySession) {}
}
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmx.java b/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmx.java
index 19f6afb4..e1a89752 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmx.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmx.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* policy-core
* ================================================================================
- * 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.
@@ -24,29 +24,29 @@ import java.util.concurrent.atomic.AtomicLong;
public class PdpJmx implements PdpJmxMBean {
- private static PdpJmx instance = new PdpJmx();
- private final AtomicLong updates = new AtomicLong();
- private final AtomicLong actions = new AtomicLong();
+ private static PdpJmx instance = new PdpJmx();
+ private final AtomicLong updates = new AtomicLong();
+ private final AtomicLong actions = new AtomicLong();
- public static PdpJmx getInstance() {
- return instance;
- }
+ public static PdpJmx getInstance() {
+ return instance;
+ }
- @Override
- public long getUpdates(){
- return updates.longValue();
- }
+ @Override
+ public long getUpdates() {
+ return updates.longValue();
+ }
- @Override
- public long getRulesFired(){
- return actions.longValue();
- }
+ @Override
+ public long getRulesFired() {
+ return actions.longValue();
+ }
- public void updateOccured(){
- updates.incrementAndGet();
- }
+ public void updateOccured() {
+ updates.incrementAndGet();
+ }
- public void ruleFired(){
- actions.incrementAndGet();
- }
+ public void ruleFired() {
+ actions.incrementAndGet();
+ }
}
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxListener.java b/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxListener.java
index 9136defb..04f0dfd0 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxListener.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxListener.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* policy-core
* ================================================================================
- * 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.
@@ -35,36 +35,41 @@ import org.slf4j.LoggerFactory;
public class PdpJmxListener {
- public static final Logger logger = LoggerFactory.getLogger(PdpJmxListener.class);
+ public static final Logger logger = LoggerFactory.getLogger(PdpJmxListener.class);
- private PdpJmxListener() {
- }
+ private PdpJmxListener() {
+ }
- public static void stop() {
- final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
- try {
- server.unregisterMBean(new ObjectName("PolicyEngine:type=PdpJmx"));
- } catch (MBeanRegistrationException | InstanceNotFoundException
- | MalformedObjectNameException e) {
- logger.error("PdpJmxListener.stop(): " +
- "Could not unregister PolicyEngine:type=PdpJmx MBean " +
- "with the MBean server", e);
- }
-
- }
+ /**
+ * Stop the listener.
+ */
+ public static void stop() {
+ final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ try {
+ server.unregisterMBean(new ObjectName("PolicyEngine:type=PdpJmx"));
+ } catch (MBeanRegistrationException | InstanceNotFoundException
+ | MalformedObjectNameException e) {
+ logger.error("PdpJmxListener.stop(): "
+ + "Could not unregister PolicyEngine:type=PdpJmx MBean "
+ + "with the MBean server", e);
+ }
-
- public static void start() {
- final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
- try {
- server.registerMBean(PdpJmx.getInstance(), new ObjectName("PolicyEngine:type=PdpJmx"));
- } catch (InstanceAlreadyExistsException | MBeanRegistrationException
- | NotCompliantMBeanException | MalformedObjectNameException e) {
- logger.error("PdpJmxListener.start(): " +
- "Could not unregister PolicyEngine:type=PdpJmx MBean " +
- "with the MBean server", e);
- }
-
- }
+ }
+
+ /**
+ * Start.
+ */
+ public static void start() {
+ final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ try {
+ server.registerMBean(PdpJmx.getInstance(), new ObjectName("PolicyEngine:type=PdpJmx"));
+ } catch (InstanceAlreadyExistsException | MBeanRegistrationException
+ | NotCompliantMBeanException | MalformedObjectNameException e) {
+ logger.error("PdpJmxListener.start(): "
+ + "Could not unregister PolicyEngine:type=PdpJmx MBean "
+ + "with the MBean server", e);
+ }
+
+ }
}
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxMBean.java b/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxMBean.java
index 37a9e4dc..d2c05f85 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxMBean.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/jmx/PdpJmxMBean.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* policy-core
* ================================================================================
- * 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.
@@ -22,6 +22,7 @@ package org.onap.policy.drools.core.jmx;
public interface PdpJmxMBean {
- public long getRulesFired();
- public long getUpdates();
+ public long getRulesFired();
+
+ public long getUpdates();
}
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/lock/Lock.java b/policy-core/src/main/java/org/onap/policy/drools/core/lock/Lock.java
index d3764910..de62b24a 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/lock/Lock.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/lock/Lock.java
@@ -59,7 +59,7 @@ public class Lock<T> {
* The requester was not the owner, nor was it waiting in the queue.
*/
NOT_FOUND
- };
+ }
/**
* The last owner to grab the lock, never {@code null}.
@@ -75,6 +75,7 @@ public class Lock<T> {
private LinkedHashMap<String, T> requester2item = new LinkedHashMap<>(5);
/**
+ * Constructor.
*
* @param owner the current owner of this lock
*/
@@ -83,6 +84,7 @@ public class Lock<T> {
}
/**
+ * Get owner.
*
* @return the current owner of the lock, or the last owner of the lock, if the lock
* is not currently owned. (This will never be {@code null}.)
@@ -94,7 +96,7 @@ public class Lock<T> {
/**
* Adds a new requester to the queue of requesters.
*
- * @param requester
+ * @param requester the requester
* @param item to be associated with the requester, must not be {@code null}
* @return {@code true} if the requester was added, {@code false} if it already owns
* the lock or is already in the queue
@@ -123,7 +125,7 @@ public class Lock<T> {
* item associated with the requester, it is unable to notify the new owner that it's
* the new owner; that is left up to the code that invokes this method.
*
- * @param requester
+ * @param requester the requester
* @param newOwner the new owner info is placed here, if the result is <i>RELOCKED</i>
* @return the result
*/
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPI.java b/policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPI.java
index 5aee490f..105d6ec9 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPI.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPI.java
@@ -26,12 +26,12 @@ import org.onap.policy.drools.utils.OrderedServiceImpl;
/**
* Resource locks. Each lock has an "owner", which is intended to be unique across a
* single instance of a running PolicyEngine.
- * <p>
- * This interface provides a way to invoke optional features at various points in the
+ *
+ * <p>This interface provides a way to invoke optional features at various points in the
* code. At appropriate points in the application, the code iterates through this list,
* invoking these optional methods.
- * <p>
- * Implementers may choose to implement a level of locking appropriate to the application.
+ *
+ * <p>Implementers may choose to implement a level of locking appropriate to the application.
* For instance, they may choose to implement an engine-wide locking scheme, or they may
* choose to implement a global locking scheme (e.g., through a shared DB).
*/
@@ -45,7 +45,6 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
new OrderedServiceImpl<>(PolicyResourceLockFeatureAPI.class);
/**
- *
* Result of a requested operation.
*/
public enum OperResult {
@@ -65,7 +64,7 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
/**
* The implementer did not handle the request; additional locking logic <i>should
- * be<i> performed.
+ * be</i> performed.
*/
OPER_UNHANDLED
}
@@ -73,8 +72,8 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
/**
* This method is called before a lock is acquired on a resource.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @param holdSec the amount of time, in seconds, that the lock should be held
* @return the result, where <b>OPER_DENIED</b> indicates that the lock is currently
* held by another owner
@@ -86,8 +85,8 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
/**
* This method is called after a lock for a resource has been acquired or denied.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @param locked {@code true} if the lock was acquired, {@code false} if it was denied
* @return {@code true} if the implementer handled the request, {@code false}
* otherwise
@@ -100,8 +99,8 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
* This method is called before a lock is refreshed on a resource. It may be invoked
* repeatedly to extend the time that a lock is held.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @param holdSec the amount of time, in seconds, that the lock should be held
* @return the result, where <b>OPER_DENIED</b> indicates that the resource is not
* currently locked by the given owner
@@ -114,8 +113,8 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
* This method is called after a lock for a resource has been refreshed (or after the
* refresh has been denied).
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @param locked {@code true} if the lock was acquired, {@code false} if it was denied
* @return {@code true} if the implementer handled the request, {@code false}
* otherwise
@@ -127,8 +126,8 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
/**
* This method is called before a lock on a resource is released.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @return the result, where <b>OPER_DENIED</b> indicates that the lock is not
* currently held by the given owner
*/
@@ -139,8 +138,8 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
/**
* This method is called after a lock on a resource is released.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @param unlocked {@code true} if the lock was released, {@code false} if the owner
* did not have a lock on the resource
* @return {@code true} if the implementer handled the request, {@code false}
@@ -153,7 +152,7 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
/**
* This method is called before a check is made to determine if a resource is locked.
*
- * @param resourceId
+ * @param resourceId resource id
* @return the result, where <b>OPER_ACCEPTED</b> indicates that the resource is
* locked, while <b>OPER_DENIED</b> indicates that it is not
*/
@@ -165,8 +164,8 @@ public interface PolicyResourceLockFeatureAPI extends OrderedService {
* This method is called before a check is made to determine if a particular owner
* holds the lock on a resource.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @return the result, where <b>OPER_ACCEPTED</b> indicates that the resource is
* locked by the given owner, while <b>OPER_DENIED</b> indicates that it is
* not
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockManager.java b/policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockManager.java
index 8e13ced4..3612b29d 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockManager.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/lock/PolicyResourceLockManager.java
@@ -47,6 +47,7 @@ public class PolicyResourceLockManager extends SimpleLockManager {
}
/**
+ * Get instance.
*
* @return the manager singleton
*/
@@ -61,7 +62,7 @@ public class PolicyResourceLockManager extends SimpleLockManager {
/**
* Sets the factory to be used by junit tests.
*
- * @param factory
+ * @param factory the factory
*/
protected static void setFactory(Factory factory) {
PolicyResourceLockManager.factory = factory;
@@ -134,6 +135,7 @@ public class PolicyResourceLockManager extends SimpleLockManager {
}
/**
+ * Is locked.
*
* @throws IllegalArgumentException if the resourceId is {@code null}
*/
@@ -146,13 +148,14 @@ public class PolicyResourceLockManager extends SimpleLockManager {
return doBoolIntercept(impl -> impl.beforeIsLocked(resourceId), () ->
- // implementer didn't do the work - defer to the superclass
+ // implementer didn't do the work - defer to the superclass
super.isLocked(resourceId)
);
}
/**
- *
+ * Is locked by.
+ *
* @throws IllegalArgumentException if the resourceId or owner is {@code null}
*/
@Override
@@ -177,8 +180,8 @@ public class PolicyResourceLockManager extends SimpleLockManager {
* of them returns a result other than <b>OPER_UNHANDLED</b>. If they all return
* <b>OPER_UNHANDLED</b>, then it returns the result of applying the default function.
*
- * @param interceptFunc
- * @param defaultFunc
+ * @param interceptFunc intercept function
+ * @param defaultFunc default function
* @return {@code true} if success, {@code false} otherwise
*/
private boolean doBoolIntercept(Function<PolicyResourceLockFeatureAPI, OperResult> interceptFunc,
@@ -199,8 +202,8 @@ public class PolicyResourceLockManager extends SimpleLockManager {
* @param continueValue if the implementer returns this value, then it continues to
* check addition implementers
* @param func function to be applied to the implementers
- * @return first non-null value returned by an implementer, <i>continueValue<i/> if
- * they all returned <i>continueValue<i/>
+ * @return first non-null value returned by an implementer, <i>continueValue</i> if
+ * they all returned <i>continueValue</i>
*/
private static <T> T doIntercept(T continueValue, Function<PolicyResourceLockFeatureAPI, T> func) {
@@ -241,6 +244,7 @@ public class PolicyResourceLockManager extends SimpleLockManager {
public static class Factory {
/**
+ * Get implementers.
*
* @return the list of feature implementers
*/
diff --git a/policy-core/src/main/java/org/onap/policy/drools/core/lock/SimpleLockManager.java b/policy-core/src/main/java/org/onap/policy/drools/core/lock/SimpleLockManager.java
index 243ba3cb..427fbbc6 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/core/lock/SimpleLockManager.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/core/lock/SimpleLockManager.java
@@ -67,7 +67,7 @@ public class SimpleLockManager {
private final SortedSet<Data> locks = new TreeSet<>();
/**
- *
+ * Constructor.
*/
public SimpleLockManager() {
super();
@@ -78,8 +78,8 @@ public class SimpleLockManager {
* it's the same owner; the same owner can use {@link #refresh(String, String, int)
* refresh()}, instead, to extend a lock on a resource.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @param holdSec the amount of time, in seconds, that the lock should be held
* @return {@code true} if locked, {@code false} if the resource is already locked by
* a different owner
@@ -97,10 +97,10 @@ public class SimpleLockManager {
boolean locked = false;
- synchronized(locker) {
+ synchronized (locker) {
cleanUpLocks();
- if(!resource2data.containsKey(resourceId)) {
+ if (!resource2data.containsKey(resourceId)) {
Data data = new Data(owner, resourceId, currentTime.getMillis() + TimeUnit.SECONDS.toMillis(holdSec));
resource2data.put(resourceId, data);
locks.add(data);
@@ -116,8 +116,8 @@ public class SimpleLockManager {
/**
* Attempts to refresh a lock on a resource.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @param holdSec the amount of time, in seconds, that the lock should be held
* @return {@code true} if locked, {@code false} if the resource is not currently
* locked by the given owner
@@ -135,7 +135,7 @@ public class SimpleLockManager {
boolean refreshed = false;
- synchronized(locker) {
+ synchronized (locker) {
cleanUpLocks();
Data existingLock = resource2data.get(resourceId);
@@ -159,8 +159,8 @@ public class SimpleLockManager {
/**
* Unlocks a resource.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @return {@code true} if unlocked, {@code false} if the given owner does not
* currently hold a lock on the resource
* @throws IllegalArgumentException if the resourceId or owner is {@code null}
@@ -176,11 +176,11 @@ public class SimpleLockManager {
Data data;
- synchronized(locker) {
+ synchronized (locker) {
cleanUpLocks();
- if((data = resource2data.get(resourceId)) != null) {
- if(owner.equals(data.getOwner())) {
+ if ((data = resource2data.get(resourceId)) != null) {
+ if (owner.equals(data.getOwner())) {
resource2data.remove(resourceId);
locks.remove(data);
@@ -199,7 +199,7 @@ public class SimpleLockManager {
/**
* Determines if a resource is locked by anyone.
*
- * @param resourceId
+ * @param resourceId resource id
* @return {@code true} if the resource is locked, {@code false} otherwise
* @throws IllegalArgumentException if the resourceId is {@code null}
*/
@@ -211,7 +211,7 @@ public class SimpleLockManager {
boolean locked;
- synchronized(locker) {
+ synchronized (locker) {
cleanUpLocks();
locked = resource2data.containsKey(resourceId);
@@ -225,8 +225,8 @@ public class SimpleLockManager {
/**
* Determines if a resource is locked by a particular owner.
*
- * @param resourceId
- * @param owner
+ * @param resourceId resource id
+ * @param owner owner
* @return {@code true} if the resource is locked, {@code false} otherwise
* @throws IllegalArgumentException if the resourceId or owner is {@code null}
*/
@@ -242,7 +242,7 @@ public class SimpleLockManager {
Data data;
- synchronized(locker) {
+ synchronized (locker) {
cleanUpLocks();
data = resource2data.get(resourceId);
@@ -260,14 +260,13 @@ public class SimpleLockManager {
private void cleanUpLocks() {
long tcur = currentTime.getMillis();
- synchronized(locker) {
+ synchronized (locker) {
Iterator<Data> it = locks.iterator();
- while(it.hasNext()) {
- Data d = it.next();
- if(d.getExpirationMs() <= tcur) {
+ while (it.hasNext()) {
+ Data data = it.next();
+ if (data.getExpirationMs() <= tcur) {
it.remove();
- resource2data.remove(d.getResource());
-
+ resource2data.remove(data.getResource());
} else {
break;
}
@@ -307,10 +306,11 @@ public class SimpleLockManager {
private final long texpireMs;
/**
+ * Constructor.
*
- * @param resource
- * @param owner
- * @param texpireMs
+ * @param resource resource
+ * @param owner owner
+ * @param texpireMs time expire in milliseconds
*/
public Data(String owner, String resource, long texpireMs) {
this.owner = owner;
@@ -331,12 +331,14 @@ public class SimpleLockManager {
}
@Override
- public int compareTo(Data o) {
- int diff = Long.compare(texpireMs, o.texpireMs);
- if(diff == 0)
- diff = resource.compareTo(o.resource);
- if(diff == 0)
- diff = owner.compareTo(o.owner);
+ public int compareTo(Data data) {
+ int diff = Long.compare(texpireMs, data.texpireMs);
+ if (diff == 0) {
+ diff = resource.compareTo(data.resource);
+ }
+ if (diff == 0) {
+ diff = owner.compareTo(data.owner);
+ }
return diff;
}
@@ -352,23 +354,30 @@ public class SimpleLockManager {
@Override
public boolean equals(Object obj) {
- if (this == obj)
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (getClass() != obj.getClass())
+ }
+ if (getClass() != obj.getClass()) {
return false;
+ }
Data other = (Data) obj;
if (owner == null) {
- if (other.owner != null)
+ if (other.owner != null) {
return false;
- } else if (!owner.equals(other.owner))
+ }
+ } else if (!owner.equals(other.owner)) {
return false;
+ }
if (resource == null) {
- if (other.resource != null)
+ if (other.resource != null) {
return false;
- } else if (!resource.equals(other.resource))
+ }
+ } else if (!resource.equals(other.resource)) {
return false;
+ }
return (texpireMs == other.texpireMs);
}
}
diff --git a/policy-core/src/main/java/org/onap/policy/drools/util/FeatureEnabledChecker.java b/policy-core/src/main/java/org/onap/policy/drools/util/FeatureEnabledChecker.java
index e604c30a..3bbfdcf4 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/util/FeatureEnabledChecker.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/util/FeatureEnabledChecker.java
@@ -28,7 +28,7 @@ import java.util.Properties;
public class FeatureEnabledChecker {
/**
- *
+ * Constructor.
*/
private FeatureEnabledChecker() {
super();
diff --git a/policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java b/policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java
index 16e166d2..a3efe433 100644
--- a/policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java
+++ b/policy-core/src/main/java/org/onap/policy/drools/util/KieUtils.java
@@ -37,16 +37,16 @@ import org.kie.api.builder.model.KieModuleModel;
import org.kie.scanner.MavenRepository;
/**
- * Kie related utilities
+ * Kie related utilities.
*/
public class KieUtils {
- private KieUtils() {
- throw new IllegalStateException("Utility class");
- }
-
+ private KieUtils() {
+ throw new IllegalStateException("Utility class");
+ }
+
/**
- * Installs a rules artifact in the local maven repository
+ * Installs a rules artifact in the local maven repository.
*
* @param kmodule kmodule specification
* @param pom pom
@@ -56,7 +56,8 @@ public class KieUtils {
* @return releaseId result o a sucessful installation
* @throws IOException error accessing necessary resources
*/
- public static ReleaseId installArtifact(String kmodule, String pom, String drlKJarPath, String drl) throws IOException {
+ public static ReleaseId installArtifact(String kmodule, String pom, String drlKJarPath,
+ String drl) throws IOException {
KieModuleModel kieModule = KieModuleModelImpl.fromXML(kmodule);
final KieFileSystem kieFileSystem = KieServices.Factory.get().newKieFileSystem();
@@ -72,15 +73,15 @@ public class KieUtils {
pomFile.deleteOnExit();
ReleaseId releaseId = kieBuilder.getKieModule().getReleaseId();
- MavenRepository.getMavenRepository().
- installArtifact(releaseId,
+ MavenRepository.getMavenRepository()
+ .installArtifact(releaseId,
(InternalKieModule) kieBuilder.getKieModule(),
pomFile);
return releaseId;
}
/**
- * Installs a rules artifact in the local maven repository
+ * Installs a rules artifact in the local maven repository.
*
* @param kmodule kmodule specification
* @param pom pom
@@ -101,16 +102,17 @@ public class KieUtils {
KieBuilder kieBuilder = kieBuild(kieFileSystem);
ReleaseId releaseId = kieBuilder.getKieModule().getReleaseId();
- MavenRepository.getMavenRepository().
- installArtifact(releaseId, (InternalKieModule) kieBuilder.getKieModule(), pom);
+ MavenRepository.getMavenRepository()
+ .installArtifact(releaseId, (InternalKieModule) kieBuilder.getKieModule(), pom);
return releaseId;
}
private static KieBuilder kieBuild(KieFileSystem kieFileSystem) {
KieBuilder kieBuilder = KieServices.Factory.get().newKieBuilder(kieFileSystem);
List<Message> messages = kieBuilder.buildAll().getResults().getMessages();
- if (messages != null && !messages.isEmpty())
+ if (messages != null && !messages.isEmpty()) {
throw new IllegalArgumentException(messages.toString());
+ }
return kieBuilder;
}
}
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java
index 1da6e011..d2d0dec2 100644
--- a/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java
+++ b/policy-core/src/test/java/org/onap/policy/drools/core/DroolsContainerTest.java
@@ -26,330 +26,302 @@ import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.nio.file.Paths;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import org.junit.BeforeClass;
import org.junit.Test;
import org.onap.policy.drools.util.KieUtils;
/**
- * These tests focus on the following classes:
- * PolicyContainer
- * PolicySession
- * PolicySessionFeatureAPI
+ * These tests focus on the following classes.
+ * PolicyContainer
+ * PolicySession
+ * PolicySessionFeatureAPI
*/
-public class DroolsContainerTest
-{
- /**
- * This test is centered around the creation of a 'PolicyContainer'
- * and 'PolicySession', and the updating of that container to a new
- * version.
- */
- @BeforeClass
- public static void setUp() throws Exception
- {
- KieUtils.installArtifact
- (Paths.get("src/test/resources/drools-artifact-1.1/src/main/resources/META-INF/kmodule.xml").toFile(),
- Paths.get("src/test/resources/drools-artifact-1.1/pom.xml").toFile(),
- "src/main/resources/rules/org/onap/policy/drools/core/test/rules.drl",
- Paths.get("src/test/resources/drools-artifact-1.1/src/main/resources/rules.drl").toFile());
-
- KieUtils.installArtifact
- (Paths.get("src/test/resources/drools-artifact-1.2/src/main/resources/META-INF/kmodule.xml").toFile(),
- Paths.get("src/test/resources/drools-artifact-1.2/pom.xml").toFile(),
- "src/main/resources/rules/org/onap/policy/drools/core/test/rules.drl",
- Paths.get("src/test/resources/drools-artifact-1.2/src/main/resources/rules.drl").toFile());
- }
-
- /**
- * This test is centered around the creation of a 'PolicyContainer'
- * and 'PolicySession', and the updating of that container to a new
- * version.
- */
- @Test
- public void createAndUpdate() throws Exception
- {
- // make sure feature log starts out clean
- TestPolicySessionFeatureAPI.getLog();
-
- // run 'globalInit', and verify expected feature hook fired
- PolicyContainer.globalInit(new String[0]);
- assertEquals(buildArrayList("globalInit"),
- TestPolicySessionFeatureAPI.getLog());
-
- // initial conditions -- there should be no containers
- assertEquals(0, PolicyContainer.getPolicyContainers().size());
-
- // create the container, and start it
- PolicyContainer container =
- new PolicyContainer("org.onap.policy.drools-pdp",
- "drools-artifact1", "17.1.0-SNAPSHOT");
- container.start();
- assertTrue(container.isAlive());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("activatePolicySession",
- "newPolicySession",
- "selectThreadModel"),
- TestPolicySessionFeatureAPI.getLog());
-
- // this container should be on the list
- {
- Collection<PolicyContainer> containers =
- PolicyContainer.getPolicyContainers();
- assertEquals(1, containers.size());
- assertTrue(containers.contains(container));
- }
-
- // verify initial container attributes
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT",
- container.getName());
- assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
- assertEquals("drools-artifact1", container.getArtifactId());
- assertEquals("17.1.0-SNAPSHOT", container.getVersion());
-
- try
- {
- // fetch the session, and verify that it exists
- PolicySession session = container.getPolicySession("session1");
- assertTrue(session != null);
-
- // get all sessions, and verify that this one is the only one
- {
- Collection<PolicySession> sessions = container.getPolicySessions();
- assertEquals(1, sessions.size());
- assertTrue(sessions.contains(session));
- }
-
- // verify session attributes
- assertEquals(container, session.getPolicyContainer());
- assertEquals("session1", session.getName());
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT:session1",
- session.getFullName());
-
- // insert a new fact
- int[] a = new int[]{0, 3, 8, 2};
- session.getKieSession().insert(a);
-
- // the Drools rules should add 3 + 8 + 2, and store 13 in a[0]
- assertTrue(waitForChange(a) == 13);
-
- // update the container to a new version --
- // the rules will then multiply values rather than add them
- assertEquals("[]",
- container.updateToVersion("17.2.0-SNAPSHOT").toString());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("selectThreadModel"),
- TestPolicySessionFeatureAPI.getLog());
-
- // verify new container attributes
- assertEquals
- ("org.onap.policy.drools-pdp:drools-artifact1:17.2.0-SNAPSHOT",
- container.getName());
- assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
- assertEquals("drools-artifact1", container.getArtifactId());
- assertEquals("17.2.0-SNAPSHOT", container.getVersion());
-
- // verify new session attributes
- assertEquals(container, session.getPolicyContainer());
- assertEquals("session1", session.getName());
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.2.0-SNAPSHOT:session1",
- session.getFullName());
-
- // the updated rules should now multiply 3 * 8 * 2, and return 48
-
- a[0] = 0;
- container.insert("session1", a);
- assertTrue(waitForChange(a) == 48);
- }
- finally
- {
- container.shutdown();
- assertFalse(container.isAlive());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("disposeKieSession"),
- TestPolicySessionFeatureAPI.getLog());
- }
-
- // final conditions -- there should be no containers
- assertEquals(0, PolicyContainer.getPolicyContainers().size());
- }
-
- /**
- * This test create a 'PolicyContainer' and 'PolicySession', and verifies
- * their behavior, but uses alternate interfaces to increase code coverage.
- * In addition, feature hook invocations will trigger exceptions in this
- * test, also to increase code coverage.
- */
- @Test
- public void versionList() throws Exception
- {
- // make sure feature log starts out clean
- TestPolicySessionFeatureAPI.getLog();
-
- // trigger exceptions in all feature hooks
- TestPolicySessionFeatureAPI.setExceptionTrigger(true);
-
- // run 'globalInit', and verify expected feature hook fired
- PolicyContainer.globalInit(new String[0]);
- assertEquals(buildArrayList("globalInit-exception"),
- TestPolicySessionFeatureAPI.getLog());
-
- // initial conditions -- there should be no containers
- assertEquals(0, PolicyContainer.getPolicyContainers().size());
-
- String versionList =
- "17.3.0-SNAPSHOT,17.1.0-SNAPSHOT,17.2.0-SNAPSHOT";
-
- // versions should be tried in order -- the 17.1.0-SNAPSHOT should "win",
- // given the fact that '17.3.0-SNAPSHOT' doesn't exist
- PolicyContainer container =
- new PolicyContainer("org.onap.policy.drools-pdp",
- "drools-artifact1", versionList);
- // the following should be equivalent to 'container.start()'
- PolicyContainer.activate();
- assertTrue(container.isAlive());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("activatePolicySession-exception",
- "newPolicySession-exception",
- "selectThreadModel-exception"),
- TestPolicySessionFeatureAPI.getLog());
-
- // this container should be on the list
- {
- Collection<PolicyContainer> containers =
- PolicyContainer.getPolicyContainers();
- assertEquals(1, containers.size());
- assertTrue(containers.contains(container));
- }
-
- // verify initial container attributes
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT",
- container.getName());
- assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
- assertEquals("drools-artifact1", container.getArtifactId());
- assertEquals("17.1.0-SNAPSHOT", container.getVersion());
-
- // some container adjunct tests
- {
- Object bogusAdjunct = new Object();
-
- // initially, no adjunct
- assertSame(null, container.getAdjunct(this));
-
- // set and verify adjunct
- container.setAdjunct(this, bogusAdjunct);
- assertSame(bogusAdjunct, container.getAdjunct(this));
-
- // clear and verify adjunct
- container.setAdjunct(this, null);
- assertSame(null, container.getAdjunct(this));
- }
-
- try
- {
- // fetch the session, and verify that it exists
- PolicySession session = container.getPolicySession("session1");
- assertTrue(session != null);
-
- // get all sessions, and verify that this one is the only one
- {
- Collection<PolicySession> sessions = container.getPolicySessions();
- assertEquals(1, sessions.size());
- assertTrue(sessions.contains(session));
- }
-
- // verify session attributes
- assertEquals(container, session.getPolicyContainer());
- assertEquals("session1", session.getName());
- assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT:session1",
- session.getFullName());
-
- // some session adjunct tests
- {
- Object bogusAdjunct = new Object();
-
- // initially, no adjunct
- assertSame(null, session.getAdjunct(this));
-
- // set and verify adjunct
- session.setAdjunct(this, bogusAdjunct);
- assertSame(bogusAdjunct, session.getAdjunct(this));
-
- // clear and verify adjunct
- session.setAdjunct(this, null);
- assertSame(null, session.getAdjunct(this));
- }
-
- // insert a new fact (using 'insertAll')
- int[] a = new int[]{0, 7, 3, 4};
- container.insertAll(a);
-
- // the Drools rules should add 7 + 3 + 4, and store 14 in a[0]
- assertTrue(waitForChange(a) == 14);
-
- // exercise some more API methods
- assertEquals(container.getClassLoader(),
- container.getKieContainer().getClassLoader());
- }
- finally
- {
- // should be equivalent to 'shutdown' without persistence
- container.destroy();
- assertFalse(container.isAlive());
-
- // verify expected feature hooks fired
- assertEquals(buildArrayList("destroyKieSession-exception"),
- TestPolicySessionFeatureAPI.getLog());
-
- // clear exception trigger
- TestPolicySessionFeatureAPI.setExceptionTrigger(false);
- }
-
- // final conditions -- there should be no containers
- assertEquals(0, PolicyContainer.getPolicyContainers().size());
- }
-
- /**
- * This method is tied to the expected behavior of the drools sessions.
- * Initially, the value of 'array[0]' should be 0. The Drools rules
- * will either add or multiply 'array[1]' through 'array[n-1]', depending
- * upon the version. It waits up to 30 seconds for a non-zero value
- * to appear.
- */
- private int waitForChange(int[] array) throws InterruptedException
- {
- int rval = -1;
-
- // the value is tested every 1/100 of a second, and it waits up to
- // 3000 iterations (= 30 seconds) for a non-zero value
- for (int i = 0 ; i < 3000 ; i += 1)
- {
- // wait for 10 milliseconds = 1/100 of a second
- Thread.sleep(10);
- if ((rval = array[0]) != 0)
- {
- // a non-zero value has been stored
- break;
- }
- }
- return(rval);
- }
-
- /**
- * @param args an array of string arguments
- * @return an ArrayList constructed from the provided arguments
- */
- private ArrayList<String> buildArrayList(String... args)
- {
- ArrayList<String> rval = new ArrayList<>();
- for (String arg : args)
- {
- rval.add(arg);
- }
- return(rval);
- }
+public class DroolsContainerTest {
+ /**
+ * This test is centered around the creation of a 'PolicyContainer'
+ * and 'PolicySession', and the updating of that container to a new
+ * version.
+ */
+ @BeforeClass
+ public static void setUp() throws Exception {
+ KieUtils.installArtifact(
+ Paths.get("src/test/resources/drools-artifact-1.1/src/main/resources/META-INF/kmodule.xml").toFile(),
+ Paths.get("src/test/resources/drools-artifact-1.1/pom.xml").toFile(),
+ "src/main/resources/rules/org/onap/policy/drools/core/test/rules.drl",
+ Paths.get("src/test/resources/drools-artifact-1.1/src/main/resources/rules.drl").toFile());
+
+ KieUtils.installArtifact(
+ Paths.get("src/test/resources/drools-artifact-1.2/src/main/resources/META-INF/kmodule.xml").toFile(),
+ Paths.get("src/test/resources/drools-artifact-1.2/pom.xml").toFile(),
+ "src/main/resources/rules/org/onap/policy/drools/core/test/rules.drl",
+ Paths.get("src/test/resources/drools-artifact-1.2/src/main/resources/rules.drl").toFile());
+ }
+
+ /**
+ * This test is centered around the creation of a 'PolicyContainer'
+ * and 'PolicySession', and the updating of that container to a new
+ * version.
+ */
+ @Test
+ public void createAndUpdate() throws Exception {
+ // make sure feature log starts out clean
+ PolicySessionFeatureApiTest.getLog();
+
+ // run 'globalInit', and verify expected feature hook fired
+ PolicyContainer.globalInit(new String[0]);
+ assertEquals(Arrays.asList("globalInit"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // initial conditions -- there should be no containers
+ assertEquals(0, PolicyContainer.getPolicyContainers().size());
+
+ // create the container, and start it
+ PolicyContainer container =
+ new PolicyContainer("org.onap.policy.drools-pdp",
+ "drools-artifact1", "17.1.0-SNAPSHOT");
+ container.start();
+ assertTrue(container.isAlive());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("activatePolicySession",
+ "newPolicySession",
+ "selectThreadModel"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // this container should be on the list
+ {
+ Collection<PolicyContainer> containers =
+ PolicyContainer.getPolicyContainers();
+ assertEquals(1, containers.size());
+ assertTrue(containers.contains(container));
+ }
+
+ // verify initial container attributes
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT",
+ container.getName());
+ assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
+ assertEquals("drools-artifact1", container.getArtifactId());
+ assertEquals("17.1.0-SNAPSHOT", container.getVersion());
+
+ try {
+ // fetch the session, and verify that it exists
+ PolicySession session = container.getPolicySession("session1");
+ assertTrue(session != null);
+
+ // get all sessions, and verify that this one is the only one
+ {
+ Collection<PolicySession> sessions = container.getPolicySessions();
+ assertEquals(1, sessions.size());
+ assertTrue(sessions.contains(session));
+ }
+
+ // verify session attributes
+ assertEquals(container, session.getPolicyContainer());
+ assertEquals("session1", session.getName());
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT:session1",
+ session.getFullName());
+
+ // insert a new fact
+ int[] facts = new int[]{0, 3, 8, 2};
+ session.getKieSession().insert(facts);
+
+ // the Drools rules should add 3 + 8 + 2, and store 13 in a[0]
+ assertTrue(waitForChange(facts) == 13);
+
+ // update the container to a new version --
+ // the rules will then multiply values rather than add them
+ assertEquals("[]",
+ container.updateToVersion("17.2.0-SNAPSHOT").toString());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("selectThreadModel"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // verify new container attributes
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.2.0-SNAPSHOT",
+ container.getName());
+ assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
+ assertEquals("drools-artifact1", container.getArtifactId());
+ assertEquals("17.2.0-SNAPSHOT", container.getVersion());
+
+ // verify new session attributes
+ assertEquals(container, session.getPolicyContainer());
+ assertEquals("session1", session.getName());
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.2.0-SNAPSHOT:session1",
+ session.getFullName());
+
+ // the updated rules should now multiply 3 * 8 * 2, and return 48
+
+ facts[0] = 0;
+ container.insert("session1", facts);
+ assertTrue(waitForChange(facts) == 48);
+ } finally {
+ container.shutdown();
+ assertFalse(container.isAlive());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("disposeKieSession"),
+ PolicySessionFeatureApiTest.getLog());
+ }
+
+ // final conditions -- there should be no containers
+ assertEquals(0, PolicyContainer.getPolicyContainers().size());
+ }
+
+ /**
+ * This test create a 'PolicyContainer' and 'PolicySession', and verifies
+ * their behavior, but uses alternate interfaces to increase code coverage.
+ * In addition, feature hook invocations will trigger exceptions in this
+ * test, also to increase code coverage.
+ */
+ @Test
+ public void versionList() throws Exception {
+ // make sure feature log starts out clean
+ PolicySessionFeatureApiTest.getLog();
+
+ // trigger exceptions in all feature hooks
+ PolicySessionFeatureApiTest.setExceptionTrigger(true);
+
+ // run 'globalInit', and verify expected feature hook fired
+ PolicyContainer.globalInit(new String[0]);
+ assertEquals(Arrays.asList("globalInit-exception"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // initial conditions -- there should be no containers
+ assertEquals(0, PolicyContainer.getPolicyContainers().size());
+
+ String versionList =
+ "17.3.0-SNAPSHOT,17.1.0-SNAPSHOT,17.2.0-SNAPSHOT";
+
+ // versions should be tried in order -- the 17.1.0-SNAPSHOT should "win",
+ // given the fact that '17.3.0-SNAPSHOT' doesn't exist
+ PolicyContainer container =
+ new PolicyContainer("org.onap.policy.drools-pdp",
+ "drools-artifact1", versionList);
+ // the following should be equivalent to 'container.start()'
+ PolicyContainer.activate();
+ assertTrue(container.isAlive());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("activatePolicySession-exception",
+ "newPolicySession-exception",
+ "selectThreadModel-exception"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // this container should be on the list
+ {
+ Collection<PolicyContainer> containers =
+ PolicyContainer.getPolicyContainers();
+ assertEquals(1, containers.size());
+ assertTrue(containers.contains(container));
+ }
+
+ // verify initial container attributes
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT",
+ container.getName());
+ assertEquals("org.onap.policy.drools-pdp", container.getGroupId());
+ assertEquals("drools-artifact1", container.getArtifactId());
+ assertEquals("17.1.0-SNAPSHOT", container.getVersion());
+
+ // some container adjunct tests
+ {
+ Object bogusAdjunct = new Object();
+
+ // initially, no adjunct
+ assertSame(null, container.getAdjunct(this));
+
+ // set and verify adjunct
+ container.setAdjunct(this, bogusAdjunct);
+ assertSame(bogusAdjunct, container.getAdjunct(this));
+
+ // clear and verify adjunct
+ container.setAdjunct(this, null);
+ assertSame(null, container.getAdjunct(this));
+ }
+
+ try {
+ // fetch the session, and verify that it exists
+ PolicySession session = container.getPolicySession("session1");
+ assertTrue(session != null);
+
+ // get all sessions, and verify that this one is the only one
+ {
+ Collection<PolicySession> sessions = container.getPolicySessions();
+ assertEquals(1, sessions.size());
+ assertTrue(sessions.contains(session));
+ }
+
+ // verify session attributes
+ assertEquals(container, session.getPolicyContainer());
+ assertEquals("session1", session.getName());
+ assertEquals("org.onap.policy.drools-pdp:drools-artifact1:17.1.0-SNAPSHOT:session1",
+ session.getFullName());
+
+ // some session adjunct tests
+ {
+ Object bogusAdjunct = new Object();
+
+ // initially, no adjunct
+ assertSame(null, session.getAdjunct(this));
+
+ // set and verify adjunct
+ session.setAdjunct(this, bogusAdjunct);
+ assertSame(bogusAdjunct, session.getAdjunct(this));
+
+ // clear and verify adjunct
+ session.setAdjunct(this, null);
+ assertSame(null, session.getAdjunct(this));
+ }
+
+ // insert a new fact (using 'insertAll')
+ int[] facts = new int[]{0, 7, 3, 4};
+ container.insertAll(facts);
+
+ // the Drools rules should add 7 + 3 + 4, and store 14 in a[0]
+ assertTrue(waitForChange(facts) == 14);
+
+ // exercise some more API methods
+ assertEquals(container.getClassLoader(),
+ container.getKieContainer().getClassLoader());
+ } finally {
+ // should be equivalent to 'shutdown' without persistence
+ container.destroy();
+ assertFalse(container.isAlive());
+
+ // verify expected feature hooks fired
+ assertEquals(Arrays.asList("destroyKieSession-exception"),
+ PolicySessionFeatureApiTest.getLog());
+
+ // clear exception trigger
+ PolicySessionFeatureApiTest.setExceptionTrigger(false);
+ }
+
+ // final conditions -- there should be no containers
+ assertEquals(0, PolicyContainer.getPolicyContainers().size());
+ }
+
+ /**
+ * This method is tied to the expected behavior of the drools sessions.
+ * Initially, the value of 'array[0]' should be 0. The Drools rules
+ * will either add or multiply 'array[1]' through 'array[n-1]', depending
+ * upon the version. It waits up to 30 seconds for a non-zero value
+ * to appear.
+ */
+ private int waitForChange(int[] array) throws InterruptedException {
+ int rval = -1;
+
+ // the value is tested every 1/100 of a second, and it waits up to
+ // 3000 iterations (= 30 seconds) for a non-zero value
+ for (int i = 0 ; i < 3000 ; i += 1) {
+ // wait for 10 milliseconds = 1/100 of a second
+ Thread.sleep(10);
+ if ((rval = array[0]) != 0) {
+ // a non-zero value has been stored
+ break;
+ }
+ }
+ return (rval);
+ }
}
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/PolicySessionFeatureApiTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/PolicySessionFeatureApiTest.java
new file mode 100644
index 00000000..aef4e265
--- /dev/null
+++ b/policy-core/src/test/java/org/onap/policy/drools/core/PolicySessionFeatureApiTest.java
@@ -0,0 +1,137 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * policy-core
+ * ================================================================================
+ * 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.core;
+
+import java.util.ArrayList;
+import org.kie.api.runtime.KieSession;
+
+/**
+ * This class supports 'DroolsContainerTest' by implementing
+ * 'PolicySessionFeatureAPI', and providing a means to indicate
+ * which hooks have been invoked.
+ */
+public class PolicySessionFeatureApiTest implements PolicySessionFeatureAPI {
+ // contains the log entries since the most recent 'getLog()' call
+ private static ArrayList<String> log = new ArrayList<>();
+
+ // if 'true', trigger an exception right after doing the log,
+ // to verify that exceptions are handled
+ private static boolean exceptionTrigger = false;
+
+ /**
+ * Get log.
+ *
+ * @return the current contents of the log, and clear the log
+ */
+ public static ArrayList<String> getLog() {
+ synchronized (log) {
+ ArrayList<String> rval = new ArrayList<>(log);
+ log.clear();
+ return rval;
+ }
+ }
+
+ /**
+ * This method controls whether these hooks trigger an exception after
+ * being invoked.
+ *
+ * @param indicator if 'true', subsequent hook method calls will trigger
+ * an exception; if 'false', no exception is triggered
+ */
+ public static void setExceptionTrigger(boolean indicator) {
+ exceptionTrigger = indicator;
+ }
+
+ /**
+ * This method adds an entry to the log, and possibly triggers an exception.
+ *
+ * @param arg value to add to the log
+ */
+ private static void addLog(String arg) {
+ if (exceptionTrigger) {
+ // the log entry will include a '-exception' appended to the end
+ synchronized (log) {
+ log.add(arg + "-exception");
+ }
+ System.out.println("*** " + arg + "-exception invoked ***");
+
+ // throw an exception -- it is up to the invoking code to catch it
+ throw(new IllegalStateException("Triggered from " + arg));
+ } else {
+ // create a log entry, and display to standard output
+ synchronized (log) {
+ log.add(arg);
+ }
+ System.out.println("*** " + arg + " invoked ***");
+ }
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ public int getSequenceNumber() {
+ return 1;
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ public void globalInit(String[] args, String configDir) {
+ addLog("globalInit");
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ public KieSession activatePolicySession(PolicyContainer policyContainer, String name, String kieBaseName) {
+ addLog("activatePolicySession");
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ public void newPolicySession(PolicySession policySession) {
+ addLog("newPolicySession");
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ public PolicySession.ThreadModel selectThreadModel(PolicySession session) {
+ addLog("selectThreadModel");
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ public void disposeKieSession(PolicySession policySession) {
+ addLog("disposeKieSession");
+ }
+
+ /**
+ * {@inheritDoc}.
+ */
+ public void destroyKieSession(PolicySession policySession) {
+ addLog("destroyKieSession");
+ }
+}
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/TestPolicySessionFeatureAPI.java b/policy-core/src/test/java/org/onap/policy/drools/core/TestPolicySessionFeatureAPI.java
deleted file mode 100644
index f456d814..00000000
--- a/policy-core/src/test/java/org/onap/policy/drools/core/TestPolicySessionFeatureAPI.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * policy-core
- * ================================================================================
- * Copyright (C) 2017 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.core;
-
-import java.util.ArrayList;
-import org.kie.api.runtime.KieSession;
-
-/**
- * This class supports 'DroolsContainerTest' by implementing
- * 'PolicySessionFeatureAPI', and providing a means to indicate
- * which hooks have been invoked.
- */
-public class TestPolicySessionFeatureAPI implements PolicySessionFeatureAPI
-{
- // contains the log entries since the most recent 'getLog()' call
- static private ArrayList<String> log = new ArrayList<>();
-
- // if 'true', trigger an exception right after doing the log,
- // to verify that exceptions are handled
- static private boolean exceptionTrigger = false;
-
- /**
- * @return the current contents of the log, and clear the log
- */
- static public ArrayList<String> getLog()
- {
- synchronized(log)
- {
- ArrayList<String> rval = new ArrayList<>(log);
- log.clear();
- return(rval);
- }
- }
-
- /**
- * This method controls whether these hooks trigger an exception after
- * being invoked.
- *
- * @param indicator if 'true', subsequent hook method calls will trigger
- * an exception; if 'false', no exception is triggered
- */
- static public void setExceptionTrigger(boolean indicator)
- {
- exceptionTrigger = indicator;
- }
-
- /**
- * This method adds an entry to the log, and possibly triggers an exception
- *
- * @param arg value to add to the log
- */
- static private void addLog(String arg)
- {
- if (exceptionTrigger)
- {
- // the log entry will include a '-exception' appended to the end
- synchronized(log)
- {
- log.add(arg + "-exception");
- }
- System.out.println("*** " + arg + "-exception invoked ***");
-
- // throw an exception -- it is up to the invoking code to catch it
- throw(new IllegalStateException("Triggered from " + arg));
- }
- else
- {
- // create a log entry, and display to standard output
- synchronized(log)
- {
- log.add(arg);
- }
- System.out.println("*** " + arg + " invoked ***");
- }
- }
-
- /***************************************/
- /* 'PolicySessionFeatureAPI' interface */
- /***************************************/
-
- /**
- * {@inheritDoc}
- */
- public int getSequenceNumber()
- {
- return(1);
- }
-
- /**
- * {@inheritDoc}
- */
- public void globalInit(String args[], String configDir)
- {
- addLog("globalInit");
- }
-
- /**
- * {@inheritDoc}
- */
- public KieSession activatePolicySession
- (PolicyContainer policyContainer, String name, String kieBaseName)
- {
- addLog("activatePolicySession");
- return(null);
- }
-
- /**
- * {@inheritDoc}
- */
- public void newPolicySession(PolicySession policySession)
- {
- addLog("newPolicySession");
- }
-
- /**
- * {@inheritDoc}
- */
- public PolicySession.ThreadModel selectThreadModel(PolicySession session)
- {
- addLog("selectThreadModel");
- return(null);
- }
-
- /**
- * {@inheritDoc}
- */
- public void disposeKieSession(PolicySession policySession)
- {
- addLog("disposeKieSession");
- }
-
- /**
- * {@inheritDoc}
- */
- public void destroyKieSession(PolicySession policySession)
- {
- addLog("destroyKieSession");
- }
-}
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/lock/LockTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/lock/LockTest.java
index bd11dcf9..5a88b02f 100644
--- a/policy-core/src/test/java/org/onap/policy/drools/core/lock/LockTest.java
+++ b/policy-core/src/test/java/org/onap/policy/drools/core/lock/LockTest.java
@@ -20,7 +20,10 @@
package org.onap.policy.drools.core.lock;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import org.junit.Before;
import org.junit.Test;
import org.onap.policy.drools.core.lock.Lock.RemoveResult;
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPITest.java b/policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPITest.java
index 0d7d9437..522a3f51 100644
--- a/policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPITest.java
+++ b/policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockFeatureAPITest.java
@@ -22,6 +22,7 @@ package org.onap.policy.drools.core.lock;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+
import org.junit.Before;
import org.junit.Test;
import org.onap.policy.drools.core.lock.PolicyResourceLockFeatureAPI.OperResult;
@@ -33,6 +34,9 @@ public class PolicyResourceLockFeatureAPITest {
private PolicyResourceLockFeatureAPI api;
+ /**
+ * set up.
+ */
@Before
public void setUp() {
api = new PolicyResourceLockFeatureAPI() {
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockManagerTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockManagerTest.java
index 5cbed304..962fb96a 100644
--- a/policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockManagerTest.java
+++ b/policy-core/src/test/java/org/onap/policy/drools/core/lock/PolicyResourceLockManagerTest.java
@@ -32,7 +32,8 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.onap.policy.drools.core.lock.TestUtils.expectException;
+import static org.onap.policy.drools.core.lock.TestingUtils.expectException;
+
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
@@ -79,6 +80,9 @@ public class PolicyResourceLockManagerTest {
PolicyResourceLockManager.setFactory(saveFactory);
}
+ /**
+ * Set up.
+ */
@Before
public void setUp() {
impl1 = mock(PolicyResourceLockFeatureAPI.class);
@@ -104,7 +108,7 @@ public class PolicyResourceLockManagerTest {
/**
* Initializes an implementer so it always returns {@code null}.
*
- * @param impl
+ * @param impl implementer
*/
private void initImplementer(PolicyResourceLockFeatureAPI impl) {
when(impl.beforeLock(anyString(), anyString(), anyInt())).thenReturn(OperResult.OPER_UNHANDLED);
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/lock/SimpleLockManagerTest.java b/policy-core/src/test/java/org/onap/policy/drools/core/lock/SimpleLockManagerTest.java
index feabdbc0..6afe5a83 100644
--- a/policy-core/src/test/java/org/onap/policy/drools/core/lock/SimpleLockManagerTest.java
+++ b/policy-core/src/test/java/org/onap/policy/drools/core/lock/SimpleLockManagerTest.java
@@ -24,7 +24,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-import static org.onap.policy.drools.core.lock.TestUtils.expectException;
+import static org.onap.policy.drools.core.lock.TestingUtils.expectException;
+
import java.util.LinkedList;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -78,6 +79,9 @@ public class SimpleLockManagerTest {
Whitebox.setInternalState(SimpleLockManager.class, TIME_FIELD, savedTime);
}
+ /**
+ * Set up.
+ */
@Before
public void setUp() {
testTime = new TestTime();
@@ -112,18 +116,18 @@ public class SimpleLockManagerTest {
mgr.lock(RESOURCE_A, OWNER1, MAX_AGE_SEC);
// sleep half of the cycle
- testTime.sleep(MAX_AGE_MS/2);
+ testTime.sleep(MAX_AGE_MS / 2);
assertTrue(mgr.isLockedBy(RESOURCE_A, OWNER1));
// extend the lock
mgr.refresh(RESOURCE_A, OWNER1, MAX_AGE_SEC);
// verify still locked after sleeping the other half of the cycle
- testTime.sleep(MAX_AGE_MS/2+1);
+ testTime.sleep(MAX_AGE_MS / 2 + 1);
assertTrue(mgr.isLockedBy(RESOURCE_A, OWNER1));
// and should release after another half cycle
- testTime.sleep(MAX_AGE_MS/2);
+ testTime.sleep(MAX_AGE_MS / 2);
assertFalse(mgr.isLockedBy(RESOURCE_A, OWNER1));
}
@@ -338,13 +342,13 @@ public class SimpleLockManagerTest {
assertTrue(mgr.isLocked(RESOURCE_A));
assertTrue(mgr.isLocked(RESOURCE_B));
- testTime.sleep(MAX_AGE_MS/4);
+ testTime.sleep(MAX_AGE_MS / 4);
mgr.lock(RESOURCE_C, OWNER1, MAX_AGE_SEC);
assertTrue(mgr.isLocked(RESOURCE_A));
assertTrue(mgr.isLocked(RESOURCE_B));
assertTrue(mgr.isLocked(RESOURCE_C));
- testTime.sleep(MAX_AGE_MS/4);
+ testTime.sleep(MAX_AGE_MS / 4);
mgr.lock(RESOURCE_D, OWNER1, MAX_AGE_SEC);
assertTrue(mgr.isLocked(RESOURCE_A));
assertTrue(mgr.isLocked(RESOURCE_B));
@@ -352,19 +356,19 @@ public class SimpleLockManagerTest {
assertTrue(mgr.isLocked(RESOURCE_D));
// sleep remainder of max age - first two should expire
- testTime.sleep(MAX_AGE_MS/2);
+ testTime.sleep(MAX_AGE_MS / 2);
assertFalse(mgr.isLocked(RESOURCE_A));
assertFalse(mgr.isLocked(RESOURCE_B));
assertTrue(mgr.isLocked(RESOURCE_C));
assertTrue(mgr.isLocked(RESOURCE_D));
// another quarter - next one should expire
- testTime.sleep(MAX_AGE_MS/4);
+ testTime.sleep(MAX_AGE_MS / 4);
assertFalse(mgr.isLocked(RESOURCE_C));
assertTrue(mgr.isLocked(RESOURCE_D));
// another quarter - last one should expire
- testTime.sleep(MAX_AGE_MS/4);
+ testTime.sleep(MAX_AGE_MS / 4);
assertFalse(mgr.isLocked(RESOURCE_D));
}
@@ -389,9 +393,7 @@ public class SimpleLockManagerTest {
long ttime = System.currentTimeMillis() + 50;
Data data = new Data(OWNER1, RESOURCE_A, ttime);
Data dataSame = new Data(OWNER1, RESOURCE_A, ttime);
- Data dataDiffExpire = new Data(OWNER1, RESOURCE_A, ttime+1);
- Data dataDiffOwner = new Data(OWNER2, RESOURCE_A, ttime);
- Data dataDiffResource = new Data(OWNER1, RESOURCE_B, ttime);
+ Data dataDiffExpire = new Data(OWNER1, RESOURCE_A, ttime + 1);
assertEquals(0, data.compareTo(data));
assertEquals(0, data.compareTo(dataSame));
@@ -399,6 +401,9 @@ public class SimpleLockManagerTest {
assertTrue(data.compareTo(dataDiffExpire) < 0);
assertTrue(dataDiffExpire.compareTo(data) > 0);
+ Data dataDiffOwner = new Data(OWNER2, RESOURCE_A, ttime);
+ Data dataDiffResource = new Data(OWNER1, RESOURCE_B, ttime);
+
assertTrue(data.compareTo(dataDiffOwner) < 0);
assertTrue(dataDiffOwner.compareTo(data) > 0);
@@ -411,17 +416,19 @@ public class SimpleLockManagerTest {
long ttime = System.currentTimeMillis() + 1;
Data data = new Data(OWNER1, RESOURCE_A, ttime);
Data dataSame = new Data(OWNER1, RESOURCE_A, ttime);
- Data dataDiffExpire = new Data(OWNER1, RESOURCE_A, ttime+1);
+ Data dataDiffExpire = new Data(OWNER1, RESOURCE_A, ttime + 1);
Data dataDiffOwner = new Data(OWNER2, RESOURCE_A, ttime);
- Data dataDiffResource = new Data(OWNER1, RESOURCE_B, ttime);
- Data dataNullOwner = new Data(null, RESOURCE_A, ttime);
- Data dataNullResource = new Data(OWNER1, null, ttime);
int hc1 = data.hashCode();
assertEquals(hc1, dataSame.hashCode());
assertTrue(hc1 != dataDiffExpire.hashCode());
assertTrue(hc1 != dataDiffOwner.hashCode());
+
+ Data dataDiffResource = new Data(OWNER1, RESOURCE_B, ttime);
+ Data dataNullOwner = new Data(null, RESOURCE_A, ttime);
+ Data dataNullResource = new Data(OWNER1, null, ttime);
+
assertTrue(hc1 != dataDiffResource.hashCode());
assertTrue(hc1 != dataNullOwner.hashCode());
assertTrue(hc1 != dataNullResource.hashCode());
@@ -432,15 +439,14 @@ public class SimpleLockManagerTest {
long ttime = System.currentTimeMillis() + 50;
Data data = new Data(OWNER1, RESOURCE_A, ttime);
Data dataSame = new Data(OWNER1, RESOURCE_A, ttime);
- Data dataDiffExpire = new Data(OWNER1, RESOURCE_A, ttime+1);
- Data dataDiffOwner = new Data(OWNER2, RESOURCE_A, ttime);
- Data dataDiffResource = new Data(OWNER1, RESOURCE_B, ttime);
- Data dataNullOwner = new Data(null, RESOURCE_A, ttime);
- Data dataNullResource = new Data(OWNER1, null, ttime);
+ Data dataDiffExpire = new Data(OWNER1, RESOURCE_A, ttime + 1);
assertTrue(data.equals(data));
assertTrue(data.equals(dataSame));
+ Data dataDiffOwner = new Data(OWNER2, RESOURCE_A, ttime);
+ Data dataDiffResource = new Data(OWNER1, RESOURCE_B, ttime);
+
assertFalse(data.equals(dataDiffExpire));
assertFalse(data.equals(dataDiffOwner));
assertFalse(data.equals(dataDiffResource));
@@ -448,6 +454,9 @@ public class SimpleLockManagerTest {
assertFalse(data.equals(null));
assertFalse(data.equals("string"));
+ Data dataNullOwner = new Data(null, RESOURCE_A, ttime);
+ Data dataNullResource = new Data(OWNER1, null, ttime);
+
assertFalse(dataNullOwner.equals(data));
assertFalse(dataNullResource.equals(data));
@@ -464,7 +473,7 @@ public class SimpleLockManagerTest {
String[] resources = {RESOURCE_A, RESOURCE_B};
- AtomicInteger nfail = new AtomicInteger(0);
+ final AtomicInteger nfail = new AtomicInteger(0);
CountDownLatch stopper = new CountDownLatch(1);
CountDownLatch completed = new CountDownLatch(nthreads);
@@ -472,7 +481,7 @@ public class SimpleLockManagerTest {
for (int x = 0; x < nthreads; ++x) {
String owner = "owner." + x;
- Thread t = new Thread(() -> {
+ Thread thread = new Thread(() -> {
for (int y = 0; y < nlocks; ++y) {
String res = resources[y % resources.length];
@@ -495,8 +504,8 @@ public class SimpleLockManagerTest {
completed.countDown();
});
- t.setDaemon(true);
- threads.add(t);
+ thread.setDaemon(true);
+ threads.add(thread);
}
// start the threads
diff --git a/policy-core/src/test/java/org/onap/policy/drools/core/lock/TestUtils.java b/policy-core/src/test/java/org/onap/policy/drools/core/lock/TestingUtils.java
index f843f6ab..17a11a09 100644
--- a/policy-core/src/test/java/org/onap/policy/drools/core/lock/TestUtils.java
+++ b/policy-core/src/test/java/org/onap/policy/drools/core/lock/TestingUtils.java
@@ -20,14 +20,14 @@
package org.onap.policy.drools.core.lock;
-public class TestUtils {
+public class TestingUtils {
/**
* Invokes a function that is expected to throw an exception.
*
* @param clazz class of exception that is expected
- * @param func
- * @return
+ * @param func function
+ * @return object
*/
public static <T> T expectException(Class<T> clazz, VoidFunction func) {
try {
diff --git a/policy-core/src/test/java/org/onap/policy/drools/util/FeatureEnabledCheckerTest.java b/policy-core/src/test/java/org/onap/policy/drools/util/FeatureEnabledCheckerTest.java
index cd79592f..c118b897 100644
--- a/policy-core/src/test/java/org/onap/policy/drools/util/FeatureEnabledCheckerTest.java
+++ b/policy-core/src/test/java/org/onap/policy/drools/util/FeatureEnabledCheckerTest.java
@@ -22,6 +22,7 @@ package org.onap.policy.drools.util;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+
import java.util.Properties;
import org.junit.Test;
diff --git a/policy-core/src/test/resources/META-INF/services/org.onap.policy.drools.core.PolicySessionFeatureAPI b/policy-core/src/test/resources/META-INF/services/org.onap.policy.drools.core.PolicySessionFeatureAPI
index d6b088c3..6bc87035 100644
--- a/policy-core/src/test/resources/META-INF/services/org.onap.policy.drools.core.PolicySessionFeatureAPI
+++ b/policy-core/src/test/resources/META-INF/services/org.onap.policy.drools.core.PolicySessionFeatureAPI
@@ -1 +1 @@
-org.onap.policy.drools.core.TestPolicySessionFeatureAPI
+org.onap.policy.drools.core.PolicySessionFeatureApiTest