1
2
3
4
5
6
7
8
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
29
30 public class HttpKeepAliveFunctionalTestCase extends DynamicPortTestCase
31 {
32
33
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
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