aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorge Hernandez <jh1730@att.com>2018-02-15 20:03:50 +0000
committerGerrit Code Review <gerrit@onap.org>2018-02-15 20:03:50 +0000
commit016806194bdab12fee925f0733c31d70ad088479 (patch)
treed70f75456adbac433c12100a1809b1eaa5ce5177
parentbb47fc9ed422dcde4a1544955c8ab1da7d074a2e (diff)
parente871132b09476d7772fb8dbc597fb82248b89f6b (diff)
Merge "Speed up integrity-audit tests"
-rw-r--r--integrity-audit/pom.xml8
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/AuditThread.java170
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java62
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java55
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAudit.java77
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditProperties.java3
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/jpa/IntegrityAuditEntity.java23
-rw-r--r--integrity-audit/src/main/resources/META-INF/persistence.xml5
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/AuditPeriodTest.java260
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditCompareEntriesTest.java (renamed from integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditCompareEntriesTest.java)426
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditTest.java282
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/DbDAOTest.java450
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/ExceptionsTest.java (renamed from integrity-audit/src/test/java/org/onap/policy/common/ia/test/ExceptionsTest.java)2
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditDesignationTest.java619
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTest.java (renamed from integrity-audit/src/test/java/org/onap/policy/common/ia/test/IntegrityAuditTest.java)11
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTestBase.java626
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/IaTestEntity.java (renamed from integrity-audit/src/test/java/org/onap/policy/common/ia/test/jpa/IaTestEntity.java)6
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/PersonSample.java (renamed from integrity-audit/src/test/java/org/onap/policy/common/ia/test/jpa/PersonSample.java)6
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/test/AuditPeriodTest.java483
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditTest.java755
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbDAOTest.java742
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/test/IntegrityAuditDesignationTest.java1112
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/test/TestUtils.java27
-rw-r--r--integrity-audit/src/test/resources/logback-test.xml169
24 files changed, 2927 insertions, 3452 deletions
diff --git a/integrity-audit/pom.xml b/integrity-audit/pom.xml
index d261340f..413ee1dd 100644
--- a/integrity-audit/pom.xml
+++ b/integrity-audit/pom.xml
@@ -2,7 +2,7 @@
============LICENSE_START=======================================================
ONAP Policy Engine - Common Modules
================================================================================
- 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.
@@ -49,6 +49,12 @@
</dependency>
<dependency>
<groupId>org.onap.policy.common</groupId>
+ <artifactId>utils</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.common</groupId>
<artifactId>utils-test</artifactId>
<version>${project.version}</version>
<scope>test</scope>
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/AuditThread.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/AuditThread.java
index 78ff4d3a..7af82132 100644
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/AuditThread.java
+++ b/integrity-audit/src/main/java/org/onap/policy/common/ia/AuditThread.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -25,6 +25,9 @@ import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
import org.onap.policy.common.logging.eelf.MessageCodes;
@@ -59,9 +62,15 @@ public class AuditThread extends Thread {
/*
* Unless audit has already been run on this entity, number of milliseconds
* to sleep between audit thread iterations. If audit has already been run,
- * we sleep integrityAuditPeriodMillis.
+ * we sleep integrityAuditPeriodMillis. May be modified by JUnit tests.
*/
- private static final long AUDIT_THREAD_SLEEP_INTERVAL = 5000;
+ private static long auditThreadSleepIntervalMillis = 5000;
+
+ /*
+ * Number of milliseconds that must elapse for audit to be considered
+ * complete. May be modified by JUnit tests.
+ */
+ private static long auditCompletionIntervalMillis = AUDIT_COMPLETION_INTERVAL;
/*
* DB access class.
@@ -91,7 +100,7 @@ public class AuditThread extends Thread {
/*
* See IntegrityAudit class for usage.
*/
- private int integrityAuditPeriodMillis;
+ private long integrityAuditPeriodMillis;
/*
* The containing IntegrityAudit instance
@@ -99,6 +108,18 @@ public class AuditThread extends Thread {
private IntegrityAudit integrityAudit;
/**
+ * A latch is taken from this queue before starting an audit. May be
+ * {@code null}. Used by JUnit tests.
+ */
+ private BlockingQueue<CountDownLatch> auditLatchQueue;
+
+ /**
+ * Latch to be decremented when the next audit completes. May be
+ * {@code null}. Used by JUnit tests to wait for an audit to complete.
+ */
+ private CountDownLatch auditCompletionLatch = null;
+
+ /**
* AuditThread constructor
* @param resourceName
* @param persistenceUnit
@@ -110,11 +131,31 @@ public class AuditThread extends Thread {
public AuditThread(String resourceName, String persistenceUnit,
Properties properties, int integrityAuditPeriodSeconds, IntegrityAudit integrityAudit)
throws Exception {
+
+ this(resourceName, persistenceUnit, properties, TimeUnit.SECONDS.toMillis(integrityAuditPeriodSeconds),
+ integrityAudit, null);
+ }
+
+ /**
+ * AuditThread constructor
+ * @param resourceName
+ * @param persistenceUnit
+ * @param properties
+ * @param integrityAuditMillis
+ * @param integrityAudit
+ * @param queue
+ * @throws Exception
+ */
+ public AuditThread(String resourceName, String persistenceUnit,
+ Properties properties, long integrityAuditMillis, IntegrityAudit integrityAudit,
+ BlockingQueue<CountDownLatch> queue)
+ throws Exception {
this.resourceName = resourceName;
this.persistenceUnit = persistenceUnit;
this.properties = properties;
- this.integrityAuditPeriodMillis = integrityAuditPeriodSeconds * 1000;
+ this.integrityAuditPeriodMillis = integrityAuditMillis;
this.integrityAudit = integrityAudit;
+ this.auditLatchQueue = queue;
/*
* The DbDAO Constructor registers this node in the IntegrityAuditEntity
@@ -135,7 +176,16 @@ public class AuditThread extends Thread {
logger.info("AuditThread.run: Entering");
- try {
+ try {
+ /*
+ * For JUnit testing: wait for the first latch, decrement it to
+ * indicate that the thread has started, and then wait for the
+ * next latch, before we actually start doing anything. These
+ * simply return if there is no latch queue defined.
+ */
+ getNextLatch();
+ decrementLatch();
+ getNextLatch();
/*
* Triggers change in designation, unless no other viable candidate.
@@ -151,7 +201,6 @@ public class AuditThread extends Thread {
while (true) {
try{
-
/*
* It may have been awhile since we last cycled through this
* loop, so refresh the list of IntegrityAuditEntities.
@@ -249,6 +298,11 @@ public class AuditThread extends Thread {
* the normal interval.
*/
if (auditCompleted) {
+ // indicate that an audit has completed
+ decrementLatch();
+
+ // don't start the next audit cycle until a latch has been provided
+ getNextLatch();
if (logger.isDebugEnabled()) {
logger.debug("AuditThread.run: Audit completed; resourceName="
@@ -268,25 +322,32 @@ public class AuditThread extends Thread {
if (logger.isDebugEnabled()) {
logger.debug("AuditThread.run: resourceName="
+ this.resourceName + ": Sleeping "
- + AuditThread.AUDIT_THREAD_SLEEP_INTERVAL
+ + AuditThread.auditThreadSleepIntervalMillis
+ "ms");
}
- Thread.sleep(AuditThread.AUDIT_THREAD_SLEEP_INTERVAL);
+ Thread.sleep(AuditThread.auditThreadSleepIntervalMillis);
if (logger.isDebugEnabled()) {
logger.debug("AuditThread.run: resourceName="
+ this.resourceName + ": Awaking from "
- + AuditThread.AUDIT_THREAD_SLEEP_INTERVAL
+ + AuditThread.auditThreadSleepIntervalMillis
+ "ms sleep");
}
}
+
} catch (Exception e){
+ if(isInterruptedException(e)) {
+ String msg = "AuditThread.run loop - Exception thrown: " + e.getMessage()
+ + "; Stopping.";
+ logger.error(MessageCodes.EXCEPTION_ERROR, e, msg);
+ break;
+ }
+
String msg = "AuditThread.run loop - Exception thrown: " + e.getMessage()
+ "; Will try audit again in " + (integrityAuditPeriodMillis/1000) + " seconds";
logger.error(MessageCodes.EXCEPTION_ERROR, e, msg);
// Sleep and try again later
Thread.sleep(integrityAuditPeriodMillis);
- continue;
}
}
@@ -296,10 +357,53 @@ public class AuditThread extends Thread {
logger.error(MessageCodes.EXCEPTION_ERROR, e, msg);
integrityAudit.setThreadInitialized(false);
}
+
+ dbDAO.destroy();
logger.info("AuditThread.run: Exiting");
}
+ /**
+ * Gets the next audit-completion latch from the queue. Blocks, if the
+ * queue is empty.
+ * @throws InterruptedException
+ */
+ private void getNextLatch() throws InterruptedException {
+ BlockingQueue<CountDownLatch> queue = this.auditLatchQueue;
+ if(queue != null) {
+ this.auditCompletionLatch = queue.take();
+ }
+ }
+
+ /**
+ * Decrements the current audit-completion latch, if any.
+ */
+ private void decrementLatch() {
+ CountDownLatch latch = this.auditCompletionLatch;
+ if(latch != null) {
+ this.auditCompletionLatch = null;
+ latch.countDown();
+ }
+ }
+
+ /**
+ * Determines if an exception is an InterruptedException or was caused
+ * by an InterruptedException.
+ * @param ex exception to be examined
+ * @return {@code true} if it's an InterruptedException, {@code false} otherwise
+ */
+ private boolean isInterruptedException(Throwable ex) {
+ while(ex != null) {
+ if(ex instanceof InterruptedException) {
+ return true;
+ }
+
+ ex = ex.getCause();
+ }
+
+ return false;
+ }
+
/*
* Used to create a list that is sorted lexicographically by resourceName.
*/
@@ -617,7 +721,7 @@ public class AuditThread extends Thread {
/**
* Returns false if the lastUpdated time for the record in question is more
- * than AUDIT_COMPLETION_INTERVAL seconds ago. During an audit, lastUpdated is updated every five
+ * than auditCompletionIntervalMillis seconds ago. During an audit, lastUpdated is updated every five
* seconds or so, but when an audit finishes, the node doing the audit stops
* updating lastUpdated.
* @param integrityAuditEntity
@@ -647,7 +751,7 @@ public class AuditThread extends Thread {
lastUpdatedTime = lastUpdated.getTime();
}
long timeDifference = currentTime.getTime() - lastUpdatedTime;
- if (timeDifference > AUDIT_COMPLETION_INTERVAL) {
+ if (timeDifference > auditCompletionIntervalMillis) {
stale = true;
}
@@ -678,7 +782,7 @@ public class AuditThread extends Thread {
}
/*
- * If more than (AUDIT_COMPLETION_INTERVAL * 2) milliseconds have elapsed
+ * If more than (auditCompletionIntervalMillis * 2) milliseconds have elapsed
* since we last ran the audit, reset auditCompleted, so
*
* 1) we'll eventually re-run the audit, if no other node picks up the
@@ -707,7 +811,7 @@ public class AuditThread extends Thread {
long lastUpdatedTime = lastUpdated.getTime();
timeDifference = currentTime.getTime() - lastUpdatedTime;
- if (timeDifference > (AUDIT_COMPLETION_INTERVAL * 2)) {
+ if (timeDifference > (auditCompletionIntervalMillis * 2)) {
if (logger.isDebugEnabled()) {
logger.debug("resetAuditCompleted: Resetting auditCompleted for resourceName="
+ this.resourceName);
@@ -750,7 +854,7 @@ public class AuditThread extends Thread {
+ this.resourceName);
}
if (IntegrityAudit.isUnitTesting()) {
- dbAudit.dbAuditSimulate(this.resourceName, this.persistenceUnit);
+ dbAudit.dbAuditSimulate(this.resourceName, this.persistenceUnit, AuditThread.AUDIT_SIMULATION_ITERATIONS, AuditThread.auditThreadSleepIntervalMillis);
} else {
dbAudit.dbAudit(this.resourceName, this.persistenceUnit,
this.nodeType);
@@ -762,4 +866,38 @@ public class AuditThread extends Thread {
}
+ /**
+ * Adjusts the thread-sleep-interval to be used when an audit has
+ * <i>not</i> been completed. Used by JUnit tests.
+ * @param auditThreadSleepIntervalMillis
+ */
+ protected static void setAuditThreadSleepIntervalMillis(long auditThreadSleepIntervalMillis) {
+ AuditThread.auditThreadSleepIntervalMillis = auditThreadSleepIntervalMillis;
+ }
+
+ /**
+ * Gets the current thread-sleep-interval to be used when an audit has
+ * <i>not</i> been completed. Used by JUnit tests.
+ * @return the current sleep interval, in milli-seconds
+ */
+ protected static long getAuditThreadSleepIntervalMillis() {
+ return auditThreadSleepIntervalMillis;
+ }
+
+ /**
+ * Adjusts the audit-completion-interval. Used by JUnit tests.
+ * @param auditThreadSleepIntervalMillis
+ */
+ protected static void setAuditCompletionIntervalMillis(long auditThreadSleepIntervalMillis) {
+ AuditThread.auditCompletionIntervalMillis = auditThreadSleepIntervalMillis;
+ }
+
+ /**
+ * Gets the audit-completion-interval. Used by JUnit tests.
+ * @return the current audit-completion interval, in milli-seconds
+ */
+ protected static long getAuditCompletionIntervalMillis() {
+ return auditCompletionIntervalMillis;
+ }
+
}
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java
index 21bf5c8d..00b79917 100644
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java
+++ b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -53,6 +53,9 @@ public class DbAudit {
private static final Logger logger = FlexLogger.getLogger(DbAudit.class);
+ private static long dbAuditUpdateMillis = 5000l;
+ private static long dbAuditSleepMillis = 2000l;
+
DbDAO dbDAO = null;
public DbAudit(DbDAO dbDAO) {
@@ -212,7 +215,7 @@ public class DbAudit {
}
} //end for (IntegrityAuditEntity iae : iaeList)
//Time check
- if((System.currentTimeMillis() - startTime) >= 5000){ //5 seconds
+ if((System.currentTimeMillis() - startTime) >= dbAuditUpdateMillis){
//update the timestamp
dbDAO.setLastUpdated();
//reset the startTime
@@ -220,9 +223,9 @@ public class DbAudit {
}else{
//sleep a couple seconds to break up the activity
if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Sleeping 2 seconds");
+ logger.debug("dbAudit: Sleeping " + dbAuditSleepMillis + "ms");
}
- Thread.sleep(2000);
+ Thread.sleep(dbAuditSleepMillis);
if (logger.isDebugEnabled()) {
logger.debug("dbAudit: Waking from sleep");
}
@@ -315,7 +318,7 @@ public class DbAudit {
}
}
//Time check
- if((System.currentTimeMillis() - startTime) >= 5000){ //5 seconds
+ if((System.currentTimeMillis() - startTime) >= dbAuditUpdateMillis){
//update the timestamp
dbDAO.setLastUpdated();
//reset the startTime
@@ -323,9 +326,9 @@ public class DbAudit {
}else{
//sleep a couple seconds to break up the activity
if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Second comparison; sleeping 2 seconds");
+ logger.debug("dbAudit: Second comparison; sleeping " + dbAuditSleepMillis + "ms");
}
- Thread.sleep(2000);
+ Thread.sleep(dbAuditSleepMillis);
if (logger.isDebugEnabled()) {
logger.debug("dbAudit: Second comparison; waking from sleep");
}
@@ -347,22 +350,23 @@ public class DbAudit {
/**
* dbAuditSimulate simulates the DB audit
* @param resourceName
- * @param persistenceUnit
+ * @param persistenceUnit
+ * @param simulationIterations
+ * @param simulationIntervalMs
* @param nodeType
- * @throws InterruptedException
- * @throws DbDaoTransactionException
+ * @throws DbAuditException
*/
- public void dbAuditSimulate(String resourceName, String persistenceUnit) throws DbAuditException {
+ public void dbAuditSimulate(String resourceName, String persistenceUnit, long simulationIterations, long simulationIntervalMs) throws DbAuditException {
try {
logger.info("dbAuditSimulate: Starting audit simulation for resourceName="
+ resourceName + ", persistenceUnit=" + persistenceUnit);
- for (int i = 0; i < AuditThread.AUDIT_SIMULATION_ITERATIONS; i++) {
+ for (int i = 0; i < simulationIterations; i++) {
dbDAO.setLastUpdated();
logger.info("dbAuditSimulate: i=" + i + ", sleeping "
- + AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL + "ms");
- Thread.sleep(AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL);
+ + simulationIntervalMs + "ms");
+ Thread.sleep(simulationIntervalMs);
}
logger.info("dbAuditSimulate: Finished audit simulation for resourceName="
@@ -465,8 +469,36 @@ public class DbAudit {
logger.info(msg);
}
+ /**
+ * Gets the audit-update time.
+ * @return the audit-update time, in milliseconds
+ */
+ protected static long getDbAuditUpdateMillis() {
+ return dbAuditUpdateMillis;
+ }
+
+ /**
+ * Sets the audit-update time.
+ * @param dbAuditUpdateMillis the new audit update time, in milliseconds
+ */
+ protected static void setDbAuditUpdateMillis(long dbAuditUpdateMillis) {
+ DbAudit.dbAuditUpdateMillis = dbAuditUpdateMillis;
+ }
+ /**
+ * Gets the audit-sleep time.
+ * @return the audit-sleep time, in milliseconds
+ */
+ protected static long getDbAuditSleepMillis() {
+ return dbAuditSleepMillis;
+ }
-
+ /**
+ * Sets the audit-sleep time.
+ * @param dbAuditSleepMillis the new audit sleep time, in milliseconds
+ */
+ protected static void setDbAuditSleepMillis(long dbAuditSleepMillis) {
+ DbAudit.dbAuditSleepMillis = dbAuditSleepMillis;
+ }
}
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java
index b30c7730..f34b24d5 100644
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java
+++ b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java
@@ -69,27 +69,49 @@ public class DbDAO {
*/
private static final Object lock = new Object();
-
/**
* DbDAO Constructor
- * @param resourceName
- * @param persistenceUnit
- * @param properties
- * @throws Exception
- */
+ *
+ * @param resourceName
+ * @param persistenceUnit
+ * @param properties
+ * @throws Exception
+ */
public DbDAO(String resourceName, String persistenceUnit, Properties properties) throws Exception {
+ this(resourceName, persistenceUnit, properties, null);
+ }
+
+ /**
+ * DbDAO Constructor
+ *
+ * @param resourceName
+ * @param persistenceUnit
+ * @param properties
+ * @param lastUpdateDate may be {@code null}
+ * @param altDbUrl may be {@code null}
+ * @throws Exception
+ */
+ protected DbDAO(String resourceName, String persistenceUnit, Properties properties, String altDbUrl)
+ throws Exception {
logger.debug("DbDAO contructor: enter");
-
+
validateProperties(resourceName, persistenceUnit, properties);
-
+
emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
-
- register();
-
+
+ register(altDbUrl);
+
logger.debug("DbDAO contructor: exit");
}
/**
+ * Release resources (i.e., the EntityManagerFactory).
+ */
+ public void destroy() {
+ emf.close();
+ }
+
+ /**
* validateProperties will validate the properties
* @param resourceName
* @param persistenceUnit
@@ -207,6 +229,7 @@ public class DbDAO {
logger.error("getAllEntries encountered exception:", e);
}
em.close();
+ theEmf.close();
logger.debug("getAllEntries: Returning resultMap, size=" + resultMap.size());
@@ -240,6 +263,7 @@ public class DbDAO {
logger.error(msg, e);
}
em.close();
+ theEmf.close();
logger.debug("getAllEntries: Exit, resultMap, size=" + resultMap.size());
return resultMap;
}
@@ -282,7 +306,7 @@ public class DbDAO {
}
}
-
+
/**
* getMyIntegrityAuditEntity() gets my IntegrityAuditEntity
* @return
@@ -382,8 +406,10 @@ public class DbDAO {
/**
* Register the IntegrityAudit instance
+ * @param altDbUrl alternate DB URL to be placed into the record,
+ * or {@code null} to use the default
*/
- private void register() throws DbDaoTransactionException {
+ private void register(String altDbUrl) throws DbDaoTransactionException {
try{
EntityManager em = emf.createEntityManager();
@@ -421,10 +447,9 @@ public class DbDAO {
//update/set properties in entry
iae.setSite(this.siteName);
iae.setNodeType(this.nodeType);
- iae.setLastUpdated(new Date());
iae.setJdbcDriver(this.dbDriver);
iae.setJdbcPassword(properties.getProperty(IntegrityAuditProperties.DB_PWD).trim());
- iae.setJdbcUrl(dbUrl);
+ iae.setJdbcUrl(altDbUrl == null ? this.dbUrl : altDbUrl);
iae.setJdbcUser(dbUser);
em.persist(iae);
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAudit.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAudit.java
index 4f7a15af..f1dbfec0 100644
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAudit.java
+++ b/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAudit.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -21,10 +21,11 @@
package org.onap.policy.common.ia;
import java.util.Properties;
-
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CountDownLatch;
import org.onap.policy.common.ia.IntegrityAuditProperties.NodeTypeEnum;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
import org.onap.policy.common.logging.flexlogger.Logger;
/**
@@ -46,16 +47,16 @@ public class IntegrityAudit {
/*
- * This is the audit period in seconds. For example, if it had a value of 3600, the audit
- * can only run once per hour. If it has a value of 60, it can run once per minute.
+ * This is the audit period in milliseconds. For example, if it had a value of 3600000, the audit
+ * can only run once per hour. If it has a value of 6000, it can run once per minute.
*
* Values:
- * integrityAuditPeriodSeconds < 0 (negative number) indicates the audit is off
- * integrityAuditPeriodSecconds == 0 indicates the audit is to run continuously
- * integrityAuditPeriodSeconds > 0 indicates the audit is to run at most once during the indicated period
+ * integrityAuditPeriodMillis < 0 (negative number) indicates the audit is off
+ * integrityAuditPeriodMillis == 0 indicates the audit is to run continuously
+ * integrityAuditPeriodMillis > 0 indicates the audit is to run at most once during the indicated period
*
*/
- private int integrityAuditPeriodSeconds;
+ private int integrityAuditPeriodMillis;
/**
* IntegrityAudit constructor
@@ -84,10 +85,12 @@ public class IntegrityAudit {
this.resourceName = resourceName;
if(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS) != null){ //It is allowed to be null
- this.integrityAuditPeriodSeconds= Integer.parseInt(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS).trim());
+ this.integrityAuditPeriodMillis= 1000 * Integer.parseInt(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS).trim());
+ } else if(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS) != null){ //It is allowed to be null
+ this.integrityAuditPeriodMillis= Integer.parseInt(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS).trim());
} else{
//If it is null, set it to the default value
- this.integrityAuditPeriodSeconds = IntegrityAuditProperties.DEFAULT_AUDIT_PERIOD_SECONDS;
+ this.integrityAuditPeriodMillis = 1000 * IntegrityAuditProperties.DEFAULT_AUDIT_PERIOD_SECONDS;
}
logger.info("Constructor: Exiting");
@@ -97,7 +100,7 @@ public class IntegrityAudit {
* Used during JUnit testing by AuditPeriodTest.java
*/
public int getIntegrityAuditPeriodSeconds() {
- return integrityAuditPeriodSeconds;
+ return (integrityAuditPeriodMillis / 1000);
}
/**
@@ -190,6 +193,15 @@ public class IntegrityAudit {
parmsAreBad = true;
}
}
+ else if(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS) != null){ //It is allowed to be null
+ try{
+ Integer.parseInt(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS).trim());
+ }catch(NumberFormatException nfe){
+ badparams.append(", auditPeriodMilliSeconds="
+ + properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS).trim());
+ parmsAreBad = true;
+ }
+ }
} // End else
logger.debug("parmsAreBad: exit:"
+ "\nresourceName: " + resourceName
@@ -203,22 +215,36 @@ public class IntegrityAudit {
* @throws Exception
*/
public void startAuditThread() throws Exception {
+ startAuditThread(null);
+ }
+ /**
+ * Starts the audit thread
+ * @param queue
+ * @return {@code true} if the thread was started, {@code false} otherwise
+ * @throws Exception
+ */
+ protected boolean startAuditThread(BlockingQueue<CountDownLatch> queue) throws Exception {
logger.info("startAuditThread: Entering");
- if (integrityAuditPeriodSeconds >= 0) {
+ boolean success = false;
+
+ if (integrityAuditPeriodMillis >= 0) {
this.auditThread = new AuditThread(this.resourceName,
this.persistenceUnit, this.properties,
- integrityAuditPeriodSeconds, this);
+ integrityAuditPeriodMillis, this, queue);
logger.info("startAuditThread: Audit started and will run every "
- + integrityAuditPeriodSeconds + " seconds");
+ + integrityAuditPeriodMillis/1000 + " seconds");
this.auditThread.start();
+ success = true;
} else {
logger.info("startAuditThread: Suppressing integrity audit, integrityAuditPeriodSeconds="
- + integrityAuditPeriodSeconds);
+ + integrityAuditPeriodMillis/1000);
}
logger.info("startAuditThread: Exiting");
+
+ return success;
}
/**
* Stops the audit thread
@@ -252,4 +278,23 @@ public class IntegrityAudit {
public static void setUnitTesting(boolean isUnitTesting) {
IntegrityAudit.isUnitTesting = isUnitTesting;
}
+
+ /**
+ * Waits a bit for the AuditThread to complete. Used by JUnit tests.
+ *
+ * @param twaitms
+ * wait time, in milliseconds
+ * @return {@code true} if the thread stopped within the given time,
+ * {@code false} otherwise
+ * @throws InterruptedException
+ */
+ protected boolean joinAuditThread(long twaitms) throws InterruptedException {
+ if(this.auditThread == null) {
+ return true;
+
+ } else {
+ this.auditThread.join(twaitms);
+ return ! this.auditThread.isAlive();
+ }
+ }
}
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditProperties.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditProperties.java
index 49b26fcb..b8db3ac2 100644
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditProperties.java
+++ b/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditProperties.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -29,6 +29,7 @@ public class IntegrityAuditProperties {
public static final String DB_USER = "javax.persistence.jdbc.user";
public static final String DB_PWD = "javax.persistence.jdbc.password";
public static final String AUDIT_PERIOD_SECONDS = "integrity_audit_period_seconds";
+ public static final String AUDIT_PERIOD_MILLISECONDS = "integrity_audit_period_milliseconds";
public static final String SITE_NAME = "site_name";
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/jpa/IntegrityAuditEntity.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/jpa/IntegrityAuditEntity.java
index fb8823f5..da69f2de 100644
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/jpa/IntegrityAuditEntity.java
+++ b/integrity-audit/src/main/java/org/onap/policy/common/ia/jpa/IntegrityAuditEntity.java
@@ -1,8 +1,8 @@
-/*-
+/*
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -20,6 +20,8 @@
package org.onap.policy.common.ia.jpa;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
@@ -105,9 +107,7 @@ public class IntegrityAuditEntity implements Serializable {
@PreUpdate
public void preUpdate() {
- if (!isUnitTesting()) {
- this.lastUpdated = new Date();
- }
+ this.lastUpdated = new Date();
}
public long getId() {
@@ -209,4 +209,17 @@ public class IntegrityAuditEntity implements Serializable {
public static void setUnitTesting(boolean isUnitTesting) {
IntegrityAuditEntity.isUnitTesting = isUnitTesting;
}
+
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ if(isUnitTesting()) {
+ /*
+ * Note: other fields may be added here, as long as the
+ * created-date and last-updated date are not included.
+ */
+ out.writeObject(jdbcUrl);
+
+ } else {
+ out.defaultWriteObject();
+ }
+ }
}
diff --git a/integrity-audit/src/main/resources/META-INF/persistence.xml b/integrity-audit/src/main/resources/META-INF/persistence.xml
index 9e4880fa..2f435618 100644
--- a/integrity-audit/src/main/resources/META-INF/persistence.xml
+++ b/integrity-audit/src/main/resources/META-INF/persistence.xml
@@ -24,13 +24,10 @@
<!-- Limited use for generating the DB and schema files for iatest DB - uses eclipselink -->
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>org.onap.policy.common.ia.jpa.IntegrityAuditEntity</class>
- <class>org.onap.policy.common.ia.test.jpa.IaTestEntity</class>
+ <class>org.onap.policy.common.ia.jpa.IaTestEntity</class>
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
- <property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
- <property name="javax.persistence.schema-generation.scripts.create-target" value="./sql/generatedCreateIA.ddl"/>
- <property name="javax.persistence.schema-generation.scripts.drop-target" value="./sql/generatedDropIA.ddl"/>
</properties>
</persistence-unit>
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/AuditPeriodTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/AuditPeriodTest.java
new file mode 100644
index 00000000..b627977b
--- /dev/null
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/AuditPeriodTest.java
@@ -0,0 +1,260 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Integrity Audit
+ * ================================================================================
+ * 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.common.ia;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
+
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.common.utils.test.log.logback.ExtractAppender;
+
+/*
+ * All JUnits are designed to run in the local development environment
+ * where they have write privileges and can execute time-sensitive
+ * tasks.
+ */
+public class AuditPeriodTest extends IntegrityAuditTestBase {
+
+ private static Logger logger = FlexLogger.getLogger(AuditPeriodTest.class);
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ IntegrityAuditTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + AuditPeriodTest.class.getSimpleName());
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ IntegrityAuditTestBase.tearDownAfterClass();
+ }
+
+ @Before
+ public void setUp() {
+ logger.info("setUp: Entering");
+
+ super.setUp();
+
+ logger.info("setUp: Exiting");
+
+ }
+
+ @After
+ public void tearDown() {
+ logger.info("tearDown: Entering");
+
+ super.tearDown();
+
+ logger.info("tearDown: Exiting");
+ }
+
+ /*
+ * Verifies (via log parsing) that when a negative audit period is
+ * specified, the audit is suppressed.
+ */
+ @Test
+ public void testNegativeAuditPeriod() throws Exception {
+
+ logger.info("testNegativeAuditPeriod: Entering");
+
+ properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "-1");
+
+ ExtractAppender logA = watch(debugLogger, "Suppressing integrity audit, integrityAuditPeriodSeconds=([^,]*)");
+
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) audit to immediately terminate.
+ */
+ waitThread(integrityAudit);
+
+ verifyItemsInLog(logA, "-1");
+
+ logger.info("testNegativeAuditPeriod: Exiting");
+
+ }
+
+ /*
+ * Verifies (via log parsing) that when an audit period of zero is
+ * specified, the audit runs continuously, generating a number of sleep/wake
+ * sequences in a short period of time (e.g. 100ms).
+ */
+ @Test
+ public void testZeroAuditPeriod() throws Exception {
+
+ logger.info("testZeroAuditPeriod: Entering");
+
+ properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "0");
+
+ ExtractAppender logA = watch(debugLogger, "[Aa]waking from (0ms) sleep");
+
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Wait for
+ *
+ * 1) audit to generate a bunch of sleep wake sequences.
+ */
+ String[] awakings = new String[10];
+ for (int x = 0; x < awakings.length; ++x) {
+ awakings[x] = "0ms";
+ runAudit(integrityAudit);
+ }
+
+ // run a couple more audits
+ runAudit(integrityAudit);
+ runAudit(integrityAudit);
+
+ /*
+ * We should get at least 10 sleep/wake sequences.
+ */
+
+ verifyItemsInLog(logA, awakings);
+
+ logger.info("testZeroAuditPeriod: Exiting");
+
+ }
+
+ /**
+ * Verifies that when different audit periods are specified, there is an
+ * appropriate interval between the audits.
+ */
+ @Test
+ public void testLongAuditPeriod() throws Exception {
+
+ logger.info("testLongAuditPeriod: Entering");
+
+ testAuditPeriod(100);
+ testAuditPeriod(200);
+
+ logger.info("testLongAuditPeriod: Exiting");
+ }
+
+ /**
+ * Verifies that audits actually take as long as expected, even with
+ * multiple auditors running simultaneously.
+ *
+ * @param periodms
+ * audit period, in milliseconds
+ * @throws Exception
+ * @throws InterruptedException
+ */
+ private void testAuditPeriod(long periodms) throws Exception, InterruptedException {
+
+ properties.put(IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS, String.valueOf(periodms));
+
+ /*
+ * Start several auditors.
+ */
+ MyIntegrityAudit[] ia = new MyIntegrityAudit[3];
+ for (int x = 0; x < ia.length; ++x) {
+ ia[x] = makeAuditor("pdp" + x, A_SEQ_PU);
+ }
+
+ /*
+ * Run an audit on all of them.
+ */
+ runAudit(ia);
+
+ /*
+ * Now run again and ensure it waited long enough between runs.
+ */
+ long tmin = minAuditTime(ia);
+ assertTrue(tmin >= periodms + AUDIT_SIMULATION_MS);
+
+ /*
+ * Now run again and ensure it waited long enough between runs.
+ */
+ tmin = minAuditTime(ia);
+ assertTrue(tmin >= periodms + AUDIT_SIMULATION_MS);
+ }
+
+ /**
+ * Runs simultaneous audits on several auditors.
+ *
+ * @param auditors
+ * @return the minimum time, in milliseconds, elapsed for any given auditor
+ * @throws InterruptedException
+ */
+ private long minAuditTime(MyIntegrityAudit... auditors) throws InterruptedException {
+ List<Thread> threads = new ArrayList<>(auditors.length);
+ AtomicLong tfirst = new AtomicLong(Long.MAX_VALUE);
+ long tbeg = System.currentTimeMillis();
+
+ // create the threads
+ for (MyIntegrityAudit p : auditors) {
+ Thread t = new Thread() {
+
+ @Override
+ public void run() {
+ try {
+ runAudit(p);
+ setMinTime(tfirst);
+
+ } catch (InterruptedException e) {
+ ;
+ }
+ }
+ };
+
+ t.setDaemon(true);
+ threads.add(t);
+ }
+
+ // start the threads
+ for (Thread t : threads) {
+ t.start();
+ }
+
+ // wait for them to complete
+ for (Thread t : threads) {
+ t.join();
+ }
+
+ return (tfirst.get() - tbeg);
+ }
+
+ /**
+ * Sets a value to the minimum between the current value and the current
+ * time.
+ *
+ * @param tmin
+ * current minimum value/value to be set
+ */
+ private static void setMinTime(AtomicLong tmin) {
+ long tcur = System.currentTimeMillis();
+ long t;
+ while ((t = tmin.get()) > tcur) {
+ tmin.compareAndSet(t, tcur);
+ }
+ }
+}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditCompareEntriesTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditCompareEntriesTest.java
index 76f54019..3a48b20c 100644
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditCompareEntriesTest.java
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditCompareEntriesTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -18,11 +18,12 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policy.common.ia.test;
+package org.onap.policy.common.ia;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
-import java.io.FileOutputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -30,22 +31,15 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
-
import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
-import org.onap.policy.common.ia.DbAudit;
-import org.onap.policy.common.ia.DbDAO;
-import org.onap.policy.common.ia.IntegrityAudit;
-import org.onap.policy.common.ia.IntegrityAuditProperties;
+import org.onap.policy.common.ia.jpa.IaTestEntity;
import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
-import org.onap.policy.common.ia.test.jpa.IaTestEntity;
-import org.onap.policy.common.ia.test.jpa.PersonSample;
+import org.onap.policy.common.ia.jpa.PersonSample;
import org.onap.policy.common.logging.flexlogger.FlexLogger;
import org.onap.policy.common.logging.flexlogger.Logger;
@@ -53,53 +47,34 @@ import org.onap.policy.common.logging.flexlogger.Logger;
* All JUnits are designed to run in the local development environment
* where they have write privileges and can execute time-sensitive
* tasks.
- *
- * If any have been ignored (@Ignore) they will not run at the same time
- * as others. You should run them as JUnits by themselves.
*/
-public class DbAuditCompareEntriesTest {
+public class DbAuditCompareEntriesTest extends IntegrityAuditTestBase {
private static Logger logger = FlexLogger.getLogger(DbAuditCompareEntriesTest.class);
+
private DbDAO dbDAO;
- private static String persistenceUnit;
- private static Properties properties;
- private static String resourceName;
- private String dbDriver;
- private String dbUrl;
- private String dbUser;
- private String dbPwd;
- private String siteName;
- private String nodeType;
- private static final String TEST_LOG = "./testingLogs/common-modules/integrity-audit/debug.log";
-
+ private static String resourceName = "pdp1";
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ IntegrityAuditTestBase
+ .setUpBeforeClass(DEFAULT_DB_URL_PREFIX + DbAuditCompareEntriesTest.class.getSimpleName());
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ IntegrityAuditTestBase.tearDownAfterClass();
+ }
+
@Before
- public void setUp() throws Exception {
- System.out.println("setUp: Clearing IntegrityAudit.log");
- //FileOutputStream fstream = new FileOutputStream("IntegrityAudit.log");
- FileOutputStream fstream = new FileOutputStream(TEST_LOG);
- fstream.close();
+ public void setUp() {
logger.info("setUp: Entering");
- IntegrityAudit.setUnitTesting(true);
-
- properties = new Properties();
- properties.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
-
- dbDriver = TestUtils.DEFAULT_DB_DRIVER;
- dbUrl = TestUtils.DEFAULT_DB_URL;
- dbUser = TestUtils.DEFAULT_DB_USER;
- dbPwd = TestUtils.DEFAULT_DB_PWD;
- siteName = "SiteA";
- nodeType = "pdp_xacml";
- persistenceUnit = "testPU";
- resourceName = "pdp1";
-
+ super.setUp();
+
+ truncateTables(makeProperties());
+
logger.info("setUp: Exiting");
}
@@ -107,39 +82,44 @@ public class DbAuditCompareEntriesTest {
* Clean up DB after each test.
*/
@After
- public void tearDown() throws Exception {
+ public void tearDown() {
logger.info("tearDown: Entering");
-
+
+ dbDAO.destroy();
+
+ super.tearDown();
+
logger.info("tearDown: Exiting");
}
/*
- * Tests that a comparison between hashsets is successful if
- * the entries match
+ * Tests that a comparison between hashsets is successful if the entries
+ * match
*/
- //@Ignore
+ // @Ignore
@Test
public void testSuccessfulComparison() throws Exception {
logger.info("testSuccessfulComparison: Entering");
-
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
+
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, makeProperties());
DbAudit dbAudit = new DbAudit(dbDAO);
-
+
String className = null;
- //There is only one entry IntegrityAuditEntity, but we will check anyway
+ // There is only one entry IntegrityAuditEntity, but we will check
+ // anyway
Set<String> classNameSet = dbDAO.getPersistenceClassNames();
- for(String c : classNameSet){
- if (c.equals("org.onap.policy.common.ia.jpa.IntegrityAuditEntity")){
+ for (String c : classNameSet) {
+ if (c.equals("org.onap.policy.common.ia.jpa.IntegrityAuditEntity")) {
className = c;
}
}
String resourceName1 = resourceName;
String resourceName2 = resourceName;
-
+
IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
Date date = new Date();
-
+
/*
* Two entries with the same field values
*/
@@ -150,10 +130,10 @@ public class DbAuditCompareEntriesTest {
entry1.setJdbcUser(dbUser);
entry1.setLastUpdated(date);
entry1.setNodeType(nodeType);
- entry1.setPersistenceUnit(persistenceUnit);
+ entry1.setPersistenceUnit(A_SEQ_PU);
entry1.setResourceName(resourceName1);
entry1.setSite(siteName);
-
+
entry2.setDesignated(false);
entry2.setJdbcDriver(dbDriver);
entry2.setJdbcPassword(dbPwd);
@@ -161,47 +141,47 @@ public class DbAuditCompareEntriesTest {
entry2.setJdbcUser(dbUser);
entry2.setLastUpdated(date);
entry2.setNodeType(nodeType);
- entry2.setPersistenceUnit(persistenceUnit);
+ entry2.setPersistenceUnit(A_SEQ_PU);
entry2.setResourceName(resourceName2);
entry2.setSite(siteName);
-
+
dbAudit.writeAuditDebugLog(className, resourceName1, resourceName2, entry1, entry2);
-
+
HashMap<Object, Object> myEntries = new HashMap<Object, Object>();
HashMap<Object, Object> theirEntries = new HashMap<Object, Object>();
-
+
myEntries.put("pdp1", entry1);
theirEntries.put("pdp1", entry2);
-
+
Set<Object> result = dbAudit.compareEntries(myEntries, theirEntries);
-
+
/*
* Assert that there are no mismatches returned
*/
assertTrue(result.isEmpty());
-
+
logger.info("testSuccessfulComparison: Exit");
}
/*
- * Tests that an error is detected if an entry in one hashset doesn't
- * match the other
+ * Tests that an error is detected if an entry in one hashset doesn't match
+ * the other
*/
- //@Ignore
+ // @Ignore
@Test
public void testComparisonError() throws Exception {
logger.info("testComparisonError: Entering");
-
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
+
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, makeProperties());
DbAudit dbAudit = new DbAudit(dbDAO);
-
+
String resourceName1 = resourceName;
String resourceName2 = resourceName;
-
+
IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
Date date = new Date();
-
+
/*
* Create two entries with different designated values
*/
@@ -212,10 +192,10 @@ public class DbAuditCompareEntriesTest {
entry1.setJdbcUser(dbUser);
entry1.setLastUpdated(date);
entry1.setNodeType(nodeType);
- entry1.setPersistenceUnit(persistenceUnit);
+ entry1.setPersistenceUnit(A_SEQ_PU);
entry1.setResourceName(resourceName1);
entry1.setSite(siteName);
-
+
entry2.setDesignated(true);
entry2.setJdbcDriver(dbDriver);
entry2.setJdbcPassword(dbPwd);
@@ -223,48 +203,48 @@ public class DbAuditCompareEntriesTest {
entry2.setJdbcUser(dbUser);
entry2.setLastUpdated(date);
entry2.setNodeType(nodeType);
- entry2.setPersistenceUnit(persistenceUnit);
+ entry2.setPersistenceUnit(A_SEQ_PU);
entry2.setResourceName(resourceName2);
entry2.setSite(siteName);
-
+
HashMap<Object, Object> myEntries = new HashMap<Object, Object>();
HashMap<Object, Object> theirEntries = new HashMap<Object, Object>();
-
+
myEntries.put("pdp1", entry1);
theirEntries.put("pdp1", entry2);
-
+
Set<Object> result = dbAudit.compareEntries(myEntries, theirEntries);
-
+
/*
* Assert that there was one mismatch
*/
assertEquals(1, result.size());
-
+
logger.info("testComparisonError: Exit");
}
-
+
/*
- * Tests that a mismatch/miss entry is detected if there are missing entries in
- * one or both of the hashsets
+ * Tests that a mismatch/miss entry is detected if there are missing entries
+ * in one or both of the hashsets
*/
- //@Ignore
+ // @Ignore
@Test
public void testCompareMissingEntries() throws Exception {
logger.info("testCompareMissingEntries: Entering");
-
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
+
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, makeProperties());
DbAudit dbAudit = new DbAudit(dbDAO);
-
+
String resourceName1 = resourceName;
String resourceName2 = resourceName;
-
+
IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
IntegrityAuditEntity entry3 = new IntegrityAuditEntity();
IntegrityAuditEntity entry4 = new IntegrityAuditEntity();
-
+
Date date = new Date();
-
+
/*
* 4 entries, one mismatch, two miss entries
*/
@@ -275,10 +255,10 @@ public class DbAuditCompareEntriesTest {
entry1.setJdbcUser(dbUser);
entry1.setLastUpdated(date);
entry1.setNodeType(nodeType);
- entry1.setPersistenceUnit(persistenceUnit);
+ entry1.setPersistenceUnit(A_SEQ_PU);
entry1.setResourceName(resourceName1);
entry1.setSite(siteName);
-
+
entry2.setDesignated(true);
entry2.setJdbcDriver(dbDriver);
entry2.setJdbcPassword(dbPwd);
@@ -286,10 +266,10 @@ public class DbAuditCompareEntriesTest {
entry2.setJdbcUser(dbUser);
entry2.setLastUpdated(date);
entry2.setNodeType(nodeType);
- entry2.setPersistenceUnit(persistenceUnit);
+ entry2.setPersistenceUnit(A_SEQ_PU);
entry2.setResourceName(resourceName2);
entry2.setSite(siteName);
-
+
entry3.setDesignated(false);
entry3.setJdbcDriver(dbDriver);
entry3.setJdbcPassword(dbPwd);
@@ -297,10 +277,10 @@ public class DbAuditCompareEntriesTest {
entry3.setJdbcUser(dbUser);
entry3.setLastUpdated(date);
entry3.setNodeType(nodeType);
- entry3.setPersistenceUnit(persistenceUnit);
+ entry3.setPersistenceUnit(A_SEQ_PU);
entry3.setResourceName(resourceName2);
entry3.setSite("SiteB");
-
+
entry4.setDesignated(false);
entry4.setJdbcDriver(dbDriver);
entry4.setJdbcPassword(dbPwd);
@@ -308,50 +288,50 @@ public class DbAuditCompareEntriesTest {
entry4.setJdbcUser(dbUser);
entry4.setLastUpdated(date);
entry4.setNodeType(nodeType);
- entry4.setPersistenceUnit(persistenceUnit);
+ entry4.setPersistenceUnit(A_SEQ_PU);
entry4.setResourceName(resourceName2);
entry4.setSite("SiteB");
HashMap<Object, Object> myEntries = new HashMap<Object, Object>();
HashMap<Object, Object> theirEntries = new HashMap<Object, Object>();
-
+
myEntries.put("0", entry1);
myEntries.put("1", entry3);
theirEntries.put("0", entry2);
theirEntries.put("2", entry4);
-
+
Set<Object> mismatchResult = dbAudit.compareEntries(myEntries, theirEntries);
-
+
/*
* Assert 3 mismatches/missing entries were found
*/
assertEquals(3, mismatchResult.size());
-
+
logger.info("testCompareMissingEntries: Exit");
}
-
+
/*
- * Tests that comparison algorithm works for each entity in the hashsets
+ * Tests that comparison algorithm works for each entity in the hashsets
*/
- //@Ignore
+ // @Ignore
@Test
public void testCompareAllHashEntities() throws Exception {
logger.info("testCompareAllHashEntities: Entering");
-
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
+
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, makeProperties());
DbAudit dbAudit = new DbAudit(dbDAO);
-
+
Set<String> classNameSet = dbDAO.getPersistenceClassNames();
Set<Object> mismatchResult = new HashSet<Object>();
- for(String c : classNameSet) {
- if (c.equals("org.onap.policy.common.ia.jpa.IntegrityAuditEntity")){
+ for (String c : classNameSet) {
+ if (c.equals("org.onap.policy.common.ia.jpa.IntegrityAuditEntity")) {
String resourceName1 = resourceName;
String resourceName2 = resourceName;
-
+
IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
Date date = new Date();
-
+
/*
* Two entries with the same field values
*/
@@ -362,10 +342,10 @@ public class DbAuditCompareEntriesTest {
entry1.setJdbcUser(dbUser);
entry1.setLastUpdated(date);
entry1.setNodeType(nodeType);
- entry1.setPersistenceUnit(persistenceUnit);
+ entry1.setPersistenceUnit(A_SEQ_PU);
entry1.setResourceName(resourceName1);
entry1.setSite(siteName);
-
+
entry2.setDesignated(false);
entry2.setJdbcDriver(dbDriver);
entry2.setJdbcPassword(dbPwd);
@@ -373,72 +353,71 @@ public class DbAuditCompareEntriesTest {
entry2.setJdbcUser(dbUser);
entry2.setLastUpdated(date);
entry2.setNodeType(nodeType);
- entry2.setPersistenceUnit(persistenceUnit);
+ entry2.setPersistenceUnit(A_SEQ_PU);
entry2.setResourceName(resourceName2);
entry2.setSite(siteName);
-
+
HashMap<Object, Object> myEntries = new HashMap<Object, Object>();
HashMap<Object, Object> theirEntries = new HashMap<Object, Object>();
-
+
myEntries.put("pdp1", entry1);
theirEntries.put("pdp1", entry2);
-
+
mismatchResult = dbAudit.compareEntries(myEntries, theirEntries);
-
+
/*
* Assert there was no mismatches
*/
assertTrue(mismatchResult.isEmpty());
- }
- else if (c.equals("org.onap.policy.common.ia.test.jpa.IaTestEntity")) {
+ } else if (c.equals("org.onap.policy.common.ia.jpa.IaTestEntity")) {
IaTestEntity iate = new IaTestEntity();
IaTestEntity iate2 = new IaTestEntity();
IaTestEntity iate3 = new IaTestEntity();
IaTestEntity iate4 = new IaTestEntity();
-
+
Date date = new Date();
-
+
/*
* Four entries, 2 mismatches
*/
iate.setCreatedBy("Ford");
iate.setModifiedBy("Ford");
iate.setModifiedDate(date);
-
+
iate2.setCreatedBy("Ford");
iate2.setModifiedBy("Zaphod");
iate2.setModifiedDate(date);
-
+
iate3.setCreatedBy("Zaphod");
iate3.setModifiedBy("Ford");
iate3.setModifiedDate(date);
-
+
iate4.setCreatedBy("Ford");
iate4.setModifiedBy("Ford");
iate4.setModifiedDate(date);
-
+
HashMap<Object, Object> myEntries = new HashMap<Object, Object>();
HashMap<Object, Object> theirEntries = new HashMap<Object, Object>();
-
+
myEntries.put("0", iate);
myEntries.put("1", iate2);
theirEntries.put("0", iate3);
theirEntries.put("1", iate4);
-
+
mismatchResult = dbAudit.compareEntries(myEntries, theirEntries);
-
+
/*
* Assert that there is 2 mismatches
*/
assertEquals(2, mismatchResult.size());
}
}
-
+
logger.info("testCompareAllHashEntities: Exit");
}
-
+
/*
- * Tests that comparison algorithm works for each entity in the database
+ * Tests that comparison algorithm works for each entity in the database
*/
@Ignore
@Test
@@ -448,147 +427,92 @@ public class DbAuditCompareEntriesTest {
logger.info("Setting up DB");
IntegrityAudit.setUnitTesting(true);
-
- properties = new Properties();
- properties.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
-
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, "jdbc:h2:file:./sql/iaTest2");
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
-
- dbDriver = TestUtils.DEFAULT_DB_DRIVER;
- dbUrl = TestUtils.DEFAULT_DB_URL;
- dbUser = TestUtils.DEFAULT_DB_USER;
- dbPwd = TestUtils.DEFAULT_DB_PWD;
- siteName = "SiteA";
- nodeType = "pdp_xacml";
- persistenceUnit = "testPU";
- resourceName = "pdp1";
-
- //Clean up the two DBs
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManagerFactory emf2 = Persistence.createEntityManagerFactory(persistenceUnit, properties2);
-
- EntityManager em = emf.createEntityManager();
- EntityManager em2 = emf2.createEntityManager();
- // Start a transaction
- EntityTransaction et = em.getTransaction();
- EntityTransaction et2 = em2.getTransaction();
-
- /*
- * Delete entries in first DB
- */
- et.begin();
-
- // Clean the IntegrityAuditEntity table
- em.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
-
- // commit transaction
- et.commit();
-
- et.begin();
-
- // Clean the IaTestEntity table
- em.createQuery("Delete from IaTestEntity").executeUpdate();
-
- // commit transaction
- et.commit();
- em.close();
-
- /*
- * Delete entries in second DB
- */
- et2.begin();
- // Clean the IntegrityAuditEntity table
- em2.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
+ Properties properties = makeProperties();
- // commit transaction
- et2.commit();
-
- et2.begin();
+ Properties properties2 = makeProperties();
+ properties2.put(IntegrityAuditProperties.DB_URL,
+ "jdbc:h2:mem:" + DbAuditCompareEntriesTest.class.getSimpleName() + "2");
- // Clean the IaTestEntity table
- em2.createQuery("Delete from IaTestEntity").executeUpdate();
+ // Clean up the two DBs
+ truncateTables(properties);
+ truncateTables(properties2);
- // commit transaction
- et2.commit();
- em2.close();
- logger.info("Exiting set up");
-
// Add entries into DB1
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
- new DbDAO("pdp2", persistenceUnit, properties);
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, properties);
+ new DbDAO("pdp2", A_SEQ_PU, properties).destroy();
DbAudit dbAudit = new DbAudit(dbDAO);
-
+
// Add entries into DB2
- DbDAO dbDAO3 = new DbDAO(resourceName, persistenceUnit, properties2);
- new DbDAO("pdp2", persistenceUnit, properties2);
-
+ DbDAO dbDAO3 = new DbDAO(resourceName, A_SEQ_PU, properties2);
+ new DbDAO("pdp2", A_SEQ_PU, properties2).destroy();
+
// Pull all entries and compare
Set<String> classNameSet = dbDAO.getPersistenceClassNames();
Map<Object, Object> myEntries;
Map<Object, Object> theirEntries;
Set<Object> mismatchResult = new HashSet<Object>();
String className;
- for(String c : classNameSet) {
+ for (String c : classNameSet) {
className = c;
logger.info("classNameSet entry = " + c);
- myEntries = dbDAO.getAllEntries(persistenceUnit, properties, className);
- theirEntries = dbDAO3.getAllEntries(persistenceUnit, properties2, className);
+ myEntries = dbDAO.getAllEntries(A_SEQ_PU, properties, className);
+ theirEntries = dbDAO3.getAllEntries(A_SEQ_PU, properties2, className);
mismatchResult = dbAudit.compareEntries(myEntries, theirEntries);
- if(className.contains("IntegrityAuditEntity")){
+ if (className.contains("IntegrityAuditEntity")) {
break;
}
}
+ dbDAO3.destroy();
+
// Assert that there is 2 mismatches between IntegrityAuditEntity tables
assertEquals(2, mismatchResult.size());
-
+
logger.info("testCompareAllDbEntities: Exit");
}
-
+
+ /**
+ * @param properties
+ */
+ private void truncateTables(Properties properties) {
+ truncateTable(properties, A_SEQ_PU, "IntegrityAuditEntity");
+ truncateTable(properties, A_SEQ_PU, "IaTestEntity");
+ }
+
/*
- * Tests that differences in embedded classes are still caught
+ * Tests that differences in embedded classes are still caught
*/
- //@Ignore
+ // @Ignore
@Test
public void testEmbeddedClass() throws Exception {
logger.info("testEmbeddedClasses: Entering");
-
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
+
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, properties);
DbAudit dbAudit = new DbAudit(dbDAO);
-
+
String className = null;
- //There is only one entry IntegrityAuditEntity, but we will check anyway
+ // There is only one entry IntegrityAuditEntity, but we will check
+ // anyway
Set<String> classNameSet = dbDAO.getPersistenceClassNames();
- for(String c : classNameSet){
- if (c.equals("org.onap.policy.common.ia.test.jpa.IaTestEntity")){
+ for (String c : classNameSet) {
+ if (c.equals("org.onap.policy.common.ia.jpa.IaTestEntity")) {
className = c;
}
}
-
+
IaTestEntity iate = new IaTestEntity();
IaTestEntity iate2 = new IaTestEntity();
-
+
Date date = new Date();
-
+
PersonSample person = new PersonSample("Ford", "Prefect", 21);
PersonSample person2 = new PersonSample("Zaphod", "Beeblebrox", 25);
-
+
/*
- * Silly tests to bump coverage stats, not sure why
- * they are counting PersonSample to begin with. Will have to
- * look into that at some point.
+ * Silly tests to bump coverage stats, not sure why they are counting
+ * PersonSample to begin with. Will have to look into that at some
+ * point.
*/
assertNotEquals(person.getAge(), person2.getAge());
assertNotEquals(person.getFirstName(), person2.getFirstName());
@@ -604,27 +528,27 @@ public class DbAuditCompareEntriesTest {
iate.setModifiedBy("Zaphod");
iate.setModifiedDate(date);
iate.setPersonTest(person);
-
+
iate2.setCreatedBy("Ford");
iate2.setModifiedBy("Zaphod");
iate2.setModifiedDate(date);
iate2.setPersonTest(person2);
-
+
dbAudit.writeAuditDebugLog(className, "resource1", "resource2", iate, iate2);
-
+
HashMap<Object, Object> myEntries = new HashMap<Object, Object>();
HashMap<Object, Object> theirEntries = new HashMap<Object, Object>();
-
+
myEntries.put("0", iate);
theirEntries.put("0", iate2);
-
+
Set<Object> result = dbAudit.compareEntries(myEntries, theirEntries);
-
+
/*
* Assert that there are no mismatches returned
*/
assertTrue(!result.isEmpty());
-
+
logger.info("testEmbeddedClasses: Exit");
}
}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditTest.java
new file mode 100644
index 00000000..ad4041f5
--- /dev/null
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditTest.java
@@ -0,0 +1,282 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Integrity Audit
+ * ================================================================================
+ * 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.common.ia;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.fail;
+
+import java.util.List;
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.common.utils.test.log.logback.ExtractAppender;
+
+/*
+ * All JUnits are designed to run in the local development environment
+ * where they have write privileges and can execute time-sensitive
+ * tasks.
+ *
+ * If any have been ignored (@Ignore) they will not run at the same time
+ * as others. You should run them as JUnits by themselves.
+ */
+public class DbAuditTest extends IntegrityAuditTestBase {
+
+ private static Logger logger = FlexLogger.getLogger(DbAuditTest.class);
+
+ private static final String resourceName = "pdp1";
+
+ private EntityManagerFactory emf2;
+ private EntityManager em2;
+ private DbDAO dbDAO;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ IntegrityAuditTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + DbAuditTest.class.getSimpleName());
+ IntegrityAuditEntity.setUnitTesting(true);
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ IntegrityAuditTestBase.tearDownAfterClass();
+ IntegrityAuditEntity.setUnitTesting(false);
+ }
+
+ @Before
+ public void setUp() {
+ logger.info("setUp: Entering");
+
+ super.setUp();
+
+ dbDAO = null;
+ emf2 = null;
+ em2 = null;
+
+ logger.info("setUp: Exiting");
+ }
+
+ @After
+ public void tearDown() {
+ logger.info("tearDown: Entering");
+
+ if (dbDAO != null) {
+ dbDAO.destroy();
+ }
+
+ if (em2 != null) {
+ em2.close();
+ }
+
+ if (emf2 != null) {
+ emf2.close();
+ }
+
+ super.tearDown();
+
+ logger.info("tearDown: Exiting");
+ }
+
+ private void createDb(Properties properties) {
+ if (emf2 != null) {
+ throw new IllegalStateException("DB2 has already been created");
+ }
+
+ // open the DB and ensure it stays open until the test completes
+ emf2 = Persistence.createEntityManagerFactory(A_SEQ_PU, properties);
+ em2 = emf2.createEntityManager();
+
+ truncateTable(properties, A_SEQ_PU, "IntegrityAuditEntity");
+ }
+
+ /*
+ * Tests printing an error to the log in the event where there are no
+ * entities saved in the database
+ */
+ @Test
+ public void noEntitiesTest() throws Exception {
+ Properties properties = makeProperties();
+
+ logger.info("noEntitiesTest: Entering");
+
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, properties);
+ dbDAO.deleteAllIntegrityAuditEntities();
+ try {
+ DbAudit dbAudit = new DbAudit(dbDAO);
+ dbAudit.dbAudit(resourceName, A_SEQ_PU, nodeType);
+ fail("found unexpected entities");
+
+ } catch (DbAuditException e) {
+
+ }
+
+ logger.info("noEntitiesTest: Exit");
+ }
+
+ /*
+ * Tests the detection of only one entry in the database
+ */
+ @Test
+ public void oneEntityTest() throws Exception {
+ Properties properties = makeProperties();
+
+ logger.info("oneEntityTest: Entering");
+
+ ExtractAppender log = watch(debugLogger, "DbAudit: Found only (one) IntegrityAuditEntity entry:");
+
+ // Add one entry in the database
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, properties);
+ DbAudit dbAudit = new DbAudit(dbDAO);
+ dbAudit.dbAudit(resourceName, A_SEQ_PU, nodeType);
+
+ List<IntegrityAuditEntity> iaeList = dbDAO.getIntegrityAuditEntities(A_SEQ_PU, nodeType);
+ logger.info("List size: " + iaeList.size());
+
+ verifyItemsInLog(log, "one");
+
+ logger.info("oneEntityTest: Exit");
+ }
+
+ /*
+ * Tests reporting mismatches and missing entries using the error log
+ */
+ @Test
+ public void mismatchTest() throws Exception {
+ logger.info("mismatchTest: Entering");
+
+ // use new URLs so we get a completely new DB
+ String dbUrl = DbAuditTest.dbUrl + "_mismatchTest";
+ String dbUrl2 = dbUrl + "2";
+
+ Properties properties = makeProperties();
+ properties.put(IntegrityAuditProperties.DB_URL, dbUrl);
+
+ // Properties for DB2
+ Properties properties2 = makeProperties();
+ properties2.put(IntegrityAuditProperties.DB_URL, dbUrl2);
+
+ /*
+ * We must drop and re-create DB1 so that it's sequence generator is in
+ * step with the sequence generator for DB2.
+ */
+ recreateDb1(properties);
+
+ // create/open DB2
+ createDb(properties2);
+
+ ExtractAppender dbglog = watch(debugLogger, "Mismatched entries [(]keys[)]:(.*)");
+ ExtractAppender errlog = watch(errorLogger, "DB Audit: ([0-9])");
+
+ /*
+ * Create entries in DB1 & DB2 for the resource of interest
+ */
+ dbDAO = new DbDAO(resourceName, A_SEQ_PU, properties);
+
+ new DbDAO(resourceName, A_SEQ_PU, properties2).destroy();
+
+ /*
+ * Entries in DB1, pointing to DB2, except for pdp3
+ */
+ new DbDAO("pdp2", A_SEQ_PU, properties, dbUrl2).destroy();
+ new DbDAO("pdp1", A_SEQ_PU, properties, dbUrl2).destroy();
+ new DbDAO("pdp3", A_SEQ_PU, properties).destroy(); // mismatched URL
+ new DbDAO("pdp4", A_SEQ_PU, properties, dbUrl2).destroy();
+
+ /*
+ * Identical entries in DB2, all pointing to DB2, including pdp3, but
+ * leaving out pdp4
+ */
+ new DbDAO("pdp2", A_SEQ_PU, properties2).destroy();
+ new DbDAO("pdp1", A_SEQ_PU, properties2).destroy();
+ new DbDAO("pdp3", A_SEQ_PU, properties2).destroy();
+
+ /*
+ * Run the DB Audit, once it finds a mismatch and sleeps, update DB1 to
+ * have the same entry as DB2 it can be confirmed that the mismatch is
+ * resolved
+ */
+ DbAudit dbAudit = new DbAudit(dbDAO);
+ dbAudit.dbAudit(resourceName, A_SEQ_PU, nodeType);
+
+ // update pdp3 entry in DB1 to point to DB2
+ new DbDAO("pdp3", A_SEQ_PU, properties, dbUrl2).destroy();
+
+ /*
+ * Run the audit again and correct the mismatch, the result should be
+ * one entry in the mismatchKeySet because of the missing entry from the
+ * beginning of the test
+ */
+ dbAudit.dbAudit(resourceName, A_SEQ_PU, nodeType);
+
+ assertFalse(dbglog.getExtracted().isEmpty());
+
+ String mismatchIndex = dbglog.getExtracted().get(dbglog.getExtracted().size() - 1);
+ int mismatchEntries = mismatchIndex.trim().split(",").length;
+ logger.info("mismatchTest: mismatchIndex found: '" + mismatchIndex + "'" + " mismatachEntries = "
+ + mismatchEntries);
+
+ // Assert there is only one entry index
+ assertEquals(1, mismatchEntries);
+
+ // Now check the entry in the error.log
+ assertFalse(errlog.getExtracted().isEmpty());
+
+ String mismatchNum = errlog.getExtracted().get(errlog.getExtracted().size() - 1);
+
+ logger.info("mismatchTest: mismatchNum found: '" + mismatchNum + "'");
+
+ // Assert that there are a total of 3 mismatches - 1 between each
+ // comparison node.
+ assertEquals("3", mismatchNum);
+
+ logger.info("mismatchTest: Exit");
+ }
+
+ /**
+ * Re-creates DB1, using the specified properties.
+ * @param properties
+ */
+ private void recreateDb1(Properties properties) {
+ em.close();
+ emf.close();
+
+ createDb(properties);
+
+ em = em2;
+ emf = emf2;
+
+ em2 = null;
+ emf2 = null;
+ }
+
+}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/DbDAOTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/DbDAOTest.java
new file mode 100644
index 00000000..c4cba280
--- /dev/null
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/DbDAOTest.java
@@ -0,0 +1,450 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Integrity Audit
+ * ================================================================================
+ * 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.common.ia;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/*
+ * All JUnits are designed to run in the local development environment
+ * where they have write privileges and can execute time-sensitive
+ * tasks.
+ */
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.persistence.PersistenceUnitUtil;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
+import org.onap.policy.common.utils.jpa.EntityTransCloser;
+
+/*
+ * All JUnits are designed to run in the local development environment
+ * where they have write privileges and can execute time-sensitive
+ * tasks.
+ */
+public class DbDAOTest extends IntegrityAuditTestBase {
+ private static String resourceName = "pdp0";
+
+ private DbDAO d;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ IntegrityAuditTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + DbDAOTest.class.getSimpleName());
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ IntegrityAuditTestBase.tearDownAfterClass();
+ }
+
+ @Before
+ public void setUp() {
+ super.setUp();
+ d = null;
+ }
+
+ @After
+ public void tearDown() {
+ if(d != null) {
+ d.destroy();
+ }
+
+ super.tearDown();
+ }
+
+ /* Tests registering a new IntegrityAuditEntity object in the DB */
+ @Test
+ public void testNewRegistration() throws Exception {
+ Properties properties = makeProperties();
+
+ try(EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+
+ // Find the proper entry in the database
+ Query iaequery = em
+ .createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
+ iaequery.setParameter("rn", DbDAOTest.resourceName);
+ iaequery.setParameter("pu", DbDAOTest.A_SEQ_PU);
+
+ @SuppressWarnings("rawtypes")
+ List iaeList = iaequery.getResultList();
+
+ // Assert that the IntegrityAuditEntity object was found
+ assertNotNull(iaeList);
+
+ // flush to the DB
+ em.flush();
+ et.commit();
+ }
+ }
+
+ /*
+ * Tests updating an IntegrityAuditEntity if it has already been registered
+ */
+ @Test
+ public void testUpdateRegistration() throws Exception {
+ Properties properties = makeProperties();
+
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+
+ // Change site_name in properties to test that an update was made to
+ // an existing entry in the table
+ properties.put(IntegrityAuditProperties.SITE_NAME, "SiteB");
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+
+ try(EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
+ // Find the proper entry in the database
+ Query iaequery = em
+ .createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
+ iaequery.setParameter("rn", DbDAOTest.resourceName);
+ iaequery.setParameter("pu", DbDAOTest.A_SEQ_PU);
+
+ @SuppressWarnings("rawtypes")
+ List iaeList = iaequery.getResultList();
+ IntegrityAuditEntity iae = null;
+ if (!iaeList.isEmpty()) {
+ // ignores multiple results
+ iae = (IntegrityAuditEntity) iaeList.get(0);
+
+ em.refresh(iae);
+ em.persist(iae);
+
+ // flush to the DB
+ em.flush();
+
+ // commit transaction
+ et.commit();
+
+ // Assert that the site_name for the existing entry was updated
+ assertEquals("SiteB", iae.getSite());
+ }
+ }
+ }
+
+ /* Tests obtaining all Integrity Audit Entities from a table */
+ @Test
+ public void testGetIntegrityAuditEntities() throws Exception {
+ Properties properties = makeProperties();
+
+ // Add some entries to the DB
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+ new DbDAO("pdp1", A_SEQ_PU, properties).destroy();
+ properties.put(IntegrityAuditProperties.NODE_TYPE, "pdp_drools");
+ new DbDAO("pdp2", A_SEQ_PU, properties).destroy();
+
+ List<IntegrityAuditEntity> entities;
+ // Obtain entries based on persistenceUnit and nodeType
+ entities = d.getIntegrityAuditEntities(A_SEQ_PU, "pdp_xacml");
+ assertEquals(2, entities.size());
+ }
+
+ /* Tests retrieving a DbDAO instance's IntegrityAuditEntity */
+ @Test
+ public void testGetMyIntegrityAuditEntity() throws Exception {
+ Properties properties = makeProperties();
+
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+ IntegrityAuditEntity iae = d.getMyIntegrityAuditEntity();
+ // assertEquals("integrityAuditPU", iae.getPersistenceUnit());
+ assertEquals(A_SEQ_PU, iae.getPersistenceUnit());
+ }
+
+ /* Tests obtaining an IntegrityAuditEntity by ID */
+ @Test
+ public void testGetIntegrityAuditEntity() throws Exception {
+ Properties properties = makeProperties();
+
+ // Obtain an entry from the database based on ID
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+
+ // Find the proper database entry
+ Query iaequery = em
+ .createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
+ iaequery.setParameter("rn", DbDAOTest.resourceName);
+ iaequery.setParameter("pu", DbDAOTest.A_SEQ_PU);
+
+ @SuppressWarnings("rawtypes")
+ List iaeList = iaequery.getResultList();
+ IntegrityAuditEntity iae = null;
+ if (!iaeList.isEmpty()) {
+ // ignores multiple results
+ iae = (IntegrityAuditEntity) iaeList.get(0);
+
+ // refresh the object from DB in case cached data was returned
+ em.refresh(iae);
+
+ // Obtain ID for an IntegrityAuditEntity
+ PersistenceUnitUtil util = emf.getPersistenceUnitUtil();
+ Object iaeId = util.getIdentifier(iae);
+
+ // Obtain the same IntegrityAuditEntity based on ID
+ IntegrityAuditEntity iaeDuplicate = d.getIntegrityAuditEntity((long) iaeId);
+ Object duplicateId = util.getIdentifier(iaeDuplicate);
+
+ // Assert that the proper entry was retrieved based on ID
+ assertEquals((long) iaeId, (long) duplicateId);
+ }
+ }
+
+ /* Tests setting an IntegrityAuditEntity as the designated node */
+ @Test
+ public void testSetDesignated() throws Exception {
+ Properties properties = makeProperties();
+
+ try(EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
+ // Create an entry and set it's designated field to true
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+ d.setDesignated(resourceName, A_SEQ_PU, true);
+
+ // Find the proper entry in the database
+ Query iaequery = em
+ .createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
+ iaequery.setParameter("rn", resourceName);
+ iaequery.setParameter("pu", A_SEQ_PU);
+
+ @SuppressWarnings("rawtypes")
+ List iaeList = iaequery.getResultList();
+ IntegrityAuditEntity iae = null;
+
+ if (!iaeList.isEmpty()) {
+ // ignores multiple results
+ iae = (IntegrityAuditEntity) iaeList.get(0);
+ em.refresh(iae);
+
+ // Check if the node is designated
+ boolean result = iae.isDesignated();
+
+ // Assert that it is designated
+ assertTrue(result);
+ }
+
+ // flush to the DB
+ em.flush();
+
+ // close the transaction
+ et.commit();
+ }
+ }
+
+ /* Tests that the lastUpdated column in the database is updated properly */
+ @Test
+ public void testSetLastUpdated() throws Exception {
+ Properties properties = makeProperties();
+
+ try(EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
+ // Create an entry
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+
+ // Find the proper entry in the database
+ Query iaequery = em
+ .createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
+ iaequery.setParameter("rn", resourceName);
+ iaequery.setParameter("pu", A_SEQ_PU);
+
+ @SuppressWarnings("rawtypes")
+ List iaeList = iaequery.getResultList();
+ IntegrityAuditEntity iae = null;
+
+ if (!iaeList.isEmpty()) {
+ // ignores multiple results
+ iae = (IntegrityAuditEntity) iaeList.get(0);
+ // refresh the object from DB in case cached data was returned
+ em.refresh(iae);
+
+ // Obtain old update value and set new update value
+ Date oldDate = iae.getLastUpdated();
+
+ // ensure dates are different by sleeping for a bit
+ Thread.sleep(1);
+
+ iae.setSite("SiteB");
+ iae.setLastUpdated(new Date());
+ Date newDate = iae.getLastUpdated();
+
+ em.persist(iae);
+ // flush to the DB
+ em.flush();
+ // close the transaction
+ et.commit();
+
+ // Assert that the old and new update times are different
+ assertNotEquals(oldDate, newDate);
+ }
+ }
+ }
+
+ /* Tests that all the entries from a class can be retrieved */
+ @Test
+ public void testGetAllMyEntriesString() throws Exception {
+ Properties properties = makeProperties();
+
+ // create entries for the IntegrityAuditEntity table
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+ new DbDAO("pdp1", A_SEQ_PU, properties).destroy();
+ new DbDAO("pdp2", A_SEQ_PU, properties).destroy();
+
+ // Obtain a hash with the persisted objects
+ Map<Object, Object> entries = d.getAllMyEntries("org.onap.policy.common.ia.jpa.IntegrityAuditEntity");
+
+ // Assert there were 3 entries for that class
+ assertEquals(3, entries.size());
+ }
+
+ /*
+ * Tests retrieving all entities in a Persistence Unit using the class name
+ * and a hashset of IDs
+ */
+ @Test
+ public void testGetAllMyEntriesStringHashSet() throws Exception {
+ Properties properties = makeProperties();
+
+ // create entries for the IntegrityAuditEntity table
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+ new DbDAO("pdp1", A_SEQ_PU, properties).destroy();
+ new DbDAO("pdp2", A_SEQ_PU, properties).destroy();
+
+ // Obtain all entity keys
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery<Object> cq = cb.createQuery();
+ Root<?> rootEntry = cq.from(Class.forName("org.onap.policy.common.ia.jpa.IntegrityAuditEntity"));
+ CriteriaQuery<Object> all = cq.select(rootEntry);
+ TypedQuery<Object> allQuery = em.createQuery(all);
+ List<Object> objectList = allQuery.getResultList();
+ HashSet<Object> resultSet = new HashSet<Object>();
+ PersistenceUnitUtil util = emf.getPersistenceUnitUtil();
+ for (Object o : objectList) {
+ Object key = util.getIdentifier(o);
+ resultSet.add(key);
+ }
+
+ // Obtain a hash with the persisted objects
+ Map<Object, Object> entries = d.getAllMyEntries("org.onap.policy.common.ia.jpa.IntegrityAuditEntity",
+ resultSet);
+
+ // Assert there were 3 entries for that class
+ assertEquals(3, entries.size());
+ }
+
+ /*
+ * Tests retrieving all entities in a Persistence Unit using the persistence
+ * unit, properties, and class name
+ */
+ @Test
+ public void testGetAllEntriesStringPropertiesString() throws Exception {
+ Properties properties = makeProperties();
+
+ // create entries for the IntegrityAuditEntity table
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+ new DbDAO("pdp1", A_SEQ_PU, properties).destroy();
+ new DbDAO("pdp2", A_SEQ_PU, properties).destroy();
+
+ // Obtain a hash with the persisted objects
+ Map<Object, Object> entries = d.getAllEntries("integrityAuditPU", properties,
+ "org.onap.policy.common.ia.jpa.IntegrityAuditEntity");
+
+ // Assert there were 3 entries for that class
+ assertEquals(3, entries.size());
+ }
+
+ /*
+ * Tests retrieving all entities in a Persistence Unit using the persistence
+ * unit, properties, class name, and a hashset of IDs
+ */
+ @Test
+ public void testGetAllEntriesStringPropertiesStringHashSet() throws Exception {
+ Properties properties = makeProperties();
+
+ // create entries for the IntegrityAuditEntity table
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+ new DbDAO("pdp1", A_SEQ_PU, properties).destroy();
+ new DbDAO("pdp2", A_SEQ_PU, properties).destroy();
+
+ // Obtain all entity keys
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery<Object> cq = cb.createQuery();
+ Root<?> rootEntry = cq.from(Class.forName("org.onap.policy.common.ia.jpa.IntegrityAuditEntity"));
+ CriteriaQuery<Object> all = cq.select(rootEntry);
+ TypedQuery<Object> allQuery = em.createQuery(all);
+ List<Object> objectList = allQuery.getResultList();
+ HashSet<Object> resultSet = new HashSet<Object>();
+ PersistenceUnitUtil util = emf.getPersistenceUnitUtil();
+ for (Object o : objectList) {
+ Object key = util.getIdentifier(o);
+ resultSet.add(key);
+ }
+
+ // Obtain a hash with the persisted objects
+ Map<Object, Object> entries = d.getAllEntries("integrityAuditPU", properties,
+ "org.onap.policy.common.ia.jpa.IntegrityAuditEntity", resultSet);
+
+ // Assert there were 3 entries for that class
+ assertEquals(3, entries.size());
+ }
+
+ /*
+ * Tests getting all the entries from a class based on persistenceUnit,
+ * properties, and className
+ */
+ @Test
+ public void testGetAllEntries() throws Exception {
+ Properties properties = makeProperties();
+
+ // create entries for the IntegrityAuditEntity table
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+ new DbDAO("pdp1", A_SEQ_PU, properties).destroy();
+ new DbDAO("pdp2", A_SEQ_PU, properties).destroy();
+
+ // Obtain a hash with the persisted objects
+ Map<Object, Object> entries = d.getAllEntries(A_SEQ_PU, properties,
+ "org.onap.policy.common.ia.jpa.IntegrityAuditEntity");
+
+ // Assert there were 3 entries for that class
+ assertEquals(3, entries.size());
+ }
+
+ /* Tests obtaining all class names of persisted classes */
+ public void testGetPersistenceClassNames() throws Exception {
+ Properties properties = makeProperties();
+
+ d = new DbDAO(resourceName, A_SEQ_PU, properties);
+
+ // Retrieve persistence class names
+ Set<String> result = d.getPersistenceClassNames();
+ assertEquals(1, result.size());
+ }
+}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/ExceptionsTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/ExceptionsTest.java
index af4a8ceb..b02b0c7f 100644
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/ExceptionsTest.java
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/ExceptionsTest.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policy.common.ia.test;
+package org.onap.policy.common.ia;
import static org.junit.Assert.assertEquals;
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditDesignationTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditDesignationTest.java
new file mode 100644
index 00000000..1861787a
--- /dev/null
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditDesignationTest.java
@@ -0,0 +1,619 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Integrity Audit
+ * ================================================================================
+ * 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.common.ia;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.common.utils.test.log.logback.ExtractAppender;
+
+/**
+ * All JUnits are designed to run in the local development environment where
+ * they have write privileges and can execute time-sensitive tasks.
+ * <p/>
+ * Many of the test verification steps are performed by scanning for items
+ * written to the log file. Rather than actually scan the log file, an
+ * {@link ExtractAppender} is used to monitor events that are logged and extract
+ * relevant items. In order to attach the appender to the debug log, it assumes
+ * that the debug log is a <i>logback</i> Logger configured per EELF.
+ * <p/>
+ * These tests use a temporary, in-memory DB, which is dropped once the tests
+ * complete.
+ */
+public class IntegrityAuditDesignationTest extends IntegrityAuditTestBase {
+
+ private static Logger logger = FlexLogger.getLogger(IntegrityAuditDesignationTest.class);
+
+ /**
+ * Matches specified PDPs in the debug log. A regular expression matching
+ * the desired PDPs should be appended, followed by a right parenthesis. For
+ * example:
+ *
+ * <pre>
+ * <code>new ExtractAppender(START_AUDIT_RE_PREFIX + "pdp[124])")
+ * </code>
+ * </pre>
+ */
+ private static final String START_AUDIT_RE_PREFIX = "Starting audit simulation for resourceName=(";
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ IntegrityAuditTestBase
+ .setUpBeforeClass(DEFAULT_DB_URL_PREFIX + IntegrityAuditDesignationTest.class.getSimpleName());
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ IntegrityAuditTestBase.tearDownAfterClass();
+ }
+
+ @Before
+ public void setUp() {
+ logger.info("setUp: Entering");
+
+ super.setUp();
+
+ logger.info("setUp: Exiting");
+ }
+
+ @After
+ public void tearDown() {
+ logger.info("tearDown: Entering");
+
+ super.tearDown();
+
+ logger.info("tearDown: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when only one functioning resource is in play.
+ * Designation should stay with single resource.
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful.
+ */
+ @Test
+ public void testOneResource() throws Exception {
+
+ logger.info("testOneResource: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE);
+
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Wait for
+ *
+ * 1) pdp1 to run audit
+ *
+ * 2) Logic to detect that no other node is available for designation
+ *
+ * 3) pdp1 to run audit again
+ */
+ runAudit(integrityAudit);
+ waitStaleAndRun(integrityAudit);
+
+ logger.info("testOneResource: Stopping audit thread");
+ integrityAudit.stopAuditThread();
+
+ verifyItemsInLog(logA, "pdp1");
+
+ /*
+ * Test fix for ONAPD2TD-783: Audit fails to run when application is
+ * restarted.
+ */
+ integrityAudit.startAuditThread();
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) pdp1 to run audit
+ *
+ * 2) Logic to detect that no other node is available for designation
+ *
+ * 3) pdp1 to run audit again
+ */
+ runAudit(integrityAudit);
+ waitStaleAndRun(integrityAudit);
+
+ verifyItemsInLog(logA, "pdp1");
+
+ logger.info("testOneResource: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when two functioning resources are in play.
+ * Designation should alternate between resources.
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful. A quick way of examining the log is to search for the
+ * string "audit simulation":
+ *
+ * As you can see from the "dbAuditSimulate" method, when it executes, it
+ * logs the "Starting audit simulation..." message and when it finishes, it
+ * logs the "Finished audit simulation..." message. By looking for these
+ * messages, you can verify that the audits are run by the proper resource.
+ * For example, when testFourResourcesOneDead is run, you should see a
+ * Starting.../Finished... sequence for "pdp1", followed by a
+ * Starting.../Finished... sequence for pdp2, followed by a
+ * Starting.../Finished... sequence for pdp4 (pdp3 is skipped as it's
+ * dead/hung), followed by a Starting.../Finished... sequence for "pdp1",
+ * etc.
+ */
+ @Test
+ public void testTwoResources() throws Exception {
+
+ logger.info("testTwoResources: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE);
+
+ /*
+ * Start audit for pdp1.
+ */
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Start audit for pdp2.
+ */
+ MyIntegrityAudit integrityAudit2 = makeAuditor("pdp2", A_SEQ_PU);
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) pdp1 to run audit
+ *
+ * 2) Logic to detect that pdp1 is stale and designate pdp2
+ *
+ * 3) pdp2 to run audit
+ *
+ * 4) Logic to detect that pdp2 is stale and designate pdp1
+ *
+ * 5) pdp1 to run audit
+ */
+ runAudit(integrityAudit);
+ waitStaleAndRun(integrityAudit2);
+ waitStaleAndRun(integrityAudit);
+
+ verifyItemsInLog(logA, "pdp1", "pdp2", "pdp1");
+
+ logger.info("testTwoResources: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when two functioning resources are in play, each
+ * with different PUs. Audits for persistenceUnit and PU_B should run
+ * simultaneously. Designation should not alternate.
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful.
+ */
+ @Test
+ public void testTwoResourcesDifferentPus() throws Exception {
+
+ logger.info("testTwoResourcesDifferentPus: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE_PREFIX + "pdp1)");
+ ExtractAppender logB = watch(debugLogger, START_AUDIT_RE_PREFIX + "pdp2)");
+
+ /*
+ * Start audit for pdp1.
+ */
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Start audit for pdp2.
+ */
+ MyIntegrityAudit integrityAudit2 = makeAuditor("pdp2", B_SEQ_PU);
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) pdp1 and pdp2 to run audit simultaneously
+ *
+ * 2) Logic to detect that no other node is available for designation
+ * for either pdp1 or pdp2
+ *
+ * 3) pdp1 and pdp2 to again run audit simultaneously
+ */
+ runAudit(integrityAudit, integrityAudit2);
+ waitStaleAndRun(integrityAudit, integrityAudit2);
+
+ verifyItemsInLog(logA, "pdp1", "pdp1");
+ verifyItemsInLog(logB, "pdp2", "pdp2");
+
+ logger.info("testTwoResourcesDifferentPus: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when two resources are in play but one of them is
+ * dead/hung. Designation should move to second resource but then get
+ * restored back to original resource when it's discovered that second
+ * resource is dead.
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful.
+ */
+ @Test
+ public void testTwoResourcesOneDead() throws Exception {
+
+ logger.info("testTwoResourcesOneDead: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE);
+
+ /*
+ * Start audit for pdp1.
+ */
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Populate DB for pdp2, which will simulate it having registered but
+ * then having died.
+ */
+ new DbDAO("pdp2", A_SEQ_PU, makeProperties()).destroy();
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) pdp1 to run audit
+ *
+ * 2) Logic to detect that other node, pdp2, is not available for
+ * designation
+ *
+ * 3) pdp1 to run audit again
+ */
+ runAudit(integrityAudit);
+ waitStaleAndRun(integrityAudit);
+
+ verifyItemsInLog(logA, "pdp1", "pdp1");
+
+ logger.info("testTwoResourcesOneDead: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when three functioning resources are in play.
+ * Designation should round robin among resources.
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful.
+ */
+ @Test
+ public void testThreeResources() throws Exception {
+
+ logger.info("testThreeResources: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE);
+
+ /*
+ * Start audit for pdp1.
+ */
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Start audit for pdp2.
+ */
+ MyIntegrityAudit integrityAudit2 = makeAuditor("pdp2", A_SEQ_PU);
+
+ /*
+ * Start audit for pdp3.
+ */
+ MyIntegrityAudit integrityAudit3 = makeAuditor("pdp3", A_SEQ_PU);
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) pdp1 to run audit
+ *
+ * 2) Logic to detect that pdp1 is stale and designate pdp2
+ *
+ * 3) pdp2 to run audit
+ *
+ * 4) Logic to detect that pdp2 is stale and designate pdp3
+ *
+ * 5) pdp3 to run audit
+ *
+ * 6) Logic to detect that pdp3 is stale and designate pdp1
+ *
+ * 7) pdp1 to run audit
+ */
+ runAudit(integrityAudit);
+ waitStaleAndRun(integrityAudit2);
+ waitStaleAndRun(integrityAudit3);
+ waitStaleAndRun(integrityAudit);
+
+ verifyItemsInLog(logA, "pdp1", "pdp2", "pdp3", "pdp1");
+
+ logger.info("testThreeResources: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when four functioning resources are in play, two
+ * with one PU, two with another. Audits for persistenceUnit and PU_B should
+ * run simultaneously. Designation should alternate between resources for
+ * each of the two persistence units.
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful.
+ */
+ @Test
+ public void testFourResourcesDifferentPus() throws Exception {
+
+ logger.info("testFourResourcesDifferentPus: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE_PREFIX + "pdp1|pdp3)");
+ ExtractAppender logB = watch(debugLogger, START_AUDIT_RE_PREFIX + "pdp2|pdp4)");
+
+ /*
+ * Start audit for "pdp1", testPU.
+ */
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Start audit for pdp2, integrityAuditPU.
+ */
+ MyIntegrityAudit integrityAudit2 = makeAuditor("pdp2", B_SEQ_PU);
+
+ /*
+ * Start audit for pdp3, testPU.
+ */
+ MyIntegrityAudit integrityAudit3 = makeAuditor("pdp3", A_SEQ_PU);
+
+ /*
+ * Start audit for pdp4, integrityAuditPU.
+ */
+ MyIntegrityAudit integrityAudit4 = makeAuditor("pdp4", B_SEQ_PU);
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) pdp1 and pdp2 to run audit simultaneously
+ *
+ * 2) Logic to detect that pdp1 and pdp2 are stale and designate pdp3
+ * (one's counterpart) and pdp4 (two's counterpart)
+ *
+ * 3) pdp3 and pdp4 to run audit simultaneously
+ *
+ * 4) Logic to detect that pdp3 and pdp4 are stale and designate pdp1
+ * (three's counterpart) and pdp2 (four's counterpart)
+ *
+ * 5) pdp1 and pdp2 to run audit simultaneously
+ */
+ runAudit(integrityAudit, integrityAudit2);
+ waitStaleAndRun(integrityAudit3, integrityAudit4);
+ waitStaleAndRun(integrityAudit, integrityAudit2);
+
+ /*
+ * These sequences may be intermingled, so we extract and compare one
+ * sequence at a time.
+ */
+
+ // only care about pdp1 & pdp3 in this sequence
+ verifyItemsInLog(logA, "pdp1", "pdp3", "pdp1");
+
+ // only care about pdp2 & pdp4 in this sequence
+ verifyItemsInLog(logB, "pdp2", "pdp4", "pdp2");
+
+ logger.info("testFourResourcesDifferentPus: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when four resources are in play but one is not
+ * functioning. Designation should round robin among functioning resources
+ * only.
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful.
+ */
+ @Test
+ public void testFourResourcesOneDead() throws Exception {
+
+ logger.info("testFourResourcesOneDead: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE);
+
+ /*
+ * Start audit for pdp1.
+ */
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Start audit for pdp2.
+ */
+ MyIntegrityAudit integrityAudit2 = makeAuditor("pdp2", A_SEQ_PU);
+
+ /*
+ * Populate DB for pdp3, which will simulate it having registered but
+ * then having died.
+ */
+ new DbDAO("pdp3", A_SEQ_PU, makeProperties()).destroy();
+
+ /*
+ * Start audit for pdp4.
+ */
+ MyIntegrityAudit integrityAudit4 = makeAuditor("pdp4", A_SEQ_PU);
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) pdp1 to run audit
+ *
+ * 2) Logic to detect that pdp1 is stale and designate pdp2
+ *
+ * 3) pdp2 to run audit
+ *
+ * 4) Logic to detect that pdp2 is stale and designate pdp4
+ *
+ * 5) pdp4 to run audit
+ *
+ * 6) Logic to detect that pdp4 is stale and designate pdp1
+ *
+ * 7) pdp1 to run audit
+ *
+ * 8) Logic to detect that pdp1 is stale and designate pdp2
+ *
+ * 7) pdp2 to run audit
+ */
+ runAudit(integrityAudit);
+ waitStaleAndRun(integrityAudit2);
+ waitStaleAndRun(integrityAudit4);
+ waitStaleAndRun(integrityAudit);
+ waitStaleAndRun(integrityAudit2);
+ waitStaleAndRun(integrityAudit4);
+
+ verifyItemsInLog(logA, "pdp1", "pdp2", "pdp4", "pdp1", "pdp2", "pdp4");
+
+ logger.info("testFourResourcesOneDead: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when four resources are in play but only one is
+ * functioning. Designation should remain with sole functioning resource.
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful.
+ */
+ @Test
+ public void testFourResourcesThreeDead() throws Exception {
+
+ logger.info("testFourResourcesThreeDead: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE);
+
+ /*
+ * Populate DB for "pdp1", which will simulate it having registered but
+ * then having died.
+ */
+ new DbDAO("pdp1", A_SEQ_PU, makeProperties()).destroy();
+
+ /*
+ * Populate DB for pdp2, which will simulate it having registered but
+ * then having died.
+ */
+ new DbDAO("pdp2", A_SEQ_PU, makeProperties()).destroy();
+
+ /*
+ * Start audit for pdp3.
+ */
+ MyIntegrityAudit integrityAudit3 = makeAuditor("pdp3", A_SEQ_PU);
+
+ /*
+ * Populate DB for pdp4, which will simulate it having registered but
+ * then having died.
+ */
+ new DbDAO("pdp4", A_SEQ_PU, makeProperties()).destroy();
+
+ /*
+ * Sleep long enough to allow
+ *
+ * 1) pdp3 to discover that all other designation candidates are stale
+ *
+ * 1) pdp3 to run audit
+ *
+ * 2) Logic to detect that no other nodes are available for designation
+ *
+ * 3) pdp3 to run audit again
+ */
+ runAudit(integrityAudit3);
+ waitStaleAndRun(integrityAudit3);
+
+ verifyItemsInLog(logA, "pdp3", "pdp3");
+
+ logger.info("testFourResourcesThreeDead: Exiting");
+
+ }
+
+ /*
+ * Tests designation logic when the designated node dies and is no longer
+ * current
+ *
+ * Note: console.log must be examined to ascertain whether or not this test
+ * was successful.
+ */
+ @Test
+ public void testDesignatedNodeDead() throws Exception {
+ logger.info("testDesignatedNodeDead: Entering");
+
+ ExtractAppender logA = watch(debugLogger, START_AUDIT_RE);
+
+ /*
+ * Instantiate audit object for pdp1.
+ */
+ MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
+
+ /*
+ * Start audit for pdp2.
+ */
+ MyIntegrityAudit integrityAudit2 = makeAuditor("pdp2", A_SEQ_PU);
+
+ /*
+ * Instantiate audit object for pdp3.
+ */
+ MyIntegrityAudit integrityAudit3 = makeAuditor("pdp3", A_SEQ_PU);
+
+ // Start audit on pdp1
+ logger.info("testDesignatedNodeDead: Start audit on pdp1");
+ runAudit(integrityAudit);
+
+ // Start the auditing threads on other nodes.
+ logger.info("testDesignatedNodeDead: Start audit on pdp2");
+ runAudit(integrityAudit2);
+
+ // Kill audit on pdp1
+ logger.info("testDesignatedNodeDead: Kill audit on pdp1");
+ integrityAudit.stopAuditThread();
+
+ // Wait long enough for pdp1 to get stale and pdp2 to take over
+ waitStaleAndRun(integrityAudit2);
+
+ // Start audit thread on pdp1 again.
+ logger.info("testDesignatedNodeDead: Start audit thread on pdp1 again.");
+ integrityAudit.startAuditThread();
+
+ // Wait long enough for pdp2 to complete its audit and get stale, at
+ // which point pdp3 should take over
+ logger.info(
+ "testDesignatedNodeDead: Wait long enough for pdp2 to complete its audit and get stale, at which point pdp3 should take over");
+ waitStaleAndRun(integrityAudit3);
+
+ // Kill audit on pdp3
+ logger.info("testDesignatedNodeDead: Killing audit on pdp3");
+ integrityAudit3.stopAuditThread();
+
+ // Wait long enough for pdp3 to get stale and pdp1 to take over
+ logger.info("testDesignatedNodeDead: Wait long enough for pdp3 to get stale and pdp1 to take over");
+ waitStaleAndRun(integrityAudit);
+
+ verifyItemsInLog(logA, "pdp1", "pdp2", "pdp3", "pdp1");
+
+ logger.info("testDesignatedNodeDead: Exiting");
+ }
+}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/IntegrityAuditTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTest.java
index 5f19e2b9..344ac34e 100644
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/IntegrityAuditTest.java
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policy.common.ia.test;
+package org.onap.policy.common.ia;
import static org.junit.Assert.*;
@@ -59,6 +59,13 @@ public class IntegrityAuditTest {
assertFalse("".equals(badParams.toString()));
assertFalse(badParams.toString().contains("resourceName"));
assertFalse(badParams.toString().contains("properties"));
+
+ // Try with invalid node type
+ props.put(IntegrityAuditProperties.NODE_TYPE, "bogus");
+ badParams = new StringBuilder();
+ IntegrityAudit.parmsAreBad("someting", "something", props, badParams);
+ assertFalse("".equals(badParams.toString()));
+ assertTrue(badParams.toString().contains("nodeType"));
}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTestBase.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTestBase.java
new file mode 100644
index 00000000..474879d1
--- /dev/null
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTestBase.java
@@ -0,0 +1,626 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Integrity Audit
+ * ================================================================================
+ * 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.common.ia;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+
+import org.onap.policy.common.utils.jpa.EntityMgrCloser;
+import org.onap.policy.common.utils.jpa.EntityMgrFactoryCloser;
+import org.onap.policy.common.utils.jpa.EntityTransCloser;
+import org.onap.policy.common.utils.test.log.logback.ExtractAppender;
+import org.slf4j.LoggerFactory;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+
+/**
+ * All JUnits are designed to run in the local development environment where
+ * they have write privileges and can execute time-sensitive tasks.
+ * <p/>
+ * Many of the test verification steps are performed by scanning for items
+ * written to the log file. Rather than actually scan the log file, an
+ * {@link ExtractAppender} is used to monitor events that are logged and extract
+ * relevant items. In order to attach the appender to the debug log, it assumes
+ * that the debug log is a <i>logback</i> Logger configured per EELF.
+ * <p/>
+ * These tests use a temporary, in-memory DB, which is dropped once the tests
+ * complete.
+ */
+public class IntegrityAuditTestBase {
+
+ /**
+ * Root of the debug logger, as defined in the logback-test.xml.
+ */
+ protected static final Logger debugLogger = (Logger) LoggerFactory.getLogger("com.att.eelf.debug");
+
+ /**
+ * Root of the error logger, as defined in the logback-test.xml.
+ */
+ protected static final Logger errorLogger = (Logger) LoggerFactory.getLogger("com.att.eelf.error");
+
+ /**
+ * Directory containing the log files.
+ */
+ private static final String LOG_DIR = "testingLogs/common-modules/integrity-audit";
+
+ /**
+ * Max time, in milliseconds, to wait for a latch to be triggered.
+ */
+ protected static final long WAIT_MS = 5000l;
+
+ /**
+ * Milliseconds that auditor should sleep between audit steps.
+ */
+ protected static final long SLEEP_INTERVAL_MS = 2l;
+
+ /**
+ * Milliseconds that auditor should sleep when an audit completes.
+ */
+ protected static final long COMPLETION_INTERVAL_MS = 5l;
+
+ /**
+ * Milliseconds that an entire audit-simulation cycles takes.
+ */
+ protected static final long AUDIT_SIMULATION_MS = SLEEP_INTERVAL_MS * AuditThread.AUDIT_SIMULATION_ITERATIONS;
+
+ /**
+ * Milliseconds that it takes for an auditor's last update to become stale.
+ * Includes a 1ms fudge factor.
+ */
+ protected static final long STALE_MS = 1 + 2 * Math.max(COMPLETION_INTERVAL_MS, AUDIT_SIMULATION_MS);
+
+ /**
+ * Milliseconds that the db-audit should wait between makings updates.
+ */
+ private static final long DB_AUDIT_UPDATE_MS = 10l;
+
+ /**
+ * Milliseconds that the db-audit should sleep between cycles.
+ */
+ private static final long DB_AUDIT_SLEEP_MS = 3l;
+
+ public static final String DEFAULT_DB_URL_PREFIX = "jdbc:h2:mem:";
+
+ protected static final String dbDriver = "org.h2.Driver";
+ protected static final String dbUser = "testu";
+ protected static final String dbPwd = "testp";
+ protected static final String siteName = "SiteA";
+ protected static final String nodeType = "pdp_xacml";
+
+ // will be defined by the test *Classes*
+ protected static String dbUrl;
+
+ /**
+ * Persistence unit for PDP sequence A.
+ */
+ protected static final String A_SEQ_PU = "testPU";
+
+ /**
+ * Persistence unit for PDP sequence B.
+ */
+ protected static final String B_SEQ_PU = "integrityAuditPU";
+
+ /**
+ * Matches the start of an audit for arbitrary PDPs in the debug log.
+ */
+ protected static final String START_AUDIT_RE = "Starting audit simulation for resourceName=([^,]*)";
+
+ /**
+ * Properties to be used in all tests.
+ */
+ protected static Properties properties;
+
+ /**
+ * Entity manager factory pointing to the in-memory DB for A_SEQ_PU.
+ */
+ protected static EntityManagerFactory emf;
+
+ /**
+ * Entity manager factory pointing to the in-memory DB associated with emf.
+ */
+ protected static EntityManager em;
+
+ /**
+ * Saved debug logger level, to be restored once all tests complete.
+ */
+ private static Level savedDebugLevel;
+
+ /**
+ * Saved error logger level, to be restored once all tests complete.
+ */
+ private static Level savedErrorLevel;
+
+ /**
+ * Saved audit sleep interval, to be restored once all tests complete.
+ */
+ private static long savedSleepIntervalMs;
+
+ /**
+ * Saved audit completion interval, to be restored once all tests complete.
+ */
+ private static long savedCompletionIntervalMs;
+
+ /**
+ * Saved db audit update time, to be restored once all tests complete.
+ */
+ private static long savedDbAuditUpdateMs;
+
+ /**
+ * Saved db audit sleep time, to be restored once all tests complete.
+ */
+ private static long savedDbAuditSleepMs;
+
+ /**
+ * List of auditors whose threads must be stopped when a given test case
+ * ends.
+ */
+ private List<MyIntegrityAudit> auditors;
+
+ /**
+ * List of appenders that must be removed from loggers when a given test
+ * case ends.
+ */
+ private List<LogApp> appenders;
+
+ /**
+ * Saves current configuration information and then sets new values.
+ *
+ * @param dbDriver
+ * the name of the DB Driver class
+ * @param dbUrl
+ * the URL to the DB
+ * @throws IOException
+ * @throws Exception
+ */
+ protected static void setUpBeforeClass(String dbUrl) throws IOException {
+
+ // truncate the logs
+ new FileOutputStream(LOG_DIR + "/audit.log").close();
+ new FileOutputStream(LOG_DIR + "/debug.log").close();
+ new FileOutputStream(LOG_DIR + "/error.log").close();
+ new FileOutputStream(LOG_DIR + "/metrics.log").close();
+
+ IntegrityAuditTestBase.dbUrl = dbUrl;
+
+ // save data that we have to restore at the end of the test
+ savedDebugLevel = debugLogger.getLevel();
+ savedErrorLevel = errorLogger.getLevel();
+ savedSleepIntervalMs = AuditThread.getAuditThreadSleepIntervalMillis();
+ savedCompletionIntervalMs = AuditThread.getAuditCompletionIntervalMillis();
+ savedDbAuditUpdateMs = DbAudit.getDbAuditUpdateMillis();
+ savedDbAuditSleepMs = DbAudit.getDbAuditSleepMillis();
+
+ AuditThread.setAuditThreadSleepIntervalMillis(SLEEP_INTERVAL_MS);
+ AuditThread.setAuditCompletionIntervalMillis(COMPLETION_INTERVAL_MS);
+
+ DbAudit.setDbAuditUpdateMillis(DB_AUDIT_UPDATE_MS);
+ DbAudit.setDbAuditSleepMillis(DB_AUDIT_SLEEP_MS);
+
+ IntegrityAudit.setUnitTesting(true);
+
+ properties = new Properties();
+ properties.put(IntegrityAuditProperties.DB_DRIVER, dbDriver);
+ properties.put(IntegrityAuditProperties.DB_URL, dbUrl);
+ properties.put(IntegrityAuditProperties.DB_USER, dbUser);
+ properties.put(IntegrityAuditProperties.DB_PWD, dbPwd);
+ properties.put(IntegrityAuditProperties.SITE_NAME, siteName);
+ properties.put(IntegrityAuditProperties.NODE_TYPE, nodeType);
+
+ emf = Persistence.createEntityManagerFactory(A_SEQ_PU, makeProperties());
+
+ // keep this open so the in-memory DB stays around until all tests are
+ // done
+ em = emf.createEntityManager();
+
+ debugLogger.setLevel(Level.DEBUG);
+ errorLogger.setLevel(Level.ERROR);
+ }
+
+ /**
+ * Restores the configuration to what it was before the test.
+ */
+ protected static void tearDownAfterClass() {
+ AuditThread.setAuditThreadSleepIntervalMillis(savedSleepIntervalMs);
+ AuditThread.setAuditCompletionIntervalMillis(savedCompletionIntervalMs);
+
+ DbAudit.setDbAuditUpdateMillis(savedDbAuditUpdateMs);
+ DbAudit.setDbAuditSleepMillis(savedDbAuditSleepMs);
+
+ IntegrityAudit.setUnitTesting(false);
+
+ debugLogger.setLevel(savedDebugLevel);
+ errorLogger.setLevel(savedErrorLevel);
+
+ // this should result in the in-memory DB being deleted
+ em.close();
+ emf.close();
+ }
+
+ /**
+ * Sets up for a test, which includes deleting all records from the
+ * IntegrityAuditEntity table.
+ */
+ protected void setUp() {
+ auditors = new LinkedList<>();
+ appenders = new LinkedList<>();
+
+ properties.put(IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS, String.valueOf(SLEEP_INTERVAL_MS));
+
+ // Clean up the DB
+ try (EntityTransCloser etc = new EntityTransCloser(em.getTransaction())) {
+ EntityTransaction et = etc.getTransation();
+
+ em.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
+
+ // commit transaction
+ et.commit();
+ }
+ }
+
+ /**
+ * Cleans up after a test, removing any ExtractAppenders from the logger and
+ * stopping any AuditThreads.
+ */
+ protected void tearDown() {
+ for (LogApp p : appenders) {
+ p.detach();
+ }
+
+ for (MyIntegrityAudit p : auditors) {
+ p.stopAuditThread();
+ }
+ }
+
+ /**
+ *
+ * @param properties
+ * @param persistenceUnit
+ * @param tableName
+ */
+ public void truncateTable(Properties properties, String persistenceUnit, String tableName) {
+
+ try (EntityMgrFactoryCloser emfc = new EntityMgrFactoryCloser(
+ Persistence.createEntityManagerFactory(persistenceUnit, properties));
+ EntityMgrCloser emc = new EntityMgrCloser(emfc.getFactory().createEntityManager());
+ EntityTransCloser etc = new EntityTransCloser(emc.getManager().getTransaction())) {
+
+ EntityManager em = emc.getManager();
+ EntityTransaction et = etc.getTransation();
+
+ // Clean up the DB
+ em.createQuery("Delete from " + tableName).executeUpdate();
+
+ // commit transaction
+ et.commit();
+ }
+ }
+
+ /**
+ * Verifies that items appear within the log, in order. A given item may
+ * appear more than once. In addition, the log may contain extra items;
+ * those are ignored.
+ *
+ * @param textre
+ * regular expression used to extract an item from a line in the
+ * log. The first "capture" group of the regular expression is
+ * assumed to contain the extracted item
+ * @param items
+ * items that should be matched by the items extracted from the
+ * log, in order
+ * @throws IOException
+ * @throws AssertionError
+ * if the desired items were not all found
+ */
+ protected void verifyItemsInLog(ExtractAppender app, String... items) throws IOException {
+
+ Iterator<String> it = new ArrayList<>(Arrays.asList(items)).iterator();
+ if (!it.hasNext()) {
+ return;
+ }
+
+ String expected = it.next();
+ String last = null;
+
+ for (String rName : app.getExtracted()) {
+ if (rName.equals(expected)) {
+ if (!it.hasNext()) {
+ // matched all of the items
+ return;
+ }
+
+ last = expected;
+ expected = it.next();
+
+ } else if (!rName.equals(last)) {
+ List<String> remaining = getRemaining(expected, it);
+ fail("missing items " + remaining + ", but was: " + rName);
+ }
+ }
+
+ List<String> remaining = getRemaining(expected, it);
+ assertTrue("missing items " + remaining, remaining.isEmpty());
+ }
+
+ /**
+ * Gets the remaining items from an iterator
+ *
+ * @param current
+ * the current item, to be included within the list
+ * @param it
+ * iterator from which to get the remaining items
+ * @return a list of the remaining items
+ */
+ private LinkedList<String> getRemaining(String current, Iterator<String> it) {
+ LinkedList<String> remaining = new LinkedList<>();
+ remaining.add(current);
+
+ while (it.hasNext()) {
+ remaining.add(it.next());
+ }
+ return remaining;
+ }
+
+ /**
+ * Waits for a thread to stop. If the thread doesn't complete in the
+ * allotted time, then it interrupts it and waits again.
+ *
+ * @param auditor
+ * the thread for which to wait
+ * @return {@code true} if the thread stopped, {@code false} otherwise
+ */
+ public boolean waitThread(MyIntegrityAudit auditor) {
+ if (auditor != null) {
+ try {
+ auditor.interrupt();
+
+ if (!auditor.joinAuditThread(WAIT_MS)) {
+ System.out.println("failed to stop audit thread");
+ return false;
+ }
+
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Makes a new auditor.
+ *
+ * @param resourceName2
+ * @param persistenceUnit2
+ * @return a new auditor
+ * @throws Exception
+ */
+ protected MyIntegrityAudit makeAuditor(String resourceName2, String persistenceUnit2) throws Exception {
+ return new MyIntegrityAudit(resourceName2, persistenceUnit2, makeProperties());
+ }
+
+ /**
+ * Watches for patterns in a logger by attaching a ExtractAppender to it.
+ *
+ * @param logger
+ * the logger to watch
+ * @param regex
+ * regular expression used to extract relevant text
+ * @return a new appender
+ */
+ protected ExtractAppender watch(Logger logger, String regex) {
+ ExtractAppender app = new ExtractAppender(regex);
+ appenders.add(new LogApp(logger, app));
+
+ return app;
+ }
+
+ /**
+ * Makes a new Property set that's a clone of {@link #properties}.
+ *
+ * @return a new Property set containing all of a copy of all of the
+ * {@link #properties}
+ */
+ protected static Properties makeProperties() {
+ Properties props = new Properties();
+ props.putAll(properties);
+ return props;
+ }
+
+ /**
+ * Waits for data to become stale and then runs an audit on several auditors
+ * in parallel.
+ *
+ * @param auditors
+ * @throws InterruptedException
+ */
+ protected void waitStaleAndRun(MyIntegrityAudit... auditors) throws InterruptedException {
+ waitStale();
+ runAudit(auditors);
+ }
+
+ /**
+ * Runs an audit on several auditors in parallel.
+ *
+ * @param auditors
+ * @throws InterruptedException
+ */
+ protected void runAudit(MyIntegrityAudit... auditors) throws InterruptedException {
+
+ // start an audit cycle on each auditor
+ List<CountDownLatch> latches = new ArrayList<>(auditors.length);
+ for (MyIntegrityAudit p : auditors) {
+ latches.add(p.startAudit());
+ }
+
+ // wait for each auditor to complete its cycle
+ for (CountDownLatch latch : latches) {
+ waitLatch(latch);
+ }
+ }
+
+ /**
+ * Waits for a latch to reach zero.
+ *
+ * @param latch
+ * @throws InterruptedException
+ * @throws AssertionError
+ * if the latch did not reach zero in the allotted time
+ */
+ protected void waitLatch(CountDownLatch latch) throws InterruptedException {
+ assertTrue(latch.await(WAIT_MS, TimeUnit.SECONDS));
+ }
+
+ /**
+ * Sleep a bit so that the currently designated pdp becomes stale.
+ *
+ * @throws InterruptedException
+ */
+ protected void waitStale() throws InterruptedException {
+ Thread.sleep(STALE_MS);
+ }
+
+ /**
+ * Tracks which appender has been added to a logger.
+ */
+ private static class LogApp {
+ private final Logger logger;
+ private final ExtractAppender appender;
+
+ public LogApp(Logger logger, ExtractAppender appender) {
+ this.logger = logger;
+ this.appender = appender;
+
+ logger.addAppender(appender);
+
+ appender.start();
+ }
+
+ public void detach() {
+ logger.detachAppender(appender);
+ }
+ }
+
+ /**
+ * Manages audits by inserting latches into a queue for the AuditThread to
+ * count.
+ */
+ protected class MyIntegrityAudit extends IntegrityAudit {
+
+ /**
+ * Queue from which the AuditThread will take latches.
+ */
+ private BlockingQueue<CountDownLatch> queue = null;
+
+ /**
+ * Constructs an auditor and starts the AuditThread.
+ *
+ * @param resourceName
+ * @param persistenceUnit
+ * @param properties
+ * @throws Exception
+ */
+ public MyIntegrityAudit(String resourceName, String persistenceUnit, Properties properties) throws Exception {
+ super(resourceName, persistenceUnit, properties);
+
+ auditors.add(this);
+
+ startAuditThread();
+ }
+
+ /**
+ * Interrupts the AuditThread.
+ */
+ public void interrupt() {
+ super.stopAuditThread();
+ }
+
+ /**
+ * Triggers an audit by adding a latch to the queue.
+ *
+ * @return the latch that was added
+ * @throws InterruptedException
+ */
+ public CountDownLatch startAudit() throws InterruptedException {
+ CountDownLatch latch = new CountDownLatch(1);
+ queue.add(latch);
+
+ return latch;
+ }
+
+ /**
+ * Starts a new AuditThread. Creates a new latch queue and associates it
+ * with the thread.
+ */
+ @Override
+ public final void startAuditThread() throws Exception {
+ if (queue != null) {
+ // queue up a bogus latch, in case a thread is still running
+ queue.add(new CountDownLatch(1) {
+ @Override
+ public void countDown() {
+ throw new RuntimeException("auditor has multiple threads");
+ }
+ });
+ }
+
+ queue = new LinkedBlockingQueue<>();
+
+ if (super.startAuditThread(queue)) {
+ // wait for the thread to start
+ CountDownLatch latch = new CountDownLatch(1);
+ queue.add(latch);
+ waitLatch(latch);
+ }
+ }
+
+ /**
+ * Stops the AuditThread and waits for it to stop.
+ *
+ * @throws AssertionError
+ * if the thread is still running
+ */
+ @Override
+ public void stopAuditThread() {
+ super.stopAuditThread();
+
+ assertTrue(waitThread(this));
+ }
+ }
+}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/jpa/IaTestEntity.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/IaTestEntity.java
index 9c34dc4a..43277a71 100644
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/jpa/IaTestEntity.java
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/IaTestEntity.java
@@ -1,8 +1,8 @@
-/*-
+/*
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policy.common.ia.test.jpa;
+package org.onap.policy.common.ia.jpa;
import java.io.Serializable;
import java.util.Date;
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/jpa/PersonSample.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/PersonSample.java
index eb777e7f..d7fcf330 100644
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/jpa/PersonSample.java
+++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/PersonSample.java
@@ -1,8 +1,8 @@
-/*-
+/*
* ============LICENSE_START=======================================================
* Integrity Audit
* ================================================================================
- * 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.
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policy.common.ia.test.jpa;
+package org.onap.policy.common.ia.jpa;
import java.io.Serializable;
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/AuditPeriodTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/AuditPeriodTest.java
deleted file mode 100644
index 68ab42d9..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/AuditPeriodTest.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * 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.common.ia.test;
-
-
-import static org.junit.Assert.*;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Properties;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
-
-//import org.apache.commons.logging.Log;
-//import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import org.onap.policy.common.ia.AuditThread;
-import org.onap.policy.common.ia.IntegrityAudit;
-import org.onap.policy.common.ia.IntegrityAuditProperties;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
-/*
- * All JUnits are designed to run in the local development environment
- * where they have write privileges and can execute time-sensitive
- * tasks.
- *
- * If any have been ignored (@Ignore) they will not run at the same time
- * as others. You should run them as JUnits by themselves.
- */
-public class AuditPeriodTest {
-
- private static Logger logger = FlexLogger.getLogger(AuditPeriodTest.class);
-
- private static final String AUDIT_PERIOD_TEST_LOG = "./testingLogs/common-modules/integrity-audit/debug.log";
-
- private static String persistenceUnit;
- private static Properties properties;
- private static String resourceName;
-
- @Before
- public void setUp() throws Exception {
-
-
- System.out.println("setUp: Clearing " + AUDIT_PERIOD_TEST_LOG);
- FileOutputStream fstream = new FileOutputStream(AUDIT_PERIOD_TEST_LOG);
- fstream.close();
-
- logger.info("setUp: Entering");
-
- IntegrityAudit.setUnitTesting(true);
-
- properties = new Properties();
- properties.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
-
- persistenceUnit = "testPU";
- resourceName = "pdp1";
-
- //Clean up the DB
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
-
- EntityManager em = emf.createEntityManager();
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- em.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
-
- // commit transaction
- et.commit();
- em.close();
-
- logger.info("setUp: Exiting");
-
- }
-
-
- @After
- public void tearDown() throws Exception {
-
- logger.info("tearDown: Entering");
-
- logger.info("tearDown: Exiting");
-
- }
-
- /*
- * Verifies (via log parsing) that when a negative audit period is
- * specified, the audit is suppressed.
- */
- //@Ignore
- @Test
- public void testNegativeAuditPeriod() throws Exception {
-
- logger.info("testNegativeAuditPeriod: Entering");
-
- properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "-1");
-
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) audit to immediately terminate.
- */
- Thread.sleep(1000);
-
- logger.info("testNegativeAuditPeriod: Stopping audit thread (should be a no-op!)");
- integrityAudit.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(AUDIT_PERIOD_TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("-1"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Suppressing integrity audit, integrityAuditPeriodSeconds=")) {
- startIndex = strLine.indexOf("integrityAuditPeriodSeconds=") + 28;
-
- String integrityAuditPeriodSeconds = strLine.substring(startIndex);
-
- delegates.add(integrityAuditPeriodSeconds);
- }
- }
-
- for (String delegate: delegates) {
- logger.info("testNegativeAuditPeriod: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue(expectedResult.equals(delegates));
-
- logger.info("testNegativeAuditPeriod: Exiting");
-
- }
-
- /*
- * Verifies (via log parsing) that when an audit period of zero is
- * specified, the audit runs continuously, generating a number of
- * sleep/wake sequences in a short period of time (e.g. 100ms).
- */
- @Ignore
- @Test
- public void testZeroAuditPeriod() throws Exception {
-
- logger.info("testZeroAuditPeriod: Entering");
-
- properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "0");
-
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName,
- persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) audit to generate a bunch of sleep wake sequences.
- *
- * Note:
- *
- * (AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL *
- * AuditThread.AUDIT_SIMULATION_ITERATIONS) is the time it takes for the
- * audit simulation to run.
- *
- * (integrityAudit.getIntegrityAuditPeriodSeconds() should return a
- * value of zero; i.e. audit should not sleep at all between iterations
- *
- * "100"ms is the time we allow the audit to cycle continuously
- */
- long sleepMillis = (AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL * AuditThread.AUDIT_SIMULATION_ITERATIONS)
- + (integrityAudit.getIntegrityAuditPeriodSeconds() * 1000)
- + 100;
- logger.info("testZeroAuditPeriod: Sleeping " + sleepMillis + "ms before stopping auditThread");
- Thread.sleep(sleepMillis);
-
- logger.info("testZeroAuditPeriod: Stopping audit thread");
- integrityAudit.stopAuditThread();
-
- /*
- * Before audit completion message upon awaking from sleep is upper case "Awaking". After audit
- * completion, all awakings are lower case "awaking".
- */
- logger.info("testZeroAuditPeriod: Parsing " + AUDIT_PERIOD_TEST_LOG + " for 'awaking'");
- FileInputStream fstream = new FileInputStream(AUDIT_PERIOD_TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine = "";
- int awakings = 0;
- int lines = 0;
- while ((strLine = br.readLine()) != null) {
- if (strLine.contains("Awaking from 0ms sleep")) {
- fail("Audit appears not to have run!? Got '" + strLine + "'");
- } else {
- if (strLine.contains("awaking from 0ms sleep")) {
- awakings++;
- }
- }
- lines++;
- }
- logger.info("testZeroAuditPeriod: Done parsing "
- + AUDIT_PERIOD_TEST_LOG + " for 'awaking'; lines parsed="
- + lines + ", closing stream");
- fstream.close();
-
- /*
- * We should get at least 10 sleep/wake sequences.
- */
- assertTrue("Only " + awakings + " awakings", awakings > 10);
- assertTrue(integrityAudit.getIntegrityAuditPeriodSeconds() == 0);
-
- logger.info("testZeroAuditPeriod: Exiting, awakings="
- + awakings + ", integrityAuditPeriodSeconds="
- + integrityAudit.getIntegrityAuditPeriodSeconds());
-
- }
-
- /*
- * Verifies (via log parsing) that when an audit period of five minutes is
- * specified, there is a five minute interval between the audits run
- * on each of three different entities.
- */
- @Ignore
- @Test
- public void testFiveMinuteAuditPeriod() throws Exception {
-
- logger.info("testFiveMinuteAuditPeriod: Entering");
-
- properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "300");
-
- /*
- * Start audit for pdp1.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName,
- persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Start audit for pdp2.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "300");
- String persistenceUnit2 = "testPU";
- String resourceName2 = "pdp2";
- IntegrityAudit integrityAudit2 = new IntegrityAudit(resourceName2, persistenceUnit2, properties2);
- integrityAudit2.startAuditThread();
-
- /*
- * Start audit for pdp3.
- */
- Properties properties3 = new Properties();
- properties3.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties3.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties3.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties3.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties3.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties3.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties3.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "300");
- String persistenceUnit3 = "testPU";
- String resourceName3 = "pdp3";
- IntegrityAudit integrityAudit3 = new IntegrityAudit(resourceName3, persistenceUnit3, properties3);
- integrityAudit3.startAuditThread();
-
-
- /*
- * 1) All three audit run once. This should take approximately 105 seconds, as follows:
- *
- * T0: pdp1 runs audit (15 seconds), then sleeps for five minutes (300 seconds)
- * pdp2 recognizes that pdp1 is stale (30 seconds) and runs its audit (15 seconds)
- * pdp3 recognizes that pdp2 is stale (30 seconds) and runs its audit (15 seconds)
- *
- * 2) Five minutes after T0, at T1, pdp1 wakes up and the above sequence begins again,
- * which should take another 115 seconds:
- *
- * T1: pdp1 runs audit (15 seconds), then sleeps for two minutes (300 seconds)
- * pdp2 wakes up, resets auditCompleted and sleeps (5 seconds), recognizes that pdp1 is stale (30 seconds) and runs its audit (15 seconds)
- * pdp3 wakes up, resets auditCompleted and sleeps (5 seconds), recognizes that pdp2 is stale (30 seconds) and runs its audit (15 seconds)
- *
- * So, the entire sequence should take 15 + 300 + 115 = 430 seconds
- * Adding a fudge factor, we sleep for 450 seconds
- */
- Thread.sleep(450000);
-
-
- logger.info("testFiveMinuteAuditPeriod: Stopping all three audit threads");
- integrityAudit.stopAuditThread();
-
- integrityAudit.stopAuditThread();
- integrityAudit2.stopAuditThread();
- integrityAudit3.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(AUDIT_PERIOD_TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp2", "pdp3", "pdp1", "pdp2", "pdp3"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate: delegates) {
- logger.info("testFiveMinuteAuditPeriod: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 6);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
- assertTrue("delegate 2 is " + expectedResult.get(2), expectedResult.get(2).equals(delegates.get(2)));
- assertTrue("delegate 3 is " + expectedResult.get(3), expectedResult.get(3).equals(delegates.get(3)));
- assertTrue("delegate 4 is " + expectedResult.get(4), expectedResult.get(4).equals(delegates.get(4)));
- assertTrue("delegate 5 is " + expectedResult.get(5), expectedResult.get(5).equals(delegates.get(5)));
-
- logger.info("testFiveMinuteAuditPeriod: Exiting");
- }
-
- /*
- * Verifies (via log parsing) that when an audit period of 20 seconds is
- * specified, there is a 20 second interval between the audits run
- * on each of three different entities.
- */
- @Ignore
- @Test
- public void testTwentySecondAuditPeriod() throws Exception {
-
- logger.info("testTwentySecondAuditPeriod: Entering");
-
- properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "20");
-
- /*
- * Start audit for pdp1.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName,
- persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Start audit for pdp2.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "20");
- String persistenceUnit2 = "testPU";
- String resourceName2 = "pdp2";
- IntegrityAudit integrityAudit2 = new IntegrityAudit(resourceName2, persistenceUnit2, properties2);
- integrityAudit2.startAuditThread();
-
- /*
- * Start audit for pdp3.
- */
- Properties properties3 = new Properties();
- properties3.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties3.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties3.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties3.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties3.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties3.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties3.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "20");
- String persistenceUnit3 = "testPU";
- String resourceName3 = "pdp3";
- IntegrityAudit integrityAudit3 = new IntegrityAudit(resourceName3, persistenceUnit3, properties3);
- integrityAudit3.startAuditThread();
-
-
- /*
- * 1) All three audit run once.
- *
- * pdp1 runs audit (15 seconds), then goes into 20 second sleep cycles
- * pdp2 recognizes that pdp1 is stale (30 seconds), runs its audit (15 seconds), then goes into 20 second sleep cycles
- * pdp3 recognizes that pdp2 is stale (30 seconds), runs its audit (15 seconds), then goes into 20 second sleep cycles
- *
- * 2) Eventually pdp2 gets stale, pdp1 recognizes this and cycle begins again.
- *
- * So, we allow 15 + (5 * 45) = 240 seconds plus a fudge factor.
- *
- */
- Thread.sleep(250000);
-
-
- logger.info("testTwentySecondAuditPeriod: Stopping all three audit threads");
- integrityAudit.stopAuditThread();
-
- integrityAudit.stopAuditThread();
- integrityAudit2.stopAuditThread();
- integrityAudit3.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(AUDIT_PERIOD_TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp2", "pdp3", "pdp1", "pdp2", "pdp3"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate: delegates) {
- logger.info("testTwentySecondAuditPeriod: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 6);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
- assertTrue("delegate 2 is " + expectedResult.get(2), expectedResult.get(2).equals(delegates.get(2)));
- assertTrue("delegate 3 is " + expectedResult.get(3), expectedResult.get(3).equals(delegates.get(3)));
- assertTrue("delegate 4 is " + expectedResult.get(4), expectedResult.get(4).equals(delegates.get(4)));
- assertTrue("delegate 5 is " + expectedResult.get(5), expectedResult.get(5).equals(delegates.get(5)));
-
- logger.info("testTwentySecondAuditPeriod: Exiting");
- }
-
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditTest.java
deleted file mode 100644
index ecf75eef..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditTest.java
+++ /dev/null
@@ -1,755 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * 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.common.ia.test;
-
-import static org.junit.Assert.*;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStreamReader;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
-import javax.persistence.Query;
-
-
-//import org.apache.commons.logging.Log;
-//import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import org.onap.policy.common.ia.DbAudit;
-import org.onap.policy.common.ia.DbAuditException;
-import org.onap.policy.common.ia.DbDAO;
-import org.onap.policy.common.ia.DbDaoTransactionException;
-import org.onap.policy.common.ia.IntegrityAudit;
-import org.onap.policy.common.ia.IntegrityAuditProperties;
-import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
-/*
- * All JUnits are designed to run in the local development environment
- * where they have write privileges and can execute time-sensitive
- * tasks.
- *
- * If any have been ignored (@Ignore) they will not run at the same time
- * as others. You should run them as JUnits by themselves.
- */
-public class DbAuditTest {
-
- private static Logger logger = FlexLogger.getLogger(DbAuditTest.class);
-
- private DbDAO dbDAO;
- private static String persistenceUnit;
- private static Properties properties;
- private static String resourceName;
- private String dbDriver;
- private String dbUrl;
- private String dbUser;
- private String dbPwd;
- private String siteName;
- private String nodeType;
- private static final String TEST_LOG = "./testingLogs/common-modules/integrity-audit/debug.log";
- private static final String ERROR_LOG = "./testingLogs/common-modules/integrity-audit/error.log";
-
- public void cleanLog() throws Exception{
-
- logger.debug("cleanLog: enter");
- //FileOutputStream fstream = new FileOutputStream("IntegrityAudit.log");
- FileOutputStream fstream = new FileOutputStream(TEST_LOG);
- fstream.close();
- fstream = new FileOutputStream(ERROR_LOG);
- fstream.close();
- logger.debug("cleanLog: exit");
- }
-
- public void cleanDb(String persistenceUnit, Properties properties){
- logger.debug("cleanDb: enter");
-
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
-
- EntityManager em = emf.createEntityManager();
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- et.begin();
-
- // Clean up the DB
- em.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
-
- // commit transaction
- et.commit();
- em.close();
- logger.debug("cleanDb: exit");
- }
-
-
- @Before
- public void setUp() throws Exception {
-
- logger.info("setUp: Entering");
-
- IntegrityAudit.setUnitTesting(true);
- IntegrityAuditEntity.setUnitTesting(true);
-
- properties = new Properties();
- properties.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
-
- dbDriver = TestUtils.DEFAULT_DB_DRIVER;
- dbUrl = TestUtils.DEFAULT_DB_URL;
- dbUser = TestUtils.DEFAULT_DB_USER;
- dbPwd = TestUtils.DEFAULT_DB_PWD;
- siteName = "SiteA";
- nodeType = "pdp_xacml";
- persistenceUnit = "testPU";
- resourceName = "pdp1";
-
- logger.info("setUp: Exiting");
-
- }
-
- @After
- public void tearDown() throws Exception {
-
- logger.info("tearDown: Entering");
-
- //cleanDb(persistenceUnit, properties);
-
- logger.info("tearDown: Exiting");
- }
-
- //@Ignore
- @Test
- public void runAllTests() throws Exception{
- //The order is important - I haven't figured out why, but it is.
- //mismatchTest();
- noEntitiesTest();
- oneEntityTest();
- }
-
-
- /*
- * Tests printing an error to the log in the event where
- * there are no entities saved in the database
- */
- public void noEntitiesTest() throws Exception {
- cleanLog();
- cleanDb(persistenceUnit, properties);
-
- logger.info("noEntitiesTest: Entering");
-
- // Boolean to assert there are no entries found
- Boolean noEntities = false;
-
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
- dbDAO.deleteAllIntegrityAuditEntities();
- try {
- DbAudit dbAudit = new DbAudit(dbDAO);
- dbAudit.dbAudit(resourceName, persistenceUnit, nodeType);
- }
- catch (DbAuditException e) {
- noEntities = true;
- }
-
- dbDAO.deleteAllIntegrityAuditEntities();
-
- logger.info("noEntitiesTest: No entities are persisted in the database");
-
- // Assert there are no entities retrieved
- assertTrue(noEntities);
-
- logger.info("noEntitiesTest: Exit");
- }
-
- /*
- * Tests the detection of only one entry in the database
- */
- public void oneEntityTest() throws Exception{
- cleanLog();
- cleanDb(persistenceUnit, properties);
-
- logger.info("oneEntityTest: Entering");
-
- // Add one entry in the database
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
- DbAudit dbAudit = new DbAudit(dbDAO);
- dbAudit.dbAudit(resourceName, persistenceUnit, nodeType);
-
- List<IntegrityAuditEntity> iaeList = dbDAO.getIntegrityAuditEntities(persistenceUnit, nodeType);
- logger.info("List size: " + iaeList.size());
-
- //FileInputStream fstream = new FileInputStream("IntegrityAudit.log");
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- Boolean oneEntity = false;
- while ((strLine = br.readLine()) != null) {
- //parse strLine to obtain what you want
-
- if (strLine.contains("DbAudit: Found only one IntegrityAuditEntity entry:")) {
- oneEntity = true;
- }
-
- }
- if(oneEntity){
- logger.info("oneEntityTest: One entity is persisted in the database");
- }else{
- logger.info("oneEntityTest: No entities are persisted in the database");
- }
-
-
- // Assert there is only one entry
- assertTrue(oneEntity);
-
- br.close();
-
- logger.info("oneEntityTest: Exit");
- }
-
- /*
- * Tests reporting mismatches and misentries using the error log
- */
- @SuppressWarnings("unused")
- public void mismatchTest() throws Exception{
- cleanLog();
- logger.info("mismatchTest: Entering");
-
- // Properties for DB2
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, "jdbc:h2:file:./sql/iaTest2");
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
-
- //Clean the DBs before we begin
- cleanDb(persistenceUnit, properties);
- cleanDb(persistenceUnit, properties2);
-
- // Entries in DB1
- dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
- DbDAO dbDAO2 = new DbDAO("pdp2", persistenceUnit, properties);
-
- /*
- * dbDAO3 is a mismatch entry, dbDAO7 is a misentry
- */
- DbDAO dbDAO3 = new DbDAO("pdp3", persistenceUnit, properties);
- DbDAO dbDAO7 = new DbDAO("pdp4", persistenceUnit, properties);
- Date date = new Date();
-
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
-
- /*
- * Update DB url's in DB1 to point to DB2
- */
- try{
- EntityManager em = emf.createEntityManager();
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- Query iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", "pdp2");
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList = iaequery.getResultList();
- IntegrityAuditEntity iae = null;
-
- //If it already exists, we just want to update the properties and lastUpdated date
- if(!iaeList.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info("Resource: " + "pdp2" + " with PersistenceUnit: " + persistenceUnit
- + " exists and entry be updated");
- }else{
- // If it does not exist, we also must add teh resourceName, persistenceUnit and designated values
- logger.info("Adding resource " + "pdp2" + " with PersistenceUnit: " + persistenceUnit
- + " to IntegrityAuditEntity table");
- iae = new IntegrityAuditEntity();
- iae.setResourceName("pdp2");
- iae.setPersistenceUnit(persistenceUnit);
- iae.setDesignated(false);
- }
-
- //update/set properties in entry
- iae.setSite(siteName);
- iae.setNodeType(nodeType);
- iae.setLastUpdated(date);
- iae.setCreatedDate(date);
- iae.setJdbcDriver(dbDriver);
- iae.setJdbcPassword(dbPwd);
- iae.setJdbcUrl("jdbc:h2:file:./sql/iaTest2");
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", "pdp1");
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList2 = iaequery.getResultList();
- iae = null;
-
- //If it already exists, we just want to update the properties and lastUpdated date
- if(!iaeList2.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList2.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info("Resource: " + "pdp1" + " with PersistenceUnit: " + persistenceUnit
- + " exists and entry be updated");
- }else{
- // If it does not exist, we also must add teh resourceName, persistenceUnit and designated values
- logger.info("Adding resource " + "pdp1" + " with PersistenceUnit: " + persistenceUnit
- + " to IntegrityAuditEntity table");
- iae = new IntegrityAuditEntity();
- iae.setResourceName("pdp1");
- iae.setPersistenceUnit(persistenceUnit);
- iae.setDesignated(false);
- }
-
- //update/set properties in entry
- iae.setSite(siteName);
- iae.setNodeType(nodeType);
- iae.setLastUpdated(date);
- iae.setCreatedDate(date);
- iae.setJdbcDriver(dbDriver);
- iae.setJdbcPassword(dbPwd);
- iae.setJdbcUrl("jdbc:h2:file:./sql/iaTest2");
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", "pdp3");
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList3 = iaequery.getResultList();
- iae = null;
-
- //If it already exists, we just want to update the properties and lastUpdated date
- if(!iaeList3.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList3.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info("Resource: " + "pdp3" + " with PersistenceUnit: " + persistenceUnit
- + " exists and entry be updated");
- }else{
- // If it does not exist, we also must add the resourceName, persistenceUnit and designated values
- logger.info("Adding resource " + "pdp3" + " with PersistenceUnit: " + persistenceUnit
- + " to IntegrityAuditEntity table");
- iae = new IntegrityAuditEntity();
- iae.setResourceName("pdp3");
- iae.setPersistenceUnit(persistenceUnit);
- iae.setDesignated(false);
- }
-
- //update/set properties in entry
- iae.setSite(siteName);
- iae.setNodeType(nodeType);
- iae.setLastUpdated(date);
- iae.setCreatedDate(date);
- iae.setJdbcDriver(dbDriver);
- iae.setJdbcPassword(dbPwd);
- iae.setJdbcUrl(dbUrl);
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", "pdp4");
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList4 = iaequery.getResultList();
- iae = null;
-
- //If it already exists, we just want to update the properties and lastUpdated date
- if(!iaeList4.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList4.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info("Resource: " + "pdp4" + " with PersistenceUnit: " + persistenceUnit
- + " exists and entry be updated");
- }else{
- // If it does not exist, we also must add the resourceName, persistenceUnit and designated values
- logger.info("Adding resource " + "pdp4" + " with PersistenceUnit: " + persistenceUnit
- + " to IntegrityAuditEntity table");
- iae = new IntegrityAuditEntity();
- iae.setResourceName("pdp4");
- iae.setPersistenceUnit(persistenceUnit);
- iae.setDesignated(false);
- }
-
- //update/set properties in entry
- iae.setSite(siteName);
- iae.setNodeType(nodeType);
- iae.setLastUpdated(date);
- iae.setCreatedDate(date);
- iae.setJdbcDriver(dbDriver);
- iae.setJdbcPassword(dbPwd);
- iae.setJdbcUrl("jdbc:h2:file:./sql/iaTest2");
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
-
- em.close();
- }catch (Exception e){
- String msg = "DbDAO: " + "register() " + "ecountered a problem in execution: ";
- logger.error(msg + e);
- throw new DbDaoTransactionException(e);
- }
-
- /*
- * Identical entries in from DB1 in DB2 except for dbDAO6
- */
- emf = Persistence.createEntityManagerFactory(persistenceUnit, properties2);
- DbDAO dbDAO4 = new DbDAO(resourceName, persistenceUnit, properties2);
-
- DbDAO dbDAO5 = new DbDAO("pdp2", persistenceUnit, properties2);
-
- /*
- * This is the mismatch entry
- */
- DbDAO dbDAO6 = new DbDAO("pdp3", persistenceUnit, properties2);
- try{
- EntityManager em = emf.createEntityManager();
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- Query iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", "pdp2");
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList = iaequery.getResultList();
- IntegrityAuditEntity iae = null;
-
- //If it already exists, we just want to update the properties and lastUpdated date
- if(!iaeList.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info("Resource: " + "pdp2" + " with PersistenceUnit: " + persistenceUnit
- + " exists and entry be updated");
- }else{
- // If it does not exist, we also must add teh resourceName, persistenceUnit and designated values
- logger.info("Adding resource " + "pdp2" + " with PersistenceUnit: " + persistenceUnit
- + " to IntegrityAuditEntity table");
- iae = new IntegrityAuditEntity();
- iae.setResourceName("pdp2");
- iae.setPersistenceUnit(persistenceUnit);
- iae.setDesignated(false);
- }
-
- //update/set properties in entry
- iae.setSite(siteName);
- iae.setNodeType(nodeType);
- iae.setLastUpdated(date);
- iae.setCreatedDate(date);
- iae.setJdbcDriver(dbDriver);
- iae.setJdbcPassword(dbPwd);
- iae.setJdbcUrl("jdbc:h2:file:./sql/iaTest2");
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", "pdp1");
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList2 = iaequery.getResultList();
- iae = null;
-
- //If it already exists, we just want to update the properties and lastUpdated date
- if(!iaeList2.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList2.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info("Resource: " + "pdp1" + " with PersistenceUnit: " + persistenceUnit
- + " exists and entry be updated");
- }else{
- // If it does not exist, we also must add teh resourceName, persistenceUnit and designated values
- logger.info("Adding resource " + "pdp1" + " with PersistenceUnit: " + persistenceUnit
- + " to IntegrityAuditEntity table");
- iae = new IntegrityAuditEntity();
- iae.setResourceName("pdp1");
- iae.setPersistenceUnit(persistenceUnit);
- iae.setDesignated(false);
- }
-
- //update/set properties in entry
- iae.setSite(siteName);
- iae.setNodeType(nodeType);
- iae.setLastUpdated(date);
- iae.setCreatedDate(date);
- iae.setJdbcDriver(dbDriver);
- iae.setJdbcPassword(dbPwd);
- iae.setJdbcUrl("jdbc:h2:file:./sql/iaTest2");
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", "pdp3");
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList3 = iaequery.getResultList();
- iae = null;
-
- //If it already exists, we just want to update the properties and lastUpdated date
- if(!iaeList3.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList3.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info("Resource: " + "pdp3" + " with PersistenceUnit: " + persistenceUnit
- + " exists and entry be updated");
- }else{
- // If it does not exist, we also must add teh resourceName, persistenceUnit and designated values
- logger.info("Adding resource " + "pdp3" + " with PersistenceUnit: " + persistenceUnit
- + " to IntegrityAuditEntity table");
- iae = new IntegrityAuditEntity();
- iae.setResourceName("pdp3");
- iae.setPersistenceUnit(persistenceUnit);
- iae.setDesignated(false);
- }
-
- //update/set properties in entry
- iae.setSite(siteName);
- iae.setNodeType(nodeType);
- iae.setLastUpdated(date);
- iae.setCreatedDate(date);
- iae.setJdbcDriver(dbDriver);
- iae.setJdbcPassword(dbPwd);
- iae.setJdbcUrl("jdbc:h2:file:./sql/iaTest2");
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
-
- em.close();
- }catch (Exception e){
- String msg = "DbDAO: " + "register() " + "ecountered a problem in execution: ";
- logger.error(msg + e);
- throw new DbDaoTransactionException(e);
-
- }
-
- /*
- * Run the DB Audit, once it finds a mismatch and sleeps, update DB1
- * to have the same entry as DB2 it can be confirmed that the mismatch
- * is resolved
- */
- DbAudit dbAudit = new DbAudit(dbDAO);
- dbAudit.dbAudit(resourceName, persistenceUnit, nodeType);
- emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- try{
- EntityManager em = emf.createEntityManager();
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- Query iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", "pdp3");
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList = iaequery.getResultList();
- IntegrityAuditEntity iae = null;
-
- //If it already exists, we just want to update the properties and lastUpdated date
- if(!iaeList.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info("Resource: " + "pdp3" + " with PersistenceUnit: " + persistenceUnit
- + " exists and entry be updated");
- }else{
- // If it does not exist, we also must add the resourceName, persistenceUnit and designated values
- logger.info("Adding resource " + "pdp3" + " with PersistenceUnit: " + persistenceUnit
- + " to IntegrityAuditEntity table");
- iae = new IntegrityAuditEntity();
- iae.setResourceName("pdp3");
- iae.setPersistenceUnit(persistenceUnit);
- iae.setDesignated(false);
- }
-
- //update/set properties in entry
- iae.setSite(siteName);
- iae.setNodeType(nodeType);
- iae.setLastUpdated(date);
- iae.setCreatedDate(date);
- iae.setJdbcDriver(dbDriver);
- iae.setJdbcPassword(dbPwd);
- iae.setJdbcUrl("jdbc:h2:file:./sql/iaTest2");
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
- em.close();
- }catch (Exception e){
- String msg = "DbDAO: " + "register() " + "ecountered a problem in execution: ";
- logger.error(msg + e);
- throw new DbDaoTransactionException(e);
- }
-
- /*
- * Run the audit again and correct the mismatch, the result should be one
- * entry in the mismatchKeySet because of the misentry from the beginning
- * of the test
- */
- dbAudit.dbAudit(resourceName, persistenceUnit, nodeType);
-
- //Cleanup DB2
- cleanDb(persistenceUnit, properties2);
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- String mismatchIndex = "";
- while ((strLine = br.readLine()) != null) {
- //parse strLine to obtain what you want...retrieve the last entry
-
- if (strLine.contains("Mismatched entries (keys):")) {
- startIndex = strLine.indexOf("(keys):") + 8;
- mismatchIndex = strLine.substring(startIndex);
- }
- }
- int mismatchEntries = mismatchIndex.trim().split(",").length;
- logger.info("mismatchTest: mismatchIndex found: '" + mismatchIndex + "'"
- + " mismatachEntries = " + mismatchEntries);
-
- // Assert there is only one entry index
- assertEquals(1, mismatchEntries);
-
- br.close();
-
- //Now check the entry in the error.log
- fstream = new FileInputStream(ERROR_LOG);
- br = new BufferedReader(new InputStreamReader(fstream));
- String mismatchNum = "";
- while ((strLine = br.readLine()) != null) {
- //parse strLine to obtain what you want...retrieve the last entry
-
- if (strLine.contains("DB Audit:")) {
- startIndex = strLine.indexOf("DB Audit:") + 10;
- mismatchNum = strLine.substring(startIndex, startIndex+1);
- }
- }
- logger.info("mismatchTest: mismatchNum found: '" + mismatchNum + "'");
-
- // Assert that there are a total of 3 mismatches - 1 between each comparison node.
- assertEquals("3", mismatchNum);
-
- br.close();
-
- logger.info("mismatchTest: Exit");
- }
-
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbDAOTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbDAOTest.java
deleted file mode 100644
index ac3bc587..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbDAOTest.java
+++ /dev/null
@@ -1,742 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * 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.common.ia.test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-/*
- * All JUnits are designed to run in the local development environment
- * where they have write privileges and can execute time-sensitive
- * tasks.
- */
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
-import javax.persistence.PersistenceUnitUtil;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Root;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onap.policy.common.ia.DbDAO;
-import org.onap.policy.common.ia.DbDaoTransactionException;
-import org.onap.policy.common.ia.IntegrityAuditProperties;
-import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
-
-/*
- * All JUnits are designed to run in the local development environment
- * where they have write privileges and can execute time-sensitive
- * tasks.
- *
- * If any have been ignored (@Ignore) they will not run at the same time
- * as others. You should run them as JUnits by themselves.
- */
-public class DbDAOTest {
- private static String persistenceUnit;
- private static Properties properties;
- private static String resourceName;
-
- DbDAO d;
-
- @Before
- public void setUp() throws Exception {
- properties = new Properties();
- properties.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
-
- //persistenceUnit = "integrityAuditPU";
- persistenceUnit = "testPU";
- resourceName = "pdp0";
- }
-
- @After
- public void tearDown() throws Exception {
- }
-
- /* Tests registering a new IntegrityAuditEntity object in the DB */
- //@Ignore
- @Test
- public void testNewRegistration() {
- try {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin Transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- et.begin();
- d = new DbDAO(resourceName, persistenceUnit, properties);
-
- // Find the proper entry in the database
- Query iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", DbDAOTest.resourceName);
- iaequery.setParameter("pu", DbDAOTest.persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList = iaequery.getResultList();
-
- // Assert that the IntegrityAuditEntity object was found
- assertNotNull(iaeList);
-
- // flush to the DB
- em.flush();
- et.commit();
- em.close();
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests updating an IntegrityAuditEntity if it has already been registered */
- //@Ignore
- @Test
- public void testUpdateRegistration() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- // close the EntityManager
- em.close();
-
- try {
- d = new DbDAO(resourceName, persistenceUnit, properties);
-
- // Change site_name in properties to test that an update was made to an existing entry in the table
- properties.put(IntegrityAuditProperties.SITE_NAME, "SiteB");
- d = new DbDAO(resourceName, persistenceUnit, properties);
-
- em = emf.createEntityManager();
-
- // Start a transaction
- et = em.getTransaction();
-
- // Begin Transaction
- et.begin();
-
- // Find the proper entry in the database
- Query iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", DbDAOTest.resourceName);
- iaequery.setParameter("pu", DbDAOTest.persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList = iaequery.getResultList();
- IntegrityAuditEntity iae = null;
- if(!iaeList.isEmpty()) {
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList.get(0);
-
- em.refresh(iae);
- em.persist(iae);
-
- // flush to the DB
- em.flush();
-
- // commit transaction
- et.commit();
-
- // close the EntityManager
- em.close();
-
- // Assert that the site_name for the existing entry was updated
- assertEquals("SiteB", iae.getSite());
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests obtaining all Integrity Audit Entities from a table */
- //@Ignore
- @Test
- public void testGetIntegrityAuditEntities() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
-
- // close the transaction
- et.commit();
-
- // close the EntityManager
- em.close();
-
- try {
- // Add some entries to the DB
- d = new DbDAO(resourceName, persistenceUnit, properties);
- new DbDAO("pdp1", persistenceUnit, properties);
- properties.put(IntegrityAuditProperties.NODE_TYPE, "pdp_drools");
- new DbDAO("pdp2", persistenceUnit, properties);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- List<IntegrityAuditEntity> entities;
- try {
- // Obtain entries based on persistenceUnit and nodeType
- entities = d.getIntegrityAuditEntities(persistenceUnit, "pdp_xacml");
- assertEquals(2, entities.size());
- } catch (DbDaoTransactionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests retrieving a DbDAO instance's IntegrityAuditEntity */
- //@Ignore
- @Test
- public void testGetMyIntegrityAuditEntity() {
- try {
- d = new DbDAO(resourceName, persistenceUnit, properties);
- IntegrityAuditEntity iae = d.getMyIntegrityAuditEntity();
- //assertEquals("integrityAuditPU", iae.getPersistenceUnit());
- assertEquals("testPU", iae.getPersistenceUnit());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests obtaining an IntegrityAuditEntity by ID */
- //@Ignore
- @Test
- public void testGetIntegrityAuditEntity() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
-
- // close the transaction
- et.commit();
-
- try {
- // Obtain an entry from the database based on ID
- d = new DbDAO(resourceName, persistenceUnit, properties);
-
- et.begin();
-
- // Find the proper database entry
- Query iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", DbDAOTest.resourceName);
- iaequery.setParameter("pu", DbDAOTest.persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList = iaequery.getResultList();
- IntegrityAuditEntity iae = null;
- if(!iaeList.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList.get(0);
-
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
-
- // Obtain ID for an IntegrityAuditEntity
- PersistenceUnitUtil util = emf.getPersistenceUnitUtil();
- Object iaeId = util.getIdentifier(iae);
-
- // Obtain the same IntegrityAuditEntity based on ID
- IntegrityAuditEntity iaeDuplicate = d.getIntegrityAuditEntity((long) iaeId);
- Object duplicateId = util.getIdentifier(iaeDuplicate);
-
- // Assert that the proper entry was retrieved based on ID
- assertEquals((long) iaeId, (long) duplicateId);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- // close the EntityManager
- em.close();
- }
-
- /* Tests setting an IntegrityAuditEntity as the designated node */
- //@Ignore
- @Test
- public void testSetDesignated() {
- try {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- et.begin();
-
- // Create an entry and set it's designated field to true
- d = new DbDAO(resourceName, persistenceUnit, properties);
- d.setDesignated(resourceName, persistenceUnit, true);
-
- // Find the proper entry in the database
- Query iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", resourceName);
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList = iaequery.getResultList();
- IntegrityAuditEntity iae = null;
-
- if(!iaeList.isEmpty()){
- //ignores multiple results
- iae = (IntegrityAuditEntity) iaeList.get(0);
- em.refresh(iae);
-
- // Check if the node is designated
- boolean result = iae.isDesignated();
-
- // Assert that it is designated
- assertTrue(result);
- }
-
- // flush to the DB
- em.flush();
-
- // close the transaction
- et.commit();
-
- // close the EntityManager
- em.close();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests that the lastUpdated column in the database is updated properly */
- //@Ignore
- @Test
- public void testSetLastUpdated() {
- try {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- et.begin();
-
- // Create an entry
- d = new DbDAO(resourceName, persistenceUnit, properties);
-
- // Find the proper entry in the database
- Query iaequery = em.createQuery("Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu");
- iaequery.setParameter("rn", resourceName);
- iaequery.setParameter("pu", persistenceUnit);
-
- @SuppressWarnings("rawtypes")
- List iaeList = iaequery.getResultList();
- IntegrityAuditEntity iae = null;
-
- if(!iaeList.isEmpty()){
- // ignores multiple results
- iae = (IntegrityAuditEntity) iaeList.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
-
- // Obtain old update value and set new update value
- Date oldDate = iae.getLastUpdated();
- iae.setSite("SiteB");
- iae.setLastUpdated(new Date());
- Date newDate = iae.getLastUpdated();
-
- em.persist(iae);
- // flush to the DB
- em.flush();
- // close the transaction
- et.commit();
- // close the EntityManager
- em.close();
-
- // Assert that the old and new update times are different
- assertNotEquals(oldDate, newDate);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests that all the entries from a class can be retrieved */
- //@Ignore
- @Test
- public void testGetAllMyEntriesString() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- // close the EntityManager
- em.close();
-
- try {
- // create entries for the IntegrityAuditEntity table
- d = new DbDAO(resourceName, persistenceUnit, properties);
- new DbDAO("pdp1", persistenceUnit, properties);
- new DbDAO("pdp2", persistenceUnit, properties);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- try {
- // Obtain a hash with the persisted objects
- Map<Object, Object> entries = d.getAllMyEntries("org.onap.policy.common.ia.jpa.IntegrityAuditEntity");
-
- // Assert there were 3 entries for that class
- assertEquals(3, entries.size());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests retrieving all entities in a Persistence Unit using the class name and a hashset of IDs */
- //@Ignore
- @Test
- public void testGetAllMyEntriesStringHashSet() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- try {
- // create entries for the IntegrityAuditEntity table
- d = new DbDAO(resourceName, persistenceUnit, properties);
- new DbDAO("pdp1", persistenceUnit, properties);
- new DbDAO("pdp2", persistenceUnit, properties);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- try {
- // Obtain all entity keys
- CriteriaBuilder cb = em.getCriteriaBuilder();
- CriteriaQuery<Object> cq = cb.createQuery();
- Root<?> rootEntry = cq.from(Class.forName("org.onap.policy.common.ia.jpa.IntegrityAuditEntity"));
- CriteriaQuery<Object> all = cq.select(rootEntry);
- TypedQuery<Object> allQuery = em.createQuery(all);
- List<Object> objectList = allQuery.getResultList();
- HashSet<Object> resultSet = new HashSet<Object>();
- PersistenceUnitUtil util = emf.getPersistenceUnitUtil();
- for (Object o: objectList){
- Object key = util.getIdentifier(o);
- resultSet.add(key);
- }
-
- // Obtain a hash with the persisted objects
- Map<Object, Object> entries = d.getAllMyEntries("org.onap.policy.common.ia.jpa.IntegrityAuditEntity", resultSet);
-
- // Assert there were 3 entries for that class
- assertEquals(3, entries.size());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- // close the EntityManager
- em.close();
- }
-
- /* Tests retrieving all entities in a Persistence Unit using the persistence unit, properties, and class name */
- //@Ignore
- @Test
- public void testGetAllEntriesStringPropertiesString() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- // close the EntityManager
- em.close();
-
- try {
- // create entries for the IntegrityAuditEntity table
- d = new DbDAO(resourceName, persistenceUnit, properties);
- new DbDAO("pdp1", persistenceUnit, properties);
- new DbDAO("pdp2", persistenceUnit, properties);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- try {
- // Obtain a hash with the persisted objects
- Map<Object, Object> entries = d.getAllEntries("integrityAuditPU", properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity");
-
- // Assert there were 3 entries for that class
- assertEquals(3, entries.size());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests retrieving all entities in a Persistence Unit using the persistence unit, properties, class name, and a hashset of IDs */
- //@Ignore
- @Test
- public void testGetAllEntriesStringPropertiesStringHashSet() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- try {
- // create entries for the IntegrityAuditEntity table
- d = new DbDAO(resourceName, persistenceUnit, properties);
- new DbDAO("pdp1", persistenceUnit, properties);
- new DbDAO("pdp2", persistenceUnit, properties);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- try {
- // Obtain all entity keys
- CriteriaBuilder cb = em.getCriteriaBuilder();
- CriteriaQuery<Object> cq = cb.createQuery();
- Root<?> rootEntry = cq.from(Class.forName("org.onap.policy.common.ia.jpa.IntegrityAuditEntity"));
- CriteriaQuery<Object> all = cq.select(rootEntry);
- TypedQuery<Object> allQuery = em.createQuery(all);
- List<Object> objectList = allQuery.getResultList();
- HashSet<Object> resultSet = new HashSet<Object>();
- PersistenceUnitUtil util = emf.getPersistenceUnitUtil();
- for (Object o: objectList){
- Object key = util.getIdentifier(o);
- resultSet.add(key);
- }
-
- // Obtain a hash with the persisted objects
- Map<Object, Object> entries = d.getAllEntries("integrityAuditPU", properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity", resultSet);
-
- // Assert there were 3 entries for that class
- assertEquals(3, entries.size());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- // close the EntityManager
- em.close();
- }
-
- /* Tests getting all the entries from a class based on persistenceUnit, properties, and className */
- //@Ignore
- @Test
- public void testGetAllEntries() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- // close the EntityManager
- em.close();
-
- try {
- // create entries for the IntegrityAuditEntity table
- d = new DbDAO(resourceName, persistenceUnit, properties);
- new DbDAO("pdp1", persistenceUnit, properties);
- new DbDAO("pdp2", persistenceUnit, properties);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- try {
- // Obtain a hash with the persisted objects
- Map<Object, Object> entries = d.getAllEntries(persistenceUnit, properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity");
-
- // Assert there were 3 entries for that class
- assertEquals(3, entries.size());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /* Tests obtaining all class names of persisted classes */
- public void testGetPersistenceClassNames() {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- EntityManager em = emf.createEntityManager();
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- // Begin transaction
- et.begin();
-
- // Clean the DB
- em.createQuery("DELETE FROM IntegrityAuditEntity").executeUpdate();
-
- // flush to the DB
- em.flush();
- et.commit();
-
- // close the EntityManager
- em.close();
-
- try {
- d = new DbDAO(resourceName, persistenceUnit, properties);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- // Retrieve persistence class names
- Set<String> result = d.getPersistenceClassNames();
- assertEquals(1, result.size());
- }
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/IntegrityAuditDesignationTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/IntegrityAuditDesignationTest.java
deleted file mode 100644
index 5c593123..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/IntegrityAuditDesignationTest.java
+++ /dev/null
@@ -1,1112 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * 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.common.ia.test;
-
-import static org.junit.Assert.*;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Properties;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
-
-
-
-//import org.apache.commons.logging.Log;
-//import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import org.onap.policy.common.ia.AuditThread;
-import org.onap.policy.common.ia.DbDAO;
-import org.onap.policy.common.ia.IntegrityAudit;
-import org.onap.policy.common.ia.IntegrityAuditProperties;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
-/*
- * All JUnits are designed to run in the local development environment
- * where they have write privileges and can execute time-sensitive
- * tasks.
- *
- * If any have been ignored (@Ignore) they will not run at the same time
- * as others. You should run them as JUnits by themselves.
- */
-public class IntegrityAuditDesignationTest {
-
- private static Logger logger = FlexLogger.getLogger(IntegrityAuditDesignationTest.class);
-
- /*
- * Provides a little cushion for timing events.
- */
- private static int FUDGE_FACTOR = 15000;
-
- private static String persistenceUnit;
- private static Properties properties;
- private static String resourceName;
- private static final String TEST_LOG = "./testingLogs/common-modules/integrity-audit/debug.log";
- @Before
- public void setUp() throws Exception {
-
-
- System.out.println("setUp: Clearing debug.log");
- FileOutputStream fstream = new FileOutputStream(TEST_LOG);
- fstream.close();
-
- logger.info("setUp: Entering");
-
- IntegrityAudit.setUnitTesting(true);
-
- properties = new Properties();
- properties.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
-
- /*
- * AuditThread.AUDIT_THREAD_SLEEP_INTERVAL is also five seconds, so
- * setting AUDIT_PERIOD_SECONDS to 5 ensures that whether or not audit
- * has already been run on a node, it will sleep the same amount of
- * time.
- */
- properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
-
- persistenceUnit = "testPU";
- resourceName = "pdp1";
-
-
- //Clean up the DB
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
-
- EntityManager em = emf.createEntityManager();
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- et.begin();
-
- // if IntegrityAuditEntity entry exists for resourceName and PU, update it. If not found, create a new entry
- em.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
-
- // commit transaction
- et.commit();
- em.close();
- logger.info("setUp: Exiting");
-
- }
-
-
- @After
- public void tearDown() throws Exception {
-
- logger.info("tearDown: Entering");
-
- logger.info("tearDown: Exiting");
-
- }
-
- /*
- * Tests designation logic when only one functioning resource is in play. Designation
- * should stay with single resource.
- *
- * Note: console.log must be examined to ascertain whether or not this test was successful.
- */
- //@Ignore
- @Test
- public void testOneResource() throws Exception {
-
- logger.info("testOneResource: Entering");
-
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp1 to run audit (15 seconds)
- *
- * 2) Logic to detect that no other node is available for designation (60 seconds)
- *
- * 3) pdp1 to run audit again (15 seconds)
- */
- logger.info("testOneResource: Sleeping 100 seconds");
- Thread.sleep(100000);
-
- logger.info("testOneResource: Stopping audit thread");
- integrityAudit.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
-
- String rName = "";
- while ((strLine = br.readLine()) != null) {
- // parse strLine to obtain what you want
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
- rName = strLine.substring(startIndex, endIndex);
- logger.info("testOneResource: rName: " + rName);
- assertEquals("pdp1", rName);
- }
- }
- fstream.close();
-
- /*
- * Test fix for ONAPD2TD-783: Audit fails to run when application is restarted.
- */
- integrityAudit.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp1 to run audit (15 seconds)
- *
- * 2) Logic to detect that no other node is available for designation (60 seconds)
- *
- * 3) pdp1 to run audit again (15 seconds)
- */
- logger.info("testOneResource: Sleeping 100 seconds for second time");
- Thread.sleep(100000);
-
- logger.info("testOneResource: Stopping audit thread for second time");
- integrityAudit.stopAuditThread();
-
- fstream = new FileInputStream(TEST_LOG);
- br = new BufferedReader(new InputStreamReader(fstream));
-
- rName = "";
- while ((strLine = br.readLine()) != null) {
- // parse strLine to obtain what you want
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
- rName = strLine.substring(startIndex, endIndex);
- logger.info("testOneResource: rName: " + rName);
- assertEquals("pdp1", rName);
- }
- }
- fstream.close();
-
- logger.info("testOneResource: Exiting");
-
- }
-
- /*
- * Tests designation logic when two functioning resources are in play.
- * Designation should alternate between resources.
- *
- * Note: console.log must be examined to ascertain whether or not this test
- * was successful. A quick way of examining the log is to search for the
- * string "audit simulation":
- *
- * As you can see from the "dbAuditSimulate" method, when it executes, it
- * logs the "Starting audit simulation..." message and when it finishes, it
- * logs the "Finished audit simulation..." message. By looking for these
- * messages, you can verify that the audits are run by the proper resource.
- * For example, when testFourResourcesOneDead is run, you should see a
- * Starting.../Finished... sequence for pdp1, followed by a
- * Starting.../Finished... sequence for pdp2, followed by a
- * Starting.../Finished... sequence for pdp4 (pdp3 is skipped as it's
- * dead/hung), followed by a Starting.../Finished... sequence for pdp1, etc.
- */
- @Ignore
- @Test
- public void testTwoResources() throws Exception {
-
- logger.info("testTwoResources: Entering");
-
- /*
- * Start audit for pdp1.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Start audit for pdp2.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit2 = "testPU";
- String resourceName2 = "pdp2";
- IntegrityAudit integrityAudit2 = new IntegrityAudit(resourceName2, persistenceUnit2, properties2);
- integrityAudit2.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp1 to run audit (15 seconds)
- *
- * 2) Logic to detect that pdp1 is stale and designate pdp2 (30 seconds)
- *
- * 3) pdp2 to run audit (15 seconds)
- *
- * 4) Logic to detect that pdp2 is stale and designate pdp1 (30 seconds)
- *
- * 5) pdp1 to run audit (15 seconds)
- */
- Thread.sleep(120000);
-
- logger.info("testTwoResources: Stopping audit threads");
- integrityAudit.stopAuditThread();
- integrityAudit2.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp2", "pdp1"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate: delegates) {
- logger.info("testTwoResources: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue(expectedResult.equals(delegates));
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 3);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
- assertTrue("delegate 2 is " + expectedResult.get(2), expectedResult.get(2).equals(delegates.get(2)));
-
- logger.info("testTwoResources: Exiting");
-
- }
-
- /*
- * Tests designation logic when two functioning resources are in play, each
- * with different PUs. Audits for "testPU" and "integrityAuditPU" should run
- * simultaneously. Designation should not alternate.
- *
- * Note: console.log must be examined to ascertain whether or not this test
- * was successful.
- */
- @Ignore
- @Test
- public void testTwoResourcesDifferentPus() throws Exception {
-
- logger.info("testTwoResourcesDifferentPus: Entering");
-
- /*
- * Start audit for pdp1.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Start audit for pdp2.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit2 = "integrityAuditPU";
- String resourceName2 = "pdp2";
- IntegrityAudit integrityAudit2 = new IntegrityAudit(resourceName2, persistenceUnit2, properties2);
- integrityAudit2.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp1 and pdp2 to run audit simultaneously (15 seconds)
- *
- * 2) Logic to detect that no other node is available for designation for either pdp1 or pdp2 (60 seconds)
- *
- * 3) pdp1 and pdp2 to again run audit simultaneously (15 seconds)
- *
- * NOTE: Based on the above, you would think a 100000ms sleep would be appropriate,
- * but for some reason, when all tests are run this test errors.
- */
- logger.info("testTwoResourcesDifferentPus: Sleeping 80 seconds");
- Thread.sleep(100000);
-
- logger.info("testTwoResourcesDifferentPus: Stopping audit threads");
- integrityAudit.stopAuditThread();
- integrityAudit2.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp2", "pdp1", "pdp2"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate: delegates) {
- logger.info("testTwoResourcesDifferentPus: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 4);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
- assertTrue("delegate 2 is " + expectedResult.get(2), expectedResult.get(2).equals(delegates.get(2)));
- assertTrue("delegate 3 is " + expectedResult.get(3), expectedResult.get(3).equals(delegates.get(3)));
-
- assertTrue(expectedResult.equals(delegates));
-
- logger.info("testTwoResourcesDifferentPus: Exiting");
-
- }
-
-
- /*
- * Tests designation logic when two resources are in play but one of them is
- * dead/hung. Designation should move to second resource but then get
- * restored back to original resource when it's discovered that second
- * resource is dead.
- *
- * Note: console.log must be examined to ascertain whether or not this test
- * was successful.
- */
- @Ignore
- @Test
- public void testTwoResourcesOneDead() throws Exception {
-
- logger.info("testTwoResourcesOneDead: Entering");
-
- /*
- * Start audit for pdp1.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Populate DB for pdp2, which will simulate it having registered but then having died.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit2 = "testPU";
- String resourceName2 = "pdp2";
- new DbDAO(resourceName2, persistenceUnit2, properties2);
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp1 to run audit (15 seconds)
- *
- * 2) Logic to detect that other node, pdp2, is not available for designation (60 seconds)
- *
- * 3) pdp1 to run audit again (15 seconds)
- */
- logger.info("testTwoResourcesOneDead: Sleeping 100 seconds");
- Thread.sleep(100000);
-
- logger.info("testTwoResourcesOneDead: Stopping audit thread");
- integrityAudit.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp1"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate: delegates) {
- logger.info("testTwoResourcesOneDead: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 2);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
-
- logger.info("testTwoResourcesOneDead: Exiting");
-
- }
-
-
- /*
- * Tests designation logic when three functioning resources are in play. Designation should
- * round robin among resources.
- *
- * Note: console.log must be examined to ascertain whether or not this test was successful.
- */
- @Ignore
- @Test
- public void testThreeResources() throws Exception {
-
- logger.info("testThreeResources: Entering");
-
- /*
- * Start audit for pdp1.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Start audit for pdp2.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit2 = "testPU";
- String resourceName2 = "pdp2";
- IntegrityAudit integrityAudit2 = new IntegrityAudit(resourceName2, persistenceUnit2, properties2);
- integrityAudit2.startAuditThread();
-
- /*
- * Start audit for pdp3.
- */
- Properties properties3 = new Properties();
- properties3.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties3.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties3.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties3.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties3.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties3.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties3.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit3 = "testPU";
- String resourceName3 = "pdp3";
- IntegrityAudit integrityAudit3 = new IntegrityAudit(resourceName3, persistenceUnit3, properties3);
- integrityAudit3.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp1 to run audit (15 seconds)
- *
- * 2) Logic to detect that pdp1 is stale and designate pdp2 (30 seconds)
- *
- * 3) pdp2 to run audit (15 seconds)
- *
- * 4) Logic to detect that pdp2 is stale and designate pdp3 (30 seconds)
- *
- * 5) pdp3 to run audit (15 seconds)
- *
- * 6) Logic to detect that pdp3 is stale and designate pdp1 (30 seconds)
- *
- * 7) pdp1 to run audit (15 seconds)
- */
- logger.info("testThreeResources: Sleeping 160 seconds");
- Thread.sleep(160000);
-
- logger.info("testThreeResources: Stopping threads");
- integrityAudit.stopAuditThread();
- integrityAudit2.stopAuditThread();
- integrityAudit3.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp2", "pdp3", "pdp1"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate: delegates) {
- logger.info("testThreeResources: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 3);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
- assertTrue("delegate 2 is " + expectedResult.get(2), expectedResult.get(2).equals(delegates.get(2)));
- assertTrue("delegate 3 is " + expectedResult.get(3), expectedResult.get(3).equals(delegates.get(3)));
-
- logger.info("testThreeResources: Exiting");
-
- }
-
- /*
- * Tests designation logic when four functioning resources are in play, two
- * with one PU, two with another. Audits for "testPU" and "integrityAuditPU" should run
- * simultaneously. Designation should alternate between resources for each of the two
- * persistence units.
- *
- * Note: console.log must be examined to ascertain whether or not this test
- * was successful.
- */
- @Ignore
- @Test
- public void testFourResourcesDifferentPus() throws Exception {
-
- logger.info("testFourResourcesDifferentPus: Entering");
-
- /*
- * Start audit for pdp1, testPU.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Start audit for pdp2, integrityAuditPU.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit2 = "integrityAuditPU";
- String resourceName2 = "pdp2";
- IntegrityAudit integrityAudit2 = new IntegrityAudit(resourceName2, persistenceUnit2, properties2);
- integrityAudit2.startAuditThread();
-
- /*
- * Start audit for pdp3, testPU.
- */
- Properties properties3 = new Properties();
- properties3.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties3.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties3.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties3.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties3.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties3.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties3.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit3 = "testPU";
- String resourceName3 = "pdp3";
- IntegrityAudit integrityAudit3 = new IntegrityAudit(resourceName3, persistenceUnit3, properties3);
- integrityAudit3.startAuditThread();
-
- /*
- * Start audit for pdp4, integrityAuditPU.
- */
- Properties properties4 = new Properties();
- properties4.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties4.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties4.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties4.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties4.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties4.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties4.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit4 = "integrityAuditPU";
- String resourceName4 = "pdp4";
- IntegrityAudit integrityAudit4 = new IntegrityAudit(resourceName4, persistenceUnit4, properties4);
- integrityAudit4.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp1 and pdp2 to run audit simultaneously (15 seconds)
- *
- * 2) Logic to detect that pdp1 and pdp2 are stale and designate pdp3 (one's counterpart) and pdp4 (two's counterpart) (30 seconds)
- *
- * 3) pdp3 and pdp4 to run audit simultaneously (15 seconds)
- *
- * 4) Logic to detect that pdp3 and pdp4 are stale and designate pdp1 (three's counterpart) and pdp2 (four's counterpart) (30 seconds)
- *
- * 5) pdp1 and pdp2 to run audit simultaneously (15 seconds)
- */
- logger.info("testFourResourcesDifferentPus: Sleeping 120 seconds");
- Thread.sleep(120000);
-
- logger.info("testFourResourcesDifferentPus: Stopping threads");
- integrityAudit.stopAuditThread();
- integrityAudit2.stopAuditThread();
- integrityAudit3.stopAuditThread();
- integrityAudit4.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp2", "pdp3", "pdp4", "pdp1", "pdp2"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate: delegates) {
- logger.info("testFourResourcesDifferentPus: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 6);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
- assertTrue("delegate 2 is " + expectedResult.get(2), expectedResult.get(2).equals(delegates.get(2)));
- assertTrue("delegate 3 is " + expectedResult.get(3), expectedResult.get(3).equals(delegates.get(3)));
- assertTrue("delegate 4 is " + expectedResult.get(4), expectedResult.get(4).equals(delegates.get(4)));
- assertTrue("delegate 5 is " + expectedResult.get(5), expectedResult.get(5).equals(delegates.get(5)));
-
- logger.info("testFourResourcesDifferentPus: Exiting");
-
- }
-
- /*
- * Tests designation logic when four resources are in play but one is not
- * functioning. Designation should round robin among functioning resources
- * only.
- *
- * Note: console.log must be examined to ascertain whether or not this test
- * was successful.
- */
- @Ignore
- @Test
- public void testFourResourcesOneDead() throws Exception {
-
- logger.info("testFourResourcesOneDead: Entering");
-
- /*
- * Start audit for pdp1.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
- integrityAudit.startAuditThread();
-
- /*
- * Start audit for pdp2.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit2 = "testPU";
- String resourceName2 = "pdp2";
- IntegrityAudit integrityAudit2 = new IntegrityAudit(resourceName2, persistenceUnit2, properties2);
- integrityAudit2.startAuditThread();
-
- /*
- * Populate DB for pdp3, which will simulate it having registered but then having died.
- */
- Properties properties3 = new Properties();
- properties3.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties3.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties3.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties3.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties3.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties3.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties3.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit3 = "testPU";
- String resourceName3 = "pdp3";
- new DbDAO(resourceName3, persistenceUnit3, properties3);
-
- /*
- * Start audit for pdp4.
- */
- Properties properties4 = new Properties();
- properties4.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties4.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties4.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties4.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties4.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties4.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties4.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit4 = "testPU";
- String resourceName4 = "pdp4";
- IntegrityAudit integrityAudit4 = new IntegrityAudit(resourceName4, persistenceUnit4, properties4);
- integrityAudit4.startAuditThread();
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp1 to run audit (15 seconds)
- *
- * 2) Logic to detect that pdp1 is stale and designate pdp2 (30 seconds)
- *
- * 3) pdp2 to run audit (15 seconds)
- *
- * 4) Logic to detect that pdp2 is stale and designate pdp4 (30 seconds)
- *
- * 5) pdp4 to run audit (15 seconds)
- *
- * 6) Logic to detect that pdp4 is stale and designate pdp1 (30 seconds)
- *
- * 7) pdp1 to run audit (15 seconds)
- *
- * 8) Logic to detect that pdp1 is stale and designate pdp2 (30 seconds)
- *
- * 7) pdp2 to run audit (15 seconds)
- */
- logger.info("testFourResourcesOneDead: Sleeping 210 seconds");
- Thread.sleep(210000);
-
- logger.info("testFourResourcesOneDead: Stopping threads");
- integrityAudit.stopAuditThread();
- integrityAudit2.stopAuditThread();
- integrityAudit4.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp2", "pdp4", "pdp1", "pdp2", "pdp4"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate : delegates) {
- logger.info("testFourResourcesOneDead: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 6);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
- assertTrue("delegate 2 is " + expectedResult.get(2), expectedResult.get(2).equals(delegates.get(2)));
- assertTrue("delegate 3 is " + expectedResult.get(3), expectedResult.get(3).equals(delegates.get(3)));
- assertTrue("delegate 4 is " + expectedResult.get(4), expectedResult.get(4).equals(delegates.get(4)));
- assertTrue("delegate 5 is " + expectedResult.get(5), expectedResult.get(5).equals(delegates.get(5)));
-
- logger.info("testFourResourcesOneDead: Exiting");
-
- }
-
- /*
- * Tests designation logic when four resources are in play but only one is
- * functioning. Designation should remain with sole functioning resource.
- *
- * Note: console.log must be examined to ascertain whether or not this test
- * was successful.
- */
- @Ignore
- @Test
- public void testFourResourcesThreeDead() throws Exception {
-
- logger.info("testFourResourcesThreeDead: Entering");
-
- /*
- * Populate DB for pdp1, which will simulate it having registered but then having died.
- */
- new DbDAO(resourceName, persistenceUnit, properties);
-
-
- /*
- * Populate DB for pdp2, which will simulate it having registered but then having died.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit2 = "testPU";
- String resourceName2 = "pdp2";
- new DbDAO(resourceName2, persistenceUnit2, properties2);
-
- /*
- * Start audit for pdp3.
- */
- Properties properties3 = new Properties();
- properties3.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties3.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties3.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties3.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties3.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties3.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties3.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit3 = "testPU";
- String resourceName3 = "pdp3";
- IntegrityAudit integrityAudit3 = new IntegrityAudit(resourceName3, persistenceUnit3, properties3);
- integrityAudit3.startAuditThread();
-
- /*
- * Populate DB for pdp4, which will simulate it having registered but then having died.
- */
- Properties properties4 = new Properties();
- properties4.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties4.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties4.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties4.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties4.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties4.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties4.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit4 = "testPU";
- String resourceName4 = "pdp4";
- new DbDAO(resourceName4, persistenceUnit4, properties4);
-
- /*
- * Sleep long enough to allow
- *
- * 1) pdp3 to discover that all other designation candidates are stale (30 seconds)
- *
- * 1) pdp3 to run audit (15 seconds)
- *
- * 2) Logic to detect that no other nodes are available for designation (60 seconds)
- *
- * 3) pdp3 to run audit again (15 seconds)
- */
- logger.info("testFourResourcesThreeDead: Sleeping 130 seconds");
- Thread.sleep(130000);
-
- logger.info("testFourResourcesThreeDead: Stopping thread");
- integrityAudit3.stopAuditThread();
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp3", "pdp3"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
-
- for (String delegate : delegates) {
- logger.info("testFourResourcesThreeDead: delegate: " + delegate);
- }
-
- fstream.close();
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 2);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
-
- logger.info("testFourResourcesThreeDead: Exiting");
-
- }
-
-
- /*
- * Tests designation logic when the designated node dies and is no longer
- * current
- *
- * Note: console.log must be examined to ascertain whether or not this test
- * was successful.
- */
- @Ignore
- @Test
- public void testDesignatedNodeDead() throws Exception {
- logger.info("testDesignatedNodeDead: Entering");
-
- /*
- * Instantiate audit object for pdp1.
- */
- IntegrityAudit integrityAudit = new IntegrityAudit(resourceName, persistenceUnit, properties);
-
- /*
- * Start audit for pdp2.
- */
- Properties properties2 = new Properties();
- properties2.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties2.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties2.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties2.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties2.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties2.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties2.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit2 = "testPU";
- String resourceName2 = "pdp2";
- IntegrityAudit integrityAudit2 = new IntegrityAudit(resourceName2, persistenceUnit2, properties2);
-
- /*
- * Instantiate audit object for pdp3.
- */
- Properties properties3 = new Properties();
- properties3.put(IntegrityAuditProperties.DB_DRIVER, TestUtils.DEFAULT_DB_DRIVER);
- properties3.put(IntegrityAuditProperties.DB_URL, TestUtils.DEFAULT_DB_URL);
- properties3.put(IntegrityAuditProperties.DB_USER, TestUtils.DEFAULT_DB_USER);
- properties3.put(IntegrityAuditProperties.DB_PWD, TestUtils.DEFAULT_DB_PWD);
- properties3.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
- properties3.put(IntegrityAuditProperties.NODE_TYPE, "pdp_xacml");
- properties3.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "5");
- String persistenceUnit3 = "testPU";
- String resourceName3 = "pdp3";
- IntegrityAudit integrityAudit3 = new IntegrityAudit(resourceName3, persistenceUnit3, properties3);
-
- // Start audit on pdp1
- logger.info("testDesignatedNodeDead: Start audit on pdp1");
- integrityAudit.startAuditThread();
-
- // Start the auditing threads on other nodes.
- logger.info("testDesignatedNodeDead: Start audit on pdp2");
- integrityAudit2.startAuditThread();
- logger.info("testDesignatedNodeDead: Start audit on pdp3");
- integrityAudit3.startAuditThread();
-
-
- // Kill audit on pdp1
- logger.info("testDesignatedNodeDead: Kill audit on pdp1");
- integrityAudit.stopAuditThread();
-
- // Sleep long enough for pdp1 to get stale and pdp2 to take over
- logger.info("testDesignatedNodeDead: Sleep long enough for pdp1 to get stale and pdp2 to take over");
- Thread.sleep(AuditThread.AUDIT_COMPLETION_INTERVAL + FUDGE_FACTOR);
-
- // Start audit thread on pdp1 again.
- logger.info("testDesignatedNodeDead: Start audit thread on pdp1 again.");
- integrityAudit.startAuditThread();
-
- // Sleep long enough for pdp2 to complete its audit and get stale, at
- // which point pdp3 should take over
- logger.info("testDesignatedNodeDead: Sleep long enough for pdp2 to complete its audit and get stale, at which point pdp3 should take over");
- Thread.sleep((AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL * AuditThread.AUDIT_SIMULATION_ITERATIONS)
- + AuditThread.AUDIT_COMPLETION_INTERVAL + FUDGE_FACTOR);
-
- // Kill audit on pdp3
- logger.info("testDesignatedNodeDead: Killing audit on pdp3");
- integrityAudit3.stopAuditThread();
-
- // Sleep long enough for pdp3 to get stale and pdp1 to take over
- logger.info("testDesignatedNodeDead: Sleep long enough for pdp3 to get stale and pdp1 to take over");
- Thread.sleep(AuditThread.AUDIT_COMPLETION_INTERVAL + FUDGE_FACTOR);
-
- FileInputStream fstream = new FileInputStream(TEST_LOG);
- BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
- String strLine;
- int startIndex;
- int endIndex;
- ArrayList<String> expectedResult = new ArrayList<String>(Arrays.asList("pdp1", "pdp2", "pdp3", "pdp1"));
- ArrayList<String> delegates = new ArrayList<String>();
- while ((strLine = br.readLine()) != null) {
- /* parse strLine to obtain what you want */
- if (strLine.contains("Starting audit simulation for resourceName=")) {
- startIndex = strLine.indexOf("resourceName=") + 13;
- endIndex = strLine.indexOf(",");
-
- String rName = strLine.substring(startIndex, endIndex);
-
- delegates.add(rName);
- }
- }
- fstream.close();
-
- // Stop remaining threads.
- logger.info("testDesignatedNodeDead: Stopping remaining threads");
- integrityAudit.stopAuditThread();
- integrityAudit2.stopAuditThread();
-
- for (String delegate: delegates) {
- logger.info("testDesignatedNodeDead: delegate: " + delegate);
- }
-
- assertTrue("delegate count only " + delegates.size(), delegates.size() >= 4);
- assertTrue("delegate 0 is " + expectedResult.get(0), expectedResult.get(0).equals(delegates.get(0)));
- assertTrue("delegate 1 is " + expectedResult.get(1), expectedResult.get(1).equals(delegates.get(1)));
- assertTrue("delegate 2 is " + expectedResult.get(2), expectedResult.get(2).equals(delegates.get(2)));
- assertTrue("delegate 3 is " + expectedResult.get(3), expectedResult.get(3).equals(delegates.get(3)));
-
- logger.info("testDesignatedNodeDead: Exiting");
- }
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/TestUtils.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/TestUtils.java
deleted file mode 100644
index 58874d76..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/TestUtils.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Test Utils
- * ================================================================================
- * 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.common.ia.test;
-
-public class TestUtils {
- public static final String DEFAULT_DB_DRIVER = "org.h2.Driver";
- public static final String DEFAULT_DB_URL = "jdbc:h2:file:./sql/iaTest";
- public static final String DEFAULT_DB_USER = "sa";
- public static final String DEFAULT_DB_PWD = "";
-}
diff --git a/integrity-audit/src/test/resources/logback-test.xml b/integrity-audit/src/test/resources/logback-test.xml
new file mode 100644
index 00000000..ca57cb4a
--- /dev/null
+++ b/integrity-audit/src/test/resources/logback-test.xml
@@ -0,0 +1,169 @@
+<!--
+ ============LICENSE_START=======================================================
+ Integrity Audit
+ ================================================================================
+ Copyright (C) 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=========================================================
+ -->
+
+<!-- Controls the output of logs for JUnit tests -->
+
+<configuration scan="false" debug="true">
+ <!--<jmxConfigurator /> -->
+ <!-- directory path for all other type logs -->
+ <property name="logDir" value="testingLogs" />
+
+ <!-- directory path for debugging type logs -->
+ <property name="debugDir" value="testingLogs" />
+
+ <!-- specify the component name
+ <ONAP-component-name>::= "MSO" | "DCAE" | "ASDC " | "AAI" |"Policy" | "SDNC" | "AC" -->
+ <property name="componentName" value="common-modules"></property>
+ <property name="subComponentName" value="integrity-audit"></property>
+
+ <!-- log file names -->
+ <property name="errorLogName" value="error" />
+ <property name="metricsLogName" value="metrics" />
+ <property name="auditLogName" value="audit" />
+ <property name="debugLogName" value="debug" />
+
+ <property name="defaultPattern" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}|%X{requestId}|%X{serviceInstanceId}|%t|%X{serverName}|%X{serviceName}|%X{instanceUuid}|%p|%X{severity}|%X{serverIpAddress}|%X{server}|%X{clientIpAddress}|%c||%msg%n" />
+ <!-- <property name="defaultPattern" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}|%X{RequestId}|%X{ServiceInstanceId}|%thread||%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}||%X{Timer}|%msg%n" /> -->
+ <property name="logDirectory" value="${logDir}/${componentName}/${subComponentName}" />
+ <property name="debugLogDirectory" value="${debugDir}/${componentName}/${subComponentName}" />
+ <!--
+ <property name="logDirectory" value="${logDir}/${componentName}/${subComponentName}" />
+ <property name="debugLogDirectory" value="${debugDir}/${componentName}/${subComponentName}" />
+ -->
+ <!-- example from old log4j.properties: ${catalina.base}/logs/pdp-rest.log -->
+ <!-- Example evaluator filter applied against console appender -->
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+
+ <!-- ============================================================================ -->
+ <!-- EELF Appenders -->
+ <!-- ============================================================================ -->
+
+ <!-- The EELFAppender is used to record events to the general application
+ log -->
+
+
+
+
+ <!-- EELF Audit Appender. This appender is used to record audit engine
+ related logging events. The audit logger and appender are specializations
+ of the EELF application root logger and appender. This can be used to segregate
+ Policy engine events from other components, or it can be eliminated to record
+ these events as part of the application root log. -->
+
+ <appender name="EELFAudit"
+ class="ch.qos.logback.core.FileAppender">
+ <file>${logDirectory}/${auditLogName}.log</file>
+ <param name="Append" value="false" />
+ <encoder>
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+ <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFAudit" />
+ </appender>
+
+<appender name="EELFMetrics"
+ class="ch.qos.logback.core.FileAppender">
+ <file>${logDirectory}/${metricsLogName}.log</file>
+ <param name="Append" value="false" />
+ <encoder>
+ <!-- <pattern>"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} -
+ %msg%n"</pattern> -->
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+
+
+ <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFMetrics"/>
+ </appender>
+
+ <appender name="EELFError"
+ class="ch.qos.logback.core.FileAppender">
+ <file>${logDirectory}/${errorLogName}.log</file>
+ <param name="Append" value="false" />
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+ <level>ERROR</level>
+ </filter>
+ <encoder>
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="asyncEELFError" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFError"/>
+ </appender>
+
+ <appender name="EELFDebug"
+ class="ch.qos.logback.core.FileAppender">
+ <file>${debugLogDirectory}/${debugLogName}.log</file>
+ <param name="Append" value="false" />
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+ <!-- <level>INFO</level> -->
+ <level>DEBUG</level>
+ </filter>
+ <encoder>
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFDebug" />
+ <includeCallerData>true</includeCallerData>
+ </appender>
+
+
+ <!-- ============================================================================ -->
+ <!-- EELF loggers -->
+ <!-- ============================================================================ -->
+
+ <logger name="com.att.eelf.audit" level="info" additivity="false">
+ <appender-ref ref="asyncEELFAudit" />
+ </logger>
+
+ <logger name="com.att.eelf.metrics" level="info" additivity="false">
+ <appender-ref ref="asyncEELFMetrics" />
+ </logger>
+
+ <logger name="com.att.eelf.error" level="error" additivity="false">
+ <appender-ref ref="asyncEELFError" />
+ </logger>
+
+ <!-- <logger name="com.att.eelf.debug" level="info" additivity="false"> -->
+ <logger name="com.att.eelf.debug" level="debug" additivity="false">
+ <appender-ref ref="asyncEELFDebug" />
+ </logger>
+
+
+ <!-- <root level="INFO"> -->
+ <root level="DEBUG">
+ <appender-ref ref="asyncEELFDebug" />
+ <appender-ref ref="asyncEELFError" />
+ </root>
+
+</configuration>