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 org.openecomp.sdc.logging.logback.EventTypeDiscriminator;
25 import org.openecomp.sdc.logging.slf4j.Markers;
26 import org.slf4j.LoggerFactory;
27 import org.testng.Assert;
28 import org.testng.annotations.BeforeClass;
29 import org.testng.annotations.Test;
31 import java.util.ArrayList;
32 import java.util.Collections;
33 import java.util.List;
35 import java.util.concurrent.ConcurrentHashMap;
36 import java.util.function.Predicate;
39 * TODO: Add more negative tests
44 public class RoutingTest {
46 private static final String ERROR = "Error";
47 private static final String DEBUG = "Debug";
48 private static final String AUDIT = "Audit";
49 private static final String METRICS = "Metrics";
51 private Logger logger;
52 private final Map<String, TestAppender> result = new ConcurrentHashMap<>();
57 SiftingAppender appender = new SiftingAppender();
59 EventTypeDiscriminator discriminator = new EventTypeDiscriminator();
60 discriminator.start();
62 appender.setDiscriminator(discriminator);
63 appender.setAppenderFactory((context, discriminatingValue) ->
64 result.computeIfAbsent(discriminatingValue, f -> {
65 TestAppender tmp = new TestAppender();
72 logger = (Logger) LoggerFactory.getLogger(RoutingTest.class.getName());
73 // prevent from writing into appenders attached via parent loggers
74 logger.setAdditive(false);
75 logger.addAppender(appender);
76 logger.setLevel(Level.DEBUG);
80 public void testWarning() {
81 String msg = "This is a test warning";
83 TestAppender appender = result.get(ERROR);
84 Assert.assertTrue(appender.contains((event) ->
85 Level.WARN.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
89 public void testError() {
90 String msg = "This is a test error";
92 TestAppender appender = result.get(ERROR);
93 Assert.assertTrue(appender.contains((event) ->
94 Level.ERROR.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
98 public void testDebug() {
99 String msg = "This is a test debug";
101 TestAppender appender = result.get(DEBUG);
102 Assert.assertTrue(appender.contains((event) ->
103 Level.DEBUG.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
107 public void testInfo() {
108 String msg = "This is a test info";
110 TestAppender appender = result.get(ERROR);
111 Assert.assertTrue(appender.contains((event) ->
112 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
116 public void testAudit() {
117 String msg = "This is a test audit";
118 logger.info(Markers.AUDIT, msg);
119 TestAppender appender = result.get(AUDIT);
120 Assert.assertTrue(appender.contains((event) ->
121 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
125 public void testMetrics() {
126 String msg = "This is a test metrics";
127 logger.info(Markers.METRICS, msg);
128 TestAppender appender = result.get(METRICS);
129 Assert.assertTrue(appender.contains((event) ->
130 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
134 * An appender that just accumulates messages in a list and enables to inspect them
139 private static class TestAppender extends AppenderBase<ILoggingEvent> {
141 private final List<ILoggingEvent> events = Collections.synchronizedList(new ArrayList<>(10));
144 protected void append(ILoggingEvent event) {
145 this.events.add(event);
148 boolean contains(Predicate<ILoggingEvent> predicate) {
149 return events.stream().anyMatch(predicate);