From aa92e0e96dfde48143713fa311742a6259c23083 Mon Sep 17 00:00:00 2001 From: Oleg Kalnichevski Date: Wed, 9 Jan 2013 14:05:38 +0000 Subject: [PATCH] Integration tests for the minimal HttpClient git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1430866 13f79535-47bb-0310-9956-ffa450edef68 --- .../client/execchain/MinimalClientExec.java | 15 ++- .../TestMinimalClientRequestExecution.java | 103 ++++++++++++++++++ 2 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 httpclient/src/test/java/org/apache/http/impl/client/integration/TestMinimalClientRequestExecution.java diff --git a/httpclient/src/main/java/org/apache/http/impl/client/execchain/MinimalClientExec.java b/httpclient/src/main/java/org/apache/http/impl/client/execchain/MinimalClientExec.java index c7aaa7739..ad92885ed 100644 --- a/httpclient/src/main/java/org/apache/http/impl/client/execchain/MinimalClientExec.java +++ b/httpclient/src/main/java/org/apache/http/impl/client/execchain/MinimalClientExec.java @@ -144,9 +144,18 @@ public CloseableHttpResponse execute( } } - int timeout = config.getSocketTimeout(); - if (timeout >= 0) { - managedConn.setSocketTimeout(timeout); + if (!managedConn.isOpen()) { + int timeout = config.getConnectTimeout(); + this.connManager.connect( + managedConn, + route.getTargetHost(), route.getLocalAddress(), + timeout > 0 ? timeout : 0, + context); + } else { + int timeout = config.getSocketTimeout(); + if (timeout >= 0) { + managedConn.setSocketTimeout(timeout); + } } HttpHost target = null; diff --git a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestMinimalClientRequestExecution.java b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestMinimalClientRequestExecution.java new file mode 100644 index 000000000..f9abd05b9 --- /dev/null +++ b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestMinimalClientRequestExecution.java @@ -0,0 +1,103 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ +package org.apache.http.impl.client.integration; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; + +import org.apache.http.Header; +import org.apache.http.HttpException; +import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.protocol.HttpContext; +import org.apache.http.protocol.HttpRequestHandler; +import org.apache.http.util.EntityUtils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * Client protocol handling tests. + */ +public class TestMinimalClientRequestExecution extends IntegrationTestBase { + + @Before + public void setUp() throws Exception { + startServer(); + } + + private static class SimpleService implements HttpRequestHandler { + + public SimpleService() { + super(); + } + + public void handle( + final HttpRequest request, + final HttpResponse response, + final HttpContext context) throws HttpException, IOException { + response.setStatusCode(HttpStatus.SC_OK); + StringEntity entity = new StringEntity("Whatever"); + response.setEntity(entity); + } + } + + @Test + public void testNonCompliantURI() throws Exception { + this.localServer.register("*", new SimpleService()); + this.httpclient = HttpClients.createMinimal(); + + HttpClientContext context = HttpClientContext.create(); + for (int i = 0; i < 10; i++) { + HttpGet request = new HttpGet("/"); + HttpResponse response = this.httpclient.execute(getServerHttp(), request, context); + EntityUtils.consume(response.getEntity()); + Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode()); + + HttpRequest reqWrapper = context.getRequest(); + Assert.assertNotNull(reqWrapper); + + Header[] headers = reqWrapper.getAllHeaders(); + Set headerSet = new HashSet(); + for (Header header: headers) { + headerSet.add(header.getName().toLowerCase(Locale.US)); + } + Assert.assertEquals(3, headerSet.size()); + Assert.assertTrue(headerSet.contains("connection")); + Assert.assertTrue(headerSet.contains("host")); + Assert.assertTrue(headerSet.contains("user-agent")); + } + } + +}