2 * Copyright © 2016-2017 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.logging;
19 import ch.qos.logback.classic.Level;
20 import ch.qos.logback.classic.Logger;
21 import ch.qos.logback.classic.sift.SiftingAppender;
22 import ch.qos.logback.classic.spi.ILoggingEvent;
23 import ch.qos.logback.core.AppenderBase;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.List;
28 import java.util.concurrent.ConcurrentHashMap;
29 import java.util.function.Predicate;
30 import org.junit.Assert;
31 import org.junit.BeforeClass;
32 import org.junit.Test;
33 import org.openecomp.sdc.logging.logback.EventTypeDiscriminator;
34 import org.openecomp.sdc.logging.slf4j.Markers;
35 import org.slf4j.LoggerFactory;
38 * Routing of events to the correct appender.
43 public class RoutingTest {
45 private static final String ERROR = "Error";
46 private static final String DEBUG = "Debug";
47 private static final String AUDIT = "Audit";
48 private static final String METRICS = "Metrics";
49 private static final Map<String, TestAppender> result = new ConcurrentHashMap<>();
50 private static Logger logger;
53 public static void setUp() {
55 SiftingAppender appender = new SiftingAppender();
57 EventTypeDiscriminator discriminator = new EventTypeDiscriminator();
58 discriminator.start();
60 appender.setDiscriminator(discriminator);
61 appender.setAppenderFactory((context,
62 discriminatingValue) -> result.computeIfAbsent(discriminatingValue, f -> {
63 TestAppender tmp = new TestAppender();
70 logger = (Logger) LoggerFactory.getLogger(RoutingTest.class.getName());
71 // prevent from writing into appenders attached via parent loggers
72 logger.setAdditive(false);
73 logger.addAppender(appender);
74 logger.setLevel(Level.DEBUG);
78 public void testWarning() {
79 String msg = "This is a test warning";
81 TestAppender appender = result.get(ERROR);
82 Assert.assertTrue(appender.contains(
83 (event) -> Level.WARN.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
87 public void testError() {
88 String msg = "This is a test error";
90 TestAppender appender = result.get(ERROR);
91 Assert.assertTrue(appender.contains(
92 (event) -> Level.ERROR.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
96 public void testDebug() {
97 String msg = "This is a test debug";
99 TestAppender appender = result.get(DEBUG);
100 Assert.assertTrue(appender.contains(
101 (event) -> Level.DEBUG.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
105 public void testInfo() {
106 String msg = "This is a test info";
108 TestAppender appender = result.get(ERROR);
109 Assert.assertTrue(appender.contains(
110 (event) -> Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
114 public void testAudit() {
115 String msg = "This is a test audit";
116 logger.info(Markers.AUDIT, msg);
117 TestAppender appender = result.get(AUDIT);
118 Assert.assertTrue(appender.contains(
119 (event) -> Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
123 public void testMetrics() {
124 String msg = "This is a test metrics";
125 logger.info(Markers.METRICS, msg);
126 TestAppender appender = result.get(METRICS);
127 Assert.assertTrue(appender.contains(
128 (event) -> Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
132 * An appender that just accumulates messages in a list and enables to inspect them.
137 private static class TestAppender extends AppenderBase<ILoggingEvent> {
139 private final List<ILoggingEvent> events = Collections.synchronizedList(new ArrayList<>(10));
142 protected void append(ILoggingEvent event) {
143 this.events.add(event);
146 boolean contains(Predicate<ILoggingEvent> predicate) {
147 return events.stream().anyMatch(predicate);