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);