View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.routing.filters;
8   
9   import org.mule.DefaultMuleMessage;
10  import org.mule.MessageExchangePattern;
11  import org.mule.RequestContext;
12  import org.mule.api.MuleMessage;
13  import org.mule.api.transport.PropertyScope;
14  import org.mule.tck.junit4.AbstractMuleContextTestCase;
15  
16  import java.util.HashMap;
17  import java.util.Map;
18  
19  import org.junit.Test;
20  
21  import static org.junit.Assert.assertEquals;
22  import static org.junit.Assert.assertFalse;
23  import static org.junit.Assert.assertTrue;
24  
25  public class MessagePropertyFilterTestCase extends AbstractMuleContextTestCase
26  {
27      @Test
28      public void testMessagePropertyFilter() throws Exception
29      {
30          MessagePropertyFilter filter = new MessagePropertyFilter("foo=bar");
31          MuleMessage message = new DefaultMuleMessage("blah", muleContext);
32          assertTrue(!filter.accept(message));
33          message.setOutboundProperty("foo", "bar");
34          assertTrue("Filter didn't accept the message", filter.accept(message));
35      }
36  
37      @Test
38      public void testMessagePropertyFilterSessionScope() throws Exception
39      {
40          MuleMessage message = new DefaultMuleMessage("blah", muleContext);
41          RequestContext.setEvent(getTestEvent(message));
42          MessagePropertyFilter filter = new MessagePropertyFilter("foo=bar");
43          filter.setScope(PropertyScope.SESSION_NAME);
44          assertFalse(filter.accept(message));
45          message.setSessionProperty("foo", "bar");
46          assertTrue("Filter didn't accept the message", filter.accept(message));
47      }
48  
49      @Test
50      public void testMessagePropertyFilterInboundScope() throws Exception
51      {
52          DefaultMuleMessage message = new DefaultMuleMessage("blah", muleContext);
53          RequestContext.setEvent(getTestEvent(message));
54          MessagePropertyFilter filter = new MessagePropertyFilter("inbound:foo=bar");
55          assertEquals("inbound", filter.getScope());
56  
57          assertFalse(filter.accept(message));
58          message.setInboundProperty("foo", "bar");
59          assertTrue("Filter didn't accept the message", filter.accept(message));
60      }
61  
62      @Test
63      public void testMessagePropertyFilterWithURL() throws Exception
64      {
65          DefaultMuleMessage message = new DefaultMuleMessage("blah", muleContext);
66          RequestContext.setEvent(getTestEvent(message));
67          MessagePropertyFilter filter = new MessagePropertyFilter("inbound:foo=http://foo.com");
68          assertEquals("inbound", filter.getScope());
69  
70          assertFalse(filter.accept(message));
71  
72          Map inboundProps = new HashMap();
73          inboundProps.put("foo", "http://foo.com");
74          message = new DefaultMuleMessage("blah", inboundProps, null, null, muleContext);
75          assertTrue("Filter didn't accept the message", filter.accept(message));
76  
77          //Checking here that a ':' in the value doesn't throw things off
78          filter = new MessagePropertyFilter("bar=http://bar.com");
79          //default scope
80          assertEquals("outbound", filter.getScope());
81  
82          assertFalse(filter.accept(message));
83          message.setOutboundProperty("bar", "http://bar.com");
84          assertTrue("Filter didn't accept the message", filter.accept(message));
85      }
86  
87      @Test
88      public void testMessagePropertyFilterWithNot() throws Exception
89      {
90          MessagePropertyFilter filter = new MessagePropertyFilter("foo!=bar");
91          MuleMessage message = new DefaultMuleMessage("blah", muleContext);
92  
93          assertTrue("Filter didn't accept the message", filter.accept(message));
94          message.setOutboundProperty("foo", "bar");
95          assertFalse(filter.accept(message));
96          message.setOutboundProperty("foo", "car");
97          assertTrue("Filter didn't accept the message", filter.accept(message));
98      }
99  
100     @Test
101     public void testMessagePropertyFilterWithNotNull() throws Exception
102     {
103         MessagePropertyFilter filter = new MessagePropertyFilter("foo!=null");
104         MuleMessage message = new DefaultMuleMessage("blah", muleContext);
105 
106         assertFalse(filter.accept(message));
107         message.removeProperty("foo");
108         assertFalse(filter.accept(message));
109         message.setOutboundProperty("foo", "car");
110         assertTrue("Filter didn't accept the message", filter.accept(message));
111     }
112 
113     @Test
114     public void testMessagePropertyFilterWithCaseSensitivity() throws Exception
115     {
116         MessagePropertyFilter filter = new MessagePropertyFilter("foo=Bar");
117         MuleMessage message = new DefaultMuleMessage("blah", muleContext);
118         message.setOutboundProperty("foo", "bar");
119         assertFalse(filter.accept(message));
120         filter.setCaseSensitive(false);
121         assertTrue("Filter didn't accept the message", filter.accept(message));
122     }
123 
124 
125     @Test
126     public void testMessagePropertyFilterWithWildcard() throws Exception
127     {
128         MessagePropertyFilter filter = new MessagePropertyFilter("foo=B*");
129         MuleMessage message = new DefaultMuleMessage("blah", muleContext);
130         message.setOutboundProperty("foo", "bar");
131         assertFalse(filter.accept(message));
132         filter.setCaseSensitive(false);
133         assertTrue("Filter didn't accept the message", filter.accept(message));
134         filter.setPattern("foo=*a*");
135         assertTrue("Filter didn't accept the message", filter.accept(message));
136     }
137 
138     @Test
139     public void testMessagePropertyFilterDodgyValues() throws Exception
140     {
141         MessagePropertyFilter filter = new MessagePropertyFilter();
142         assertFalse(filter.accept(null));
143 
144         filter = new MessagePropertyFilter("foo = bar");
145         MuleMessage message = new DefaultMuleMessage("blah", muleContext);
146         message.setOutboundProperty("foo", "bar");
147         assertTrue("Filter didn't accept the message", filter.accept(message));
148         filter.setCaseSensitive(false);
149 
150         filter = new MessagePropertyFilter("foo2 =null");
151         message.removeProperty("foo2");
152         assertTrue("Filter didn't accept the message", filter.accept(message));
153 
154         filter = new MessagePropertyFilter("foo2 =");
155         message.setOutboundProperty("foo2", "");
156         assertTrue("Filter didn't accept the message", filter.accept(message));
157 
158         message.removeProperty("foo2");
159         assertFalse(filter.accept(message));
160     }
161 
162 
163     @Test
164     public void testMessagePropertyFilterPropertyExists() throws Exception
165     {
166         MessagePropertyFilter filter = new MessagePropertyFilter("foo!=null");
167         MuleMessage message = new DefaultMuleMessage("blah", muleContext);
168 
169         assertFalse(filter.accept(message));
170         message.setOutboundProperty("foo", "car");
171         assertTrue("Filter didn't accept the message", filter.accept(message));
172     }
173 
174     @Test
175     public void testMessagePropertyWithEnum() throws Exception
176     {
177         MessagePropertyFilter filter = new MessagePropertyFilter("foo=ONE_WAY");
178         MuleMessage message = new DefaultMuleMessage("", muleContext);
179         assertFalse(filter.accept(message));
180         message.setOutboundProperty("foo", MessageExchangePattern.ONE_WAY);
181         assertTrue(filter.accept(message));
182     }
183 }