1 package ch.qos.logback.classic.boolex;
2
3 import static org.junit.Assert.assertFalse;
4 import static org.junit.Assert.assertTrue;
5 import static org.junit.Assert.fail;
6
7 import org.junit.Test;
8 import org.slf4j.MarkerFactory;
9
10 import ch.qos.logback.classic.Level;
11 import ch.qos.logback.classic.Logger;
12 import ch.qos.logback.classic.LoggerContext;
13 import ch.qos.logback.classic.pattern.ConverterTest;
14 import ch.qos.logback.classic.spi.LoggingEvent;
15 import ch.qos.logback.core.boolex.EvaluationException;
16 import ch.qos.logback.core.boolex.JaninoEventEvaluatorBase;
17 import ch.qos.logback.core.boolex.Matcher;
18
19 public class JaninoEventEvaluatorTest {
20
21 LoggerContext loggerContext = new LoggerContext();
22 Logger logger = loggerContext.getLogger(ConverterTest.class);
23
24 Matcher matcherX = new Matcher();
25
26 public JaninoEventEvaluatorTest() {
27 matcherX.setName("x");
28 matcherX.setRegex("^Some\\s.*");
29 matcherX.start();
30
31 }
32
33 LoggingEvent makeLoggingEvent(Exception ex) {
34 LoggingEvent e = new LoggingEvent(
35 ch.qos.logback.core.pattern.FormattingConverter.class.getName(),
36 logger, Level.INFO, "Some message", ex, null);
37 return e;
38 }
39
40 @Test
41 public void testBasic() throws Exception {
42 JaninoEventEvaluator jee = new JaninoEventEvaluator();
43 jee.setExpression("message.equals(\"Some message\")");
44 jee.setContext(loggerContext);
45 jee.start();
46
47 LoggingEvent event = makeLoggingEvent(null);
48
49 assertTrue(jee.evaluate(event));
50 }
51
52 @Test
53 public void testLevel() throws Exception {
54 JaninoEventEvaluator jee = new JaninoEventEvaluator();
55 jee.setExpression("level > DEBUG");
56 jee.setContext(loggerContext);
57 jee.start();
58
59 LoggingEvent event = makeLoggingEvent(null);
60
61 assertTrue(jee.evaluate(event));
62 }
63
64 @Test
65 public void testtimeStamp() throws Exception {
66 JaninoEventEvaluator jee = new JaninoEventEvaluator();
67 jee.setExpression("timeStamp > 10");
68 jee.setContext(loggerContext);
69 jee.start();
70
71 LoggingEvent event = makeLoggingEvent(null);
72 assertTrue(jee.evaluate(event));
73 }
74
75 @Test
76 public void testWithMatcher() throws Exception {
77
78 JaninoEventEvaluator jee = new JaninoEventEvaluator();
79 jee.setExpression("x.matches(message)");
80 jee.setContext(loggerContext);
81 jee.addMatcher(matcherX);
82 jee.start();
83
84 LoggingEvent event = makeLoggingEvent(null);
85 assertTrue(jee.evaluate(event));
86 }
87
88 @Test
89 public void testMarker() throws Exception {
90 JaninoEventEvaluator jee = new JaninoEventEvaluator();
91 jee.setExpression("marker.contains(\"BLUE\")");
92 jee.setContext(loggerContext);
93 jee.addMatcher(matcherX);
94 jee.start();
95
96 LoggingEvent event = makeLoggingEvent(null);
97 event.setMarker(MarkerFactory.getMarker("BLUE"));
98 assertTrue(jee.evaluate(event));
99 }
100
101 @Test
102 public void testWithNullMarker() throws Exception {
103 JaninoEventEvaluator jee = new JaninoEventEvaluator();
104 jee.setExpression("marker.contains(\"BLUE\")");
105 jee.setContext(loggerContext);
106 jee.addMatcher(matcherX);
107 jee.start();
108
109 LoggingEvent event = makeLoggingEvent(null);
110 try {
111 jee.evaluate(event);
112 fail("We should not reach this point");
113 } catch (EvaluationException ee) {
114
115 }
116 }
117
118 @Test
119 public void testComplex() throws Exception {
120
121 JaninoEventEvaluator jee = new JaninoEventEvaluator();
122 jee
123 .setExpression("level >= INFO && x.matches(message) && marker.contains(\"BLUE\")");
124 jee.setContext(loggerContext);
125 jee.addMatcher(matcherX);
126 jee.start();
127
128 LoggingEvent event = makeLoggingEvent(null);
129 event.setMarker(MarkerFactory.getMarker("BLUE"));
130 assertTrue(jee.evaluate(event));
131 }
132
133
134
135
136
137
138 @Test
139 public void testBogusExp1() {
140
141 JaninoEventEvaluator jee = new JaninoEventEvaluator();
142 jee.setExpression("mzzzz.get(\"key\").equals(null)");
143 jee.setContext(loggerContext);
144 jee.setName("bogus");
145 jee.start();
146
147 assertFalse(jee.isStarted());
148
149
150
151
152
153
154 }
155
156
157 @Test
158 public void testBogusExp2() {
159
160 JaninoEventEvaluator jee = new JaninoEventEvaluator();
161 jee.setExpression("mdc.get(\"keyXN89\").equals(null)");
162 jee.setContext(loggerContext);
163 jee.setName("bogus");
164 jee.start();
165
166 assertTrue(jee.isStarted());
167
168 LoggingEvent event = makeLoggingEvent(null);
169
170 for (int i = 0; i < JaninoEventEvaluatorBase.ERROR_THRESHOLD; i++) {
171 try {
172 jee.evaluate(event);
173 fail("should throw an exception");
174 } catch (EvaluationException e) {
175 }
176 }
177
178 assertFalse(jee.isStarted());
179
180 }
181
182 static final long LEN = 10 * 1000;
183
184
185
186
187
188 void loop(JaninoEventEvaluator jee, String msg) throws Exception {
189 LoggingEvent event = makeLoggingEvent(null);
190
191 for (int i = 0; i < LEN; i++) {
192 jee.evaluate(event);
193 }
194
195
196 }
197
198 @Test
199 public void testLoop1() throws Exception {
200 JaninoEventEvaluator jee = new JaninoEventEvaluator();
201 jee.setExpression("timeStamp > 10");
202 jee.setContext(loggerContext);
203 jee.start();
204
205 loop(jee, "timestamp > 10]: ");
206 }
207
208 @Test
209 public void testLoop2() throws Exception {
210 JaninoEventEvaluator jee = new JaninoEventEvaluator();
211 jee.setExpression("x.matches(message)");
212 jee.setContext(loggerContext);
213 jee.addMatcher(matcherX);
214 jee.start();
215
216 loop(jee, "x.matches(message): ");
217 }
218
219 }