2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.core.logging;
23 import ch.qos.logback.classic.Level;
24 import ch.qos.logback.classic.Logger;
25 import ch.qos.logback.classic.sift.SiftingAppender;
26 import ch.qos.logback.classic.spi.ILoggingEvent;
27 import ch.qos.logback.core.AppenderBase;
28 import org.openecomp.core.logging.logback.EventTypeDiscriminator;
29 import org.slf4j.LoggerFactory;
30 import org.testng.Assert;
31 import org.testng.annotations.BeforeClass;
32 import org.testng.annotations.Test;
34 import java.util.ArrayList;
35 import java.util.Collections;
36 import java.util.List;
38 import java.util.concurrent.ConcurrentHashMap;
39 import java.util.function.Predicate;
42 * TODO: Add more negative tests
47 public class RoutingTest {
49 private static final String ERROR = "Error";
50 private static final String DEBUG = "Debug";
51 private static final String AUDIT = "Audit";
52 private static final String METRICS = "Metrics";
54 private Logger logger;
55 private Map<String, TestAppender> result = new ConcurrentHashMap<>();
60 SiftingAppender appender = new SiftingAppender();
62 EventTypeDiscriminator discriminator = new EventTypeDiscriminator();
63 discriminator.start();
65 appender.setDiscriminator(discriminator);
66 appender.setAppenderFactory((context, discriminatingValue) ->
67 result.computeIfAbsent(discriminatingValue, f -> {
68 TestAppender tmp = new TestAppender();
75 logger = (Logger) LoggerFactory.getLogger(RoutingTest.class.getName());
76 // prevent from writing into appenders attached via parent loggers
77 logger.setAdditive(false);
78 logger.addAppender(appender);
79 logger.setLevel(Level.DEBUG);
83 public void testWarning() {
84 String msg = "This is a test warning";
86 TestAppender appender = result.get(ERROR);
87 Assert.assertTrue(appender.contains((event) ->
88 Level.WARN.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
92 public void testError() {
93 String msg = "This is a test error";
95 TestAppender appender = result.get(ERROR);
96 Assert.assertTrue(appender.contains((event) ->
97 Level.ERROR.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
101 public void testDebug() {
102 String msg = "This is a test debug";
104 TestAppender appender = result.get(DEBUG);
105 Assert.assertTrue(appender.contains((event) ->
106 Level.DEBUG.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
110 public void testInfo() {
111 String msg = "This is a test info";
113 TestAppender appender = result.get(ERROR);
114 Assert.assertTrue(appender.contains((event) ->
115 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
119 public void testAudit() {
120 String msg = "This is a test audit";
121 logger.info(Markers.AUDIT, msg);
122 TestAppender appender = result.get(AUDIT);
123 Assert.assertTrue(appender.contains((event) ->
124 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
128 public void testMetrics() {
129 String msg = "This is a test metrics";
130 logger.info(Markers.METRICS, msg);
131 TestAppender appender = result.get(METRICS);
132 Assert.assertTrue(appender.contains((event) ->
133 Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
137 * An appender that just accumulates messages in a list and enables to inspect them
142 private static class TestAppender extends AppenderBase<ILoggingEvent> {
144 private List<ILoggingEvent> events = Collections.synchronizedList(new ArrayList<>(10));
147 protected void append(ILoggingEvent event) {
148 this.events.add(event);
151 public boolean contains(Predicate<ILoggingEvent> predicate) {
152 return events.stream().anyMatch(predicate);