~testplan-team/testplan/source-collection

« back to all changes in this revision

Viewing changes to commons-httpclient-3.1/src/test/org/apache/commons/httpclient/params/TestSSLTunnelParams.java

  • Committer: edA-qa mort-ora-y
  • Date: 2009-01-28 15:36:51 UTC
  • Revision ID: eda-qa@disemia.com-20090128153651-u4uzd035zyjea16j
adding httpclient

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * $Header$
 
3
 * $Revision: 515317 $
 
4
 * $Date: 2007-03-06 22:41:04 +0100 (Tue, 06 Mar 2007) $
 
5
 * ====================================================================
 
6
 *
 
7
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 
8
 *  contributor license agreements.  See the NOTICE file distributed with
 
9
 *  this work for additional information regarding copyright ownership.
 
10
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 
11
 *  (the "License"); you may not use this file except in compliance with
 
12
 *  the License.  You may obtain a copy of the License at
 
13
 *
 
14
 *      http://www.apache.org/licenses/LICENSE-2.0
 
15
 *
 
16
 *  Unless required by applicable law or agreed to in writing, software
 
17
 *  distributed under the License is distributed on an "AS IS" BASIS,
 
18
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
19
 *  See the License for the specific language governing permissions and
 
20
 *  limitations under the License.
 
21
 * ====================================================================
 
22
 *
 
23
 * This software consists of voluntary contributions made by many
 
24
 * individuals on behalf of the Apache Software Foundation.  For more
 
25
 * information on the Apache Software Foundation, please see
 
26
 * <http://www.apache.org/>.
 
27
 *
 
28
 */
 
29
 
 
30
package org.apache.commons.httpclient.params;
 
31
 
 
32
import java.io.IOException;
 
33
 
 
34
import junit.framework.Test;
 
35
import junit.framework.TestSuite;
 
36
 
 
37
import org.apache.commons.httpclient.FeedbackService;
 
38
import org.apache.commons.httpclient.Header;
 
39
import org.apache.commons.httpclient.HttpClientTestBase;
 
40
import org.apache.commons.httpclient.HttpStatus;
 
41
import org.apache.commons.httpclient.HttpVersion;
 
42
import org.apache.commons.httpclient.methods.GetMethod;
 
43
import org.apache.commons.httpclient.server.HttpRequestHandler;
 
44
import org.apache.commons.httpclient.server.SimpleHttpServerConnection;
 
45
import org.apache.commons.httpclient.server.SimpleRequest;
 
46
import org.apache.commons.httpclient.server.SimpleResponse;
 
47
 
 
48
/**
 
49
 * Tunnelling proxy configuration.
 
50
 *
 
51
 * @author Oleg Kalnichevski
 
52
 * 
 
53
 * @version $Id: TestSSLTunnelParams.java 515317 2007-03-06 21:41:04Z sebb $
 
54
 */
 
