1
2
3
4
5
6
7 package org.mule.routing.filters;
8
9 import org.mule.DefaultMuleMessage;
10 import org.mule.api.MuleMessage;
11 import org.mule.message.DefaultExceptionPayload;
12 import org.mule.tck.junit4.AbstractMuleContextTestCase;
13 import org.mule.tck.testmodels.fruit.Apple;
14
15 import java.io.IOException;
16 import java.util.HashMap;
17 import java.util.Map;
18
19 import org.junit.Test;
20
21 import static org.junit.Assert.assertFalse;
22 import static org.junit.Assert.assertNotNull;
23 import static org.junit.Assert.assertNull;
24 import static org.junit.Assert.assertTrue;
25
26 public class ExpressionFilterTestCase extends AbstractMuleContextTestCase
27 {
28
29 @Test
30 public void testHeaderFilter() throws Exception
31 {
32 ExpressionFilter filter = new ExpressionFilter("header", "foo=bar");
33 filter.setMuleContext(muleContext);
34 MuleMessage message = new DefaultMuleMessage("blah", muleContext);
35 assertTrue(!filter.accept(message));
36 message.setOutboundProperty("foo", "bar");
37 assertTrue(filter.accept(message));
38 }
39
40 @Test
41 public void testVariableFilter() throws Exception
42 {
43 ExpressionFilter filter = new ExpressionFilter("variable", "foo=bar");
44 filter.setMuleContext(muleContext);
45 MuleMessage message = new DefaultMuleMessage("blah", muleContext);
46 assertTrue(!filter.accept(message));
47 message.setInvocationProperty("foo", "bar");
48 assertTrue(filter.accept(message));
49 }
50
51 @Test
52 public void testHeaderFilterWithNot() throws Exception
53 {
54 ExpressionFilter filter = new ExpressionFilter("header", "foo!=bar");
55 filter.setMuleContext(muleContext);
56
57 MuleMessage message = new DefaultMuleMessage("blah", muleContext);
58
59 assertTrue(filter.accept(message));
60 message.setOutboundProperty("foo", "bar");
61 assertTrue(!filter.accept(message));
62 message.setOutboundProperty("foo", "car");
63 assertTrue(filter.accept(message));
64 }
65
66 @Test
67 public void testVariableFilterWithNot() throws Exception
68 {
69 ExpressionFilter filter = new ExpressionFilter("variable", "foo!=bar");
70 filter.setMuleContext(muleContext);
71
72 MuleMessage message = new DefaultMuleMessage("blah", muleContext);
73
74 assertTrue(filter.accept(message));
75 message.setInvocationProperty("foo", "bar");
76 assertTrue(!filter.accept(message));
77 message.setInvocationProperty("foo", "car");
78 assertTrue(filter.accept(message));
79 }
80
81 @Test
82 public void testHeaderFilterWithNotNull() throws Exception
83 {
84 ExpressionFilter filter = new ExpressionFilter("header", "foo!=null");
85 filter.setMuleContext(muleContext);
86
87 MuleMessage message = new DefaultMuleMessage("blah", muleContext);
88
89 assertTrue(!filter.accept(message));
90 message.removeProperty("foo");
91 assertTrue(!filter.accept(message));
92 message.setOutboundProperty("foo", "car");
93 assertTrue(filter.accept(message));
94 }
95
96 @Test
97 public void testVariableFilterWithNotNull() throws Exception
98 {
99 ExpressionFilter filter = new ExpressionFilter("variable", "foo!=null");
100 filter.setMuleContext(muleContext);
101
102 MuleMessage message = new DefaultMuleMessage("blah", muleContext);
103
104 assertTrue(!filter.accept(message));
105 message.removeProperty("foo");
106 assertTrue(!filter.accept(message));
107 message.setInvocationProperty("foo", "car");
108 assertTrue(filter.accept(message));
109 }
110
111 @Test
112 public void testRegexFilterNoPattern()
113 {
114
115 RegExFilter filter = new RegExFilter();
116 assertNull(filter.getPattern());
117 assertFalse(filter.accept("No tengo dinero"));
118
119
120 filter.setPattern("(.*) brown fox");
121 assertTrue(filter.accept("The quick brown fox"));
122
123
124 filter.setPattern(null);
125 assertFalse(filter.accept("oh-oh"));
126 }
127
128 @Test
129 public void testRegexFilter()
130 {
131
132 ExpressionFilter filter = new ExpressionFilter("regex", "The quick (.*)");
133 filter.setMuleContext(muleContext);
134
135 assertNotNull(filter.getExpression());
136
137 assertTrue(filter.accept(new DefaultMuleMessage("The quick brown fox", muleContext)));
138 assertTrue(filter.accept(new DefaultMuleMessage("The quick ", muleContext)));
139
140 assertTrue(!filter.accept(new DefaultMuleMessage("The quickbrown fox", muleContext)));
141 assertTrue(!filter.accept(new DefaultMuleMessage("he quick brown fox", muleContext)));
142 }
143
144 @Test
145 public void testRegexFilterWithAngleBrackets()
146 {
147
148 ExpressionFilter filter = new ExpressionFilter("#[regex:The number is [1-9]]");
149 filter.setMuleContext(muleContext);
150
151 assertNotNull(filter.getExpression());
152
153 assertTrue(filter.accept(new DefaultMuleMessage("The number is 4", muleContext)));
154 assertFalse(filter.accept(new DefaultMuleMessage("Say again?", muleContext)));
155
156 assertFalse(filter.accept(new DefaultMuleMessage("The number is 0", muleContext)));
157 }
158
159 @Test
160 public void testExceptionTypeFilter()
161 {
162 ExpressionFilter filter = new ExpressionFilter("exception-type:java.lang.Exception");
163 filter.setMuleContext(muleContext);
164
165 MuleMessage m = new DefaultMuleMessage("test", muleContext);
166 assertTrue(!filter.accept(m));
167 m.setExceptionPayload(new DefaultExceptionPayload(new IllegalArgumentException("test")));
168 assertTrue(filter.accept(m));
169
170 filter = new ExpressionFilter("exception-type:java.io.IOException");
171 assertTrue(!filter.accept(m));
172 m.setExceptionPayload(new DefaultExceptionPayload(new IOException("test")));
173 assertTrue(filter.accept(m));
174 }
175
176 @Test
177 public void testPayloadTypeFilter()
178 {
179 ExpressionFilter filter = new ExpressionFilter("payload-type:org.mule.tck.testmodels.fruit.Apple");
180 filter.setMuleContext(muleContext);
181
182 assertTrue(filter.accept(new DefaultMuleMessage(new Apple(), muleContext)));
183 assertTrue(!filter.accept(new DefaultMuleMessage("test", muleContext)));
184
185 filter = new ExpressionFilter("payload-type:java.lang.String");
186 assertTrue(filter.accept(new DefaultMuleMessage("test", muleContext)));
187 assertTrue(!filter.accept(new DefaultMuleMessage(new Exception("test"), muleContext)));
188 }
189
190 @Test
191 public void testWildcardFilterMultiplePatterns()
192 {
193 ExpressionFilter filter = new ExpressionFilter("wildcard:* brown*, The*");
194 filter.setMuleContext(muleContext);
195
196 assertTrue(filter.accept(new DefaultMuleMessage("The quick brown fox", muleContext)));
197 assertTrue(filter.accept(new DefaultMuleMessage(" brown fox", muleContext)));
198 assertTrue(filter.accept(new DefaultMuleMessage("The quickbrown fox", muleContext)));
199 }
200
201 @Test
202 public void testTrueString()
203 {
204 ExpressionFilter filter = new ExpressionFilter("payload:");
205 filter.setMuleContext(muleContext);
206
207 filter.setNullReturnsTrue(true);
208
209 assertTrue(filter.accept(new DefaultMuleMessage("true", muleContext)));
210 assertTrue(filter.accept(new DefaultMuleMessage("TRUE", muleContext)));
211 assertTrue(filter.accept(new DefaultMuleMessage("tRuE", muleContext)));
212 }
213
214 @Test
215 public void testFalseString()
216 {
217 ExpressionFilter filter = new ExpressionFilter("payload:");
218 filter.setMuleContext(muleContext);
219
220 filter.setNullReturnsTrue(false);
221
222 assertFalse(filter.accept(new DefaultMuleMessage("false", muleContext)));
223 assertFalse(filter.accept(new DefaultMuleMessage("FALSE", muleContext)));
224 assertFalse(filter.accept(new DefaultMuleMessage("faLSe", muleContext)));
225 }
226
227 @Test
228 public void testExpressionFilter()
229 {
230 ExpressionFilter filter = new ExpressionFilter("mule:message.header(foo?)");
231 filter.setMuleContext(muleContext);
232
233 filter.setNullReturnsTrue(false);
234
235 assertFalse(filter.accept(new DefaultMuleMessage("x", muleContext)));
236 Map headers = new HashMap(1);
237 headers.put("foo", "bar");
238 assertTrue(filter.accept(new DefaultMuleMessage("x", headers, muleContext)));
239 }
240
241 @Test
242 public void testExpressionFilterWithFullSyntax()
243 {
244 ExpressionFilter filter = new ExpressionFilter("#[mule:message.header(foo?)]");
245 filter.setMuleContext(muleContext);
246
247 filter.setNullReturnsTrue(false);
248
249 assertFalse(filter.accept(new DefaultMuleMessage("x", muleContext)));
250 Map headers = new HashMap(1);
251 headers.put("foo", "bar");
252 assertTrue(filter.accept(new DefaultMuleMessage("x", headers, muleContext)));
253 }
254 }