summaryrefslogtreecommitdiffstats
path: root/integrity-audit
diff options
context:
space:
mode:
Diffstat (limited to 'integrity-audit')
-rw-r--r--integrity-audit/config/policyLogger.properties44
-rw-r--r--integrity-audit/policyLogger.properties44
-rw-r--r--integrity-audit/pom.xml95
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/AuditThread.java771
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/AuditorTime.java54
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java503
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/DbAuditException.java41
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/DbDao.java722
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/DbDaoTransactionException.java41
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAudit.java287
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditException.java41
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditProperties.java46
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditPropertiesException.java41
-rw-r--r--integrity-audit/src/main/java/org/onap/policy/common/ia/jpa/IntegrityAuditEntity.java130
-rw-r--r--integrity-audit/src/main/resources/META-INF/persistence.xml47
-rw-r--r--integrity-audit/src/main/resources/log4j.properties48
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/AuditPeriodTest.java254
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/AuditorTimeTest.java43
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditCompareEntriesTest.java551
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditTest.java283
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/DbDaoTest.java452
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/DefaultLoggingPatternTest.java103
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/ExceptionsTest.java53
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditDesignationTest.java593
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTest.java75
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTestBase.java658
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/IaTestEntity.java177
-rw-r--r--integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/PersonSample.java69
-rw-r--r--integrity-audit/src/test/resources/log4j.properties54
-rw-r--r--integrity-audit/src/test/resources/logback-test.xml258
-rw-r--r--integrity-audit/src/test/resources/logger-test.expectedlog1
-rw-r--r--integrity-audit/src/test/resources/policyLogger.properties45
-rw-r--r--integrity-audit/src/test/resources/xlogger-test.expectedlog1
33 files changed, 0 insertions, 6625 deletions
diff --git a/integrity-audit/config/policyLogger.properties b/integrity-audit/config/policyLogger.properties
deleted file mode 100644
index 1e7187f2..00000000
--- a/integrity-audit/config/policyLogger.properties
+++ /dev/null
@@ -1,44 +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=========================================================
-###
-
-################################### Set concurrentHashMap and timer info #######################
-#Timer initial delay and the delay between in milliseconds before task is to be execute.
-timer.delay.time=1000
-#Timer scheduleAtFixedRate period - time in milliseconds between successive task executions.
-check.interval= 30000
-#Longest time an event info can be stored in the concurrentHashMap for logging - in seconds.
-event.expired.time=86400
-#Size of the concurrentHashMap which stores the event starting time, etc - when its size reaches this limit, the Timer gets executed
-#to remove all expired records from this concurrentHashMap.
-concurrentHashMap.limit=5000
-#Size of the concurrentHashMap - when its size drops to this point, stop the Timer
-stop.check.point=2500
-################################### Set logging format #############################################
-# set EELF for EELF logging format, set LOG4J for using log4j, set SYSTEMOUT for using system.out.println
-logger.type=EELF
-#################################### Set level for EELF or SYSTEMOUT logging ##################################
-# Set level for debug file. Set DEBUG to enable .info, .warn and .debug; set INFO for enable .info and .warn; set OFF to disable all
-debugLogger.level=INFO
-# Set level for metrics file. Set OFF to disable; set ON to enable
-metricsLogger.level=ON
-# Set level for error file. Set OFF to disable; set ON to enable
-error.level=ON
-# Set level for audit file. Set OFF to disable; set ON to enable
-audit.level=ON
diff --git a/integrity-audit/policyLogger.properties b/integrity-audit/policyLogger.properties
deleted file mode 100644
index 1e7187f2..00000000
--- a/integrity-audit/policyLogger.properties
+++ /dev/null
@@ -1,44 +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=========================================================
-###
-
-################################### Set concurrentHashMap and timer info #######################
-#Timer initial delay and the delay between in milliseconds before task is to be execute.
-timer.delay.time=1000
-#Timer scheduleAtFixedRate period - time in milliseconds between successive task executions.
-check.interval= 30000
-#Longest time an event info can be stored in the concurrentHashMap for logging - in seconds.
-event.expired.time=86400
-#Size of the concurrentHashMap which stores the event starting time, etc - when its size reaches this limit, the Timer gets executed
-#to remove all expired records from this concurrentHashMap.
-concurrentHashMap.limit=5000
-#Size of the concurrentHashMap - when its size drops to this point, stop the Timer
-stop.check.point=2500
-################################### Set logging format #############################################
-# set EELF for EELF logging format, set LOG4J for using log4j, set SYSTEMOUT for using system.out.println
-logger.type=EELF
-#################################### Set level for EELF or SYSTEMOUT logging ##################################
-# Set level for debug file. Set DEBUG to enable .info, .warn and .debug; set INFO for enable .info and .warn; set OFF to disable all
-debugLogger.level=INFO
-# Set level for metrics file. Set OFF to disable; set ON to enable
-metricsLogger.level=ON
-# Set level for error file. Set OFF to disable; set ON to enable
-error.level=ON
-# Set level for audit file. Set OFF to disable; set ON to enable
-audit.level=ON
diff --git a/integrity-audit/pom.xml b/integrity-audit/pom.xml
deleted file mode 100644
index f2cd6f0e..00000000
--- a/integrity-audit/pom.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--
- ============LICENSE_START=======================================================
- ONAP Policy Engine - Common Modules
- ================================================================================
- Copyright (C) 2017-2021 AT&T Intellectual Property. All rights reserved.
- Modifications Copyright (C) 2023-2024 Nordix Foundation.
- ================================================================================
- 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=========================================================
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>integrity-audit</artifactId>
-
- <packaging>jar</packaging>
-
- <parent>
- <groupId>org.onap.policy.common</groupId>
- <artifactId>common-modules</artifactId>
- <version>3.0.1-SNAPSHOT</version>
- </parent>
-
- <name>Integrity Audit</name>
-
- <dependencies>
- <dependency>
- <groupId>org.onap.policy.common</groupId>
- <artifactId>utils</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.common</groupId>
- <artifactId>utils-test</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.policy.common</groupId>
- <artifactId>ONAP-Logging</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
- <dependency>
- <groupId>org.hibernate.orm</groupId>
- <artifactId>hibernate-core</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.hibernate.validator</groupId>
- <artifactId>hibernate-validator</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-ext</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-</project>
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
deleted file mode 100644
index 03fbdb57..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/AuditThread.java
+++ /dev/null
@@ -1,771 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2021 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 java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Properties;
-import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
-/**
- * AuditThread is the main thread for the IntegrityAudit.
- *
- */
-public class AuditThread extends Thread {
-
- private static final Logger logger = FlexLogger.getLogger(AuditThread.class);
-
- /*
- * Number of milliseconds that must elapse for audit to be considered complete. It's public for
- * access by JUnit test logic.
- */
- public static final long AUDIT_COMPLETION_INTERVAL = 30000L;
-
- /**
- * Number of audit cycles before the completion flag is reset.
- */
- public static final int AUDIT_RESET_CYCLES = 2;
-
- /*
- * 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.
- * May be modified by JUnit tests.
- */
- private static final long AUDIT_THREAD_SLEEP_INTERVAL_MS = 5000L;
-
- /*
- * String constants.
- */
- private static final String AUDIT_THREAD_MESSAGE = "AuditThread.run: resourceName=";
- private static final String ENTITY_INDEX_MESSAGE = ", entityIndex=";
- private static final String LAST_UPDATED_MESSAGE = ", lastUpdated=";
- private static final String PERSISTENCE_MESSAGE = ", persistenceUnit=";
-
- /*
- * DB access class.
- */
- private DbDao dbDao;
-
- /*
- * E.g. pdp_xacml
- */
- private String nodeType;
-
- /*
- * Persistence unit for which this audit is being run.
- */
- private String persistenceUnit;
-
- /*
- * Name of this resource
- */
- private String resourceName;
-
- /*
- * E.g. DB_DRIVER, SITE_NAME, NODE_TYPE
- */
- private Properties properties;
-
- /*
- * See IntegrityAudit class for usage.
- */
- private int integrityAuditPeriodSeconds;
-
- /*
- * The containing IntegrityAudit instance
- */
- private IntegrityAudit integrityAudit;
-
- /*
- * Used to create a list that is sorted lexicographically by resourceName.
- */
- Comparator<IntegrityAuditEntity> comparator = (r1, r2) -> r1.getResourceName().compareTo(r2.getResourceName());
-
- /**
- * AuditThread constructor.
- *
- * @param resourceName the resource name
- * @param persistenceUnit the persistence unit
- * @param properties the properties
- * @param integrityAuditPeriodSeconds the integrity audit period in seconds
- * @param integrityAudit the integrity audit
- * @throws IntegrityAuditException if an error occurs
- */
- public AuditThread(String resourceName, String persistenceUnit, Properties properties,
- int integrityAuditPeriodSeconds, IntegrityAudit integrityAudit) throws IntegrityAuditException {
-
- this.resourceName = resourceName;
- this.persistenceUnit = persistenceUnit;
- this.properties = properties;
- this.integrityAuditPeriodSeconds = integrityAuditPeriodSeconds;
- this.integrityAudit = integrityAudit;
-
- /*
- * The DbDao Constructor registers this node in the IntegrityAuditEntity table. Each
- * resource (node) inserts its own name, persistenceUnit, DB access properties and other
- * pertinent properties in the table. This allows the audit on each node to compare its own
- * version of the entities for the persistenceUnit in question with the versions from all
- * other nodes of similar type.
- */
- dbDao = new DbDao(this.resourceName, this.persistenceUnit, this.properties);
- this.nodeType = properties.getProperty(IntegrityAuditProperties.NODE_TYPE).toLowerCase();
-
- }
-
- @Override
- public void run() {
-
- logger.info("AuditThread.run: Entering");
-
- try {
- // for junit testing
- runStarted();
-
- /*
- * Triggers change in designation, unless no other viable candidate.
- */
- runUntilInterrupted();
-
- } catch (InterruptedException e) {
- handleAuditLoopException(e);
- Thread.currentThread().interrupt();
-
- } catch (Exception e) {
- handleAuditLoopException(e);
- }
-
- dbDao.destroy();
-
- logger.info("AuditThread.run: Exiting");
- }
-
- private void handleAuditLoopException(Exception exception) {
- String msg = "AuditThread.run: Could not start audit loop. Exception thrown; message=" + exception.getMessage();
- logger.error(MessageCodes.EXCEPTION_ERROR, exception, msg);
- integrityAudit.setThreadInitialized(false);
- }
-
- private void runUntilInterrupted() throws InterruptedException {
- var auditCompleted = false;
-
- var dbAudit = new DbAudit(dbDao);
-
- IntegrityAuditEntity entityCurrentlyDesignated;
- IntegrityAuditEntity thisEntity;
- integrityAudit.setThreadInitialized(true); // An exception will set it to false
-
- var interrupted = false;
-
- while (!interrupted) {
- try {
- /*
- * It may have been awhile since we last cycled through this loop, so refresh
- * the list of IntegrityAuditEntities.
- */
- List<IntegrityAuditEntity> integrityAuditEntityList = getIntegrityAuditEntityList();
-
- /*
- * We could've set entityCurrentlyDesignated as a side effect of
- * getIntegrityAuditEntityList(), but then we would've had to make
- * entityCurrentlyDesignated a class level attribute. Using this approach, we
- * can keep it local to the run() method.
- */
- entityCurrentlyDesignated = getEntityCurrentlyDesignated(integrityAuditEntityList);
-
- /*
- * Need to refresh thisEntity each time through loop, because we need a fresh
- * version of lastUpdated.
- */
- thisEntity = getThisEntity(integrityAuditEntityList);
-
- /*
- * If we haven't done the audit yet, note that we're current and see if we're
- * designated.
- */
- auditCompleted = doAudit(auditCompleted, dbAudit, entityCurrentlyDesignated, thisEntity,
- integrityAuditEntityList);
-
- /*
- * If we've just run audit, sleep per the integrity_audit_period_seconds
- * property, otherwise just sleep the normal interval.
- */
- sleepAfterAudit(auditCompleted);
-
- } catch (Exception e) {
- if (isInterruptedException(e)) {
- String msg = "AuditThread.run loop - Exception thrown: " + e.getMessage() + "; Stopping.";
- logger.error(MessageCodes.EXCEPTION_ERROR, e, msg);
- Thread.currentThread().interrupt();
- interrupted = true;
-
- } else {
- String msg = "AuditThread.run loop - Exception thrown: " + e.getMessage()
- + "; Will try audit again in " + integrityAuditPeriodSeconds + " seconds";
- logger.error(MessageCodes.EXCEPTION_ERROR, e, msg);
- // Sleep and try again later
- AuditorTime.getInstance().sleep(integrityAuditPeriodSeconds * 1000L);
- }
- }
- }
- }
-
- private boolean doAudit(boolean auditCompleted, DbAudit dbAudit, IntegrityAuditEntity entityCurrentlyDesignated,
- IntegrityAuditEntity thisEntity, List<IntegrityAuditEntity> integrityAuditEntityList)
- throws IntegrityAuditException {
-
- if (!auditCompleted) {
- dbDao.setLastUpdated();
-
- /*
- * If no current designation or currently designated node is stale, see if
- * we're the next node to be designated.
- */
- if (entityCurrentlyDesignated == null || isStale(entityCurrentlyDesignated)) {
- IntegrityAuditEntity designationCandidate =
- getDesignationCandidate(integrityAuditEntityList);
-
- /*
- * If we're the next node to be designated, run the audit.
- */
- if (designationCandidate.getResourceName().equals(this.resourceName)) {
- runAudit(dbAudit);
- auditCompleted = true;
- } else if (logger.isDebugEnabled()) {
- logger.debug("AuditThread.run: designationCandidate, " + designationCandidate.getResourceName()
- + ", not this entity, " + thisEntity.getResourceName());
- }
-
- /*
- * Application may have been stopped and restarted, in which case we
- * might be designated but auditCompleted will have been reset to false,
- * so account for this.
- */
- } else if (thisEntity.getResourceName().equals(entityCurrentlyDesignated.getResourceName())) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("AuditThread.run: Re-running audit for " + thisEntity.getResourceName());
- }
- runAudit(dbAudit);
- auditCompleted = true;
-
- } else if (logger.isDebugEnabled()) {
- logger.debug("AuditThread.run: Currently designated node, "
- + entityCurrentlyDesignated.getResourceName() + ", not yet stale and not this node");
- }
-
-
- /*
- * Audit already completed on this node, so allow the node to go stale until
- * twice the AUDIT_COMPLETION_PERIOD has elapsed. This should give plenty of
- * time for another node (if another node is out there) to pick up
- * designation.
- */
- } else {
-
- auditCompleted = resetAuditCompleted(auditCompleted, thisEntity);
-
- }
- return auditCompleted;
- }
-
- private void sleepAfterAudit(boolean auditCompleted) throws InterruptedException {
- if (auditCompleted) {
- // for junit testing: indicate that an audit has completed
- auditCompleted();
-
- if (logger.isDebugEnabled()) {
- logger.debug("AuditThread.run: Audit completed; resourceName=" + this.resourceName
- + " sleeping " + integrityAuditPeriodSeconds + "s");
- }
- AuditorTime.getInstance().sleep(integrityAuditPeriodSeconds * 1000L);
- if (logger.isDebugEnabled()) {
- logger.debug(AUDIT_THREAD_MESSAGE + this.resourceName + " awaking from "
- + integrityAuditPeriodSeconds + "s sleep");
- }
-
- } else {
-
- if (logger.isDebugEnabled()) {
- logger.debug(AUDIT_THREAD_MESSAGE + this.resourceName + ": Sleeping "
- + AuditThread.AUDIT_THREAD_SLEEP_INTERVAL_MS + "ms");
- }
- AuditorTime.getInstance().sleep(AuditThread.AUDIT_THREAD_SLEEP_INTERVAL_MS);
- if (logger.isDebugEnabled()) {
- logger.debug(AUDIT_THREAD_MESSAGE + this.resourceName + ": Awaking from "
- + AuditThread.AUDIT_THREAD_SLEEP_INTERVAL_MS + "ms sleep");
- }
-
- }
- }
-
- /**
- * 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;
- }
-
- /**
- * getDesignationCandidate() Using round robin algorithm, gets next candidate to be designated.
- * Assumes list is sorted lexicographically by resourceName.
- */
- private IntegrityAuditEntity getDesignationCandidate(List<IntegrityAuditEntity> integrityAuditEntityList) {
-
- // Note: assumes integrityAuditEntityList is already lexicographically sorted by
- // resourceName
-
- if (logger.isDebugEnabled()) {
- logger.debug("getDesignationCandidate: Entering, integrityAuditEntityList.size()="
- + integrityAuditEntityList.size());
- }
-
- IntegrityAuditEntity thisEntity = null;
-
- var designatedEntityIndex = -1;
- var entityIndex = 0;
- var priorCandidateIndex = -1;
- var subsequentCandidateIndex = -1;
-
- for (IntegrityAuditEntity integrityAuditEntity : integrityAuditEntityList) {
-
- if (logger.isDebugEnabled()) {
- logIntegrityAuditEntity(integrityAuditEntity);
- }
-
- thisEntity = detmEntity(integrityAuditEntity, thisEntity);
-
- if (integrityAuditEntity.isDesignated()) {
- if (logger.isDebugEnabled()) {
- logger.debug("getDesignationCandidate: Currently designated entity resourceName="
- + integrityAuditEntity.getResourceName() + PERSISTENCE_MESSAGE
- + integrityAuditEntity.getPersistenceUnit() + LAST_UPDATED_MESSAGE
- + integrityAuditEntity.getLastUpdated() + ENTITY_INDEX_MESSAGE + entityIndex);
- }
- designatedEntityIndex = entityIndex;
-
- /*
- * Entity not currently designated
- */
- } else if (isStale(integrityAuditEntity)) {
- /*
- * Non-designated entity is stale.
- */
-
- if (logger.isDebugEnabled()) {
- logger.debug("getDesignationCandidate: Entity is stale; resourceName="
- + integrityAuditEntity.getResourceName() + PERSISTENCE_MESSAGE
- + integrityAuditEntity.getPersistenceUnit() + LAST_UPDATED_MESSAGE
- + integrityAuditEntity.getLastUpdated() + ENTITY_INDEX_MESSAGE + entityIndex);
- }
-
- /*
- * Entity is current.
- */
- } else if (designatedEntityIndex == -1) {
- priorCandidateIndex = detmPriorCandidate(entityIndex, integrityAuditEntity, priorCandidateIndex);
-
- } else {
- subsequentCandidateIndex =
- detmSubsequentCandidate(entityIndex, integrityAuditEntity, subsequentCandidateIndex);
- }
-
- entityIndex++;
-
- } // end for loop
-
- return detmDesignationCandidate(integrityAuditEntityList, thisEntity, priorCandidateIndex,
- subsequentCandidateIndex);
- }
-
- private IntegrityAuditEntity detmEntity(IntegrityAuditEntity integrityAuditEntity,
- IntegrityAuditEntity thisEntity) {
- if (integrityAuditEntity.getResourceName().equals(this.resourceName)) {
- if (logger.isDebugEnabled()) {
- logger.debug("getDesignationCandidate: thisEntity=" + integrityAuditEntity.getResourceName());
- }
- thisEntity = integrityAuditEntity;
- }
- return thisEntity;
- }
-
- private int detmPriorCandidate(int entityIndex, IntegrityAuditEntity integrityAuditEntity,
- int priorCandidateIndex) {
- if (priorCandidateIndex == -1) {
- if (logger.isDebugEnabled()) {
- logger.debug("getDesignationCandidate: Prior candidate found, resourceName="
- + integrityAuditEntity.getResourceName() + PERSISTENCE_MESSAGE
- + integrityAuditEntity.getPersistenceUnit() + LAST_UPDATED_MESSAGE
- + integrityAuditEntity.getLastUpdated() + ENTITY_INDEX_MESSAGE + entityIndex);
- }
- priorCandidateIndex = entityIndex;
- } else {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "getDesignationCandidate: Prior entity current but prior candidate already "
- + "found; resourceName=" + integrityAuditEntity.getResourceName()
- + PERSISTENCE_MESSAGE + integrityAuditEntity.getPersistenceUnit()
- + LAST_UPDATED_MESSAGE + integrityAuditEntity.getLastUpdated()
- + ENTITY_INDEX_MESSAGE + entityIndex);
- }
- }
- return priorCandidateIndex;
- }
-
- private int detmSubsequentCandidate(int entityIndex, IntegrityAuditEntity integrityAuditEntity,
- int subsequentCandidateIndex) {
- if (subsequentCandidateIndex == -1) {
- if (logger.isDebugEnabled()) {
- logger.debug("getDesignationCandidate: Subsequent candidate found, resourceName="
- + integrityAuditEntity.getResourceName() + PERSISTENCE_MESSAGE
- + integrityAuditEntity.getPersistenceUnit() + LAST_UPDATED_MESSAGE
- + integrityAuditEntity.getLastUpdated() + ENTITY_INDEX_MESSAGE + entityIndex);
- }
- subsequentCandidateIndex = entityIndex;
- } else {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "getDesignationCandidate: Subsequent entity current but subsequent candidate "
- + "already found; resourceName="
- + integrityAuditEntity.getResourceName() + PERSISTENCE_MESSAGE
- + integrityAuditEntity.getPersistenceUnit() + LAST_UPDATED_MESSAGE
- + integrityAuditEntity.getLastUpdated() + ENTITY_INDEX_MESSAGE
- + entityIndex);
- }
- }
- return subsequentCandidateIndex;
- }
-
- private IntegrityAuditEntity detmDesignationCandidate(List<IntegrityAuditEntity> integrityAuditEntityList,
- IntegrityAuditEntity thisEntity, int priorCandidateIndex, int subsequentCandidateIndex) {
- IntegrityAuditEntity designationCandidate;
- /*
- * Per round robin algorithm, if a current entity is found that is lexicographically after
- * the currently designated entity, this entity becomes the designation candidate. If no
- * current entity is found that is lexicographically after currently designated entity, we
- * cycle back to beginning of list and pick the first current entity as the designation
- * candidate.
- */
- if (subsequentCandidateIndex != -1) {
- designationCandidate = integrityAuditEntityList.get(subsequentCandidateIndex);
- if (logger.isDebugEnabled()) {
- logger.debug("getDesignationCandidate: Exiting and returning subsequent designationCandidate="
- + designationCandidate.getResourceName());
- }
- } else {
- if (priorCandidateIndex != -1) {
- designationCandidate = integrityAuditEntityList.get(priorCandidateIndex);
- if (logger.isDebugEnabled()) {
- logger.debug("getDesignationCandidate: Exiting and returning prior designationCandidate="
- + designationCandidate.getResourceName());
- }
- } else if (thisEntity != null) {
- logger.debug("getDesignationCandidate: No subsequent or prior candidate found; designating thisEntity, "
- + "resourceName=" + thisEntity.getResourceName());
- designationCandidate = thisEntity;
- } else {
- // this shouldn't happen, but adding it to make sonar happy
- logger.debug("getDesignationCandidate: No entities available");
- designationCandidate = null;
- }
- }
-
- return designationCandidate;
- }
-
- /**
- * getEntityCurrentlyDesignated() Returns entity that is currently designated.
- *
- * @param integrityAuditEntityList the integrity audit entity list
- * @return the currently designated integrity audit entity
- */
- private IntegrityAuditEntity getEntityCurrentlyDesignated(List<IntegrityAuditEntity> integrityAuditEntityList) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("getEntityCurrentlyDesignated: Entering, integrityAuditEntityList.size="
- + integrityAuditEntityList.size());
- }
-
- IntegrityAuditEntity entityCurrentlyDesignated = null;
-
- for (IntegrityAuditEntity integrityAuditEntity : integrityAuditEntityList) {
-
- if (integrityAuditEntity.isDesignated()) {
- if (logger.isDebugEnabled()) {
- logger.debug("getEntityCurrentlyDesignated: Currently designated entity resourceName="
- + integrityAuditEntity.getResourceName() + PERSISTENCE_MESSAGE
- + integrityAuditEntity.getPersistenceUnit() + LAST_UPDATED_MESSAGE
- + integrityAuditEntity.getLastUpdated());
- }
- entityCurrentlyDesignated = integrityAuditEntity;
- }
-
- } // end for loop
-
- if (logger.isDebugEnabled()) {
- if (entityCurrentlyDesignated != null) {
- logger.debug("getEntityCurrentlyDesignated: Exiting and returning entityCurrentlyDesignated="
- + entityCurrentlyDesignated.getResourceName());
- } else {
- logger.debug("getEntityCurrentlyDesignated: Exiting and returning entityCurrentlyDesignated="
- + entityCurrentlyDesignated);
- }
- }
- return entityCurrentlyDesignated;
-
- }
-
- /**
- * getIntegrityAuditEnityList gets the list of IntegrityAuditEntity.
- *
- * @return the list of IntegrityAuditEntity
- * @throws DbDaoTransactionException if an error occurs getting the list of IntegrityAuditEntity
- */
- private List<IntegrityAuditEntity> getIntegrityAuditEntityList() throws DbDaoTransactionException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("getIntegrityAuditEntityList: Entering");
- }
-
- /*
- * Get all records for this nodeType and persistenceUnit and then sort them
- * lexicographically by resourceName. Get index of designated entity, if any.
- */
- /*
- * Sorted list of entities for a particular nodeType and persistenceUnit.
- */
- List<IntegrityAuditEntity> integrityAuditEntityList =
- dbDao.getIntegrityAuditEntities(this.persistenceUnit, this.nodeType);
- var listSize = integrityAuditEntityList.size();
- if (logger.isDebugEnabled()) {
- logger.debug("getIntegrityAuditEntityList: Got " + listSize + " IntegrityAuditEntity records");
- }
- Collections.sort(integrityAuditEntityList, comparator);
-
- if (logger.isDebugEnabled()) {
- logger.debug(
- "getIntegrityAuditEntityList: Exiting and returning integrityAuditEntityList, size=" + listSize);
- }
- return integrityAuditEntityList;
-
- }
-
-
- /**
- * Returns the IntegrityAuditEntity for this entity.
- *
- * @param integrityAuditEntityList the list of IntegrityAuditEntity
- * @return the IntegrityAuditEntity for this entity
- */
- private IntegrityAuditEntity getThisEntity(List<IntegrityAuditEntity> integrityAuditEntityList) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("getThisEntity: Entering, integrityAuditEntityList.size=" + integrityAuditEntityList.size());
- }
-
- IntegrityAuditEntity thisEntity = null;
-
- for (IntegrityAuditEntity integrityAuditEntity : integrityAuditEntityList) {
-
- if (integrityAuditEntity.getResourceName().equals(this.resourceName)) {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "getThisEntity: For this entity, resourceName=" + integrityAuditEntity.getResourceName()
- + PERSISTENCE_MESSAGE + integrityAuditEntity.getPersistenceUnit()
- + LAST_UPDATED_MESSAGE + integrityAuditEntity.getLastUpdated());
- }
- thisEntity = integrityAuditEntity;
- }
-
- } // end for loop
-
- if (logger.isDebugEnabled()) {
- if (thisEntity != null) {
- logger.debug("getThisEntity: Exiting and returning thisEntity=" + thisEntity.getResourceName());
- } else {
- logger.debug("getThisEntity: Exiting and returning thisEntity=" + thisEntity);
- }
- }
- return thisEntity;
-
- }
-
-
- /**
- * Returns false if the lastUpdated time for the record in question is more 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 the integrityAuditEntity
- * @return false if the lastUpdated time for the record in question is more than
- * auditCompletionIntervalMillis seconds ago
- */
- private boolean isStale(IntegrityAuditEntity integrityAuditEntity) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("isStale: Entering, resourceName=" + integrityAuditEntity.getResourceName()
- + PERSISTENCE_MESSAGE + integrityAuditEntity.getPersistenceUnit() + LAST_UPDATED_MESSAGE
- + integrityAuditEntity.getLastUpdated());
- }
-
- var stale = false;
-
- var currentTime = AuditorTime.getInstance().getDate();
- var lastUpdated = integrityAuditEntity.getLastUpdated();
-
- /*
- * If lastUpdated is null, we assume that the audit never ran for that node.
- */
- long lastUpdatedTime = 0;
- if (lastUpdated != null) {
- lastUpdatedTime = lastUpdated.getTime();
- }
- long timeDifference = currentTime.getTime() - lastUpdatedTime;
- if (timeDifference > AUDIT_COMPLETION_INTERVAL) {
- stale = true;
- }
-
- if (logger.isDebugEnabled()) {
- logger.debug("isStale: Exiting and returning stale=" + stale + ", timeDifference=" + timeDifference);
- }
-
- return stale;
- }
-
- private void logIntegrityAuditEntity(IntegrityAuditEntity integrityAuditEntity) {
-
- logger.debug("logIntegrityAuditEntity: id=" + integrityAuditEntity.getId() + ", jdbcDriver="
- + integrityAuditEntity.getJdbcDriver() + ", jdbcPassword=" + integrityAuditEntity.getJdbcPassword()
- + ", jdbcUrl=" + integrityAuditEntity.getJdbcUrl() + ", jdbcUser=" + integrityAuditEntity.getJdbcUser()
- + ", nodeType=" + integrityAuditEntity.getNodeType() + PERSISTENCE_MESSAGE
- + integrityAuditEntity.getPersistenceUnit() + ", resourceName=" + integrityAuditEntity.getResourceName()
- + ", site=" + integrityAuditEntity.getSite() + ", createdDate=" + integrityAuditEntity.getCreatedDate()
- + LAST_UPDATED_MESSAGE + integrityAuditEntity.getLastUpdated() + ", designated="
- + integrityAuditEntity.isDesignated());
- }
-
- /*
- * 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 designation.
- *
- * or
- *
- * 2) We'll run the audit when the round robin comes back to us.
- */
- private boolean resetAuditCompleted(boolean auditCompleted, IntegrityAuditEntity thisEntity) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("resetAuditCompleted: auditCompleted=" + auditCompleted + "; for thisEntity, resourceName="
- + thisEntity.getResourceName() + PERSISTENCE_MESSAGE + thisEntity.getPersistenceUnit()
- + LAST_UPDATED_MESSAGE + thisEntity.getLastUpdated());
- }
-
- long timeDifference;
-
- var currentTime = AuditorTime.getInstance().getDate();
- var lastUpdated = thisEntity.getLastUpdated();
-
- long lastUpdatedTime = lastUpdated.getTime();
- timeDifference = currentTime.getTime() - lastUpdatedTime;
-
- if (timeDifference > (AUDIT_COMPLETION_INTERVAL * AUDIT_RESET_CYCLES)) {
- if (logger.isDebugEnabled()) {
- logger.debug("resetAuditCompleted: Resetting auditCompleted for resourceName=" + this.resourceName);
- }
- auditCompleted = false;
- } else {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "resetAuditCompleted: For resourceName=" + resourceName + ", time since last update is only "
- + timeDifference + "; retaining current value for auditCompleted");
- }
- }
-
- if (logger.isDebugEnabled()) {
- logger.debug("resetAuditCompleted: Exiting and returning auditCompleted=" + auditCompleted
- + ", timeDifference=" + timeDifference);
- }
- return auditCompleted;
- }
-
- private void runAudit(DbAudit dbAudit) throws IntegrityAuditException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("runAudit: Entering, dbAudit=" + dbAudit + "; notifying other resources that resourceName="
- + this.resourceName + " is current");
- }
-
- /*
- * changeDesignated marks all other nodes as non-designated and this node as designated.
- */
- dbDao.changeDesignated(this.resourceName, this.persistenceUnit, this.nodeType);
-
- if (logger.isDebugEnabled()) {
- logger.debug("runAudit: Running audit for persistenceUnit=" + this.persistenceUnit + " on resourceName="
- + this.resourceName);
- }
-
- dbAudit.dbAudit(this.resourceName, this.persistenceUnit, this.nodeType);
-
- if (logger.isDebugEnabled()) {
- logger.debug("runAudit: Exiting");
- }
-
- }
-
- /**
- * Indicates that the {@link #run()} method has started. This method simply returns,
- * and may overridden by junit tests.
- *
- * @throws InterruptedException can be interrupted
- */
- public void runStarted() throws InterruptedException {
- // does nothing
- }
-
- /**
- * Indicates that an audit has completed. This method simply returns, and may
- * overridden by junit tests.
- *
- * @throws InterruptedException can be interrupted
- */
- public void auditCompleted() throws InterruptedException {
- // does nothing
- }
-}
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/AuditorTime.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/AuditorTime.java
deleted file mode 100644
index 5bfedaac..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/AuditorTime.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2018, 2021 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 java.util.function.Supplier;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.onap.policy.common.utils.time.CurrentTime;
-
-/**
- * "Current" time used by IntegrityMonitor classes.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class AuditorTime {
-
- /**
- * Instance to be used.
- */
- private static final CurrentTime currentTime = new CurrentTime();
-
- /**
- * Supplies the instance to be used for accessing the current time. This may be
- * overridden by junit tests to provide a different time instance for each thread when
- * multiple threads are run in parallel.
- */
- private static Supplier<CurrentTime> supplier = () -> currentTime;
-
- /**
- * Get instance.
- *
- * @return the CurrentTime singleton
- */
- public static CurrentTime getInstance() {
- return supplier.get();
- }
-}
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
deleted file mode 100644
index 22ffa08e..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java
+++ /dev/null
@@ -1,503 +0,0 @@
-/*--
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2023 Nordix Foundation.
- * ================================================================================
- * 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 jakarta.persistence.Table;
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-import org.apache.commons.lang3.SerializationUtils;
-import org.apache.commons.lang3.builder.RecursiveToStringStyle;
-import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
-/**
- * class DbAudit does actual auditing of DB tables.
- */
-public class DbAudit {
-
- private static final Logger logger = FlexLogger.getLogger(DbAudit.class);
-
- private static final String COMMA_RESOURCE_NAME = ", resourceName=";
-
- private static final long DB_AUDIT_UPDATE_MS = 5000L;
- private static final long DB_AUDIT_SLEEP_MS = 2000L;
-
- DbDao dbDao = null;
-
- /**
- * Construct an instance with the given DbDao.
- *
- * @param dbDao the DbDao
- */
- public DbAudit(DbDao dbDao) {
-
- logger.debug("Constructor: Entering");
-
- this.dbDao = dbDao;
-
- logger.debug("Constructor: Exiting");
- }
-
- /**
- * dbAudit actually does the audit.
- *
- * @param resourceName the resource name
- * @param persistenceUnit the persistence unit
- * @param nodeType the node type
- * @throws IntegrityAuditException if an error occurs
- */
- public void dbAudit(String resourceName, String persistenceUnit, String nodeType) throws IntegrityAuditException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Entering, resourceName=" + resourceName + ", persistenceUnit=" + persistenceUnit
- + ", nodeType=" + nodeType);
- }
-
- // Get all IntegrityAudit entries so we can get the DB access info
- List<IntegrityAuditEntity> iaeList = dbDao.getIntegrityAuditEntities(persistenceUnit, nodeType);
- if (iaeList == null || iaeList.isEmpty()) {
-
- String msg = "DbAudit: for node " + resourceName + " Found no IntegrityAuditEntity entries";
- logger.error(MessageCodes.ERROR_AUDIT, msg);
- throw new DbAuditException(msg);
-
- } else if (iaeList.size() == 1) {
-
- Long iaeId = null;
- String iaeRn = null;
- String iaeNt = null;
- String iaeS = null;
- for (IntegrityAuditEntity iae : iaeList) {
- iaeId = iae.getId();
- iaeRn = iae.getResourceName();
- iaeNt = iae.getNodeType();
- iaeS = iae.getSite();
- }
- String msg = "DbAudit: Found only one IntegrityAuditEntity entry:" + " ID = " + iaeId + " ResourceName = "
- + iaeRn + " NodeType = " + iaeNt + " Site = " + iaeS;
- logger.warn(msg);
- return;
- }
-
- // Obtain all persistence class names for the PU we are auditing
- Set<String> classNameSet = dbDao.getPersistenceClassNames();
- if (classNameSet == null || classNameSet.isEmpty()) {
-
- String msg = "DbAudit: For node " + resourceName + " Found no persistence class names";
- logger.error(MessageCodes.ERROR_AUDIT, msg);
- throw new DbAuditException(msg);
-
- }
-
- /*
- * Retrieve myIae. We are going to compare the local class entries against all other DB
- * nodes. Since the audit is run in a round-robin, every instance will be compared against
- * every other instance.
- */
- var myIae = dbDao.getMyIntegrityAuditEntity();
-
- if (myIae == null) {
-
- String msg = "DbAudit: Found no IntegrityAuditEntity entry for resourceName: " + resourceName
- + " persistenceUnit: " + persistenceUnit;
- logger.error(MessageCodes.ERROR_AUDIT, msg);
- throw new DbAuditException(msg);
-
- }
- /*
- * This is the map of mismatched entries indexed by className. For each class name there is
- * a list of mismatched entries
- */
- Map<String, Set<Object>> misMatchedMap = new HashMap<>();
-
- compareList(persistenceUnit, iaeList, myIae, classNameSet, misMatchedMap);
-
- // If misMatchedMap is not empty, retrieve the entries in each misMatched list and compare
- // again
- recompareList(resourceName, persistenceUnit, iaeList, myIae, misMatchedMap);
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Exiting");
- }
- }
-
- private void compareList(String persistenceUnit, List<IntegrityAuditEntity> iaeList, IntegrityAuditEntity myIae,
- Set<String> classNameSet, Map<String, Set<Object>> misMatchedMap)
- throws IntegrityAuditException {
-
- // We need to keep track of how long the audit is taking
- long startTime = AuditorTime.getInstance().getMillis();
-
- // Retrieve all instances of the class for each node
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Traversing classNameSet, size=" + classNameSet.size());
- }
- for (String clazzName : classNameSet) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: clazzName=" + clazzName);
- }
-
- // all instances of the class for myIae
- Map<Object, Object> myEntries = dbDao.getAllMyEntries(clazzName);
- // get a map of the objects indexed by id. Does not necessarily have any entries
-
- compareMineWithTheirs(persistenceUnit, iaeList, myIae, misMatchedMap, clazzName, myEntries);
-
- // Time check
- startTime = timeCheck("First", startTime);
- }
-
- // check if misMatchedMap is empty
- if (misMatchedMap.isEmpty()) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Exiting, misMatchedMap is empty");
- }
- } else {
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Doing another comparison; misMatchedMap.size()=" + misMatchedMap.size());
- }
- }
- }
-
- private void compareMineWithTheirs(String persistenceUnit, List<IntegrityAuditEntity> iaeList,
- IntegrityAuditEntity myIae, Map<String, Set<Object>> misMatchedMap, String clazzName,
- Map<Object, Object> myEntries) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Traversing iaeList, size=" + iaeList.size());
- }
- for (IntegrityAuditEntity iae : iaeList) {
- if (iae.getId() == myIae.getId()) {
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: My Id=" + iae.getId() + COMMA_RESOURCE_NAME + iae.getResourceName());
- }
- continue; // no need to compare with self
- }
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Id=" + iae.getId() + COMMA_RESOURCE_NAME + iae.getResourceName());
- }
-
- // get a map of the instances for their iae indexed by id
- Map<Object, Object> theirEntries =
- dbDao.getAllEntries(persistenceUnit, getTheirDaoProperties(iae), clazzName);
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: For persistenceUnit=" + persistenceUnit + ", clazzName=" + clazzName
- + ", theirEntries.size()=" + theirEntries.size());
- }
-
- /*
- * Compare myEntries with theirEntries and get back a set of mismatched IDs.
- * Collect the IDs for the class where a mismatch occurred. We will check them
- * again for all nodes later.
- */
- compareMineWithTheirs(myEntries, theirEntries, clazzName, misMatchedMap);
- }
- }
-
- private void compareMineWithTheirs(Map<Object, Object> myEntries, Map<Object, Object> theirEntries,
- String clazzName, Map<String, Set<Object>> misMatchedMap) {
-
- Set<Object> misMatchedKeySet = compareEntries(myEntries, theirEntries);
- if (misMatchedKeySet.isEmpty()) {
- return;
- }
-
- Set<Object> misMatchedEntry = misMatchedMap.get(clazzName);
- if (misMatchedEntry == null) {
- misMatchedMap.put(clazzName, misMatchedKeySet);
- } else {
- misMatchedEntry.addAll(misMatchedKeySet);
- }
- }
-
- private long timeCheck(String type, long startTime) throws IntegrityAuditException {
- if ((AuditorTime.getInstance().getMillis() - startTime) >= DB_AUDIT_UPDATE_MS) {
- // update the timestamp
- dbDao.setLastUpdated();
- // reset the startTime
- return AuditorTime.getInstance().getMillis();
- } else {
- // sleep a couple seconds to break up the activity
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: " + type + " comparison; sleeping " + DB_AUDIT_SLEEP_MS + "ms");
- }
- sleep();
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: " + type + " comparison; waking from sleep");
- }
- return startTime;
- }
- }
-
- /**
- * Creates properties for the other db node.
- * @param iae target DB node
- * @return DAO properties for the given DB node
- */
- private Properties getTheirDaoProperties(IntegrityAuditEntity iae) {
- var theirProperties = new Properties();
-
- theirProperties.put(IntegrityAuditProperties.DB_DRIVER, iae.getJdbcDriver());
- theirProperties.put(IntegrityAuditProperties.DB_URL, iae.getJdbcUrl());
- theirProperties.put(IntegrityAuditProperties.DB_USER, iae.getJdbcUser());
- theirProperties.put(IntegrityAuditProperties.DB_PWD, iae.getJdbcPassword());
- theirProperties.put(IntegrityAuditProperties.SITE_NAME, iae.getSite());
- theirProperties.put(IntegrityAuditProperties.NODE_TYPE, iae.getNodeType());
-
- return theirProperties;
- }
-
- private void recompareList(String resourceName, String persistenceUnit, List<IntegrityAuditEntity> iaeList,
- IntegrityAuditEntity myIae, Map<String, Set<Object>> misMatchedMap)
- throws IntegrityAuditException {
-
- Set<String> classNameSet;
- long startTime;
- classNameSet = new HashSet<>(misMatchedMap.keySet());
- // We need to keep track of how long the audit is taking
- startTime = AuditorTime.getInstance().getMillis();
-
- // Retrieve all instances of the class for each node
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Second comparison; traversing classNameSet, size=" + classNameSet.size());
- }
-
- var errorCount = 0;
-
- for (String clazzName : classNameSet) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Second comparison; clazzName=" + clazzName);
- }
-
- // all instances of the class for myIae
- Set<Object> keySet = misMatchedMap.get(clazzName);
- Map<Object, Object> myEntries = dbDao.getAllMyEntries(clazzName, keySet);
- // get a map of the objects indexed by id
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Second comparison; traversing iaeList, size=" + iaeList.size());
- }
- errorCount += recompareMineWithTheirs(resourceName, persistenceUnit, iaeList, myIae, clazzName,
- keySet, myEntries);
- // Time check
- startTime = timeCheck("Second", startTime);
- }
-
- if (errorCount > 0) {
- String msg = " DB Audit: " + errorCount
- + " errors found. A large number of errors may indicate DB replication has stopped";
- logger.error(MessageCodes.ERROR_AUDIT, msg);
- }
- }
-
- private int recompareMineWithTheirs(String resourceName, String persistenceUnit, List<IntegrityAuditEntity> iaeList,
- IntegrityAuditEntity myIae, String clazzName, Set<Object> keySet, Map<Object, Object> myEntries)
- throws IntegrityAuditException {
-
- var errorCount = 0;
- for (IntegrityAuditEntity iae : iaeList) {
- if (iae.getId() == myIae.getId()) {
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Second comparison; My Id=" + iae.getId() + COMMA_RESOURCE_NAME
- + iae.getResourceName());
- }
- continue; // no need to compare with self
- }
-
- if (logger.isDebugEnabled()) {
- logger.debug("dbAudit: Second comparison; Id=" + iae.getId() + COMMA_RESOURCE_NAME
- + iae.getResourceName());
- }
-
- // get a map of the instances for their iae indexed by id
- Map<Object, Object> theirEntries =
- dbDao.getAllEntries(persistenceUnit, getTheirDaoProperties(iae), clazzName, keySet);
-
- /*
- * Compare myEntries with theirEntries and get back a set of mismatched IDs.
- * Collect the IDs for the class where a mismatch occurred. We will now write
- * an error log for each.
- */
- errorCount += recompareMineWithTheirs(resourceName, clazzName, myEntries, iae, theirEntries);
- }
- return errorCount;
- }
-
- private int recompareMineWithTheirs(String resourceName, String clazzName, Map<Object, Object> myEntries,
- IntegrityAuditEntity iae, Map<Object, Object> theirEntries) throws IntegrityAuditException {
- Set<Object> misMatchedKeySet = compareEntries(myEntries, theirEntries);
- if (misMatchedKeySet.isEmpty()) {
- return 0;
- }
-
- var keyBuilder = new StringBuilder();
- for (Object key : misMatchedKeySet) {
- keyBuilder.append(key.toString());
- keyBuilder.append(", ");
- }
- writeAuditSummaryLog(clazzName, resourceName, iae.getResourceName(), keyBuilder.toString());
- if (logger.isDebugEnabled()) {
- for (Object key : misMatchedKeySet) {
- writeAuditDebugLog(clazzName, resourceName, iae.getResourceName(), myEntries.get(key),
- theirEntries.get(key));
- }
- }
- return misMatchedKeySet.size();
- }
-
- /**
- * Sleeps a bit.
- *
- * @throws IntegrityAuditException if interrupted
- */
- private void sleep() throws IntegrityAuditException {
- try {
- AuditorTime.getInstance().sleep(DB_AUDIT_SLEEP_MS);
-
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- throw new IntegrityAuditException(e);
- }
- }
-
- /**
- * compareEntries() will compare the lists of entries from the DB.
- *
- * @param myEntries the entries
- * @param theirEntries the entries to compare against myEntries
- * @return the set of differences
- */
- public Set<Object> compareEntries(Map<Object, Object> myEntries, Map<Object, Object> theirEntries) {
- /*
- * Compare the entries for the same key in each of the hashmaps. The comparison will be done
- * by serializing the objects (create a byte array) and then do a byte array comparison. The
- * audit will walk the local repository hash map comparing to the remote cluster hashmap and
- * then turn it around and walk the remote hashmap and look for any entries that are not
- * present in the local cluster hashmap.
- *
- * If the objects are not identical, the audit will put the object IDs on a list to try
- * after completing the audit of the table it is currently working on.
- *
- */
- HashSet<Object> misMatchedKeySet = new HashSet<>();
- for (Entry<Object, Object> ent : myEntries.entrySet()) {
- Object key = ent.getKey();
- byte[] mySerializedEntry = SerializationUtils.serialize((Serializable) ent.getValue());
- byte[] theirSerializedEntry = SerializationUtils.serialize((Serializable) theirEntries.get(key));
- if (!Arrays.equals(mySerializedEntry, theirSerializedEntry)) {
- logger.debug("compareEntries: For myEntries.key=" + key + ", entries do not match");
- misMatchedKeySet.add(key);
- } else {
- logger.debug("compareEntries: For myEntries.key=" + key + ", entries match");
- }
- }
- // now compare it in the other direction to catch entries in their set that is not in my set
- for (Entry<Object, Object> ent : theirEntries.entrySet()) {
- Object key = ent.getKey();
- byte[] mySerializedEntry = SerializationUtils.serialize((Serializable) myEntries.get(key));
- byte[] theirSerializedEntry = SerializationUtils.serialize((Serializable) ent.getValue());
- if (!Arrays.equals(mySerializedEntry, theirSerializedEntry)) {
- logger.debug("compareEntries: For theirEntries.key=" + key + ", entries do not match");
- misMatchedKeySet.add(key);
- } else {
- logger.debug("compareEntries: For theirEntries.key=" + key + ", entries match");
- }
- }
-
- // return a Set of the object IDs
- logger.debug("compareEntries: misMatchedKeySet.size()=" + misMatchedKeySet.size());
- return misMatchedKeySet;
- }
-
- /**
- * writeAuditDebugLog() writes the mismatched entry details to the debug log.
- *
- * @param clazzName the class name
- * @param resourceName1 resource name 1
- * @param resourceName2 resource name 2
- * @param entry1 entry 1
- * @param entry2 entry 2
- * @throws IntegrityAuditException if the given class cannot be found
- */
- public void writeAuditDebugLog(String clazzName, String resourceName1, String resourceName2, Object entry1,
- Object entry2) throws IntegrityAuditException {
- try {
- Class<?> entityClass = Class.forName(clazzName);
- String tableName = entityClass.getAnnotation(Table.class).name();
- String msg = "\nDB Audit Error: " + "\n Table Name: " + tableName
- + "\n Entry 1 (short prefix style): " + resourceName1 + ": "
- + new ReflectionToStringBuilder(entry1, ToStringStyle.SHORT_PREFIX_STYLE)
- + "\n Entry 2 (short prefix style): " + resourceName2 + ": "
- + (entry2 != null
- ? new ReflectionToStringBuilder(entry2, ToStringStyle.SHORT_PREFIX_STYLE).toString()
- : "null")
- + "\n Entry 1 (recursive style): " + resourceName1 + ": "
- + new ReflectionToStringBuilder(entry1, new RecursiveToStringStyle())
- + "\n Entry 2 (recursive style): " + resourceName2 + ": "
- + (entry2 != null
- ? new ReflectionToStringBuilder(entry2, new RecursiveToStringStyle()).toString()
- : "null");
- logger.debug(msg);
-
- } catch (ClassNotFoundException e) {
- throw new IntegrityAuditException(e);
- }
-
- }
-
- /**
- * writeAuditSummaryLog() writes a summary of the DB mismatches to the error log.
- *
- * @param clazzName the name of the class
- * @param resourceName1 resource name 1
- * @param resourceName2 resource name 2
- * @param keys the mismatched entry keys
- * @throws IntegrityAuditException if the given class cannot be found
- */
- public void writeAuditSummaryLog(String clazzName, String resourceName1, String resourceName2, String keys)
- throws IntegrityAuditException {
- try {
- Class<?> entityClass = Class.forName(clazzName);
- String tableName = entityClass.getAnnotation(Table.class).name();
- String msg = " DB Audit Error: Table Name: " + tableName + "; Mismatch between nodes: " + resourceName1
- + " and " + resourceName2 + "; Mismatched entries (keys): " + keys;
- logger.info(msg);
- } catch (ClassNotFoundException e) {
- throw new IntegrityAuditException(e);
- }
- }
-}
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAuditException.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAuditException.java
deleted file mode 100644
index a539f6bd..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAuditException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * ============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;
-
-public class DbAuditException extends IntegrityAuditException {
- private static final long serialVersionUID = 1L;
-
- public DbAuditException() {
- super();
- }
-
- public DbAuditException(String message) {
- super(message);
- }
-
- public DbAuditException(Throwable cause) {
- super(cause);
- }
-
- public DbAuditException(String message, Throwable cause) {
- super(message, cause);
- }
-}
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
deleted file mode 100644
index ad96432d..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDao.java
+++ /dev/null
@@ -1,722 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2023 Nordix Foundation.
- * ================================================================================
- * 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 jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityManagerFactory;
-import jakarta.persistence.EntityTransaction;
-import jakarta.persistence.Persistence;
-import jakarta.persistence.Query;
-import jakarta.persistence.TypedQuery;
-import jakarta.persistence.criteria.CriteriaQuery;
-import jakarta.persistence.criteria.Root;
-import jakarta.persistence.metamodel.ManagedType;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.function.BiConsumer;
-import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
-/**
- * class DbDao provides the inteface to the DBs for the purpose of audits.
- */
-public class DbDao {
- private static final Logger logger = FlexLogger.getLogger();
-
- private String resourceName;
- private String persistenceUnit;
- private String dbDriver;
- private String dbUrl;
- private String dbUser;
- private String siteName;
- private String nodeType;
- private Properties properties = null;
-
- private final EntityManagerFactory emf;
-
- /*
- * Supports designation serialization.
- */
- private static final Object lock = new Object();
-
- /*
- * Common strings.
- */
- private static final String RESOURCE_MESSAGE = "Resource: ";
- private static final String WITH_PERSISTENCE_MESSAGE = " with PersistenceUnit: ";
- private static final String DBDAO_MESSAGE = "DbDao: ";
- private static final String ENCOUNTERED_MESSAGE = "ecountered a problem in execution: ";
-
- /*
- * DB SELECT String.
- */
- private static final String SELECT_STRING = "Select i from IntegrityAuditEntity i "
- + "where i.resourceName=:rn and i.persistenceUnit=:pu";
-
- /**
- * DbDao Constructor.
- *
- * @param resourceName the resource name
- * @param persistenceUnit the persistence unit
- * @param properties the properties
- * @throws IntegrityAuditException if an error occurs
- */
- public DbDao(String resourceName, String persistenceUnit, Properties properties) throws IntegrityAuditException {
- this(resourceName, persistenceUnit, properties, null);
- }
-
- /**
- * DbDao Constructor.
- *
- * @param resourceName the resource name
- * @param persistenceUnit the persistence unit
- * @param properties the properties
- * @param altDbUrl may be {@code null}
- * @throws IntegrityAuditException if an error occurs
- */
- protected DbDao(String resourceName, String persistenceUnit, Properties properties, String altDbUrl)
- throws IntegrityAuditException {
- logger.debug("DbDao contructor: enter");
-
- validateProperties(resourceName, persistenceUnit, properties);
-
- emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
-
- 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 the rseource name
- * @param persistenceUnit the persistence unit
- * @param properties the properties
- * @throws IntegrityAuditPropertiesException if an error occurs
- */
- private void validateProperties(String resourceName, String persistenceUnit, Properties properties)
- throws IntegrityAuditPropertiesException {
- var badparams = new StringBuilder();
- if (IntegrityAudit.parmsAreBad(resourceName, persistenceUnit, properties, badparams)) {
- String msg = "DbDao: Bad parameters: badparams" + badparams;
- throw new IntegrityAuditPropertiesException(msg);
- }
- this.resourceName = resourceName;
- this.persistenceUnit = persistenceUnit;
- this.dbDriver = properties.getProperty(IntegrityAuditProperties.DB_DRIVER).trim();
- this.dbUrl = properties.getProperty(IntegrityAuditProperties.DB_URL).trim();
- this.dbUser = properties.getProperty(IntegrityAuditProperties.DB_USER).trim();
- this.siteName = properties.getProperty(IntegrityAuditProperties.SITE_NAME).trim();
- this.nodeType = properties.getProperty(IntegrityAuditProperties.NODE_TYPE).trim().toLowerCase();
- this.properties = properties;
- logger.debug("DbDao.assignProperties: exit:" + "\nresourceName: " + this.resourceName + "\npersistenceUnit: "
- + this.persistenceUnit + "\nproperties: " + this.properties);
- }
-
- /**
- * getAllMyEntries gets all the DB entries for a particular class.
- *
- * @param className the class name
- * @return all the DB entries for the given class
- */
- public Map<Object, Object> getAllMyEntries(String className) {
- logger.debug("getAllMyEntries: Entering, className=" + className);
- HashMap<Object, Object> resultMap = new HashMap<>();
- var em = emf.createEntityManager();
- try {
- getObjectsFromCriteriaBuilder(className, emf, em, resultMap);
- } catch (Exception e) {
- logger.error("getAllEntries encountered exception: ", e);
- }
- em.close();
- logger.debug("getAllMyEntries: Exit, resultMap.keySet()=" + resultMap.keySet());
- return resultMap;
- }
-
- /**
- * getAllMyEntries gets all entries for a class.
- *
- * @param className the name of the class
- * @param keySet the keys to get the entries for
- * @return the map of requested entries
- */
- public Map<Object, Object> getAllMyEntries(String className, Set<Object> keySet) {
- logger.debug("getAllMyEntries: Entering, className=" + className + ",\n keySet=" + keySet);
-
- HashMap<Object, Object> resultMap = new HashMap<>();
- var em = emf.createEntityManager();
- try {
- Class<?> clazz = Class.forName(className);
- for (Object key : keySet) {
- Object entry = em.find(clazz, key);
- resultMap.put(key, entry);
- }
- } catch (Exception e) {
- logger.error("getAllMyEntries encountered exception: ", e);
- }
- em.close();
-
- logger.debug("getAllMyEntries: Returning resultMap, size=" + resultMap.size());
- return resultMap;
- }
-
- /**
- * getAllEntries gets all entries for a particular persistence unit adn className.
- *
- * @param persistenceUnit the persistence unit
- * @param properties the properties
- * @param className the class name
- * @return the map of entries
- */
- public Map<Object, Object> getAllEntries(String persistenceUnit, Properties properties, String className) {
-
- logger.debug("getAllEntries: Entering, persistenceUnit=" + persistenceUnit + ",\n className=" + className);
- HashMap<Object, Object> resultMap = new HashMap<>();
-
- var theEmf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- var em = theEmf.createEntityManager();
-
- try {
- getObjectsFromCriteriaBuilder(className, theEmf, em, resultMap);
- } catch (Exception e) {
- logger.error("getAllEntries encountered exception:", e);
- }
- em.close();
- theEmf.close();
-
- logger.debug("getAllEntries: Returning resultMap, size=" + resultMap.size());
-
- return resultMap;
- }
-
-
- /**
- * getAllEntries gets all entries for a persistence unit.
- *
- * @param persistenceUnit the persistence unit
- * @param properties the properties
- * @param className the class name
- * @param keySet the keys
- * @return the map of entries
- */
-
- public Map<Object, Object> getAllEntries(String persistenceUnit, Properties properties, String className,
- Set<Object> keySet) {
- logger.debug("getAllEntries: Entering, persistenceUnit=" + persistenceUnit + ",\n properties= " + properties
- + ",\n className=" + className + ",\n keySet= " + keySet);
- var theEmf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
- var em = theEmf.createEntityManager();
- HashMap<Object, Object> resultMap = new HashMap<>();
- try {
- Class<?> clazz = Class.forName(className);
- for (Object key : keySet) {
- Object entry = em.find(clazz, key);
- resultMap.put(key, entry);
- }
- } catch (Exception e) {
- String msg = "getAllEntries encountered exception: " + e;
- logger.error(msg, e);
- }
- em.close();
- theEmf.close();
- logger.debug("getAllEntries: Exit, resultMap, size=" + resultMap.size());
- return resultMap;
- }
-
- /**
- * getIntegrityAuditEntities() Get all the IntegrityAuditEntities for a particular persistence
- * unit and node type.
- *
- * @param persistenceUnit the persistence unit
- * @param nodeType the node type
- * @return the list of IntegrityAuditEntity
- * @throws DbDaoTransactionException if an error occurs
- */
- @SuppressWarnings("unchecked")
- public List<IntegrityAuditEntity> getIntegrityAuditEntities(String persistenceUnit, String nodeType)
- throws DbDaoTransactionException {
- logger.debug("getIntegrityAuditEntities: Entering, persistenceUnit=" + persistenceUnit + ",\n nodeType= "
- + nodeType);
- try {
- List<IntegrityAuditEntity> iaeList;
- try (var 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
- var iaequery = em
- .createQuery("Select i from IntegrityAuditEntity i where i.persistenceUnit=:pu and i.nodeType=:nt");
- iaequery.setParameter("pu", persistenceUnit);
- iaequery.setParameter("nt", nodeType);
-
- iaeList = iaequery.getResultList();
-
- // commit transaction
- et.commit();
- }
- logger.debug("getIntegrityAuditEntities: Exit, iaeList=" + iaeList);
- return iaeList;
- } catch (Exception e) {
- String msg = DBDAO_MESSAGE + "getIntegrityAuditEntities() " + ENCOUNTERED_MESSAGE;
- logger.error(msg, e);
- throw new DbDaoTransactionException(e);
- }
-
- }
-
- /**
- * getMyIntegrityAuditEntity() gets my IntegrityAuditEntity.
- *
- * @return the IntegrityAuditEntity
- * @throws DbDaoTransactionException if an error occurs
- */
- public IntegrityAuditEntity getMyIntegrityAuditEntity() throws DbDaoTransactionException {
-
- return updateIae("getMyIntegrityAuditEntity", this.resourceName, this.persistenceUnit, (em, iae) -> {
-
- if (iae != null) {
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info(RESOURCE_MESSAGE + this.resourceName + WITH_PERSISTENCE_MESSAGE + this.persistenceUnit
- + " exists");
- } else {
- // If it does not exist, log an error
- logger.error("Attempting to setLastUpdated" + " on an entry that does not exist: resource "
- + this.resourceName + WITH_PERSISTENCE_MESSAGE + this.persistenceUnit);
- }
- });
- }
-
-
- /**
- * getIntegrityAuditEntity() gets the IntegrityAuditEntity with a particular ID.
- *
- * @param id the ID
- * @return the IntegrityAuditEntity
- * @throws DbDaoTransactionException if an error occurs
- */
- public IntegrityAuditEntity getIntegrityAuditEntity(long id) throws DbDaoTransactionException {
- try {
- IntegrityAuditEntity iae;
- try (var em = emf.createEntityManager()) {
-
- // Start a transaction
- EntityTransaction et = em.getTransaction();
-
- et.begin();
-
- iae = em.find(IntegrityAuditEntity.class, id);
-
- et.commit();
- }
-
- return iae;
- } catch (Exception e) {
- String msg = DBDAO_MESSAGE + "getIntegrityAuditEntity() " + ENCOUNTERED_MESSAGE;
- logger.error(msg + e);
- throw new DbDaoTransactionException(e);
- }
- }
-
- /**
- * getPersistenceClassNames() gets all the persistence class names.
- *
- * @return the persistence class names
- */
- public Set<String> getPersistenceClassNames() {
- logger.debug("DbDao: getPersistenceClassNames() entry");
- HashSet<String> returnList = new HashSet<>();
- final var mm = emf.getMetamodel();
- logger.debug("\n" + persistenceUnit + " persistence unit classes:");
- for (final ManagedType<?> managedType : mm.getManagedTypes()) {
- Class<?> clazz = managedType.getJavaType();
- logger.debug(" " + clazz.getSimpleName());
- returnList.add(clazz.getName()); // the full class name needed to make a query using jpa
- }
- logger.debug("DbDao: getPersistenceClassNames() exit");
- return returnList;
- }
-
- /**
- * 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(String altDbUrl) throws DbDaoTransactionException {
-
- updateIae("register", this.resourceName, this.persistenceUnit, (em, iae) -> {
- IntegrityAuditEntity iae2 = iae;
-
- // If it already exists, we just want to update the properties and lastUpdated date
- if (iae2 != null) {
- // refresh the object from DB in case cached data was returned
- em.refresh(iae2);
- logger.info(RESOURCE_MESSAGE + this.resourceName + WITH_PERSISTENCE_MESSAGE + this.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 " + resourceName + WITH_PERSISTENCE_MESSAGE + this.persistenceUnit
- + " to IntegrityAuditEntity table");
- iae2 = new IntegrityAuditEntity();
- iae2.setResourceName(this.resourceName);
- iae2.setPersistenceUnit(this.persistenceUnit);
- iae2.setDesignated(false);
- }
-
- register2(altDbUrl, em, iae2);
- });
-
- }
-
- private void register2(String altDbUrl, EntityManager em, IntegrityAuditEntity iae) {
- // update/set properties in entry
- iae.setSite(this.siteName);
- iae.setNodeType(this.nodeType);
- iae.setJdbcDriver(this.dbDriver);
- iae.setJdbcPassword(properties.getProperty(IntegrityAuditProperties.DB_PWD).trim());
- iae.setJdbcUrl(altDbUrl == null ? this.dbUrl : altDbUrl);
- iae.setJdbcUser(dbUser);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
- }
-
- public void setDesignated(boolean designated) throws DbDaoTransactionException {
- setDesignated(this.resourceName, this.persistenceUnit, designated);
- }
-
- /**
- * Set designated.
- *
- * @param resourceName the resource name
- * @param persistenceUnit the persistence unit
- * @param desig true if is designated
- * @throws DbDaoTransactionException if an error occurs
- */
- public void setDesignated(String resourceName, String persistenceUnit, boolean desig)
- throws DbDaoTransactionException {
- logger.debug("setDesignated: enter, resourceName: " + resourceName + ", persistenceUnit: " + persistenceUnit
- + ", designated: " + desig);
-
- updateIae("setDesignated", resourceName, persistenceUnit, (em, iae) -> {
-
- if (iae != null) {
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info(RESOURCE_MESSAGE + resourceName + WITH_PERSISTENCE_MESSAGE + persistenceUnit
- + " exists and designated be updated");
- iae.setDesignated(desig);
-
- em.persist(iae);
- // flush to the DB
- em.flush();
- } else {
- // If it does not exist, log an error
- logger.error("Attempting to setDesignated(" + desig + ") on an entry that does not exist:"
- + " resource " + resourceName + WITH_PERSISTENCE_MESSAGE + persistenceUnit);
- }
- });
-
- }
-
- /**
- * Queries for an audit entity and then updates it using an "updater" function.
- *
- * @param methodName name of the method that invoked this
- * @param resourceName the resource name
- * @param persistenceUnit the persistence unit
- * @param updater function to update the entity; the argument will be the entity to be
- * updated, or {@code null} if the entity is not found
- * @return the entity that was found, or {@code null} if the entity is not found
- * @throws DbDaoTransactionException if an error occurs
- */
- private IntegrityAuditEntity updateIae(String methodName, String resourceName, String persistenceUnit,
- BiConsumer<EntityManager, IntegrityAuditEntity> updater)
- throws DbDaoTransactionException {
- try {
-
- IntegrityAuditEntity iae;
- try (var 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
- TypedQuery<IntegrityAuditEntity> iaequery = em.createQuery(SELECT_STRING, IntegrityAuditEntity.class);
- iaequery.setParameter("rn", resourceName);
- iaequery.setParameter("pu", persistenceUnit);
-
- List<IntegrityAuditEntity> iaeList = iaequery.getResultList();
-
- if (!iaeList.isEmpty()) {
- // ignores multiple results
- iae = iaeList.get(0);
-
- } else {
- // If it does not exist
- iae = null;
- }
-
- updater.accept(em, iae);
-
- // close the transaction
- et.commit();
- }
-
- return iae;
-
- } catch (Exception e) {
- String msg = DBDAO_MESSAGE + methodName + "() " + ENCOUNTERED_MESSAGE;
- logger.error(msg + e);
- throw new DbDaoTransactionException(e);
- }
-
- }
-
- /**
- * Set last updated.
- *
- * @throws DbDaoTransactionException if an error occurs
- */
- public void setLastUpdated() throws DbDaoTransactionException {
- logger.debug("setLastUpdated: enter, resourceName: " + this.resourceName + ", persistenceUnit: "
- + this.persistenceUnit);
-
- updateIae("setLastUpdated", this.resourceName, this.persistenceUnit, (em, iae) -> {
-
- if (iae != null) {
- // refresh the object from DB in case cached data was returned
- em.refresh(iae);
- logger.info(RESOURCE_MESSAGE + this.resourceName + WITH_PERSISTENCE_MESSAGE + this.persistenceUnit
- + " exists and lastUpdated be updated");
- iae.setLastUpdated(AuditorTime.getInstance().getDate());
-
- em.persist(iae);
- // flush to the DB
- em.flush();
- } else {
- // If it does not exist, log an error
- logger.error("Attempting to setLastUpdated" + " on an entry that does not exist:" + " resource "
- + this.resourceName + WITH_PERSISTENCE_MESSAGE + this.persistenceUnit);
- }
- });
- }
-
- /**
- * Normally this method should only be used in a JUnit test environment. Manually deletes all
- * PDP records in droolspdpentity table.
- */
- public int deleteAllIntegrityAuditEntities() throws DbDaoTransactionException {
-
- try {
-
- if (!IntegrityAudit.isUnitTesting()) {
- String msg = DBDAO_MESSAGE + "deleteAllIntegrityAuditEntities() "
- + "should only be invoked during JUnit testing";
- logger.error(msg);
- throw new DbDaoTransactionException(msg);
- }
-
- int returnCode;
- try (var 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
- var iaequery = em.createQuery("Delete from IntegrityAuditEntity");
-
- returnCode = iaequery.executeUpdate();
-
- // commit transaction
- et.commit();
- }
-
- logger.info("deleteAllIntegrityAuditEntities: returnCode=" + returnCode);
-
- return returnCode;
-
- } catch (Exception e) {
- String msg = DBDAO_MESSAGE + "deleteAllIntegrityAuditEntities() " + "encountered a problem in execution: ";
- logger.error(msg + e);
- throw new DbDaoTransactionException(e);
- }
-
- }
-
- /**
- * Changes designation to specified resourceName
- *
- * <p>static lock object in conjunction with synchronized keyword ensures that designation
- * changes are done serially within a resource. I.e. static lock ensures that multiple
- * instantiations of DbDao don't interleave changeDesignated() invocations and potentially
- * produce simultaneous designations.
- *
- * <p>Optimistic locking (the default, versus pessimistic) is sufficient to avoid simultaneous
- * designations from interleaved changeDesignated() invocations from different resources
- * (entities), because it prevents "dirty" and "non-repeatable" reads.
- *
- * <p>See www.objectdb.com/api/java/jpa/LockModeType
- *
- * <p>and
- *
- * <p>stackoverflow.com/questions/2120248/how-to-synchronize-a-static-
- * variable-among-threads-running-different-instances-o
- */
- public void changeDesignated(String resourceName, String persistenceUnit, String nodeType)
- throws DbDaoTransactionException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("changeDesignated: Entering, resourceName=" + resourceName + ", persistenceUnit="
- + persistenceUnit + ", nodeType=" + nodeType);
- }
-
- long startTime = AuditorTime.getInstance().getMillis();
-
- synchronized (lock) {
- try (var em = emf.createEntityManager()) {
- try {
- em.getTransaction().begin();
-
- /*
- * Define query
- */
- var query = em.createQuery(
- "Select i from IntegrityAuditEntity i where i.persistenceUnit=:pu and i.nodeType=:nt");
- query.setParameter("pu", persistenceUnit);
- query.setParameter("nt", nodeType);
-
- /*
- * Execute query using pessimistic write lock. This ensures that if anyone else is
- * currently reading the records we'll throw a LockTimeoutException.
- */
- setDesignatedEntity(resourceName, query);
-
- if (logger.isDebugEnabled()) {
- logger.debug("changeDesignated: Committing designation to resourceName=" + resourceName);
- }
- em.getTransaction().commit();
-
- /*
- * If we get a LockTimeoutException, no harm done really. We'll probably be
- * successful on the next attempt. The odds of another DbDao instance on this entity
- * or another entity attempting a simultaneous IntegrityAuditEntity table
- * read/update are pretty slim (we're only in this method for two or three
- * milliseconds)
- */
- } catch (Exception e) {
- String errorMsg;
- try {
- em.getTransaction().rollback();
- errorMsg = "DbDao: changeDesignated() caught Exception, message=" + e.getMessage();
- } catch (Exception rollbackException) {
- errorMsg = "DbDao: changeDesignated() caught Exception, message="
- + e.getMessage() + ". Error rolling back transaction.";
- }
- logger.error(errorMsg + e);
- throw new DbDaoTransactionException(errorMsg, e);
- }
- }
-
- } // end synchronized block
-
- if (logger.isDebugEnabled()) {
- logger.debug("changeDesignated: Exiting; time expended="
- + (AuditorTime.getInstance().getMillis() - startTime) + "ms");
- }
-
- }
-
- private void setDesignatedEntity(String resourceName, Query query) {
- for (Object o : query.getResultList()) {
- if (!(o instanceof IntegrityAuditEntity integrityAuditEntity)) {
- continue;
- }
-
- if (integrityAuditEntity.getResourceName().equals(resourceName)) {
- if (logger.isDebugEnabled()) {
- logger.debug("changeDesignated: Designating resourceName="
- + integrityAuditEntity.getResourceName());
- }
- integrityAuditEntity.setDesignated(true);
- } else {
- if (logger.isDebugEnabled()) {
- logger.debug("changeDesignated: Removing designation from resourceName="
- + integrityAuditEntity.getResourceName());
- }
- integrityAuditEntity.setDesignated(false);
- }
- }
- }
-
- /**
- * Collects all objects from a criteria builder based on className.
- *
- * @param className type of objects for resultMap
- * @param emf the entity manager factory to be used
- * @param em entity manager to be used
- * @param resultMap the result map for objects queried
- * @throws ClassNotFoundException if class for criteria builder doesn't exist
- */
- private void getObjectsFromCriteriaBuilder(String className, EntityManagerFactory emf, EntityManager em,
- HashMap<Object, Object> resultMap)
- throws ClassNotFoundException {
- var cb = em.getCriteriaBuilder();
- CriteriaQuery<Object> cq = cb.createQuery();
- Root<?> rootEntry = cq.from(Class.forName(className));
- CriteriaQuery<Object> all = cq.select(rootEntry);
- TypedQuery<Object> allQuery = em.createQuery(all);
- List<Object> objectList = allQuery.getResultList();
- // Now create the map
-
- var util = emf.getPersistenceUnitUtil();
- for (Object o : objectList) {
- Object key = util.getIdentifier(o);
- resultMap.put(key, o);
- }
- }
-
-}
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDaoTransactionException.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDaoTransactionException.java
deleted file mode 100644
index dc1c6f14..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDaoTransactionException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * ============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;
-
-public class DbDaoTransactionException extends IntegrityAuditException {
- private static final long serialVersionUID = 1L;
-
- public DbDaoTransactionException() {
- super();
- }
-
- public DbDaoTransactionException(String message) {
- super(message);
- }
-
- public DbDaoTransactionException(Throwable cause) {
- super(cause);
- }
-
- public DbDaoTransactionException(String message, Throwable cause) {
- super(message, cause);
- }
-}
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
deleted file mode 100644
index 66ab307c..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAudit.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2019, 2021 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 java.util.Properties;
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.commons.lang3.StringUtils;
-import org.onap.policy.common.ia.IntegrityAuditProperties.NodeTypeEnum;
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
-/**
- * class IntegrityAudit Audits all persisted entities for all resource clusters for all sites and
- * logs any anomalies.
- */
-public class IntegrityAudit {
-
- private static final Logger logger = FlexLogger.getLogger(IntegrityAudit.class);
-
- @Getter
- @Setter
- private static boolean unitTesting;
-
- @Getter
- private boolean threadInitialized = false;
-
- AuditThread auditThread = null;
-
- private String persistenceUnit;
- private Properties properties;
- private String resourceName;
-
-
- /*
- * 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
- * integrityAuditPeriodSeconds == 0 indicates the audit is to run continuously
- * integrityAuditPeriodSeconds > 0 indicates the audit is to run at most once during the
- * indicated period
- *
- */
- @Getter
- private int integrityAuditPeriodSeconds;
-
- /**
- * IntegrityAudit constructor.
- *
- * @param resourceName the resource name
- * @param persistenceUnit the persistence unit
- * @param properties the properties
- * @throws IntegrityAuditException if an error occurs
- */
- public IntegrityAudit(String resourceName, String persistenceUnit, Properties properties)
- throws IntegrityAuditException {
-
- logger.info("Constructor: Entering and checking for nulls");
- var parmList = new StringBuilder();
- if (parmsAreBad(resourceName, persistenceUnit, properties, parmList)) {
- logger.error("Constructor: Parms contain nulls; cannot run audit for resourceName=" + resourceName
- + ", persistenceUnit=" + persistenceUnit + ", bad parameters: " + parmList);
- throw new IntegrityAuditException("Constructor: Parms contain nulls; cannot run audit for resourceName="
- + resourceName + ", persistenceUnit=" + persistenceUnit + ", bad parameters: " + parmList);
- }
-
- this.persistenceUnit = persistenceUnit;
- this.properties = properties;
- this.resourceName = resourceName;
-
- // IntegrityAuditProperties.AUDIT_PERIOD_SECONDS and
- // IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS are allowed to be null
- if (properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS) != null) {
- this.integrityAuditPeriodSeconds =
- Integer.parseInt(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS).trim());
- } else {
- // If it is null, set it to the default value
- this.integrityAuditPeriodSeconds = IntegrityAuditProperties.DEFAULT_AUDIT_PERIOD_SECONDS;
- }
- logger.info("Constructor: Exiting");
-
- }
-
- /**
- * Determine if the nodeType conforms to the required node types.
- */
- public static boolean isNodeTypeEnum(String nt) {
- for (NodeTypeEnum n : NodeTypeEnum.values()) {
- if (n.toString().equalsIgnoreCase(nt)) {
- return true;
- }
- }
- return false;
- }
-
-
- /**
- * Makes sure we don't try to run the audit with bad parameters.
- */
- public static boolean parmsAreBad(String resourceName, String persistenceUnit, Properties properties,
- StringBuilder badparams) {
-
- boolean parmsAreBad = checkEmpty(badparams, "resourceName", resourceName);
- parmsAreBad = checkEmpty(badparams, "persistenceUnit", persistenceUnit) || parmsAreBad;
-
- if (properties == null || properties.isEmpty()) {
- badparams.append("properties ");
- parmsAreBad = true;
- } else {
- parmsAreBad = checkProperties(properties, badparams) || parmsAreBad;
- } // End else
- logger.debug("parmsAreBad: exit:" + "\nresourceName: " + resourceName + "\npersistenceUnit: " + persistenceUnit
- + "\nproperties: " + properties);
-
- return parmsAreBad;
- }
-
- private static boolean checkEmpty(StringBuilder builder, String name, String value) {
- if (StringUtils.isEmpty(value)) {
- builder.append(name);
- builder.append(' ');
- return true;
-
- } else {
- return false;
- }
- }
-
- private static boolean checkProperties(Properties properties, StringBuilder badparams) {
- boolean parmsAreBad =
- checkEmpty(badparams, "dbDriver", properties.getProperty(IntegrityAuditProperties.DB_DRIVER));
- parmsAreBad = checkEmpty(badparams, "dbUrl", properties.getProperty(IntegrityAuditProperties.DB_URL))
- || parmsAreBad;
- parmsAreBad = checkEmpty(badparams, "dbUser", properties.getProperty(IntegrityAuditProperties.DB_USER))
- || parmsAreBad;
-
- // dbPwd may be empty
- checkEmpty(badparams, "dbPwd", properties.getProperty(IntegrityAuditProperties.DB_PWD));
-
- parmsAreBad = checkEmpty(badparams, "siteName", properties.getProperty(IntegrityAuditProperties.SITE_NAME))
- || parmsAreBad;
- parmsAreBad = checkNodeType(properties, badparams) || parmsAreBad;
-
- return checkAuditPeriod(properties, badparams) || parmsAreBad;
- }
-
- private static boolean checkNodeType(Properties properties, StringBuilder badparams) {
- String nodeType = properties.getProperty(IntegrityAuditProperties.NODE_TYPE);
- if (nodeType == null || nodeType.isEmpty()) {
- badparams.append("nodeType ");
- return true;
- } else {
- nodeType = nodeType.trim();
- if (!isNodeTypeEnum(nodeType)) {
- badparams.append("nodeType must be one of[");
- for (NodeTypeEnum n : NodeTypeEnum.values()) {
- badparams.append(n.toString());
- badparams.append(' ');
- }
- badparams.append("] ");
- return true;
- }
- }
- return false;
- }
-
- private static boolean checkAuditPeriod(Properties properties, StringBuilder badparams) {
- // IntegrityAuditProperties.AUDIT_PERIOD_SECONDS and
- // IntegrityAuditProperties.AUDIT_PERIOD_MILLISECONDS are allowed to be null
- if (properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS) != null) {
- try {
- Integer.parseInt(properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS).trim());
- } catch (NumberFormatException nfe) {
- badparams.append(", auditPeriodSeconds="
- + properties.getProperty(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS).trim());
- return true;
- }
- }
- return false;
- }
-
- /**
- * Starts the audit thread.
- *
- * @throws IntegrityAuditException if an error occurs
- */
- public void startAuditThread() throws IntegrityAuditException {
- logger.info("startAuditThread: Entering");
-
- if (integrityAuditPeriodSeconds >= 0) {
- this.auditThread = makeAuditThread(this.resourceName, this.persistenceUnit,
- this.properties, integrityAuditPeriodSeconds);
- logger.info("startAuditThread: Audit started and will run every " + integrityAuditPeriodSeconds
- + " seconds");
- this.auditThread.start();
-
- } else {
- logger.info("startAuditThread: Suppressing integrity audit, integrityAuditPeriodSeconds="
- + integrityAuditPeriodSeconds);
- }
-
- logger.info("startAuditThread: Exiting");
- }
-
- /**
- * Stops the audit thread.
- */
- public void stopAuditThread() {
-
- logger.info("stopAuditThread: Entering");
-
- if (this.auditThread != null) {
- this.auditThread.interrupt();
- } else {
- logger.info("stopAuditThread: auditThread never instantiated; no need to interrupt");
- }
-
- logger.info("stopAuditThread: Exiting");
- }
-
- public void setThreadInitialized(boolean isThreadInitialized) {
- logger.info("setThreadInitialized: Setting isThreadInitialized=" + isThreadInitialized);
- this.threadInitialized = isThreadInitialized;
- }
-
- /**
- * 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 if the thread is interrupted
- */
- protected boolean joinAuditThread(long twaitms) throws InterruptedException {
- if (this.auditThread == null) {
- return true;
-
- } else {
- this.auditThread.join(twaitms);
- return !this.auditThread.isAlive();
- }
- }
-
- /**
- * Return if audit thread.
- *
- * @return {@code true} if an audit thread exists, {@code false} otherwise
- */
- protected boolean haveAuditThread() {
- return (this.auditThread != null);
- }
-
- /**
- * Creates an audit thread. May be overridden by junit tests.
- *
- * @param resourceName2 the resource name
- * @param persistenceUnit2 the persistence unit
- * @param properties2 properties
- * @param integrityAuditPeriodSeconds2
- *
- * @return a new audit thread
- * @throws IntegrityAuditException audit exception
- */
- protected AuditThread makeAuditThread(String resourceName2, String persistenceUnit2, Properties properties2,
- int integrityAuditPeriodSeconds2) throws IntegrityAuditException {
-
- return new AuditThread(resourceName2, persistenceUnit2, properties2, integrityAuditPeriodSeconds2, this);
- }
-}
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditException.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditException.java
deleted file mode 100644
index 81e8b90c..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * ============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;
-
-public class IntegrityAuditException extends Exception {
- private static final long serialVersionUID = 1L;
-
- public IntegrityAuditException() {
- super();
- }
-
- public IntegrityAuditException(String message) {
- super(message);
- }
-
- public IntegrityAuditException(Throwable cause) {
- super(cause);
- }
-
- public IntegrityAuditException(String message, Throwable cause) {
- super(message, cause);
- }
-}
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
deleted file mode 100644
index cd80f56f..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditProperties.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2023 Nordix Foundation.
- * ================================================================================
- * 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 lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class IntegrityAuditProperties {
-
- public static final int DEFAULT_AUDIT_PERIOD_SECONDS = -1; // Audit does not run
-
- public static final String DB_DRIVER = "jakarta.persistence.jdbc.driver";
- public static final String DB_URL = "jakarta.persistence.jdbc.url";
- public static final String DB_USER = "jakarta.persistence.jdbc.user";
- public static final String DB_PWD = "jakarta.persistence.jdbc.password"; //NOSONAR
- public static final String AUDIT_PERIOD_SECONDS = "integrity_audit_period_seconds";
-
-
- public static final String SITE_NAME = "site_name";
- public static final String NODE_TYPE = "node_type";
-
- public enum NodeTypeEnum {
- PDP_XACML, PDP_DROOLS, PAP, PAP_ADMIN, LOGPARSER, BRMS_GATEWAY, ASTRA_GATEWAY, ELK_SERVER, PYPDP
-
- }
-}
diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditPropertiesException.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditPropertiesException.java
deleted file mode 100644
index d3c92fa5..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/IntegrityAuditPropertiesException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * ============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;
-
-public class IntegrityAuditPropertiesException extends IntegrityAuditException {
- private static final long serialVersionUID = 1L;
-
- public IntegrityAuditPropertiesException() {
- super();
- }
-
- public IntegrityAuditPropertiesException(String message) {
- super(message);
- }
-
- public IntegrityAuditPropertiesException(Throwable cause) {
- super(cause);
- }
-
- public IntegrityAuditPropertiesException(String message, Throwable cause) {
- super(message, cause);
- }
-}
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
deleted file mode 100644
index 64ec7fd0..00000000
--- a/integrity-audit/src/main/java/org/onap/policy/common/ia/jpa/IntegrityAuditEntity.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2018, 2020-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2023 Nordix Foundation.
- * ================================================================================
- * 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.jpa;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.NamedQuery;
-import jakarta.persistence.PrePersist;
-import jakarta.persistence.PreUpdate;
-import jakarta.persistence.Table;
-import jakarta.persistence.Temporal;
-import jakarta.persistence.TemporalType;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-import org.onap.policy.common.ia.AuditorTime;
-
-@Entity
-@Table(name = "IntegrityAuditEntity")
-@NamedQuery(name = " IntegrityAuditEntity.findAll", query = "SELECT e FROM IntegrityAuditEntity e ")
-@NamedQuery(name = "IntegrityAuditEntity.deleteAll", query = "DELETE FROM IntegrityAuditEntity WHERE 1=1")
-@NoArgsConstructor
-@Getter
-@Setter
-public class IntegrityAuditEntity implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- @Getter
- @Setter
- private static boolean unitTesting;
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- @Column(name = "id")
- @Setter(AccessLevel.PRIVATE)
- private long id;
-
- @Column(name = "persistenceUnit", nullable = false)
- private String persistenceUnit;
-
- @Column(name = "site", nullable = true)
- private String site;
-
- @Column(name = "nodeType", nullable = true)
- private String nodeType;
-
- @Column(name = "resourceName", nullable = false, unique = true)
- private String resourceName;
-
- @Column(name = "designated", nullable = true)
- private boolean designated = false;
-
- @Column(name = "jdbcDriver", nullable = false)
- private String jdbcDriver;
-
- @Column(name = "jdbcUrl", nullable = false)
- private String jdbcUrl;
-
- @Column(name = "jdbcUser", nullable = false)
- private String jdbcUser;
-
- @Column(name = "jdbcPassword", nullable = false)
- private String jdbcPassword;
-
- @Temporal(TemporalType.TIMESTAMP)
- @Column(name = "createdDate", updatable = true)
- private Date createdDate;
-
- @Temporal(TemporalType.TIMESTAMP)
- @Column(name = "lastUpdated")
- private Date lastUpdated;
-
- /**
- * Pre persist.
- */
- @PrePersist
- public void prePersist() {
- var date = AuditorTime.getInstance().getDate();
- this.createdDate = date;
- this.lastUpdated = date;
- }
-
- @PreUpdate
- public void preUpdate() {
- this.lastUpdated = AuditorTime.getInstance().getDate();
- }
-
- 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
deleted file mode 100644
index 1d72eeba..00000000
--- a/integrity-audit/src/main/resources/META-INF/persistence.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ============LICENSE_START=======================================================
- Integrity Audit
- ================================================================================
- Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- Modifications Copyright (C) 2023-2024 Nordix Foundation.
- ================================================================================
- 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=========================================================
- -->
-
-<persistence version="3.1" xmlns="https://jakarta.ee/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_1.xsd">
- <persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
- <!-- Limited use for generating the DB and schema files for iatest DB - uses hibernate -->
- <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
- <class>org.onap.policy.common.ia.jpa.IntegrityAuditEntity</class>
- <class>org.onap.policy.common.ia.jpa.IaTestEntity</class>
- <shared-cache-mode>NONE</shared-cache-mode>
- <properties>
- <property name="jakarta.persistence.schema-generation.database.action" value="create"/>
- <property name="hibernate.show_sql" value="false"/>
- </properties>
- </persistence-unit>
-
- <persistence-unit name="integrityAuditPU" transaction-type="RESOURCE_LOCAL">
- <!-- For operational use -->
- <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
- <class>org.onap.policy.common.ia.jpa.IntegrityAuditEntity</class>
- <shared-cache-mode>NONE</shared-cache-mode>
- <properties>
- <property name="hibernate.show_sql" value="false"/>
- </properties>
- </persistence-unit>
-</persistence>
diff --git a/integrity-audit/src/main/resources/log4j.properties b/integrity-audit/src/main/resources/log4j.properties
deleted file mode 100644
index 65b9e55e..00000000
--- a/integrity-audit/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,48 +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=========================================================
-###
-
-#
-# Use this properties for debugging and development.
-#
-#
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, FILE
-
-# A1 is set to be a DailyRollingFileAppender.
-log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
-
-# Set the name of the file
-log4j.appender.FILE.File=IntegrityMonitor.log
-
-# Set the immediate flush to true (default)
-log4j.appender.FILE.ImmediateFlush=true
-
-# Set the threshold to debug mode
-log4j.appender.FILE.Threshold=debug
-
-# Set the append to false, should not overwrite
-log4j.appender.FILE.Append=true
-
-# Set the DatePattern
-log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
-
-# A1 uses PatternLayout.
-log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
-log4j.appender.FILE.layout.ConversionPattern=%d{yyyy_MM_dd_HH_mm_ss_SSS} [%t] %-5p %l- %m%n
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
deleted file mode 100644
index 1d47f7d0..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/AuditPeriodTest.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation
- * ================================================================================
- * 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.jupiter.api.Assertions.assertTrue;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicLong;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.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.
- */
-class AuditPeriodTest extends IntegrityAuditTestBase {
-
- private static Logger logger = FlexLogger.getLogger(AuditPeriodTest.class);
-
- @BeforeAll
- public static void setUpBeforeClass() throws Exception {
- IntegrityAuditTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + AuditPeriodTest.class.getSimpleName());
- }
-
- @AfterAll
- public static void tearDownAfterClass() {
- IntegrityAuditTestBase.tearDownAfterClass();
- }
-
- /**
- * Set up for test case.
- */
- @Override
- @BeforeEach
- public void setUp() {
- logger.info("setUp: Entering");
-
- super.setUp();
-
- logger.info("setUp: Exiting");
-
- }
-
- /**
- * Tear down after test cases.
- */
- @Override
- @AfterEach
- 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
- 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
- void testZeroAuditPeriod() throws Exception {
-
- logger.info("testZeroAuditPeriod: Entering");
-
- properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, "0");
-
- final ExtractAppender logA = watch(debugLogger, "[Aa]waking from (0s) 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] = "0s";
- 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
- 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 periodSec audit period, in seconds
- * @throws Exception if an error occurs
- * @throws InterruptedException if the thread is interrupted
- */
- private void testAuditPeriod(long periodSec) throws Exception {
-
- properties.put(IntegrityAuditProperties.AUDIT_PERIOD_SECONDS, String.valueOf(periodSec));
-
- /*
- * 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 >= periodSec + AuditThread.AUDIT_COMPLETION_INTERVAL * AuditThread.AUDIT_RESET_CYCLES);
-
- /*
- * Now run again and ensure it waited long enough between runs.
- */
- tmin = minAuditTime(ia);
- assertTrue(tmin >= periodSec + AuditThread.AUDIT_COMPLETION_INTERVAL * AuditThread.AUDIT_RESET_CYCLES);
- }
-
- /**
- * Runs simultaneous audits on several auditors.
- *
- * @param auditors the auditors
- * @return the minimum time, in milliseconds, elapsed for any given auditor
- * @throws InterruptedException if the thread is interrupted
- */
- private long minAuditTime(MyIntegrityAudit... auditors) throws InterruptedException {
- List<Thread> threads = new ArrayList<>(auditors.length);
- AtomicLong tmin = new AtomicLong(Long.MAX_VALUE);
-
- // create the threads
- for (MyIntegrityAudit p : auditors) {
- Thread auditThread = new Thread() {
-
- @Override
- public void run() {
- try {
- long tbegin = p.getTimeInMillis();
- runAudit(p);
- long elapsed = p.getTimeInMillis() - tbegin;
-
- synchronized (tmin) {
- tmin.set(Math.min(tmin.get(), elapsed));
- }
-
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- };
-
- auditThread.setDaemon(true);
- threads.add(auditThread);
- }
-
- // start the threads
- for (Thread t : threads) {
- t.start();
- }
-
- // wait for them to complete
- for (Thread t : threads) {
- t.join();
- }
-
- return tmin.get();
- }
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/AuditorTimeTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/AuditorTimeTest.java
deleted file mode 100644
index 9899ca25..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/AuditorTimeTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation
- * ================================================================================
- * 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.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-import org.junit.jupiter.api.Test;
-import org.onap.policy.common.utils.time.CurrentTime;
-
-/**
- * Tests the AuditorTime class.
- */
-class AuditorTimeTest {
-
- @Test
- void testGetInstance() {
- CurrentTime inst = AuditorTime.getInstance();
- assertNotNull(inst);
-
- assertEquals(inst, AuditorTime.getInstance());
- }
-
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditCompareEntriesTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditCompareEntriesTest.java
deleted file mode 100644
index c9837e03..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditCompareEntriesTest.java
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation
- * ================================================================================
- * 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.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.common.ia.jpa.IaTestEntity;
-import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
-import org.onap.policy.common.ia.jpa.PersonSample;
-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.
- */
-class DbAuditCompareEntriesTest extends IntegrityAuditTestBase {
- private static final String ZAPHOD = "Zaphod";
-
- private static Logger logger = FlexLogger.getLogger(DbAuditCompareEntriesTest.class);
-
- private DbDao dbDao;
- private static String resourceName = "pdp1";
-
- @BeforeAll
- public static void setUpBeforeClass() throws Exception {
- IntegrityAuditTestBase
- .setUpBeforeClass(DEFAULT_DB_URL_PREFIX + DbAuditCompareEntriesTest.class.getSimpleName());
- }
-
- @AfterAll
- public static void tearDownAfterClass() {
- IntegrityAuditTestBase.tearDownAfterClass();
- }
-
- /**
- * Set up for test cases.
- */
- @Override
- @BeforeEach
- public void setUp() {
-
- logger.info("setUp: Entering");
-
- super.setUp();
-
- truncateTables(makeProperties());
-
- logger.info("setUp: Exiting");
- }
-
- /**
- * Clean up DB after each test.
- */
- @Override
- @AfterEach
- 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
- */
- // @Ignore
- @Test
- void testSuccessfulComparison() throws Exception {
- logger.info("testSuccessfulComparison: Entering");
-
- dbDao = new DbDao(resourceName, A_SEQ_PU, makeProperties());
- final DbAudit dbAudit = new DbAudit(dbDao);
-
- String className = null;
- // There is only one entry IntegrityAuditEntity, but we will check
- // anyway
- Set<String> classNameSet = dbDao.getPersistenceClassNames();
- for (String c : classNameSet) {
- if ("org.onap.policy.common.ia.jpa.IntegrityAuditEntity".equals(c)) {
- className = c;
- }
- }
- final String resourceName1 = resourceName;
- final String resourceName2 = resourceName;
-
- final IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
- final IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
- Date date = new Date();
-
- /*
- * Two entries with the same field values
- */
- entry1.setDesignated(false);
- entry1.setJdbcDriver(DB_DRIVER);
- entry1.setJdbcPassword(DB_PASS);
- entry1.setJdbcUrl(dbUrl);
- entry1.setJdbcUser(DB_USER);
- entry1.setLastUpdated(date);
- entry1.setNodeType(NODE_TYPE);
- entry1.setPersistenceUnit(A_SEQ_PU);
- entry1.setResourceName(resourceName1);
- entry1.setSite(SITE_NAME);
-
- entry2.setDesignated(false);
- entry2.setJdbcDriver(DB_DRIVER);
- entry2.setJdbcPassword(DB_PASS);
- entry2.setJdbcUrl(dbUrl);
- entry2.setJdbcUser(DB_USER);
- entry2.setLastUpdated(date);
- entry2.setNodeType(NODE_TYPE);
- entry2.setPersistenceUnit(A_SEQ_PU);
- entry2.setResourceName(resourceName2);
- entry2.setSite(SITE_NAME);
-
- dbAudit.writeAuditDebugLog(className, resourceName1, resourceName2, entry1, entry2);
-
- HashMap<Object, Object> myEntries = new HashMap<>();
- HashMap<Object, Object> theirEntries = new HashMap<>();
-
- 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
- */
- // @Ignore
- @Test
- void testComparisonError() throws Exception {
- logger.info("testComparisonError: Entering");
-
- dbDao = new DbDao(resourceName, A_SEQ_PU, makeProperties());
- final DbAudit dbAudit = new DbAudit(dbDao);
-
- final String resourceName1 = resourceName;
- final String resourceName2 = resourceName;
-
- final IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
- final IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
- Date date = new Date();
-
- /*
- * Create two entries with different designated values
- */
- entry1.setDesignated(false);
- entry1.setJdbcDriver(DB_DRIVER);
- entry1.setJdbcPassword(DB_PASS);
- entry1.setJdbcUrl(dbUrl);
- entry1.setJdbcUser(DB_USER);
- entry1.setLastUpdated(date);
- entry1.setNodeType(NODE_TYPE);
- entry1.setPersistenceUnit(A_SEQ_PU);
- entry1.setResourceName(resourceName1);
- entry1.setSite(SITE_NAME);
-
- entry2.setDesignated(true);
- entry2.setJdbcDriver(DB_DRIVER);
- entry2.setJdbcPassword(DB_PASS);
- entry2.setJdbcUrl(dbUrl);
- entry2.setJdbcUser(DB_USER);
- entry2.setLastUpdated(date);
- entry2.setNodeType(NODE_TYPE);
- entry2.setPersistenceUnit(A_SEQ_PU);
- entry2.setResourceName(resourceName2);
- entry2.setSite(SITE_NAME);
-
- HashMap<Object, Object> myEntries = new HashMap<>();
- HashMap<Object, Object> theirEntries = new HashMap<>();
-
- 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
- */
- // @Ignore
- @Test
- void testCompareMissingEntries() throws Exception {
- logger.info("testCompareMissingEntries: Entering");
-
- dbDao = new DbDao(resourceName, A_SEQ_PU, makeProperties());
- final DbAudit dbAudit = new DbAudit(dbDao);
-
- final String resourceName1 = resourceName;
- final String resourceName2 = resourceName;
-
- final IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
- final IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
- final IntegrityAuditEntity entry3 = new IntegrityAuditEntity();
- final IntegrityAuditEntity entry4 = new IntegrityAuditEntity();
-
- Date date = new Date();
-
- /*
- * 4 entries, one mismatch, two miss entries
- */
- entry1.setDesignated(false);
- entry1.setJdbcDriver(DB_DRIVER);
- entry1.setJdbcPassword(DB_PASS);
- entry1.setJdbcUrl(dbUrl);
- entry1.setJdbcUser(DB_USER);
- entry1.setLastUpdated(date);
- entry1.setNodeType(NODE_TYPE);
- entry1.setPersistenceUnit(A_SEQ_PU);
- entry1.setResourceName(resourceName1);
- entry1.setSite(SITE_NAME);
-
- entry2.setDesignated(true);
- entry2.setJdbcDriver(DB_DRIVER);
- entry2.setJdbcPassword(DB_PASS);
- entry2.setJdbcUrl(dbUrl);
- entry2.setJdbcUser(DB_USER);
- entry2.setLastUpdated(date);
- entry2.setNodeType(NODE_TYPE);
- entry2.setPersistenceUnit(A_SEQ_PU);
- entry2.setResourceName(resourceName2);
- entry2.setSite(SITE_NAME);
-
- entry3.setDesignated(false);
- entry3.setJdbcDriver(DB_DRIVER);
- entry3.setJdbcPassword(DB_PASS);
- entry3.setJdbcUrl(dbUrl);
- entry3.setJdbcUser(DB_USER);
- entry3.setLastUpdated(date);
- entry3.setNodeType(NODE_TYPE);
- entry3.setPersistenceUnit(A_SEQ_PU);
- entry3.setResourceName(resourceName2);
- entry3.setSite("SiteB");
-
- entry4.setDesignated(false);
- entry4.setJdbcDriver(DB_DRIVER);
- entry4.setJdbcPassword(DB_PASS);
- entry4.setJdbcUrl(dbUrl);
- entry4.setJdbcUser(DB_USER);
- entry4.setLastUpdated(date);
- entry4.setNodeType(NODE_TYPE);
- entry4.setPersistenceUnit(A_SEQ_PU);
- entry4.setResourceName(resourceName2);
- entry4.setSite("SiteB");
-
- HashMap<Object, Object> myEntries = new HashMap<>();
- HashMap<Object, Object> theirEntries = new HashMap<>();
-
- 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
- */
- // @Ignore
- @Test
- void testCompareAllHashEntities() throws Exception {
- logger.info("testCompareAllHashEntities: Entering");
-
- dbDao = new DbDao(resourceName, A_SEQ_PU, makeProperties());
- DbAudit dbAudit = new DbAudit(dbDao);
-
- Set<String> classNameSet = dbDao.getPersistenceClassNames();
- for (String className : classNameSet) {
- if ("org.onap.policy.common.ia.jpa.IntegrityAuditEntity".equals(className)) {
- final String resourceName1 = resourceName;
- final String resourceName2 = resourceName;
-
- final IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
- final IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
- Date date = new Date();
-
- /*
- * Two entries with the same field values
- */
- entry1.setDesignated(false);
- entry1.setJdbcDriver(DB_DRIVER);
- entry1.setJdbcPassword(DB_PASS);
- entry1.setJdbcUrl(dbUrl);
- entry1.setJdbcUser(DB_USER);
- entry1.setLastUpdated(date);
- entry1.setNodeType(NODE_TYPE);
- entry1.setPersistenceUnit(A_SEQ_PU);
- entry1.setResourceName(resourceName1);
- entry1.setSite(SITE_NAME);
-
- entry2.setDesignated(false);
- entry2.setJdbcDriver(DB_DRIVER);
- entry2.setJdbcPassword(DB_PASS);
- entry2.setJdbcUrl(dbUrl);
- entry2.setJdbcUser(DB_USER);
- entry2.setLastUpdated(date);
- entry2.setNodeType(NODE_TYPE);
- entry2.setPersistenceUnit(A_SEQ_PU);
- entry2.setResourceName(resourceName2);
- entry2.setSite(SITE_NAME);
-
- HashMap<Object, Object> myEntries = new HashMap<>();
- HashMap<Object, Object> theirEntries = new HashMap<>();
-
- myEntries.put("pdp1", entry1);
- theirEntries.put("pdp1", entry2);
-
- /*
- * Assert there was no mismatches
- */
- assertTrue(dbAudit.compareEntries(myEntries, theirEntries).isEmpty());
- } else if ("org.onap.policy.common.ia.jpa.IaTestEntity".equals(className)) {
- final IaTestEntity iate = new IaTestEntity();
- final IaTestEntity iate2 = new IaTestEntity();
- final IaTestEntity iate3 = new IaTestEntity();
- final 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<>();
- HashMap<Object, Object> theirEntries = new HashMap<>();
-
- myEntries.put("0", iate);
- myEntries.put("1", iate2);
- theirEntries.put("0", iate3);
- theirEntries.put("1", iate4);
-
-
- /*
- * Assert that there is 2 mismatches
- */
- assertEquals(2, dbAudit.compareEntries(myEntries, theirEntries).size());
- }
- }
-
- logger.info("testCompareAllHashEntities: Exit");
- }
-
- /*
- * Tests that comparison algorithm works for each entity in the database
- */
- @Test
- void testCompareAllDbEntities() throws Exception {
- logger.info("testCompareAllDbEntities: Entering");
-
- logger.info("Setting up DB");
-
- IntegrityAudit.setUnitTesting(true);
-
- Properties properties = makeProperties();
-
- Properties properties2 = makeProperties();
- properties2.put(IntegrityAuditProperties.DB_URL,
- "jdbc:h2:mem:" + DbAuditCompareEntriesTest.class.getSimpleName() + "2");
-
- // Clean up the two DBs
- truncateTables(properties);
- truncateTables(properties2);
-
- // Add entries into DB1
- 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, 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<>();
- for (String className : classNameSet) {
- logger.info("classNameSet entry = " + 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")) {
- break;
- }
- }
-
- dbDao3.destroy();
-
- // Assert that there is 2 mismatches between IntegrityAuditEntity tables
- assertEquals(2, mismatchResult.size());
-
- logger.info("testCompareAllDbEntities: Exit");
- }
-
- /**
- * Truncate the tables.
- *
- * @param properties the 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
- */
- // @Ignore
- @Test
- void testEmbeddedClass() throws Exception {
- logger.info("testEmbeddedClasses: Entering");
-
- dbDao = new DbDao(resourceName, A_SEQ_PU, properties);
- final DbAudit dbAudit = new DbAudit(dbDao);
-
- String className = null;
- // There is only one entry IntegrityAuditEntity, but we will check
- // anyway
- Set<String> classNameSet = dbDao.getPersistenceClassNames();
- for (String classNameInClassNameSet : classNameSet) {
- if ("org.onap.policy.common.ia.jpa.IaTestEntity".equals(classNameInClassNameSet)) {
- className = classNameInClassNameSet;
- }
- }
-
- final IaTestEntity iate = new IaTestEntity();
- final IaTestEntity iate2 = new IaTestEntity();
-
- final 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.
- */
- assertNotEquals(person.getAge(), person2.getAge());
- assertNotEquals(person.getFirstName(), person2.getFirstName());
- assertNotEquals(person.getLasttName(), person2.getLasttName());
- PersonSample personTest = new PersonSample(null, null, 0);
- personTest.setAge(person.getAge());
- personTest.setFirstName(person.getFirstName());
- personTest.setLastName(person.getLasttName());
- /*
- * Two entries, 1 mismatch
- */
- iate.setCreatedBy("Ford");
- 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<>();
- HashMap<Object, Object> theirEntries = new HashMap<>();
-
- 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
deleted file mode 100644
index 507587b7..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/DbAuditTest.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2023-2024 Nordix Foundation.
- * ================================================================================
- * 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.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-
-import com.google.re2j.Pattern;
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityManagerFactory;
-import jakarta.persistence.Persistence;
-import java.util.List;
-import java.util.Properties;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.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.
- */
-class DbAuditTest extends IntegrityAuditTestBase {
-
- private static Logger logger = FlexLogger.getLogger(DbAuditTest.class);
-
- private static final Pattern COMMA_PAT = Pattern.compile(",");
- private static final String RESOURCE_NAME = "pdp1";
-
- private EntityManagerFactory emf2;
- private EntityManager em2;
- private DbDao dbDao;
-
- @BeforeAll
- public static void setUpBeforeClass() throws Exception {
- IntegrityAuditTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + DbAuditTest.class.getSimpleName());
- IntegrityAuditEntity.setUnitTesting(true);
- }
-
- @AfterAll
- public static void tearDownAfterClass() {
- IntegrityAuditTestBase.tearDownAfterClass();
- IntegrityAuditEntity.setUnitTesting(false);
- }
-
- /**
- * Set up for test cases.
- */
- @Override
- @BeforeEach
- public void setUp() {
- logger.info("setUp: Entering");
-
- super.setUp();
-
- dbDao = null;
- emf2 = null;
- em2 = null;
-
- logger.info("setUp: Exiting");
- }
-
- /**
- * Tear down after test cases.
- */
- @Override
- @AfterEach
- 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
- void testNoEntities() throws Exception {
- Properties properties = makeProperties();
-
- logger.info("noEntitiesTest: Entering");
-
- dbDao = new DbDao(RESOURCE_NAME, A_SEQ_PU, properties);
- dbDao.deleteAllIntegrityAuditEntities();
-
- assertThatThrownBy(() -> {
- DbAudit dbAudit = new DbAudit(dbDao);
- dbAudit.dbAudit(RESOURCE_NAME, A_SEQ_PU, NODE_TYPE);
- }).isInstanceOf(DbAuditException.class);
-
- logger.info("noEntitiesTest: Exit");
- }
-
- /**
- * Tests the detection of only one entry in the database.
- */
- @Test
- void testOneEntity() throws Exception {
- Properties properties = makeProperties();
-
- logger.info("oneEntityTest: Entering");
-
- final ExtractAppender log = watch(debugLogger, "DbAudit: Found only (one) IntegrityAuditEntity entry:");
-
- // Add one entry in the database
- dbDao = new DbDao(RESOURCE_NAME, A_SEQ_PU, properties);
- DbAudit dbAudit = new DbAudit(dbDao);
- dbAudit.dbAudit(RESOURCE_NAME, A_SEQ_PU, NODE_TYPE);
-
- List<IntegrityAuditEntity> iaeList = dbDao.getIntegrityAuditEntities(A_SEQ_PU, NODE_TYPE);
- logger.info("List size: " + iaeList.size());
-
- verifyItemsInLog(log, "one");
-
- logger.info("oneEntityTest: Exit");
- }
-
- /**
- * Tests reporting mismatches and missing entries using the error log.
- */
- @Test
- void testMismatch() 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);
-
- final ExtractAppender dbglog = watch(debugLogger, "Mismatched entries [(]keys[)]:(.*)");
- final ExtractAppender errlog = watch(errorLogger, "DB Audit: ([0-9])");
-
- /*
- * Create entries in DB1 & DB2 for the resource of interest
- */
- dbDao = new DbDao(RESOURCE_NAME, A_SEQ_PU, properties);
-
- new DbDao(RESOURCE_NAME, 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(RESOURCE_NAME, A_SEQ_PU, NODE_TYPE);
-
- // 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(RESOURCE_NAME, A_SEQ_PU, NODE_TYPE);
-
- assertFalse(dbglog.getExtracted().isEmpty());
-
- String mismatchIndex = dbglog.getExtracted().get(dbglog.getExtracted().size() - 1);
- int mismatchEntries = COMMA_PAT.split(mismatchIndex.trim()).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 the 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
deleted file mode 100644
index da6f0bd5..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/DbDaoTest.java
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2023-2024 Nordix Foundation.
- * ================================================================================
- * 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.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import jakarta.persistence.PersistenceUnitUtil;
-import jakarta.persistence.Query;
-import jakarta.persistence.TypedQuery;
-import jakarta.persistence.criteria.CriteriaBuilder;
-import jakarta.persistence.criteria.CriteriaQuery;
-import jakarta.persistence.criteria.Root;
-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 org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
-import org.onap.policy.common.utils.jpa.EntityTransCloser;
-import org.onap.policy.common.utils.time.TestTime;
-
-/*
- * All JUnits are designed to run in the local development environment
- * where they have write privileges and can execute time-sensitive
- * tasks.
- */
-class DbDaoTest extends IntegrityAuditTestBase {
- private static final String SELECT_ENTITIES =
- "Select i from IntegrityAuditEntity i where i.resourceName=:rn and i.persistenceUnit=:pu";
- private static final String SITE_B = "SiteB";
- private static final String ENTITY_CLASS_NAME = "org.onap.policy.common.ia.jpa.IntegrityAuditEntity";
-
- private static final String resourceName = "pdp0";
-
- private DbDao dbDao;
-
- @BeforeAll
- public static void setUpBeforeClass() throws Exception {
- IntegrityAuditTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + DbDaoTest.class.getSimpleName());
- }
-
- @AfterAll
- public static void tearDownAfterClass() {
- IntegrityAuditTestBase.tearDownAfterClass();
- }
-
- @Override
- @BeforeEach
- public void setUp() {
- super.setUp();
- dbDao = null;
- }
-
- /**
- * Tear down after test cases.
- */
- @Override
- @AfterEach
- public void tearDown() {
- if (dbDao != null) {
- dbDao.destroy();
- }
-
- super.tearDown();
- }
-
- /* Tests registering a new IntegrityAuditEntity object in the DB */
- @Test
- void testNewRegistration() throws Exception {
- Properties properties = makeProperties();
-
- try (EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
- dbDao = new DbDao(resourceName, A_SEQ_PU, properties);
-
- // Find the proper entry in the database
- Query iaequery = em.createQuery(SELECT_ENTITIES);
- 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
- void testUpdateRegistration() throws Exception {
- Properties properties = makeProperties();
-
- dbDao = 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, SITE_B);
- dbDao = 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_ENTITIES);
- 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(SITE_B, iae.getSite());
- }
- }
- }
-
- /* Tests obtaining all Integrity Audit Entities from a table */
- @Test
- void testGetIntegrityAuditEntities() throws Exception {
- Properties properties = makeProperties();
-
- // Add some entries to the DB
- dbDao = 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 = dbDao.getIntegrityAuditEntities(A_SEQ_PU, "pdp_xacml");
- assertEquals(2, entities.size());
- }
-
- /* Tests retrieving a DbDao instance's IntegrityAuditEntity */
- @Test
- void testGetMyIntegrityAuditEntity() throws Exception {
- Properties properties = makeProperties();
-
- dbDao = new DbDao(resourceName, A_SEQ_PU, properties);
- IntegrityAuditEntity iae = dbDao.getMyIntegrityAuditEntity();
- assertEquals(A_SEQ_PU, iae.getPersistenceUnit());
- }
-
- /* Tests obtaining an IntegrityAuditEntity by ID */
- @Test
- void testGetIntegrityAuditEntity() throws Exception {
- Properties properties = makeProperties();
-
- // Obtain an entry from the database based on ID
- dbDao = new DbDao(resourceName, A_SEQ_PU, properties);
-
- // Find the proper database entry
- Query iaequery = em.createQuery(SELECT_ENTITIES);
- 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 = dbDao.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
- 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
- dbDao = new DbDao(resourceName, A_SEQ_PU, properties);
- dbDao.setDesignated(resourceName, A_SEQ_PU, true);
-
- // Find the proper entry in the database
- Query iaequery = em.createQuery(SELECT_ENTITIES);
- 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
- void testSetLastUpdated() throws Exception {
- Properties properties = makeProperties();
-
- try (EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
- TestTime testTime = getTestTime();
-
- // Create an entry
- dbDao = new DbDao(resourceName, A_SEQ_PU, properties);
-
- // Find the proper entry in the database
- Query iaequery = em.createQuery(SELECT_ENTITIES);
- 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
- final Date oldDate = iae.getLastUpdated();
-
- // ensure dates are different by sleeping for a bit
- testTime.sleep(1);
-
- iae.setSite(SITE_B);
- iae.setLastUpdated(testTime.getDate());
- final 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
- void testGetAllMyEntriesString() throws Exception {
- Properties properties = makeProperties();
-
- // create entries for the IntegrityAuditEntity table
- dbDao = 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 = dbDao.getAllMyEntries(ENTITY_CLASS_NAME);
-
- // 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
- void testGetAllMyEntriesStringHashSet() throws Exception {
- Properties properties = makeProperties();
-
- // create entries for the IntegrityAuditEntity table
- dbDao = 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(ENTITY_CLASS_NAME));
- CriteriaQuery<Object> all = cq.select(rootEntry);
- TypedQuery<Object> allQuery = em.createQuery(all);
- List<Object> objectList = allQuery.getResultList();
- HashSet<Object> resultSet = new HashSet<>();
- 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 =
- dbDao.getAllMyEntries(ENTITY_CLASS_NAME, 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
- void testGetAllEntriesStringPropertiesString() throws Exception {
- Properties properties = makeProperties();
-
- // create entries for the IntegrityAuditEntity table
- dbDao = 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 = dbDao.getAllEntries("integrityAuditPU", properties,
- ENTITY_CLASS_NAME);
-
- // 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
- void testGetAllEntriesStringPropertiesStringHashSet() throws Exception {
- Properties properties = makeProperties();
-
- // create entries for the IntegrityAuditEntity table
- dbDao = 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(ENTITY_CLASS_NAME));
- CriteriaQuery<Object> all = cq.select(rootEntry);
- TypedQuery<Object> allQuery = em.createQuery(all);
- List<Object> objectList = allQuery.getResultList();
- HashSet<Object> resultSet = new HashSet<>();
- 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 = dbDao.getAllEntries("integrityAuditPU", properties,
- ENTITY_CLASS_NAME, 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
- void testGetAllEntries() throws Exception {
- Properties properties = makeProperties();
-
- // create entries for the IntegrityAuditEntity table
- dbDao = 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 =
- dbDao.getAllEntries(A_SEQ_PU, properties, ENTITY_CLASS_NAME);
-
- // Assert there were 3 entries for that class
- assertEquals(3, entries.size());
- }
-
- /**
- * Tests obtaining all class names of persisted classes.
- */
- void testGetPersistenceClassNames() throws Exception {
- Properties properties = makeProperties();
-
- dbDao = new DbDao(resourceName, A_SEQ_PU, properties);
-
- // Retrieve persistence class names
- Set<String> result = dbDao.getPersistenceClassNames();
- assertEquals(1, result.size());
- }
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/DefaultLoggingPatternTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/DefaultLoggingPatternTest.java
deleted file mode 100644
index d35260dd..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/DefaultLoggingPatternTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2019 Nordix Foundation.
- * Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation
- * ================================================================================
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.common.ia;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.File;
-import java.io.IOException;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.common.utils.resources.TextFileUtils;
-import org.slf4j.Logger;
-import org.slf4j.MDC;
-import org.slf4j.ext.XLogger;
-import org.slf4j.ext.XLoggerFactory;
-
-/**
- * Test the default logging pattern.
- *
- */
-class DefaultLoggingPatternTest {
- // XLogger for this class
- private static final XLogger XLOGGER = XLoggerFactory.getXLogger(DefaultLoggingPatternTest.class);
-
- // Logger for this class
- private static final Logger LOGGER = XLoggerFactory.getXLogger(DefaultLoggingPatternTest.class);
-
- /**
- * Delete logging file after test.
- */
- @AfterAll
- public static void deleteLogFile() {
- new File("testingLogs/common-modules/integrity-audit/logging-pattern-test.log").deleteOnExit();
- }
-
- /**
- * Test XLogger output.
- *
- * @throws IOException on errors
- */
- @Test
- void testDefaultLoggingPatternXLogger() throws IOException {
- testDefaultLoggingPattern(XLOGGER, "xlogger");
- }
-
- /**
- * Test Logger output.
- *
- * @throws IOException on errors
- */
- @Test
- void testDefaultLoggingPatternLogger() throws IOException {
- testDefaultLoggingPattern(LOGGER, "logger");
- }
-
- /**
- * Test Logger output.
- *
- * @throws IOException on errors
- */
- void testDefaultLoggingPattern(final Logger logger, final String loggerString) throws IOException {
- MDC.put("requestId", "TheRequestId");
- MDC.put("serviceInstanceId", "TheServiceInstanceId");
- MDC.put("serverName", "TheServerName");
- MDC.put("serviceName", "TheServiceName");
- MDC.put("instanceUuid", "TheInstanceUuid");
- MDC.put("severity", "TheSeverity");
- MDC.put("serverIpAddress", "TheServerIpAddress");
- MDC.put("server", "TheServer");
- MDC.put("clientIpAddress", "TheClientIpAddress");
-
- logger.info("This is a test logging string for {}", loggerString);
-
- // Jump past the date, and the actual and expected logged strings should be the same
- String actualLoggedString =
- TextFileUtils.getTextFileAsString("testingLogs/common-modules/integrity-audit/logging-pattern-test.log")
- .substring(23);
- String expectedLoggedString = TextFileUtils
- .getTextFileAsString("src/test/resources/" + loggerString + "-test.expectedlog").substring(23).trim();
-
- assertThat(actualLoggedString).contains(expectedLoggedString);
- }
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/ExceptionsTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/ExceptionsTest.java
deleted file mode 100644
index 988d875d..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/ExceptionsTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Monitor
- * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation
- * ================================================================================
- * 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.jupiter.api.Assertions.assertEquals;
-
-import org.junit.jupiter.api.Test;
-import org.onap.policy.common.utils.test.ExceptionsTester;
-
-/**
- * Tests various Exception subclasses.
- */
-class ExceptionsTest extends ExceptionsTester {
-
- @Test
- void testDbAuditException() {
- assertEquals(4, test(DbAuditException.class));
- }
-
- @Test
- void testDbDaoTransactionException() {
- assertEquals(4, test(DbDaoTransactionException.class));
- }
-
- @Test
- void testIntegrityAuditException() {
- assertEquals(4, test(IntegrityAuditException.class));
- }
-
- @Test
- void testIntegrityAuditPropertiesException() {
- assertEquals(4, test(IntegrityAuditPropertiesException.class));
- }
-}
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
deleted file mode 100644
index 499d29a0..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditDesignationTest.java
+++ /dev/null
@@ -1,593 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation
- * ================================================================================
- * 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.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.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.
- */
-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 = "Running audit for persistenceUnit=\\w+ on resourceName=(";
-
- @BeforeAll
- public static void setUpBeforeClass() throws Exception {
- IntegrityAuditTestBase
- .setUpBeforeClass(DEFAULT_DB_URL_PREFIX + IntegrityAuditDesignationTest.class.getSimpleName());
- }
-
- @AfterAll
- public static void tearDownAfterClass() {
- IntegrityAuditTestBase.tearDownAfterClass();
- }
-
- /**
- * Set up before test cases.
- */
- @Override
- @BeforeEach
- public void setUp() {
- logger.info("setUp: Entering");
-
- super.setUp();
-
- logger.info("setUp: Exiting");
- }
-
- /**
- * Tear down after test cases.
- */
- @Override
- @AfterEach
- 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
- void testOneResource() throws Exception {
-
- logger.info("testOneResource: Entering");
-
- final 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.
- */
- @Test
- void testTwoResources() throws Exception {
-
- logger.info("testTwoResources: Entering");
-
- final 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
- void testTwoResourcesDifferentPus() throws Exception {
-
- logger.info("testTwoResourcesDifferentPus: Entering");
-
- final ExtractAppender logA = watch(debugLogger, START_AUDIT_RE_PREFIX + "pdp1)");
- final 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
- void testTwoResourcesOneDead() throws Exception {
-
- logger.info("testTwoResourcesOneDead: Entering");
-
- final 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
- void testThreeResources() throws Exception {
-
- logger.info("testThreeResources: Entering");
-
- final 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
- void testFourResourcesDifferentPus() throws Exception {
-
- logger.info("testFourResourcesDifferentPus: Entering");
-
- final ExtractAppender logA = watch(debugLogger, START_AUDIT_RE_PREFIX + "pdp1|pdp3)");
- final 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
- void testFourResourcesOneDead() throws Exception {
-
- logger.info("testFourResourcesOneDead: Entering");
-
- final 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
- void testFourResourcesThreeDead() throws Exception {
-
- logger.info("testFourResourcesThreeDead: Entering");
-
- final 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
- void testDesignatedNodeDead() throws Exception {
- logger.info("testDesignatedNodeDead: Entering");
-
- final ExtractAppender logA = watch(debugLogger, START_AUDIT_RE);
-
- /*
- * Instantiate audit object for pdp1.
- */
- final MyIntegrityAudit integrityAudit = makeAuditor("pdp1", A_SEQ_PU);
-
- /*
- * Start audit for pdp2.
- */
- final MyIntegrityAudit integrityAudit2 = makeAuditor("pdp2", A_SEQ_PU);
-
- /*
- * Instantiate audit object for pdp3.
- */
- final 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/IntegrityAuditTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTest.java
deleted file mode 100644
index bd0aad55..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation
- * ================================================================================
- * 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.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.Properties;
-import org.junit.jupiter.api.Test;
-
-class IntegrityAuditTest {
- private static final String PROPERTIES = "properties";
- private static final String RESOURCE_NAME = "resourceName";
- private static final String SOMETHING = "something";
-
- /**
- * Test if we can access the updated bad params outside of the parmsAreBad method.
- */
- @Test
- void testParmsAreBad() {
- // Try with 2 null params
- StringBuilder badParams = new StringBuilder();
- IntegrityAudit.parmsAreBad(null, SOMETHING, null, badParams);
-
- assertNotEquals("", badParams.toString());
- assertTrue(badParams.toString().contains(RESOURCE_NAME));
- assertTrue(badParams.toString().contains(PROPERTIES));
-
- // Try with 1 null params
- badParams = new StringBuilder();
- Properties props = new Properties();
- props.put(IntegrityAuditProperties.DB_DRIVER, "test_db_driver");
- IntegrityAudit.parmsAreBad(null, SOMETHING, props, badParams);
-
- assertNotEquals("", badParams.toString());
- assertTrue(badParams.toString().contains(RESOURCE_NAME));
- assertFalse(badParams.toString().contains(PROPERTIES));
-
- // Try with 0 null params
- badParams = new StringBuilder();
- IntegrityAudit.parmsAreBad("someting", SOMETHING, props, badParams);
- assertNotEquals("", badParams.toString());
- assertFalse(badParams.toString().contains(RESOURCE_NAME));
- 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);
- assertNotEquals("", 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
deleted file mode 100644
index e0c22a1e..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/IntegrityAuditTestBase.java
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2019, 2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2023-2024 Nordix Foundation.
- * ================================================================================
- * 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.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.Logger;
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityManagerFactory;
-import jakarta.persistence.EntityTransaction;
-import jakarta.persistence.Persistence;
-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.Semaphore;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Supplier;
-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.onap.policy.common.utils.time.CurrentTime;
-import org.onap.policy.common.utils.time.TestTime;
-import org.slf4j.LoggerFactory;
-import org.springframework.test.util.ReflectionTestUtils;
-
-/**
- * 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.
- */
-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";
-
-
- /**
- * Name of the field within the AuditorTime class that supplies the time.
- */
- public static final String TIME_SUPPLY_FIELD = "supplier";
-
-
- /**
- * Max time, in milliseconds, to wait for a semaphore.
- */
- protected static final long WAIT_MS = 5000L;
-
- /**
- * Number of seconds in an audit period.
- */
- public static final int AUDIT_PERIOD_SEC = 5;
-
- public static final String DEFAULT_DB_URL_PREFIX = "jdbc:h2:mem:";
-
- protected static final String DB_DRIVER = "org.h2.Driver";
- protected static final String DB_USER = "testu";
- protected static final String DB_PASS = "testp";
- protected static final String SITE_NAME = "SiteA";
- protected static final String NODE_TYPE = "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 = "Running audit for persistenceUnit=\\w+ on 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;
-
- /**
- * Current time used by given test.
- */
- private static ThreadLocal<TestTime> testTime = ThreadLocal.withInitial(() -> null);
-
- /**
- * Supplies the test time so that each thread maintains its own notion of "current"
- * time.
- */
- private static Supplier<TestTime> timeSupplier = () -> testTime.get();
-
- /**
- * 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 time, to be restored once all tests complete.
- */
- private static Supplier<CurrentTime> savedTime;
-
- /**
- * 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 dbUrl the URL to the DB
- * @throws IOException if an IO error occurs
- */
- @SuppressWarnings("unchecked")
- 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
- savedTime = (Supplier<CurrentTime>) ReflectionTestUtils.getField(AuditorTime.class, TIME_SUPPLY_FIELD);
- savedDebugLevel = debugLogger.getLevel();
- savedErrorLevel = errorLogger.getLevel();
-
- IntegrityAudit.setUnitTesting(true);
-
- properties = new Properties();
- properties.put(IntegrityAuditProperties.DB_DRIVER, DB_DRIVER);
- properties.put(IntegrityAuditProperties.DB_URL, dbUrl);
- properties.put(IntegrityAuditProperties.DB_USER, DB_USER);
- properties.put(IntegrityAuditProperties.DB_PWD, DB_PASS);
- properties.put(IntegrityAuditProperties.SITE_NAME, SITE_NAME);
- properties.put(IntegrityAuditProperties.NODE_TYPE, NODE_TYPE);
-
- 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();
-
- ReflectionTestUtils.setField(AuditorTime.class, TIME_SUPPLY_FIELD, timeSupplier);
- debugLogger.setLevel(Level.DEBUG);
- errorLogger.setLevel(Level.ERROR);
- }
-
- /**
- * Restores the configuration to what it was before the test.
- */
- protected static void tearDownAfterClass() {
-
- IntegrityAudit.setUnitTesting(false);
-
- ReflectionTestUtils.setField(AuditorTime.class, TIME_SUPPLY_FIELD, savedTime);
- 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_SECONDS, String.valueOf(AUDIT_PERIOD_SEC));
-
- TestTime time = new TestTime();
- testTime.set(time);
-
- // Clean up the DB
- try (EntityTransCloser etc = new EntityTransCloser(em.getTransaction())) {
- EntityTransaction et = etc.getTransaction();
-
- 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();
- }
- }
-
- /**
- * Get the test time.
- *
- * @return the {@link TestTime} in use by this thread
- */
- public static TestTime getTestTime() {
- return testTime.get();
- }
-
- /**
- * Truncate the table.
- *
- * @param properties the properties
- * @param persistenceUnit the persistence unit
- * @param tableName the name of the table
- */
- 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 entmgr = emc.getManager();
- EntityTransaction entrans = etc.getTransaction();
-
- // Clean up the DB
- entmgr.createQuery("Delete from " + tableName).executeUpdate();
-
- // commit transaction
- entrans.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 app where data has been logged
- * @param items items that should be matched by the items extracted from the log, in order
- * @throws IOException if an IO error occurs
- * @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 extractedText : app.getExtracted()) {
- if (extractedText.equals(expected)) {
- if (!it.hasNext()) {
- // matched all of the items
- return;
- }
-
- last = expected;
- expected = it.next();
-
- } else if (!extractedText.equals(last)) {
- List<String> remaining = getRemaining(expected, it);
- fail("missing items " + remaining + ", but was: " + extractedText);
- }
- }
-
- List<String> remaining = getRemaining(expected, it);
- assertTrue(remaining.isEmpty(), "missing items " + remaining);
- }
-
- /**
- * 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)) {
- errorLogger.error("failed to stop audit thread");
- return false;
- }
-
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
-
- return true;
- }
-
- /**
- * Makes a new auditor.
- *
- * @param resourceName2 the name of the resource
- * @param persistenceUnit2 the persistence unit
- * @return a new auditor
- * @throws Exception if an error occurs
- */
- protected MyIntegrityAudit makeAuditor(String resourceName2, String persistenceUnit2) throws Exception {
- // each auditor gets its own notion of time
- TestTime time = new TestTime();
-
- // use the auditor-specific time while this thread constructs things
- testTime.set(time);
-
- return new MyIntegrityAudit(resourceName2, persistenceUnit2, makeProperties(), time);
- }
-
- /**
- * 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 the auditors
- * @throws InterruptedException if a thread is interrupted
- */
- protected void waitStaleAndRun(MyIntegrityAudit... auditors) throws InterruptedException {
- waitStale();
- runAudit(auditors);
- }
-
- /**
- * Runs an audit on several auditors in parallel.
- *
- * @param auditors the auditors
- * @throws InterruptedException if a thread is interrupted
- */
- protected void runAudit(MyIntegrityAudit... auditors) throws InterruptedException {
-
- // start an audit cycle on each auditor
- List<Semaphore> semaphores = new ArrayList<>(auditors.length);
- for (MyIntegrityAudit p : auditors) {
- semaphores.add(p.startAudit());
- }
-
- // wait for each auditor to complete its cycle
- for (Semaphore sem : semaphores) {
- waitSem(sem);
- }
- }
-
- /**
- * Waits for a semaphore to be released.
- *
- * @param sem the semaphore for which to wait
- * @throws InterruptedException if the thread is interrupted
- * @throws AssertionError if the semaphore did not reach zero in the allotted time
- */
- protected void waitSem(Semaphore sem) throws InterruptedException {
- assertTrue(sem.tryAcquire(WAIT_MS, TimeUnit.MILLISECONDS));
- }
-
- /**
- * Sleep a bit so that the currently designated pdp becomes stale.
- *
- * @throws InterruptedException if the thread is interrupted
- */
- protected void waitStale() throws InterruptedException {
- // waits for ALL auditors to become stale, as each has its own timer
- for (MyIntegrityAudit auditor : auditors) {
- auditor.sleep(AuditThread.AUDIT_COMPLETION_INTERVAL * AuditThread.AUDIT_RESET_CYCLES + 1);
- }
- }
-
- /**
- * 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();
- }
-
- void detach() {
- logger.detachAppender(appender);
- }
- }
-
- /**
- * Manages audits by inserting semaphores into a queue for the AuditThread to count.
- */
- protected class MyIntegrityAudit extends IntegrityAudit {
-
- private final TestTime myTime;
-
- /**
- * Semaphore on which the audit thread should wait.
- */
- private Semaphore auditSem = null;
-
- /**
- * Semaphore on which the junit management thread should wait.
- */
- private Semaphore junitSem = null;
-
- /**
- * Constructs an auditor and starts the AuditThread.
- *
- * @param resourceName the resource name
- * @param persistenceUnit the persistence unit
- * @param properties the properties
- * @param time the time
- * @throws Exception if an error occurs
- */
- public MyIntegrityAudit(String resourceName, String persistenceUnit,
- Properties properties, TestTime time) throws Exception {
- super(resourceName, persistenceUnit, properties);
-
- myTime = time;
- testTime.set(myTime);
-
- auditors.add(this);
-
- startAuditThread();
- }
-
- /**
- * Get time in milliseconds.
- *
- * @return the "current" time for the auditor
- */
- public long getTimeInMillis() {
- return myTime.getMillis();
- }
-
- /**
- * Sleeps for a period of time.
- *
- * @param sleepMs time to sleep
- * @throws InterruptedException can be interrupted
- */
- void sleep(long sleepMs) throws InterruptedException {
- myTime.sleep(sleepMs);
- }
-
- /**
- * Interrupts the AuditThread.
- */
- void interrupt() {
- super.stopAuditThread();
- }
-
- /**
- * Triggers an audit by releasing the audit thread's semaphore.
- *
- * @return the semaphore on which to wait
- * @throws InterruptedException if the thread is interrupted
- */
- public Semaphore startAudit() throws InterruptedException {
- auditSem.release();
- return junitSem;
- }
-
- /**
- * Starts a new AuditThread. Creates a new pair of semaphores and associates them
- * with the thread.
- */
- @Override
- public final void startAuditThread() throws IntegrityAuditException {
- if (auditSem != null) {
- // release a bunch of semaphores, in case a thread is still running
- auditSem.release(1000);
- }
-
- auditSem = new Semaphore(0);
- junitSem = new Semaphore(0);
-
- super.startAuditThread();
-
- if (haveAuditThread()) {
- // tell the thread it can run
- auditSem.release();
-
- // wait for the thread to start
- try {
- waitSem(junitSem);
-
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- throw new IntegrityAuditException(e);
- }
- }
- }
-
- /**
- * 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));
- }
-
- @Override
- protected AuditThread makeAuditThread(String resourceName2, String persistenceUnit2, Properties properties2,
- int integrityAuditPeriodSeconds2) throws IntegrityAuditException {
-
- // make sure we're still using the auditor's time while we construct things
- testTime.set(myTime);
-
- return new AuditThread(resourceName2, persistenceUnit2, properties2, integrityAuditPeriodSeconds2, this) {
-
- private Semaphore auditSem = MyIntegrityAudit.this.auditSem;
- private Semaphore junitSem = MyIntegrityAudit.this.junitSem;
-
- @Override
- public void run() {
- // make sure our thread uses this auditor's time
- testTime.set(myTime);
- super.run();
- }
-
- @Override
- public void runStarted() throws InterruptedException {
- auditSem.acquire();
-
- junitSem.release();
- auditSem.acquire();
- }
-
- @Override
- public void auditCompleted() throws InterruptedException {
- junitSem.release();
- auditSem.acquire();
- }
-
- };
- }
- }
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/IaTestEntity.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/IaTestEntity.java
deleted file mode 100644
index 8a34909a..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/IaTestEntity.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Integrity Audit
- * ================================================================================
- * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2021, 2023 Nordix Foundation.
- * ================================================================================
- * 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.jpa;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.NamedQueries;
-import jakarta.persistence.NamedQuery;
-import jakarta.persistence.PrePersist;
-import jakarta.persistence.PreUpdate;
-import jakarta.persistence.Table;
-import jakarta.persistence.Temporal;
-import jakarta.persistence.TemporalType;
-import java.io.Serializable;
-import java.util.Date;
-
-@Entity
-@Table(name = "IaTestEntity")
-@NamedQueries({@NamedQuery(name = " IaTestEntity.findAll", query = "SELECT e FROM IaTestEntity e "),
- @NamedQuery(name = "IaTestEntity.deleteAll", query = "DELETE FROM IaTestEntity WHERE 1=1")})
-
-public class IaTestEntity implements Serializable {
- private static final long serialVersionUID = 1L;
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- @Column(name = "ImTestId")
- private long imTestId;
-
- @Column(name = "created_by", nullable = false, length = 255)
- private String createdBy = "guest";
-
- @Column(name = "person", nullable = false, length = 255)
- private PersonSample person;
-
- @Temporal(TemporalType.TIMESTAMP)
- @Column(name = "created_date", updatable = false)
- private Date createdDate;
-
- @Column(name = "modified_by", nullable = false, length = 255)
- private String modifiedBy = "guest";
-
- @Temporal(TemporalType.TIMESTAMP)
- @Column(name = "modified_date", nullable = false)
- private Date modifiedDate;
-
- public IaTestEntity() {
- super();
- }
-
- /**
- * PrePersist call back method.
- */
- @PrePersist
- public void prePersist() {
- Date date = new Date();
- this.createdDate = date;
- this.modifiedDate = date;
- }
-
- @PreUpdate
- public void preUpdate() {
- this.modifiedDate = new Date();
- }
-
- /**
- * The the Im test Id.
- *
- * @return the Id
- */
- public long getImTestId() {
- return imTestId;
- }
-
- /**
- * Get the createdBy.
- *
- * @return the createdBy
- */
- public String getCreatedBy() {
- return createdBy;
- }
-
- /**
- * Set the createdBy.
- *
- * @param createdBy the createdBy to set
- */
- public void setCreatedBy(String createdBy) {
- this.createdBy = createdBy;
- }
-
- /**
- * Get the modifiedBy.
- *
- * @return the modifiedBy
- */
- public String getModifiedBy() {
- return modifiedBy;
- }
-
- /**
- * Set the ModifiedBy.
- *
- * @param modifiedBy the modifiedBy to set
- */
- public void setModifiedBy(String modifiedBy) {
- this.modifiedBy = modifiedBy;
- }
-
- /**
- * Get the ModifiedDate.
- *
- * @return the modifiedDate
- */
- public Date getModifiedDate() {
- return modifiedDate;
- }
-
- /**
- * Set the ModifiedDate.
- *
- * @param modifiedDate the modifiedDate to set
- */
- public void setModifiedDate(Date modifiedDate) {
- this.modifiedDate = modifiedDate;
- }
-
- /**
- * Get the CreatedDate.
- *
- * @return the createdDate
- */
- public Date getCreatedDate() {
- return createdDate;
- }
-
- /**
- * Set the person.
- *
- * @param person the person to set
- */
- public void setPersonTest(PersonSample person) {
- this.person = person;
- }
-
- /**
- * Get the person.
- *
- * @return the person
- */
- public PersonSample getPersonTest() {
- return person;
- }
-}
diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/PersonSample.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/PersonSample.java
deleted file mode 100644
index 47fa843b..00000000
--- a/integrity-audit/src/test/java/org/onap/policy/common/ia/jpa/PersonSample.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * ============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.jpa;
-
-import java.io.Serializable;
-
-public class PersonSample implements Serializable {
-
- private static final long serialVersionUID = 1L;
- private String firstName;
- private String lastName;
- private int age;
-
- /**
- * Create an instance.
- *
- * @param first first name
- * @param last last name
- * @param age age
- */
- public PersonSample(String first, String last, int age) {
- this.firstName = first;
- this.lastName = last;
- this.age = age;
- }
-
- public String getFirstName() {
- return this.firstName;
- }
-
- public void setFirstName(String name) {
- this.firstName = name;
- }
-
- public String getLasttName() {
- return this.lastName;
- }
-
- public void setLastName(String name) {
- this.lastName = name;
- }
-
- public int getAge() {
- return this.age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
-}
diff --git a/integrity-audit/src/test/resources/log4j.properties b/integrity-audit/src/test/resources/log4j.properties
deleted file mode 100644
index 3defb164..00000000
--- a/integrity-audit/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,54 +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=========================================================
-###
-
-#
-# Use this properties for debugging and development.
-#
-#
-# For debug output, set root logger level to DEBUG and output to FILE and CONSOLE
-log4j.rootLogger=DEBUG, FILE, CONSOLE
-#log4j.rootLogger=INFO, FILE, CONSOLE
-
-# A1 is set to be a DailyRollingFileAppender.
-log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
-
-# Set the name of the file
-log4j.appender.FILE.File=IntegrityAudit.log
-
-# Set the immediate flush to true (default)
-log4j.appender.FILE.ImmediateFlush=true
-
-# Set the threshold to debug mode
-log4j.appender.FILE.Threshold=debug
-
-# Set the append to false, should not overwrite
-log4j.appender.FILE.Append=true
-
-# Set the DatePattern
-log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
-
-# A1 uses PatternLayout.
-log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
-log4j.appender.FILE.layout.ConversionPattern=%d{yyyy_MM_dd_HH_mm_ss_SSS} [%t] %-5p %l- %m%n
-
-# for Developments and Debugging
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy_MM_dd_HH_mm_ss_SSS} [%t] %-5p %l- %m%n
diff --git a/integrity-audit/src/test/resources/logback-test.xml b/integrity-audit/src/test/resources/logback-test.xml
deleted file mode 100644
index e3867e79..00000000
--- a/integrity-audit/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,258 +0,0 @@
-<!--
- ============LICENSE_START=======================================================
- Integrity Audit
- ================================================================================
- Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
- ================================================================================
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- 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="defaultPatternTimestamp"
- value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX, UTC}" />
-
- <property
- name="defaultPatternTarget"
- value="%X{requestId}|%X{serviceInstanceId}|%t|%X{serverName}|%X{serviceName}|%X{instanceUuid}" />
-
-
- <property
- name="defaultPatternDetails"
- value="%X{severity}|%X{serverIpAddress}|%X{server}|%X{clientIpAddress}" />
-
- <property
- name="defaultPattern"
- value="${defaultPatternTimestamp}|${defaultPatternTarget}|%p|${defaultPatternDetails}|%c||%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>${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>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>
-
- <!-- Appender for log testing -->
- <appender
- name="LoggingPatternTestAppender"
- class="ch.qos.logback.core.FileAppender">
- <file>${logDirectory}/logging-pattern-test.log</file>
- <param
- name="Append"
- value="false" />
- <encoder>
- <pattern>${defaultPattern}</pattern>
- </encoder>
- </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>
-
- <!-- Logger for default pattern test -->
- <logger
- name="org.onap.policy.common.ia.DefaultLoggingPatternTest"
- level="trace"
- additivity="false">
- <appender-ref ref="LoggingPatternTestAppender" />
- </logger>
-
-</configuration>
diff --git a/integrity-audit/src/test/resources/logger-test.expectedlog b/integrity-audit/src/test/resources/logger-test.expectedlog
deleted file mode 100644
index 69df8f96..00000000
--- a/integrity-audit/src/test/resources/logger-test.expectedlog
+++ /dev/null
@@ -1 +0,0 @@
-2019-12-05T13:24:14.110Z|TheRequestId|TheServiceInstanceId|main|TheServerName|TheServiceName|TheInstanceUuid|INFO|TheSeverity|TheServerIpAddress|TheServer|TheClientIpAddress|org.onap.policy.common.ia.DefaultLoggingPatternTest||This is a test logging string for logger
diff --git a/integrity-audit/src/test/resources/policyLogger.properties b/integrity-audit/src/test/resources/policyLogger.properties
deleted file mode 100644
index 42cf1cfd..00000000
--- a/integrity-audit/src/test/resources/policyLogger.properties
+++ /dev/null
@@ -1,45 +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=========================================================
-###
-
-################################### Set concurrentHashMap and timer info #######################
-#Timer initial delay and the delay between in milliseconds before task is to be execute.
-timer.delay.time=1000
-#Timer scheduleAtFixedRate period - time in milliseconds between successive task executions.
-check.interval= 30000
-#Longest time an event info can be stored in the concurrentHashMap for logging - in seconds.
-event.expired.time=86400
-#Size of the concurrentHashMap which stores the event starting time, etc - when its size reaches this limit, the Timer
-# gets executed to remove all expired records from this concurrentHashMap.
-concurrentHashMap.limit=5000
-#Size of the concurrentHashMap - when its size drops to this point, stop the Timer
-stop.check.point=2500
-################################### Set logging format #############################################
-# set EELF for EELF logging format, set LOG4J for using log4j, set SYSTEMOUT for using system.out.println
-logger.type=EELF
-#################################### Set level for EELF or SYSTEMOUT logging ##################################
-# Set level for debug file. Set DEBUG to enable .info, .warn and .debug; set INFO for enable .info and .warn; set OFF to
-# disable all
-debugLogger.level=DEBUG
-# Set level for metrics file. Set OFF to disable; set ON to enable
-metricsLogger.level=ON
-# Set level for error file. Set OFF to disable; set ON to enable
-error.level=ON
-# Set level for audit file. Set OFF to disable; set ON to enable
-audit.level=ON
diff --git a/integrity-audit/src/test/resources/xlogger-test.expectedlog b/integrity-audit/src/test/resources/xlogger-test.expectedlog
deleted file mode 100644
index a9ad4992..00000000
--- a/integrity-audit/src/test/resources/xlogger-test.expectedlog
+++ /dev/null
@@ -1 +0,0 @@
-2019-12-05T13:24:14.110Z|TheRequestId|TheServiceInstanceId|main|TheServerName|TheServiceName|TheInstanceUuid|INFO|TheSeverity|TheServerIpAddress|TheServer|TheClientIpAddress|org.onap.policy.common.ia.DefaultLoggingPatternTest||This is a test logging string for xlogger