View Javadoc

1   /*
2    * $Id: HttpKeepAliveFunctionalTestCase.java 19817 2010-10-04 18:10:39Z dzapata $
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.functional;
12  
13  import org.mule.api.endpoint.InboundEndpoint;
14  import org.mule.module.client.MuleClient;
15  import org.mule.tck.DynamicPortTestCase;
16  import org.mule.tck.FunctionalTestCase;
17  import org.mule.transport.http.HttpConstants;
18  
19  import org.apache.commons.httpclient.Header;
20  import org.apache.commons.httpclient.HttpClient;
21  import org.apache.commons.httpclient.HttpMethod;
22  import org.apache.commons.httpclient.HttpStatus;
23  import org.apache.commons.httpclient.HttpVersion;
24  import org.apache.commons.httpclient.methods.GetMethod;
25  import org.apache.commons.httpclient.params.HttpClientParams;
26  
27  /**
28   * Tests as per http://www.io.com/~maus/HttpKeepAlive.html
29   */
30  public class HttpKeepAliveFunctionalTestCase extends DynamicPortTestCase
31  {
32      //private static final String URL_WITHOUT_EP_OVERRIDE = "http://localhost:60213/http-in";
33      //private static final String URL_WITH_EP_OVERRIDE = "http://localhost:60216/http-in";
34      
35      private HttpClient http10Client;
36      private HttpClient http11Client;
37      private MuleClient client = null;
38      
39      @Override
40      protected void doSetUp() throws Exception
41      {
42          super.doSetUp();
43  
44          http10Client = setupHttpClient(HttpVersion.HTTP_1_0);
45          http11Client = setupHttpClient(HttpVersion.HTTP_1_1);
46          client = new MuleClient(muleContext);
47      }
48      
49      private HttpClient setupHttpClient(HttpVersion version)
50      {
51          HttpClientParams params = new HttpClientParams();
52          params.setVersion(version);
53          return new HttpClient(params);
54      }
55  
56      @Override
57      protected String getConfigResources()
58      {
59          return "http-keep-alive-config.xml";
60      }
61      
62      public void testHttp10WithoutConnectionHeader() throws Exception
63      {
64          GetMethod request = new GetMethod(((InboundEndpoint) client.getMuleContext().getRegistry().lookupObject("inWithoutEndpointOverride")).getAddress());
65          request.removeRequestHeader(HttpConstants.HEADER_CONNECTION);
66          runHttp10MethodAndAssertConnectionHeader(request, "close");
67      }
68      
69      public void testHttp10WithCloseConnectionHeader() throws Exception
70      {
71          GetMethod request = new GetMethod(((InboundEndpoint) client.getMuleContext().getRegistry().lookupObject("inWithoutEndpointOverride")).getAddress());
72          request.setRequestHeader(HttpConstants.HEADER_CONNECTION, "close");
73          runHttp10MethodAndAssertConnectionHeader(request, "close");
74      }
75      
76      public void testHttp10KeepAlive() throws Exception
77      {
78          doTestKeepAlive(((InboundEndpoint) client.getMuleContext().getRegistry().lookupObject("inWithoutEndpointOverride")).getAddress());
79      }
80      
81      public void testHttp10KeepAliveWitEpOverride() throws Exception
82      {
83          doTestKeepAlive(((InboundEndpoint) client.getMuleContext().getRegistry().lookupObject("inWithoutEndpointOverride")).getAddress());
84      }
85      
86      private void doTestKeepAlive(String url) throws Exception
87      {
88          GetMethod request = new GetMethod(url);
89          request.addRequestHeader(HttpConstants.HEADER_CONNECTION, "Keep-Alive");
90          runHttp10MethodAndAssertConnectionHeader(request, "Keep-Alive");
91          
92          request.setRequestHeader(HttpConstants.HEADER_CONNECTION, "close");
93          runHttp10MethodAndAssertConnectionHeader(request, "close");
94      }
95      
96      private void runHttp10MethodAndAssertConnectionHeader(HttpMethod request, String expectedConnectionHeaderValue) throws Exception
97      {
98          int status = http10Client.executeMethod(request);
99          assertEquals(HttpStatus.SC_OK, status);
100         String connectionHeader = request.getResponseHeader(HttpConstants.HEADER_CONNECTION).getValue();
101         assertNotNull(connectionHeader);
102         assertEquals(expectedConnectionHeaderValue, connectionHeader);
103     }
104     
105     public void testHttp11KeepAlive() throws Exception
106     {
107         doTestHttp11KeepAlive(((InboundEndpoint) client.getMuleContext().getRegistry().lookupObject("inWithoutEndpointOverride")).getAddress());
108     }
109     
110     public void testHttp11KeepAliveWithEpOverride() throws Exception
111     {
112         doTestHttp11KeepAlive(((InboundEndpoint) client.getMuleContext().getRegistry().lookupObject("inWithoutEndpointOverride")).getAddress());
113     }
114     
115     public void doTestHttp11KeepAlive(String url) throws Exception
116     {
117         GetMethod request = new GetMethod(url);
118         runHttp11MethodAndAssert(request);
119         
120         // the connection should be still open, send another request and terminate the connection
121         request = new GetMethod(url);
122         request.setRequestHeader(HttpConstants.HEADER_CONNECTION, "close");
123         runHttp11MethodAndAssert(request);
124         
125         Header connectHeader = request.getResponseHeader(HttpConstants.HEADER_CONNECTION);
126         assertNotNull(connectHeader);
127         assertEquals("close", connectHeader.getValue());
128     }
129         
130     private void runHttp11MethodAndAssert(HttpMethod request) throws Exception
131     {
132         int status = http11Client.executeMethod(request);
133         assertEquals(HttpStatus.SC_OK, status);
134         assertEquals("/http-in", request.getResponseBodyAsString());
135     }
136 
137     @Override
138     protected int getNumPortsToFind()
139     {
140         return 2;
141     }
142 }
143 
144