[SDC-29] Amdocs OnBoard 1707 initial commit.
[sdc.git] / common / openecomp-logging-lib / openecomp-logging-core / src / test / java / org / openecomp / core / logging / RoutingTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.core.logging;
22
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;
33
34 import java.util.ArrayList;
35 import java.util.Collections;
36 import java.util.List;
37 import java.util.Map;
38 import java.util.concurrent.ConcurrentHashMap;
39 import java.util.function.Predicate;
40
41 /**
42  * TODO: Add more negative tests
43  *
44  * @author EVITALIY
45  * @since 17/08/2016.
46  */
47 public class RoutingTest {
48
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";
53
54   private Logger logger;
55   private Map<String, TestAppender> result = new ConcurrentHashMap<>();
56
57   @BeforeClass
58   public void setUp() {
59
60     SiftingAppender appender = new SiftingAppender();
61
62     EventTypeDiscriminator discriminator = new EventTypeDiscriminator();
63     discriminator.start();
64
65     appender.setDiscriminator(discriminator);
66     appender.setAppenderFactory((context, discriminatingValue) ->
67         result.computeIfAbsent(discriminatingValue, f -> {
68           TestAppender tmp = new TestAppender();
69           tmp.start();
70           return tmp;
71         }));
72
73     appender.start();
74
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);
80   }
81
82   @Test
83   public void testWarning() {
84     String msg = "This is a test warning";
85     logger.warn(msg);
86     TestAppender appender = result.get(ERROR);
87     Assert.assertTrue(appender.contains((event) ->
88         Level.WARN.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
89   }
90
91   @Test
92   public void testError() {
93     String msg = "This is a test error";
94     logger.error(msg);
95     TestAppender appender = result.get(ERROR);
96     Assert.assertTrue(appender.contains((event) ->
97         Level.ERROR.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
98   }
99
100   @Test
101   public void testDebug() {
102     String msg = "This is a test debug";
103     logger.debug(msg);
104     TestAppender appender = result.get(DEBUG);
105     Assert.assertTrue(appender.contains((event) ->
106         Level.DEBUG.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
107   }
108
109   @Test
110   public void testInfo() {
111     String msg = "This is a test info";
112     logger.info(msg);
113     TestAppender appender = result.get(ERROR);
114     Assert.assertTrue(appender.contains((event) ->
115         Level.INFO.equals(event.getLevel()) && msg.equals(event.getFormattedMessage())));
116   }
117
118   @Test
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())));
125   }
126
127   @Test
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())));
134   }
135
136   /**
137    * An appender that just accumulates messages in a list and enables to inspect them
138    *
139    * @author EVITALIY
140    * @since 17/08/2016.
141    */
142   private static class TestAppender extends AppenderBase<ILoggingEvent> {
143
144     private List<ILoggingEvent> events = Collections.synchronizedList(new ArrayList<>(10));
145
146     @Override
147     protected void append(ILoggingEvent event) {
148       this.events.add(event);
149     }
150
151     public boolean contains(Predicate<ILoggingEvent> predicate) {
152       return events.stream().anyMatch(predicate);
153     }
154   }
155 }