You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by gg...@apache.org on 2020/01/15 01:50:51 UTC

[httpcomponents-core] branch master updated: [HTTPCORE-623] Change (#185)

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 529b392  [HTTPCORE-623] Change (#185)
529b392 is described below

commit 529b392b63229e1a4e658b1105332adaf3a89464
Author: Gary Gregory <ga...@users.noreply.github.com>
AuthorDate: Tue Jan 14 20:50:42 2020 -0500

    [HTTPCORE-623] Change (#185)
    
    org.apache.hc.core5.http.io.BHttpConnection.isDataAvailable() int input
    to Timeout.
---
 .../hc/core5/http/impl/io/BHttpConnectionBase.java      | 10 +++++-----
 .../hc/core5/http/impl/io/HttpRequestExecutor.java      |  7 ++++---
 .../org/apache/hc/core5/http/io/BHttpConnection.java    |  9 +++++----
 .../src/main/java/org/apache/hc/core5/util/Args.java    |  5 +++++
 .../hc/core5/http/impl/io/TestBHttpConnectionBase.java  |  6 +++---
 .../hc/core5/http/impl/io/TestHttpRequestExecutor.java  | 17 +++++++++--------
 6 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java
index 90619d0..4d8a80c 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java
@@ -258,19 +258,19 @@ class BHttpConnectionBase implements BHttpConnection {
         }
     }
 
-    private int fillInputBuffer(final int timeout) throws IOException {
+    private int fillInputBuffer(final Timeout timeout) throws IOException {
         final SocketHolder socketHolder = ensureOpen();
         final Socket socket = socketHolder.getSocket();
         final int oldtimeout = socket.getSoTimeout();
         try {
-            socket.setSoTimeout(timeout);
+            socket.setSoTimeout(timeout.toMillisecondsIntBound());
             return this.inBuffer.fillBuffer(socketHolder.getInputStream());
         } finally {
             socket.setSoTimeout(oldtimeout);
         }
     }
 
-    protected boolean awaitInput(final int timeout) throws IOException {
+    protected boolean awaitInput(final Timeout timeout) throws IOException {
         if (this.inBuffer.hasBufferedData()) {
             return true;
         }
@@ -279,7 +279,7 @@ class BHttpConnectionBase implements BHttpConnection {
     }
 
     @Override
-    public boolean isDataAvailable(final int timeout) throws IOException {
+    public boolean isDataAvailable(final Timeout timeout) throws IOException {
         ensureOpen();
         try {
             return awaitInput(timeout);
@@ -294,7 +294,7 @@ class BHttpConnectionBase implements BHttpConnection {
             return true;
         }
         try {
-            final int bytesRead = fillInputBuffer(1);
+            final int bytesRead = fillInputBuffer(Timeout.ofMilliseconds(1));
             return bytesRead < 0;
         } catch (final SocketTimeoutException ex) {
             return false;
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/HttpRequestExecutor.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/HttpRequestExecutor.java
index a5b13be..baa499a 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/HttpRequestExecutor.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/HttpRequestExecutor.java
@@ -55,6 +55,7 @@ import org.apache.hc.core5.http.protocol.HttpCoreContext;
 import org.apache.hc.core5.http.protocol.HttpProcessor;
 import org.apache.hc.core5.io.Closer;
 import org.apache.hc.core5.util.Args;
+import org.apache.hc.core5.util.Timeout;
 
 /**
  * {@code HttpRequestExecutor} is a client side HTTP protocol handler based
@@ -72,9 +73,9 @@ import org.apache.hc.core5.util.Args;
 @Contract(threading = ThreadingBehavior.IMMUTABLE)
 public class HttpRequestExecutor {
 
-    public static final int DEFAULT_WAIT_FOR_CONTINUE = 3000;
+    public static final Timeout DEFAULT_WAIT_FOR_CONTINUE = Timeout.ofSeconds(3);
 
-    private final int waitForContinue;
+    private final Timeout waitForContinue;
     private final ConnectionReuseStrategy connReuseStrategy;
     private final Http1StreamListener streamListener;
 
@@ -84,7 +85,7 @@ public class HttpRequestExecutor {
      * @since 4.3
      */
     public HttpRequestExecutor(
-            final int waitForContinue,
+            final Timeout waitForContinue,
             final ConnectionReuseStrategy connReuseStrategy,
             final Http1StreamListener streamListener) {
         super();
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/io/BHttpConnection.java b/httpcore5/src/main/java/org/apache/hc/core5/http/io/BHttpConnection.java
index 4b0e920..d96fe35 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/io/BHttpConnection.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/io/BHttpConnection.java
@@ -30,6 +30,7 @@ package org.apache.hc.core5.http.io;
 import java.io.IOException;
 
 import org.apache.hc.core5.http.HttpConnection;
+import org.apache.hc.core5.util.Timeout;
 
 /**
  * Abstract blocking HTTP connection interface.
@@ -39,16 +40,16 @@ import org.apache.hc.core5.http.HttpConnection;
 public interface BHttpConnection extends HttpConnection {
 
     /**
-     * Checks if inout data is available from the connection. May wait for
+     * Checks if input data is available from the connection. May wait for
      * the specified time until some data becomes available. Note that some
      * implementations may completely ignore the timeout parameter.
      *
-     * @param timeout the maximum time in milliseconds to wait for data
+     * @param timeout the maximum time to wait for data
      * @return true if data is available; false if there was no data available
-     *         even after waiting for {@code timeout} milliseconds.
+     *         even after waiting for {@code timeout}.
      * @throws IOException if an error happens on the connection
      */
-    boolean isDataAvailable(int timeout) throws IOException;
+    boolean isDataAvailable(Timeout timeout) throws IOException;
 
     /**
      * Checks whether this connection has gone down.
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/util/Args.java b/httpcore5/src/main/java/org/apache/hc/core5/util/Args.java
index 0ee17b6..5270a1e 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/util/Args.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/util/Args.java
@@ -167,6 +167,11 @@ public class Args {
         return n;
     }
 
+    public static <T extends TimeValue> T positive(final T timeValue, final String name) {
+        positive(timeValue.getDuration(), name);
+        return timeValue;
+    }
+
     private Args() {
         // Do not allow utility class to be instantiated.
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestBHttpConnectionBase.java b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestBHttpConnectionBase.java
index 26eeaf1..bcd29bd 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestBHttpConnectionBase.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestBHttpConnectionBase.java
@@ -250,7 +250,7 @@ public class TestBHttpConnectionBase {
         conn.ensureOpen();
         conn.inBuffer.read(inStream);
 
-        Assert.assertTrue(conn.awaitInput(432));
+        Assert.assertTrue(conn.awaitInput(Timeout.ofMilliseconds(432)));
 
         Mockito.verify(socket, Mockito.never()).setSoTimeout(ArgumentMatchers.anyInt());
         Mockito.verify(inStream, Mockito.times(1)).read(
@@ -267,7 +267,7 @@ public class TestBHttpConnectionBase {
         conn.bind(socket);
         conn.ensureOpen();
 
-        Assert.assertTrue(conn.awaitInput(432));
+        Assert.assertTrue(conn.awaitInput(Timeout.ofMilliseconds(432)));
 
         Mockito.verify(socket, Mockito.times(1)).setSoTimeout(432);
         Mockito.verify(socket, Mockito.times(1)).setSoTimeout(345);
@@ -285,7 +285,7 @@ public class TestBHttpConnectionBase {
         conn.bind(socket);
         conn.ensureOpen();
 
-        Assert.assertFalse(conn.awaitInput(432));
+        Assert.assertFalse(conn.awaitInput(Timeout.ofMilliseconds(432)));
     }
 
     @Test
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestHttpRequestExecutor.java b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestHttpRequestExecutor.java
index 4c15bef..aaaf42f 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestHttpRequestExecutor.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestHttpRequestExecutor.java
@@ -43,6 +43,7 @@ import org.apache.hc.core5.http.message.BasicClassicHttpRequest;
 import org.apache.hc.core5.http.message.BasicClassicHttpResponse;
 import org.apache.hc.core5.http.protocol.HttpCoreContext;
 import org.apache.hc.core5.http.protocol.HttpProcessor;
+import org.apache.hc.core5.util.Timeout;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
@@ -285,13 +286,13 @@ public class TestHttpRequestExecutor {
         Mockito.when(conn.receiveResponseHeader()).thenReturn(
                 new BasicClassicHttpResponse(100, "Continue"),
                 new BasicClassicHttpResponse(200, "OK"));
-        Mockito.when(conn.isDataAvailable(ArgumentMatchers.anyInt())).thenReturn(Boolean.TRUE);
+        Mockito.when(conn.isDataAvailable(ArgumentMatchers.any(Timeout.class))).thenReturn(Boolean.TRUE);
 
         final ClassicHttpResponse response = executor.execute(request, conn, context);
         Mockito.verify(conn).sendRequestHeader(request);
         Mockito.verify(conn).sendRequestEntity(request);
         Mockito.verify(conn, Mockito.times(2)).flush();
-        Mockito.verify(conn).isDataAvailable(3000);
+        Mockito.verify(conn).isDataAvailable(Timeout.ofMilliseconds(3000));
         Mockito.verify(conn, Mockito.times(2)).receiveResponseHeader();
         Mockito.verify(conn).receiveResponseEntity(response);
 
@@ -316,14 +317,14 @@ public class TestHttpRequestExecutor {
 
         Mockito.when(conn.receiveResponseHeader()).thenReturn(
                 new BasicClassicHttpResponse(402, "OK"));
-        Mockito.when(conn.isDataAvailable(ArgumentMatchers.anyInt())).thenReturn(Boolean.TRUE);
+        Mockito.when(conn.isDataAvailable(ArgumentMatchers.any(Timeout.class))).thenReturn(Boolean.TRUE);
 
         final ClassicHttpResponse response = executor.execute(request, conn, context);
         Mockito.verify(conn).sendRequestHeader(request);
         Mockito.verify(conn, Mockito.never()).sendRequestEntity(request);
         Mockito.verify(conn).terminateRequest(request);
         Mockito.verify(conn, Mockito.times(2)).flush();
-        Mockito.verify(conn).isDataAvailable(3000);
+        Mockito.verify(conn).isDataAvailable(Timeout.ofMilliseconds(3000));
         Mockito.verify(conn).receiveResponseHeader();
         Mockito.verify(conn).receiveResponseEntity(response);
 
@@ -351,7 +352,7 @@ public class TestHttpRequestExecutor {
                 new BasicClassicHttpResponse(100, "Continue"),
                 new BasicClassicHttpResponse(111, "Huh?"),
                 new BasicClassicHttpResponse(200, "OK"));
-        Mockito.when(conn.isDataAvailable(ArgumentMatchers.anyInt())).thenReturn(Boolean.TRUE);
+        Mockito.when(conn.isDataAvailable(ArgumentMatchers.any(Timeout.class))).thenReturn(Boolean.TRUE);
 
         final HttpResponseInformationCallback callback = Mockito.mock(HttpResponseInformationCallback.class);
 
@@ -359,7 +360,7 @@ public class TestHttpRequestExecutor {
         Mockito.verify(conn).sendRequestHeader(request);
         Mockito.verify(conn).sendRequestEntity(request);
         Mockito.verify(conn, Mockito.times(2)).flush();
-        Mockito.verify(conn, Mockito.times(2)).isDataAvailable(3000);
+        Mockito.verify(conn, Mockito.times(2)).isDataAvailable(Timeout.ofMilliseconds(3000));
         Mockito.verify(conn, Mockito.times(4)).receiveResponseHeader();
         Mockito.verify(conn).receiveResponseEntity(response);
 
@@ -396,13 +397,13 @@ public class TestHttpRequestExecutor {
 
         Mockito.when(conn.receiveResponseHeader()).thenReturn(
                 new BasicClassicHttpResponse(200, "OK"));
-        Mockito.when(conn.isDataAvailable(ArgumentMatchers.anyInt())).thenReturn(Boolean.FALSE);
+        Mockito.when(conn.isDataAvailable(ArgumentMatchers.any(Timeout.class))).thenReturn(Boolean.FALSE);
 
         final ClassicHttpResponse response = executor.execute(request, conn, context);
         Mockito.verify(conn).sendRequestHeader(request);
         Mockito.verify(conn).sendRequestEntity(request);
         Mockito.verify(conn, Mockito.times(2)).flush();
-        Mockito.verify(conn).isDataAvailable(3000);
+        Mockito.verify(conn).isDataAvailable(Timeout.ofMilliseconds(3000));
         Mockito.verify(conn).receiveResponseHeader();
         Mockito.verify(conn).receiveResponseEntity(response);