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/11/14 17:47:00 UTC

svn commit: r1639698 - in /httpcomponents/httpclient/trunk/httpclient/src: main/java/org/apache/http/conn/routing/HttpRoute.java test/java/org/apache/http/conn/routing/TestHttpRoute.java

Author: olegk
Date: Fri Nov 14 16:47:00 2014
New Revision: 1639698

URL: http://svn.apache.org/r1639698
Log:
HTTPCLIENT-1575: HttpRoute constructor to resolve default target port (-1) based on standard scheme port convention (http -> 80, https -> 443); to be removed in 5.0

Modified:
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java
    httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/conn/routing/TestHttpRoute.java

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java?rev=1639698&r1=1639697&r2=1639698&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java Fri Nov 14 16:47:00 2014
@@ -71,8 +71,7 @@ public final class HttpRoute implements 
     private HttpRoute(final HttpHost target, final InetAddress local, final List<HttpHost> proxies,
                      final boolean secure, final TunnelType tunnelled, final LayerType layered) {
         Args.notNull(target, "Target host");
-        Args.check(target.getPort() != -1, "target host port must be specified");
-        this.targetHost   = target;
+        this.targetHost = normalize(target);
         this.localAddress = local;
         if (proxies != null && !proxies.isEmpty()) {
             this.proxyChain = new ArrayList<HttpHost>(proxies);
@@ -87,6 +86,34 @@ public final class HttpRoute implements 
         this.layered      = layered != null ? layered : LayerType.PLAIN;
     }
 
+    //TODO: to be removed in 5.0
+    private static int getDefaultPort(final String schemeName) {
+        if ("http".equalsIgnoreCase(schemeName)) {
+            return 80;
+        } else if ("https".equalsIgnoreCase(schemeName)) {
+            return 443;
+        } else {
+            return -1;
+        }
+
+    }
+
+    //TODO: to be removed in 5.0
+    private static HttpHost normalize(final HttpHost target) {
+        if (target.getPort() >= 0 ) {
+            return target;
+        } else {
+            final InetAddress address = target.getAddress();
+            final String schemeName = target.getSchemeName();
+            if (address != null) {
+                return new HttpHost(address, getDefaultPort(schemeName), schemeName);
+            } else {
+                final String hostName = target.getHostName();
+                return new HttpHost(hostName, getDefaultPort(schemeName), schemeName);
+            }
+        }
+    }
+
     /**
      * Creates a new route with all attributes specified explicitly.
      *

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/conn/routing/TestHttpRoute.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/conn/routing/TestHttpRoute.java?rev=1639698&r1=1639697&r2=1639698&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/conn/routing/TestHttpRoute.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/conn/routing/TestHttpRoute.java Fri Nov 14 16:47:00 2014
@@ -577,10 +577,49 @@ public class TestHttpRoute {
         Assert.assertEquals("route was modified", route3, route1);
     }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void testFailOnConstructionWithoutExplicitTargetPort() {
+    @Test
+    public void testTargetHostNormalizationHttp() {
+        final HttpHost target = new HttpHost("somehost", -1, "http");
+        final HttpRoute route = new HttpRoute(target);
+        final HttpHost targetHost = route.getTargetHost();
+        Assert.assertEquals("somehost", targetHost.getHostName());
+        Assert.assertEquals(80, targetHost.getPort());
+        Assert.assertEquals("http", targetHost.getSchemeName());
+        Assert.assertEquals(null, targetHost.getAddress());
+    }
+
+    @Test
+    public void testTargetHostNormalizationHttps() {
         final HttpHost target = new HttpHost("somehost", -1, "https");
-        new HttpRoute(target);
+        final HttpRoute route = new HttpRoute(target);
+        final HttpHost targetHost = route.getTargetHost();
+        Assert.assertEquals("somehost", targetHost.getHostName());
+        Assert.assertEquals(443, targetHost.getPort());
+        Assert.assertEquals("https", targetHost.getSchemeName());
+        Assert.assertEquals(null, targetHost.getAddress());
+    }
+
+    @Test
+    public void testTargetHostNormalizationUnknownPorotocol() {
+        final HttpHost target = new HttpHost("somehost", -1, "blah");
+        final HttpRoute route = new HttpRoute(target);
+        final HttpHost targetHost = route.getTargetHost();
+        Assert.assertEquals("somehost", targetHost.getHostName());
+        Assert.assertEquals(-1, targetHost.getPort());
+        Assert.assertEquals("blah", targetHost.getSchemeName());
+        Assert.assertEquals(null, targetHost.getAddress());
+    }
+
+    @Test
+    public void testTargetHostNormalizationAddress() throws Exception {
+        final InetAddress address = InetAddress.getByAddress(new byte[]{127, 0, 0, 1});
+        final HttpHost target = new HttpHost(address, -1, "http");
+        final HttpRoute route = new HttpRoute(target);
+        final HttpHost targetHost = route.getTargetHost();
+        Assert.assertEquals("localhost", targetHost.getHostName());
+        Assert.assertEquals(80, targetHost.getPort());
+        Assert.assertEquals("http", targetHost.getSchemeName());
+        Assert.assertEquals(address, targetHost.getAddress());
     }
 
 }