You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2014/08/05 13:53:55 UTC

svn commit: r1615915 - in /httpcomponents/httpclient/trunk/httpclient/src: main/java/org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.java test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java

Author: olegk
Date: Tue Aug  5 11:53:55 2014
New Revision: 1615915

URL: http://svn.apache.org/r1615915
Log:
HTTPCLIENT-1536: default connection operator to use HttpHost#getAddress if available

Modified:
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.java
    httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.java?rev=1615915&r1=1615914&r2=1615915&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.java Tue Aug  5 11:53:55 2014
@@ -107,7 +107,8 @@ public class DefaultHttpClientConnection
             throw new UnsupportedSchemeException(host.getSchemeName() +
                     " protocol is not supported");
         }
-        final InetAddress[] addresses = this.dnsResolver.resolve(host.getHostName());
+        final InetAddress[] addresses = host.getAddress() != null ?
+                new InetAddress[] { host.getAddress() } : this.dnsResolver.resolve(host.getHostName());
         final int port = this.schemePortResolver.resolve(host);
         for (int i = 0; i < addresses.length; i++) {
             final InetAddress address = addresses[i];

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java?rev=1615915&r1=1615914&r2=1615915&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java Tue Aug  5 11:53:55 2014
@@ -207,6 +207,38 @@ public class TestHttpClientConnectionOpe
     }
 
     @Test
+    public void testConnectExplicitAddress() throws Exception {
+        final HttpContext context = new BasicHttpContext();
+        final InetAddress local = InetAddress.getByAddress(new byte[] {127, 0, 0, 0});
+        final InetAddress ip = InetAddress.getByAddress(new byte[] {127, 0, 0, 23});
+        final HttpHost host = new HttpHost(ip);
+
+        Mockito.when(socketFactoryRegistry.lookup("http")).thenReturn(plainSocketFactory);
+        Mockito.when(schemePortResolver.resolve(host)).thenReturn(80);
+        Mockito.when(plainSocketFactory.createSocket(Mockito.<HttpContext>any())).thenReturn(socket);
+        Mockito.when(plainSocketFactory.connectSocket(
+                Mockito.anyInt(),
+                Mockito.<Socket>any(),
+                Mockito.<HttpHost>any(),
+                Mockito.<InetSocketAddress>any(),
+                Mockito.<InetSocketAddress>any(),
+                Mockito.<HttpContext>any())).thenReturn(socket);
+
+        final InetSocketAddress localAddress = new InetSocketAddress(local, 0);
+        connectionOperator.connect(conn, host, localAddress, 1000, SocketConfig.DEFAULT, context);
+
+        Mockito.verify(plainSocketFactory).connectSocket(
+                1000,
+                socket,
+                host,
+                new InetSocketAddress(ip, 80),
+                localAddress,
+                context);
+        Mockito.verify(dnsResolver, Mockito.never()).resolve(Mockito.anyString());
+        Mockito.verify(conn, Mockito.times(2)).bind(socket);
+    }
+
+    @Test
     public void testUpgrade() throws Exception {
         final HttpContext context = new BasicHttpContext();
         final HttpHost host = new HttpHost("somehost", -1, "https");