55
public class TestSSLTunnelParams extends HttpClientTestBase {
 
56
 
 
57
    // ------------------------------------------------------------ Constructor
 
58
    public TestSSLTunnelParams(final String testName) throws IOException {
 
59
        super(testName);
 
60
        setUseProxy(true);
 
61
        setUseSSL(true);
 
62
    }
 
63
 
 
64
    // ------------------------------------------------------------------- Main
 
65
    public static void main(String args[]) {
 
66
        String[] testCaseName = { TestSSLTunnelParams.class.getName() };
 
67
        junit.textui.TestRunner.main(testCaseName);
 
68
    }
 
69
 
 
70
    // ------------------------------------------------------- TestCase Methods
 
71
 
 
72
    public static Test suite() {
 
73
        TestSuite suite = new TestSuite(TestSSLTunnelParams.class);
 
74
        return suite;
 
75
    }
 
76
 
 
77
    
 
78
    static class HttpVersionHandler implements HttpRequestHandler {
 
79
        
 
80
        public HttpVersionHandler() {
 
81
            super();
 
82
        }
 
83
 
 
84
        public boolean processRequest(
 
85
                final SimpleHttpServerConnection conn,
 
86
                final SimpleRequest request) throws IOException
 
87
            {
 
88
                HttpVersion ver = request.getRequestLine().getHttpVersion();
 
89
                if (ver.equals(HttpVersion.HTTP_1_0)) {
 
90
                    return false;
 
91
                } else {
 
92
                    SimpleResponse response = new SimpleResponse();
 
93
                    response.setStatusLine(ver, HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED);
 
94
                    response.addHeader(new Header("Proxy-Connection", "close"));
 
95
                    conn.setKeepAlive(false);
 
96
                    // Make sure the request body is fully consumed
 
97
                    request.getBodyBytes();
 
98
                    conn.writeResponse(response);
 
99
                    return true;
 
100
                }
 
101
            }
 
102
        
 
103
    }
 
104
   
 
105
    /**
 
106
     * Tests correct proparation of HTTP params from the client to
 
107
     * CONNECT method.
 
108
     */
 
109
    public void testTunnellingParamsAgentLevel() throws IOException {
 
110
        this.proxy.addHandler(new HttpVersionHandler());
 
111
        this.server.setHttpService(new FeedbackService());
 
112
 
 
113
        this.client.getParams().setVersion(HttpVersion.HTTP_1_1);
 
114
        GetMethod httpget = new GetMethod("/test/");
 
115
        try {
 
116
            this.client.executeMethod(httpget);
 
117
            assertNotNull(httpget.getStatusLine());
 
118
            assertEquals(HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED, 
 
119
                    httpget.getStatusLine().getStatusCode());
 
120
        } finally {
 
121
            httpget.releaseConnection();
 
122
        }
 
123
 
 
124
        this.client.getParams().setVersion(HttpVersion.HTTP_1_0);
 
125
        httpget = new GetMethod("/test/");
 
126
        try {
 
127
            this.client.executeMethod(httpget);
 
128
            assertNotNull(httpget.getStatusLine());
 
129
            assertEquals(HttpStatus.SC_OK, 
 
130
                    httpget.getStatusLine().getStatusCode());
 
131
        } finally {
 
132
            httpget.releaseConnection();
 
133
        }
 
134
    }
 
135
 
 
136
    /**
 
137
     * Tests correct proparation of HTTP params from the host config to
 
138
     * CONNECT method.
 
139
     */
 
140
    public void testTunnellingParamsHostLevel() throws IOException {
 
141
        this.proxy.addHandler(new HttpVersionHandler());
 
142
        this.server.setHttpService(new FeedbackService());
 
143
 
 
144
        this.client.getHostConfiguration().getParams().setParameter(
 
145
                HttpMethodParams.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
 
146
        GetMethod httpget = new GetMethod("/test/");
 
147
        try {
 
148
            this.client.executeMethod(httpget);
 
149
            assertNotNull(httpget.getStatusLine());
 
150
            assertEquals(HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED, 
 
151
                    httpget.getStatusLine().getStatusCode());
 
152
        } finally {
 
153
            httpget.releaseConnection();
 
154
        }
 
155
 
 
156
        this.client.getHostConfiguration().getParams().setParameter(
 
157
                HttpMethodParams.PROTOCOL_VERSION, HttpVersion.HTTP_1_0);
 
158
        httpget = new GetMethod("/test/");
 
159
        try {
 
160
            this.client.executeMethod(httpget);
 
161
            assertNotNull(httpget.getStatusLine());
 
162
            assertEquals(HttpStatus.SC_OK, 
 
163
                    httpget.getStatusLine().getStatusCode());
 
164
        } finally {
 
165
            httpget.releaseConnection();
 
166
        }
 
167
    }
 
168
 
 
169
    /**
 
170
     * Tests ability to use HTTP/1.0 to execute CONNECT method and HTTP/1.1 to
 
171
     * execute methods once the tunnel is established.
 
172
     */
 
173
    public void testTunnellingParamsHostHTTP10AndMethodHTTP11() throws IOException {
 
174
        this.proxy.addHandler(new HttpVersionHandler());
 
175
        this.server.setHttpService(new FeedbackService());
 
176
 
 
177
        this.client.getHostConfiguration().getParams().setParameter(
 
178
                HttpMethodParams.PROTOCOL_VERSION, HttpVersion.HTTP_1_0);
 
179
        GetMethod httpget = new GetMethod("/test/");
 
180
        httpget.getParams().setVersion(HttpVersion.HTTP_1_1);
 
181
        try {
 
182
            this.client.executeMethod(httpget);
 
183
            assertNotNull(httpget.getStatusLine());
 
184
            assertEquals(HttpStatus.SC_OK, 
 
185
                    httpget.getStatusLine().getStatusCode());
 
186
            assertEquals(HttpVersion.HTTP_1_1, 
 
187
                    httpget.getEffectiveVersion());
 
188
        } finally {
 
189
            httpget.releaseConnection();
 
190
        }
 
191
    }
 
192
}