adc1d8e71dfa98a89c85132c572b15a42832a565
[sdc.git] /
1 /*
2  * Copyright © 2016-2017 European Support Limited
3  *
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
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
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.
15  */
16
17 package org.openecomp.sdc.logging;
18
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;
30
31 import java.util.ArrayList;
32 import java.util.Collections;
33 import java.util.List;
34 import java.util.Map;
35 import java.util.concurrent.ConcurrentHashMap;
36 import java.util.function.Predicate;
37
38 /**
39  * TODO: Add more negative tests
40  *
41  * @author EVITALIY
42  * @since 17/08/2016.
43  */
44 public class RoutingTest {
45
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";
50
51   private Logger logger;
52   private final Map<String, TestAppender> result = new ConcurrentHashMap<>();
53
54   @BeforeClass
55   public void setUp() {
56
57     SiftingAppender appender = new SiftingAppender();
58
59     EventTypeDiscriminator discriminator = new EventTypeDiscriminator();
60     discriminator.start();
61
62     appender.setDiscriminator(discriminator);
63     appender.setAppenderFactory((context, discriminatingValue) ->
64         result.computeIfAbsent(discriminatingValue, f -> {
65           TestAppender tmp = new TestAppender();
66           tmp.start();
67           return tmp;
68         }));
69
70     appender.start();
71
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);
77   }
78
79   @Test
80   public void testWarning() {
81     String msg = "This is a test warning";
82     logger.warn(msg);
83     TestAppender appender = result.get(ERROR);
84     Assert.assertTrue(appender.contains((event) ->
85         Level.WARN.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
86   }
87
88   @Test
89   public void testError() {
90     String msg = "This is a test error";
91     logger.error(msg);
92     TestAppender appender = result.get(ERROR);
93     Assert.assertTrue(appender.contains((event) ->
94         Level.ERROR.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
95   }
96
97   @Test
98   public void testDebug() {
99     String msg = "This is a test debug";
100     logger.debug(msg);
101     TestAppender appender = result.get(DEBUG);
102     Assert.assertTrue(appender.contains((event) ->
103         Level.DEBUG.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
104   }
105
106   @Test
107   public void testInfo() {
108     String msg = "This is a test info";
109     logger.info(msg);
110     TestAppender appender = result.get(ERROR);
111     Assert.assertTrue(appender.contains((event) ->
112         Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
113   }
114
115   @Test
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())));
122   }
123
124   @Test
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())));
131   }
132
133   /**
134    * An appender that just accumulates messages in a list and enables to inspect them
135    *
136    * @author EVITALIY
137    * @since 17/08/2016.
138    */
139   private static class TestAppender extends AppenderBase<ILoggingEvent> {
140
141     private final List<ILoggingEvent> events = Collections.synchronizedList(new ArrayList<>(10));
142
143     @Override
144     protected void append(ILoggingEvent event) {
145       this.events.add(event);
146     }
147
148     boolean contains(Predicate<ILoggingEvent> predicate) {
149       return events.stream().anyMatch(predicate);
150     }
151   }
152 }