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