1   /*
2    * $Id: HttpRequestMessageAdapterTestCase.java 7963 2007-08-21 08:53:15Z dirk.olmes $
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.providers.http;
12  
13  import org.mule.providers.http.servlet.HttpRequestMessageAdapter;
14  import org.mule.tck.providers.AbstractMessageAdapterTestCase;
15  import org.mule.umo.MessagingException;
16  import org.mule.umo.provider.UMOMessageAdapter;
17  
18  import java.io.BufferedReader;
19  import java.io.ByteArrayInputStream;
20  import java.io.IOException;
21  import java.io.StringReader;
22  import java.lang.reflect.InvocationHandler;
23  import java.lang.reflect.Method;
24  import java.lang.reflect.Proxy;
25  import java.util.HashMap;
26  import java.util.Hashtable;
27  import java.util.Map;
28  
29  import javax.servlet.ServletInputStream;
30  import javax.servlet.http.HttpServletRequest;
31  
32  public class HttpRequestMessageAdapterTestCase extends AbstractMessageAdapterTestCase
33  {
34      public Object getValidMessage() throws Exception
35      {
36          return getMockRequest("test message");
37      }
38  
39      public UMOMessageAdapter createAdapter(Object payload) throws MessagingException
40      {
41          return new HttpRequestMessageAdapter(payload);
42      }
43  
44      public static HttpServletRequest getMockRequest(final String message)
45      {
46          Object proxy = Proxy.newProxyInstance(ServletConnectorTestCase.class.getClassLoader(),
47              new Class[]{HttpServletRequest.class}, new InvocationHandler()
48              {
49                  private String payload = message;
50                  private Map props = new HashMap();
51  
52                  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
53                  {
54                      if ("getInputStream".equals(method.getName()))
55                      {
56  
57                          ServletInputStream s = new ServletInputStream()
58                          {
59                              ByteArrayInputStream is = new ByteArrayInputStream(payload.getBytes());
60  
61                              public int read() throws IOException
62                              {
63                                  return is.read();
64                              }
65                          };
66                          return s;
67  
68                      }
69                      else if ("getAttribute".equals(method.getName()))
70                      {
71                          return props.get(args[0]);
72                      }
73                      else if ("setAttribute".equals(method.getName()))
74                      {
75                          props.put(args[0], args[1]);
76                      }
77                      else if ("equals".equals(method.getName()))
78                      {
79                          return Boolean.valueOf(payload.equals(args[0]));
80                      }
81                      else if ("toString".equals(method.getName()))
82                      {
83                          return payload;
84                      }
85                      else if ("getReader".equals(method.getName()))
86                      {
87                          return new BufferedReader(new StringReader(payload.toString()));
88                      }
89                      else if ("getAttributeNames".equals(method.getName()))
90                      {
91                          return new Hashtable().elements();
92                      }
93                      else if ("getHeaderNames".equals(method.getName()))
94                      {
95                          return new Hashtable().elements();
96                      }
97                      return null;
98                  }
99              });
100         return (HttpServletRequest)proxy;
101     }
102 }