1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.http.transformers;
12
13 import org.mule.RequestContext;
14 import org.mule.api.MuleEvent;
15 import org.mule.api.MuleMessage;
16 import org.mule.api.config.MuleProperties;
17 import org.mule.tck.AbstractMuleTestCase;
18 import org.mule.transport.NullPayload;
19 import org.mule.transport.http.HttpConnector;
20 import org.mule.transport.http.HttpConstants;
21 import org.mule.transport.http.HttpRequest;
22 import org.mule.transport.http.RequestLine;
23
24 import org.apache.commons.httpclient.HttpMethod;
25 import org.apache.commons.httpclient.HttpVersion;
26 import org.apache.commons.httpclient.methods.GetMethod;
27
28 public class ObjectToHttpClientMethodRequestTestCase extends AbstractMuleTestCase
29 {
30 private MuleMessage setupRequestContext(String url) throws Exception
31 {
32 HttpRequest request = new HttpRequest(new RequestLine("GET", url, HttpVersion.HTTP_1_1), null, "UTF-8");
33
34 MuleEvent event = getTestEvent(request, muleContext.getRegistry().lookupEndpointFactory().getInboundEndpoint(url));
35 MuleMessage message = event.getMessage();
36 message.setOutboundProperty(HttpConnector.HTTP_METHOD_PROPERTY, HttpConstants.METHOD_GET);
37 message.setOutboundProperty(MuleProperties.MULE_ENDPOINT_PROPERTY, url);
38 RequestContext.setEvent(event);
39
40 return message;
41 }
42
43 private ObjectToHttpClientMethodRequest createTransformer() throws Exception
44 {
45 ObjectToHttpClientMethodRequest transformer = new ObjectToHttpClientMethodRequest();
46 transformer.setMuleContext(muleContext);
47 transformer.setEndpoint(RequestContext.getEvent().getEndpoint());
48 transformer.initialise();
49 return transformer;
50 }
51
52 @Override
53 protected void doTearDown() throws Exception
54 {
55 RequestContext.setEvent(null);
56 }
57
58 public void testUrlWithoutQuery() throws Exception
59 {
60 MuleMessage message = setupRequestContext("http://localhost:8080/services");
61
62 message.setPayload(NullPayload.getInstance());
63
64 ObjectToHttpClientMethodRequest transformer = createTransformer();
65 Object response = transformer.transform(message);
66
67 assertTrue(response instanceof HttpMethod);
68 HttpMethod httpMethod = (HttpMethod) response;
69
70 assertEquals(null, httpMethod.getQueryString());
71 }
72
73 public void testUrlWithQuery() throws Exception
74 {
75 MuleMessage message = setupRequestContext("http://localhost:8080/services?method=echo");
76
77 message.setPayload(NullPayload.getInstance());
78
79 ObjectToHttpClientMethodRequest transformer = createTransformer();
80 Object response = transformer.transform(message);
81
82 assertTrue(response instanceof HttpMethod);
83 HttpMethod httpMethod = (HttpMethod) response;
84
85 assertEquals("method=echo", httpMethod.getQueryString());
86 }
87
88 public void testUrlWithUnescapedQuery() throws Exception
89 {
90 MuleMessage message = setupRequestContext("http://mycompany.com/test?fruits=apple%20orange");
91
92 message.setPayload(NullPayload.getInstance());
93
94 ObjectToHttpClientMethodRequest transformer = createTransformer();
95 Object response = transformer.transform(message);
96
97 assertTrue(response instanceof HttpMethod);
98 HttpMethod httpMethod = (HttpMethod) response;
99
100 assertEquals("fruits=apple%20orange", httpMethod.getQueryString());
101 }
102
103 public void testAppendedUrl() throws Exception
104 {
105 MuleMessage message = setupRequestContext("http://mycompany.com/test?fruits=apple%20orange");
106
107 message.setPayload("test");
108 message.setOutboundProperty(HttpConnector.HTTP_GET_BODY_PARAM_PROPERTY, "body");
109
110 ObjectToHttpClientMethodRequest transformer = createTransformer();
111 Object response = transformer.transform(message);
112
113 assertTrue(response instanceof HttpMethod);
114 HttpMethod httpMethod = (HttpMethod) response;
115
116 assertEquals("fruits=apple%20orange&body=test", httpMethod.getQueryString());
117 }
118
119 public void testEncodingOfParamValueTriggeredByMessageProperty() throws Exception
120 {
121
122 String encodedPayload = "encoded%20payload";
123 MuleMessage message = setupRequestContext("http://mycompany.com/");
124 message.setOutboundProperty(HttpConnector.HTTP_ENCODE_PARAMVALUE, false);
125 message.setOutboundProperty(HttpConnector.HTTP_GET_BODY_PARAM_PROPERTY, "body");
126 message.setPayload(encodedPayload);
127
128
129 ObjectToHttpClientMethodRequest transformer = createTransformer();
130 Object result = transformer.transform(message);
131
132 assertTrue(result instanceof GetMethod);
133
134 String expected = "body=" + encodedPayload;
135 assertEquals(expected, ((GetMethod) result).getQueryString());
136 }
137 }