View Javadoc

1   /*
2    * $Id: ExpressionFilterTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.routing.filters;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleMessage;
15  import org.mule.message.DefaultExceptionPayload;
16  import org.mule.tck.AbstractMuleTestCase;
17  import org.mule.tck.testmodels.fruit.Apple;
18  
19  import java.io.IOException;
20  import java.util.HashMap;
21  import java.util.Map;
22  
23  public class ExpressionFilterTestCase extends AbstractMuleTestCase
24  {
25  
26      public void testHeaderFilter() throws Exception
27      {
28          ExpressionFilter filter = new ExpressionFilter("header", "foo=bar");
29          filter.setMuleContext(muleContext);
30          MuleMessage message = new DefaultMuleMessage("blah", muleContext);
31          assertTrue(!filter.accept(message));
32          message.setOutboundProperty("foo", "bar");
33          assertTrue(filter.accept(message));
34      }
35  
36      public void testHeaderFilterWithNot() throws Exception
37      {
38          ExpressionFilter filter = new ExpressionFilter("header", "foo!=bar");
39          filter.setMuleContext(muleContext);
40  
41          MuleMessage message = new DefaultMuleMessage("blah", muleContext);
42  
43          assertTrue(filter.accept(message));
44          message.setOutboundProperty("foo", "bar");
45          assertTrue(!filter.accept(message));
46          message.setOutboundProperty("foo", "car");
47          assertTrue(filter.accept(message));
48      }
49  
50      public void testHeaderFilterWithNotNull() throws Exception
51      {
52          ExpressionFilter filter = new ExpressionFilter("header", "foo!=null");
53          filter.setMuleContext(muleContext);
54  
55          MuleMessage message = new DefaultMuleMessage("blah", muleContext);
56  
57          assertTrue(!filter.accept(message));
58          message.removeProperty("foo");
59          assertTrue(!filter.accept(message));
60          message.setOutboundProperty("foo", "car");
61          assertTrue(filter.accept(message));
62      }
63  
64      public void testRegexFilterNoPattern()
65      {
66          // start with default
67          RegExFilter filter = new RegExFilter();
68          assertNull(filter.getPattern());
69          assertFalse(filter.accept("No tengo dinero"));
70  
71          // activate a pattern
72          filter.setPattern("(.*) brown fox");
73          assertTrue(filter.accept("The quick brown fox"));
74  
75          // remove pattern again, i.e. block all
76          filter.setPattern(null);
77          assertFalse(filter.accept("oh-oh"));
78      }
79  
80      public void testRegexFilter()
81      {
82  
83          ExpressionFilter filter = new ExpressionFilter("regex", "The quick (.*)");
84          filter.setMuleContext(muleContext);
85  
86          assertNotNull(filter.getExpression());
87  
88          assertTrue(filter.accept(new DefaultMuleMessage("The quick brown fox", muleContext)));
89          assertTrue(filter.accept(new DefaultMuleMessage("The quick ", muleContext)));
90  
91          assertTrue(!filter.accept(new DefaultMuleMessage("The quickbrown fox", muleContext)));
92          assertTrue(!filter.accept(new DefaultMuleMessage("he quick brown fox", muleContext)));
93      }
94  
95      public void testRegexFilterWithAngleBrackets()
96      {
97  
98          ExpressionFilter filter = new ExpressionFilter("#[regex:The number is [1-9]]");
99          filter.setMuleContext(muleContext);
100 
101         assertNotNull(filter.getExpression());
102 
103         assertTrue(filter.accept(new DefaultMuleMessage("The number is 4", muleContext)));
104         assertFalse(filter.accept(new DefaultMuleMessage("Say again?", muleContext)));
105 
106         assertFalse(filter.accept(new DefaultMuleMessage("The number is 0", muleContext)));
107     }
108 
109     public void testExceptionTypeFilter()
110     {
111         ExpressionFilter filter = new ExpressionFilter("exception-type:java.lang.Exception");
112         filter.setMuleContext(muleContext);
113 
114         MuleMessage m = new DefaultMuleMessage("test", muleContext);
115         assertTrue(!filter.accept(m));
116         m.setExceptionPayload(new DefaultExceptionPayload(new IllegalArgumentException("test")));
117         assertTrue(filter.accept(m));
118 
119         filter = new ExpressionFilter("exception-type:java.io.IOException");
120         assertTrue(!filter.accept(m));
121         m.setExceptionPayload(new DefaultExceptionPayload(new IOException("test")));
122         assertTrue(filter.accept(m));
123     }
124 
125     public void testPayloadTypeFilter()
126     {
127         ExpressionFilter filter = new ExpressionFilter("payload-type:org.mule.tck.testmodels.fruit.Apple");
128         filter.setMuleContext(muleContext);
129 
130         assertTrue(filter.accept(new DefaultMuleMessage(new Apple(), muleContext)));
131         assertTrue(!filter.accept(new DefaultMuleMessage("test", muleContext)));
132 
133         filter = new ExpressionFilter("payload-type:java.lang.String");
134         assertTrue(filter.accept(new DefaultMuleMessage("test", muleContext)));
135         assertTrue(!filter.accept(new DefaultMuleMessage(new Exception("test"), muleContext)));
136     }
137 
138     public void testWildcardFilterMultiplePatterns()
139     {
140         ExpressionFilter filter = new ExpressionFilter("wildcard:* brown*, The*");
141         filter.setMuleContext(muleContext);
142 
143         assertTrue(filter.accept(new DefaultMuleMessage("The quick brown fox", muleContext)));
144         assertTrue(filter.accept(new DefaultMuleMessage(" brown fox", muleContext)));
145         assertTrue(filter.accept(new DefaultMuleMessage("The quickbrown fox", muleContext)));
146     }
147 
148     public void testTrueString()
149     {
150         ExpressionFilter filter = new ExpressionFilter("payload:");
151         filter.setMuleContext(muleContext);
152 
153         filter.setNullReturnsTrue(true);
154 
155         assertTrue(filter.accept(new DefaultMuleMessage("true", muleContext)));
156         assertTrue(filter.accept(new DefaultMuleMessage("TRUE", muleContext)));
157         assertTrue(filter.accept(new DefaultMuleMessage("tRuE", muleContext)));
158     }
159 
160     public void testFalseString()
161     {
162         ExpressionFilter filter = new ExpressionFilter("payload:");
163         filter.setMuleContext(muleContext);
164 
165         filter.setNullReturnsTrue(false);
166 
167         assertFalse(filter.accept(new DefaultMuleMessage("false", muleContext)));
168         assertFalse(filter.accept(new DefaultMuleMessage("FALSE", muleContext)));
169         assertFalse(filter.accept(new DefaultMuleMessage("faLSe", muleContext)));
170     }
171 
172     public void testExpressionFilter()
173     {
174         ExpressionFilter filter = new ExpressionFilter("mule:message.header(foo?)");
175         filter.setMuleContext(muleContext);
176 
177         filter.setNullReturnsTrue(false);
178 
179         assertFalse(filter.accept(new DefaultMuleMessage("x", muleContext)));
180         Map headers = new HashMap(1);
181         headers.put("foo", "bar");
182         assertTrue(filter.accept(new DefaultMuleMessage("x", headers, muleContext)));
183     }
184 
185     public void testExpressionFilterWithFullSyntax()
186     {
187         ExpressionFilter filter = new ExpressionFilter("#[mule:message.header(foo?)]");
188         filter.setMuleContext(muleContext);
189 
190         filter.setNullReturnsTrue(false);
191 
192         assertFalse(filter.accept(new DefaultMuleMessage("x", muleContext)));
193         Map headers = new HashMap(1);
194         headers.put("foo", "bar");
195         assertTrue(filter.accept(new DefaultMuleMessage("x", headers, muleContext)));
196     }
197 }