View Javadoc

1   /*
2    * $Id: OGNLFilterTestCase.java 20529 2010-12-08 21:25:41Z dzapata $
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.api.config.ConfigurationException;
16  import org.mule.api.routing.OutboundRouterCollection;
17  import org.mule.module.client.MuleClient;
18  import org.mule.module.ognl.filters.OGNLFilter;
19  import org.mule.routing.outbound.FilteringOutboundRouter;
20  import org.mule.tck.FunctionalTestCase;
21  
22  public class OGNLFilterTestCase extends FunctionalTestCase
23  {
24      public static final String DEFAULT_INPUT_QUEUE = "vm://in";
25      public static final String DEFUALT_OUTPUT_QUEUE = "vm://out";
26      public static final String FIRST_MESSAGE = "foo";
27      public static final String SECOND_MESSAGE = "foobar";
28      public static final String THIRD_MESSAGE = "INPUT MESSAGE";
29      public static final long TIMEOUT = 5000;
30      public static final String OGNL_EXSPRESSION = " equals(\"foo\") || content.endsWith(\"bar\") ";
31      public static final String SERVICE_NAME = "OGNLServiceWrapper1";
32  
33      protected String getConfigResources()
34      {
35          return "ognl-functional-test.xml";
36      }
37  
38      private OGNLFilter filter;
39  
40      @Override
41      protected void doSetUp() throws Exception
42      {
43          filter = new OGNLFilter();
44      }
45  
46      @Override
47      protected void doTearDown() throws Exception
48      {
49          filter = null;
50      }
51  
52      public void testNewFilter()
53      {
54          assertFalse(filter.accept(null));
55      }
56  
57      public void testNoExpressionEmptyMessage()
58      {
59          MuleMessage message = new DefaultMuleMessage(null, muleContext);
60          assertFalse(filter.accept(message));
61      }
62  
63      public void testNoExpressionValidMessage()
64      {
65          MuleMessage message = new DefaultMuleMessage("foo", muleContext);
66          assertFalse(filter.accept(message));
67      }
68  
69      public void testNamespaceHandler()
70      {
71          String expression = ((OGNLFilter) ((FilteringOutboundRouter) ((OutboundRouterCollection) muleContext.getRegistry()
72              .lookupService(SERVICE_NAME)
73              .getOutboundMessageProcessor()).getRoutes().get(0)).getFilter()).getExpression();
74  
75          assertEquals(expression, OGNL_EXSPRESSION);
76      }
77  
78      public void testFunctionalTest() throws Exception
79      {
80          MuleClient client = new MuleClient(muleContext);
81          try
82          {
83              client.dispatch(DEFAULT_INPUT_QUEUE, FIRST_MESSAGE, null);
84              MuleMessage message = client.request(DEFUALT_OUTPUT_QUEUE, TIMEOUT);
85              assertNotNull(message);
86              assertNotNull(message.getPayload());
87              assertNull(message.getExceptionPayload());
88              assertEquals(FIRST_MESSAGE, message.getPayload());
89  
90              Dummy payload = new Dummy();
91              payload.setContent(SECOND_MESSAGE);
92              client.dispatch(DEFAULT_INPUT_QUEUE, new DefaultMuleMessage(payload, muleContext));
93              message = client.request(DEFUALT_OUTPUT_QUEUE, TIMEOUT);
94              assertNotNull(message);
95              assertNotNull(message.getPayload());
96              assertNull(message.getExceptionPayload());
97              assertEquals(SECOND_MESSAGE, ((Dummy) message.getPayload()).getContent());
98  
99              client.dispatch(DEFAULT_INPUT_QUEUE, THIRD_MESSAGE, null);
100             message = client.request(DEFUALT_OUTPUT_QUEUE, TIMEOUT);
101             assertNull(message);
102         }
103         finally
104         {
105             client.dispose();
106         }
107 
108     }
109 
110 
111     public void testFunctionalTestUsingExpressionFilter() throws Exception
112     {
113         MuleClient client = new MuleClient(muleContext);
114         try
115         {
116             client.dispatch("vm://in2", FIRST_MESSAGE, null);
117             MuleMessage message = client.request("vm://out2", TIMEOUT);
118             assertNotNull(message);
119             assertNotNull(message.getPayload());
120             assertNull(message.getExceptionPayload());
121             assertEquals(FIRST_MESSAGE, message.getPayload());
122 
123             Dummy payload = new Dummy();
124             payload.setContent(SECOND_MESSAGE);
125             client.dispatch("vm://in2", new DefaultMuleMessage(payload, muleContext));
126             message = client.request("vm://out2", TIMEOUT);
127             assertNotNull(message);
128             assertNotNull(message.getPayload());
129             assertNull(message.getExceptionPayload());
130             assertEquals(SECOND_MESSAGE, ((Dummy) message.getPayload()).getContent());
131 
132             client.dispatch("vm://in2", THIRD_MESSAGE, null);
133             message = client.request("vm://out2", TIMEOUT);
134             assertNull(message);
135         }
136         finally
137         {
138             client.dispose();
139         }
140 
141     }
142 
143     public void testInvalidObjectExpression()
144     {
145         try
146         {
147             filter.setExpression("foo:bar");
148             fail("should have failed with ConfigurationException");
149         }
150         catch (ConfigurationException configex)
151         {
152             // expected
153         }
154 
155         // make sure the filter is still unconfigured
156         assertNull(filter.getExpression());
157     }
158 
159     // a simple POJO for testing object expressions
160     private static class Dummy
161     {
162         private int id;
163         private String content;
164 
165         public Dummy()
166         {
167             super();
168         }
169 
170         /**
171          * @return Returns the content.
172          */
173         public String getContent()
174         {
175             return content;
176         }
177 
178         /**
179          * @param content The content to set.
180          */
181         public void setContent(String content)
182         {
183             this.content = content;
184         }
185 
186         /**
187          * @return Returns the id.
188          */
189         public int getId()
190         {
191             return id;
192         }
193 
194         /**
195          * @param id The id to set.
196          */
197         public void setId(int id)
198         {
199             this.id = id;
200         }
201     }
202 
203 }