diff options
author | Daniel Cruz <dc443y@att.com> | 2019-03-06 10:45:09 -0600 |
---|---|---|
committer | Daniel Cruz <dc443y@att.com> | 2019-03-13 12:11:55 -0500 |
commit | 57a44626324326fc3b29042398d2ccdaec5a7758 (patch) | |
tree | 1b26cdc89743306b337d0a22c7820effd5272d5b /policy-endpoints/src/test/java | |
parent | 5bee2c177fb15cad0ed3f78d5df999dac62da6a7 (diff) |
Add Network Logging Feature
This is part 1 of introducing the mdc filter feature. Network
logging has to have interception points in order to pre/post
process messages coming in from a network endpoint.
The OrderedService interface and OrderedServiceImpl of the
drools-pdp project have now been migrated to common but is
also left in drools-pdp to mitigate disruption to existing
features. However for features that need to use common's
OrderedServiceImpl and drools-pdp version of OrderedServiceImpl
there will be a conflict with getSequenceNumber(). So a migration
of the other features is suggested.
Network logging is moved to its own util class so that feature
hooks can be invoked any time an event is being logged by a
network logger. This util class will also be accessible to
drools-applications in the case where drools-applications
would like to invoke network logging features for REST events.
Change-Id: I83d7c46e5abb351486f841c3be4d9009f7992476
Issue-ID: POLICY-1499
Signed-off-by: Daniel Cruz <dc443y@att.com>
Diffstat (limited to 'policy-endpoints/src/test/java')
-rw-r--r-- | policy-endpoints/src/test/java/org/onap/policy/common/endpoints/utils/NetLoggerUtilTest.java | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/utils/NetLoggerUtilTest.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/utils/NetLoggerUtilTest.java new file mode 100644 index 00000000..6e84c137 --- /dev/null +++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/utils/NetLoggerUtilTest.java @@ -0,0 +1,268 @@ +/*- + * ============LICENSE_START======================================================= + * policy-endpoints + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.onap.policy.common.endpoints.utils; + +import static org.junit.Assert.assertEquals; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.AppenderBase; +import java.util.ArrayList; +import java.util.List; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; +import org.onap.policy.common.endpoints.features.NetLoggerFeatureApi; +import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType; +import org.slf4j.Logger; + +/** + * Test class for network log utilities such as logging and feature invocation. + */ +public class NetLoggerUtilTest { + + private static final String MESSAGE = "hello world!"; + /** + * Test feature used for junits. + */ + private static NetLoggerFeature netLoggerFeature; + + /** + * Obtains the test implementation of NetLoggerFeatureApi. + */ + @BeforeClass + public static void setUp() { + netLoggerFeature = (NetLoggerFeature) NetLoggerFeatureApi.providers.getList().get(0); + } + + /** + * Clears events list and resets return/exceptions flags before invoking every unit test. + */ + @Before + public void reset() { + TestAppender.clear(); + netLoggerFeature.setReturnValue(false, false); + netLoggerFeature.setExceptions(false, false); + } + + /** + * Tests obtaining the network logger instance. + */ + @Test + public void getNetworkLoggerTest() { + assertEquals("network", NetLoggerUtil.getNetworkLogger().getName()); + } + + /** + * Tests logging a message to the network logger and invoking features before/after logging. + */ + @Test + public void logTest() { + NetLoggerUtil.log(EventType.IN, CommInfrastructure.NOOP, "test-topic", MESSAGE); + assertEquals(3, TestAppender.events.size()); + } + + /** + * Tests that the network logger is used to log messages if a logger is not passed in. + */ + @Test + public void logDefaultTest() { + NetLoggerUtil.log(null, EventType.IN, CommInfrastructure.NOOP, "test-topic", MESSAGE); + assertEquals(3, TestAppender.events.size()); + assertEquals("network", TestAppender.events.get(0).getLoggerName()); + } + + /** + * Tests a NetLoggerFeature that replaces base implementation before logging. + */ + @Test + public void beforeLogReturnTrueTest() { + netLoggerFeature.setReturnValue(true, false); + NetLoggerUtil.log(null, EventType.IN, CommInfrastructure.NOOP, "test-topic", MESSAGE); + assertEquals(1, TestAppender.events.size()); + } + + /** + * Tests a NetLoggerFeature that post processes a logged message. + */ + @Test + public void afterLogReturnTrueTest() { + netLoggerFeature.setReturnValue(false, true); + NetLoggerUtil.log(null, EventType.IN, CommInfrastructure.NOOP, "test-topic", MESSAGE); + assertEquals(3, TestAppender.events.size()); + } + + /** + * Tests throwing an exception in the before hook. + */ + @Test + public void beforeLogExceptionTest() { + netLoggerFeature.setExceptions(true, false); + NetLoggerUtil.log(null, EventType.IN, CommInfrastructure.NOOP, "test-topic", MESSAGE); + assertEquals(2, TestAppender.events.size()); + } + + /** + * Tests throwing an exception in the after hook. + */ + @Test + public void afterLogExceptionTest() { + netLoggerFeature.setExceptions(false, true); + NetLoggerUtil.log(null, EventType.IN, CommInfrastructure.NOOP, "test-topic", MESSAGE); + assertEquals(2, TestAppender.events.size()); + } + + /** + * A custom list appender to track messages being logged to the network logger. + * NOTE: Check src/test/resources/logback-test.xml for network logger configurations. + */ + public static class TestAppender extends AppenderBase<ILoggingEvent> { + + /** + * List of logged events. + */ + public static List<ILoggingEvent> events = new ArrayList<>(); + + /** + * Called after every unit test to clear list of events. + */ + public static void clear() { + events.clear(); + } + + /** + * Appends each event to the event list. + */ + @Override + protected void append(ILoggingEvent event) { + events.add(event); + } + + } + + /** + * Test implementation of NetLoggerFeatureApi to be used by junits. + */ + public static class NetLoggerFeature implements NetLoggerFeatureApi { + + /** + * Used for setting the return values of before/after hooks. + */ + private boolean beforeReturn = false; + private boolean afterReturn = false; + + /** + * Used for throwing an exception in the before/after hooks. + */ + private boolean beforeException = false; + private boolean afterException = false; + + + /** + * Gets sequence number. + */ + @Override + public int getSequenceNumber() { + return 0; + } + + /** + * Get beforeLog return value. + */ + public boolean getBeforeReturn() { + return this.beforeReturn; + } + + /** + * Get afterLog return value. + */ + public boolean getAfterReturn() { + return this.afterReturn; + } + + /** + * Sets the return value for the before/after hooks. + * + * @param beforeVal beforeLog() return value + * @param afterVal afterLog() return value + */ + public void setReturnValue(boolean beforeVal, boolean afterVal) { + this.beforeReturn = beforeVal; + this.afterReturn = afterVal; + } + + /** + * Gets beforeException boolean. + */ + public boolean getBeforeException() { + return this.beforeException; + } + + /** + * Gets afterException boolean. + */ + public boolean getAfterException() { + return this.afterException; + } + + /** + * Sets before/after flags to determine if the feature should throw an exception. + */ + public void setExceptions(boolean beforeException, boolean afterException) { + this.beforeException = beforeException; + this.afterException = afterException; + } + + /** + * Simple beforeLog message. + */ + @Override + public boolean beforeLog(Logger eventLogger, EventType type, CommInfrastructure protocol, String topic, + String message) { + + if (beforeException) { + throw new RuntimeException("beforeLog exception"); + } + + eventLogger.info("before feature test"); + + return this.beforeReturn; + } + + /** + * Simple afterLog message. + */ + @Override + public boolean afterLog(Logger eventLogger, EventType type, CommInfrastructure protocol, String topic, + String message) { + + if (afterException) { + throw new RuntimeException("afterLog exception"); + } + + eventLogger.info("after feature test"); + + return this.afterReturn; + } + + } + +} |