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.slf4j.LoggerFactory;
26 import org.testng.Assert;
27 import org.testng.annotations.BeforeClass;
28 import org.testng.annotations.Test;
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.List;
34 import java.util.concurrent.ConcurrentHashMap;
35 import java.util.function.Predicate;
38 * TODO: Add more negative tests
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";
50 private Logger logger;
51 private Map<String, TestAppender> result = new ConcurrentHashMap<>();
56 SiftingAppender appender = new SiftingAppender();
58 EventTypeDiscriminator discriminator = new EventTypeDiscriminator();
59 discriminator.start();
61 appender.setDiscriminator(discriminator);
62 appender.setAppenderFactory((context, discriminatingValue) ->
63 result.computeIfAbsent(discriminatingValue, f -> {
64 TestAppender tmp = new TestAppender();
71 logger = (Logger) LoggerFactory.getLogger(RoutingTest.class.getName());
72 // prevent from writing into appenders attached via parent loggers
73 logger.setAdditive(false);
74 logger.addAppender(appender);
75 logger.setLevel(Level.DEBUG);
79 public void testWarning() {
80 String msg = "This is a test warning";
82 TestAppender appender = result.get(ERROR);
83 Assert.assertTrue(appender.contains((event) ->
84 Level.WARN.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
88 public void testError() {
89 String msg = "This is a test error";
91 TestAppender appender = result.get(ERROR);
92 Assert.assertTrue(appender.contains((event) ->
93 Level.ERROR.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
97 public void testDebug() {
98 String msg = "This is a test debug";
100 TestAppender appender = result.get(DEBUG);
101 Assert.assertTrue(appender.contains((event) ->
102 Level.DEBUG.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
106 public void testInfo() {
107 String msg = "This is a test info";
109 TestAppender appender = result.get(ERROR);
110 Assert.assertTrue(appender.contains((event) ->
111 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
115 public void testAudit() {
116 String msg = "This is a test audit";
117 logger.info(Markers.AUDIT, msg);
118 TestAppender appender = result.get(AUDIT);
119 Assert.assertTrue(appender.contains((event) ->
120 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
124 public void testMetrics() {
125 String msg = "This is a test metrics";
126 logger.info(Markers.METRICS, msg);
127 TestAppender appender = result.get(METRICS);
128 Assert.assertTrue(appender.contains((event) ->
129 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
133 * An appender that just accumulates messages in a list and enables to inspect them
138 private static class TestAppender extends AppenderBase<ILoggingEvent> {
140 private List<ILoggingEvent> events = Collections.synchronizedList(new ArrayList<>(10));
143 protected void append(ILoggingEvent event) {
144 this.events.add(event);
147 public boolean contains(Predicate<ILoggingEvent> predicate) {
148 return events.stream().anyMatch(predicate);