1   /*
2    * $Id: ExpressionFilterTestCase.java 12370 2008-07-17 13:11:17Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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  
21  public class ExpressionFilterTestCase extends AbstractMuleTestCase
22  {
23  
24      public void testHeaderFilter() throws Exception
25      {
26          ExpressionFilter filter = new ExpressionFilter("header", "foo=bar");
27          MuleMessage message = new DefaultMuleMessage("blah");
28          assertTrue(!filter.accept(message));
29          message.setProperty("foo", "bar");
30          assertTrue(filter.accept(message));
31      }
32  
33      public void testHeaderFilterWithNot() throws Exception
34      {
35          ExpressionFilter filter = new ExpressionFilter("header", "foo!=bar");
36          MuleMessage message = new DefaultMuleMessage("blah");
37  
38          assertTrue(filter.accept(message));
39          message.setProperty("foo", "bar");
40          assertTrue(!filter.accept(message));
41          message.setProperty("foo", "car");
42          assertTrue(filter.accept(message));
43      }
44  
45      public void testHeaderFilterWithNotNull() throws Exception
46      {
47          ExpressionFilter filter = new ExpressionFilter("header", "foo!=null");
48          MuleMessage message = new DefaultMuleMessage("blah");
49  
50          assertTrue(!filter.accept(message));
51          message.removeProperty("foo");
52          assertTrue(!filter.accept(message));
53          message.setProperty("foo", "car");
54          assertTrue(filter.accept(message));
55      }
56  
57      public void testRegexFilterNoPattern()
58      {
59          // start with default
60          RegExFilter filter = new RegExFilter();
61          assertNull(filter.getPattern());
62          assertFalse(filter.accept("No tengo dinero"));
63  
64          // activate a pattern
65          filter.setPattern("(.*) brown fox");
66          assertTrue(filter.accept("The quick brown fox"));
67  
68          // remove pattern again, i.e. block all
69          filter.setPattern(null);
70          assertFalse(filter.accept("oh-oh"));
71      }
72  
73      public void testRegexFilter()
74      {
75  
76          ExpressionFilter filter = new ExpressionFilter("regex", "The quick (.*)");
77          assertNotNull(filter.getExpression());
78  
79          assertTrue(filter.accept(new DefaultMuleMessage("The quick brown fox")));
80          assertTrue(filter.accept(new DefaultMuleMessage("The quick ")));
81  
82          assertTrue(!filter.accept(new DefaultMuleMessage("The quickbrown fox")));
83          assertTrue(!filter.accept(new DefaultMuleMessage("he quick brown fox")));
84      }
85  
86      public void testExceptionTypeFilter()
87      {
88          ExpressionFilter filter = new ExpressionFilter("exception-type:java.lang.Exception");
89          MuleMessage m = new DefaultMuleMessage("test");
90          assertTrue(!filter.accept(m));
91          m.setExceptionPayload(new DefaultExceptionPayload(new IllegalArgumentException("test")));
92          assertTrue(filter.accept(m));
93  
94          filter = new ExpressionFilter("exception-type:java.io.IOException");
95          assertTrue(!filter.accept(m));
96          m.setExceptionPayload(new DefaultExceptionPayload(new IOException("test")));
97          assertTrue(filter.accept(m));
98      }
99  
100     public void testPayloadTypeFilter()
101     {
102         ExpressionFilter filter = new ExpressionFilter("payload-type:org.mule.tck.testmodels.fruit.Apple");
103 
104         assertTrue(filter.accept(new DefaultMuleMessage(new Apple())));
105         assertTrue(!filter.accept(new DefaultMuleMessage("test")));
106 
107         filter = new ExpressionFilter("payload-type:java.lang.String");
108         assertTrue(filter.accept(new DefaultMuleMessage("test")));
109         assertTrue(!filter.accept(new DefaultMuleMessage(new Exception("test"))));
110     }
111 
112     public void testWildcardFilterMultiplePatterns()
113     {
114         ExpressionFilter filter = new ExpressionFilter("wildcard:* brown*, The*");
115 
116         assertTrue(filter.accept(new DefaultMuleMessage("The quick brown fox")));
117         assertTrue(filter.accept(new DefaultMuleMessage(" brown fox")));
118         assertTrue(filter.accept(new DefaultMuleMessage("The quickbrown fox")));
119     }
120 
121     public void testTrueString()
122     {
123         ExpressionFilter filter = new ExpressionFilter("payload:");
124         filter.setNullReturnsTrue(true);
125 
126         assertTrue(filter.accept(new DefaultMuleMessage("true")));
127         assertTrue(filter.accept(new DefaultMuleMessage("TRUE")));
128         assertTrue(filter.accept(new DefaultMuleMessage("tRuE")));
129     }
130 
131     public void testFalseString()
132     {
133         ExpressionFilter filter = new ExpressionFilter("payload:");
134         filter.setNullReturnsTrue(false);
135 
136         assertFalse(filter.accept(new DefaultMuleMessage("false")));
137         assertFalse(filter.accept(new DefaultMuleMessage("FALSE")));
138         assertFalse(filter.accept(new DefaultMuleMessage("faLSe")));
139     }
140 
141     public void testOtherString()
142     {
143         ExpressionFilter filter = new ExpressionFilter("payload:");
144         filter.setNullReturnsTrue(false);
145 
146         assertFalse(filter.accept(new DefaultMuleMessage("otherTrueString")));
147         assertFalse(filter.accept(new DefaultMuleMessage("otherFalseString")));
148         assertFalse(filter.accept(new DefaultMuleMessage("!trueFALSE")));
149     }
150 }