View Javadoc

1   /*
2    * $Id: ServletConnectorTestCase.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.transport.servlet;
12  
13  import org.mule.api.transport.Connector;
14  import org.mule.transport.AbstractConnectorTestCase;
15  
16  import java.io.BufferedReader;
17  import java.io.ByteArrayInputStream;
18  import java.io.IOException;
19  import java.io.StringReader;
20  import java.lang.reflect.InvocationHandler;
21  import java.lang.reflect.Method;
22  import java.lang.reflect.Proxy;
23  import java.util.HashMap;
24  import java.util.Hashtable;
25  import java.util.Map;
26  
27  import javax.servlet.ServletInputStream;
28  import javax.servlet.http.HttpServletRequest;
29  
30  public class ServletConnectorTestCase extends AbstractConnectorTestCase
31  {
32      @Override
33      public Connector createConnector() throws Exception
34      {
35          ServletConnector c = new ServletConnector(muleContext);
36          c.setName("test");
37          return c;
38      }
39  
40      @Override
41      public String getTestEndpointURI()
42      {
43          return "servlet://testServlet";
44      }
45  
46      @Override
47      public Object getValidMessage() throws Exception
48      {
49          return getMockRequest("test message");
50      }
51      
52      private HttpServletRequest getMockRequest(final String message)
53      {
54          Object proxy = Proxy.newProxyInstance(ServletConnectorTestCase.class.getClassLoader(),
55              new Class[]{ HttpServletRequest.class }, new InvocationHandler()
56              {
57                  private String payload = message;
58                  private Map<Object, Object> props = new HashMap<Object, Object>();
59  
60                  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
61                  {
62                      if ("getInputStream".equals(method.getName()))
63                      {
64                          ServletInputStream s = new ServletInputStream()
65                          {
66                              ByteArrayInputStream is = new ByteArrayInputStream(payload.getBytes());
67      
68                              @Override
69                              public int read() throws IOException
70                              {
71                                  return is.read();
72                              }
73                          };
74                          return s;
75                      }
76                      else if ("getAttribute".equals(method.getName()))
77                      {
78                          return props.get(args[0]);
79                      }
80                      else if ("setAttribute".equals(method.getName()))
81                      {
82                          props.put(args[0], args[1]);
83                      }
84                      else if ("equals".equals(method.getName()))
85                      {
86                          return Boolean.valueOf(payload.equals(args[0].toString()));
87                      }
88                      else if ("toString".equals(method.getName()))
89                      {
90                          return payload;
91                      }
92                      else if ("getReader".equals(method.getName()))
93                      {
94                          return new BufferedReader(new StringReader(payload.toString()));
95                      }
96                      else if ("getAttributeNames".equals(method.getName()))
97                      {
98                          return new Hashtable<Object, Object>().elements();
99                      }
100                     else if ("getHeaderNames".equals(method.getName()))
101                     {
102                         return new Hashtable<Object, Object>().elements();
103                     }
104                     return null;
105                 }
106             }
107         );
108         return (HttpServletRequest) proxy;
109     }
110 
111     @Override
112     public void testConnectorMessageDispatcherFactory() throws Exception
113     {
114         // there is no DispatcherFactory for the servlet connector
115     }
116 
117     public void testConnectorMessageDispatcher() throws Exception
118     {
119         // therefore we have no dispatchers
120     }
121 }