1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.servlet;
12
13 import org.mule.api.MessagingException;
14 import org.mule.api.transport.MessageAdapter;
15 import org.mule.transport.AbstractMessageAdapterTestCase;
16
17 import java.io.BufferedReader;
18 import java.io.ByteArrayInputStream;
19 import java.io.IOException;
20 import java.io.InputStream;
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 protected void doTestMessageEqualsPayload(Object message, Object payload) throws Exception
40 {
41 assertTrue(payload instanceof InputStream);
42 }
43
44 public MessageAdapter createAdapter(Object payload) throws MessagingException
45 {
46 return new HttpRequestMessageAdapter(payload);
47 }
48
49 public static HttpServletRequest getMockRequest(final String message)
50 {
51 Object proxy = Proxy.newProxyInstance(ServletConnectorTestCase.class.getClassLoader(),
52 new Class[]{HttpServletRequest.class}, new InvocationHandler()
53 {
54 private String payload = message;
55 private Map props = new HashMap();
56
57 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
58 {
59 if ("getInputStream".equals(method.getName()))
60 {
61
62 ServletInputStream s = new ServletInputStream()
63 {
64 ByteArrayInputStream is = new ByteArrayInputStream(payload.getBytes());
65
66 public int read() throws IOException
67 {
68 return is.read();
69 }
70 };
71 return s;
72
73 }
74 else if ("getAttribute".equals(method.getName()))
75 {
76 return props.get(args[0]);
77 }
78 else if ("setAttribute".equals(method.getName()))
79 {
80 props.put(args[0], args[1]);
81 }
82 else if ("equals".equals(method.getName()))
83 {
84 return Boolean.valueOf(payload.equals(args[0].toString()));
85 }
86 else if ("toString".equals(method.getName()))
87 {
88 return payload;
89 }
90 else if ("getReader".equals(method.getName()))
91 {
92 return new BufferedReader(new StringReader(payload.toString()));
93 }
94 else if ("getAttributeNames".equals(method.getName()))
95 {
96 return new Hashtable().elements();
97 }
98 else if ("getHeaderNames".equals(method.getName()))
99 {
100 return new Hashtable().elements();
101 }
102 return null;
103 }
104 });
105 return (HttpServletRequest)proxy;
106 }
107 }