View Javadoc

1   /*
2    * $Id: ObjectToHttpClientMethodRequestTestCase.java 19332 2010-09-03 14:26:24Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.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.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          // transforming NullPayload will make sure that no body=xxx query is added
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          // transforming NullPayload will make sure that no body=xxx query is added
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          // transforming NullPayload will make sure that no body=xxx query is added
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         // transforming a payload here will add it as body=xxx query parameter
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         // the payload is already encoded, switch off encoding it in the transformer
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 }