1
2
3
4
5
6
7
8
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 }