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