HttpClient does not fire HttpClientRequest exception handler after receiving a 100 continue response - fixes #2936 - fixes #2910

This commit is contained in:
Julien Viet
2019-05-08 07:11:08 -04:00
parent 5ea4cde327
commit f25e593476
3 changed files with 25 additions and 2 deletions

View File

@@ -502,7 +502,7 @@ class Http1xClientConnection extends Http1xConnectionBase<WebSocketImpl> impleme
requestEnded = this.requestEnded;
}
if (request != null) {
if (response == null) {
if (response == null || response.statusCode() == 100) {
request.handleException(cause);
} else {
if (!requestEnded) {

View File

@@ -349,7 +349,7 @@ class Http2ClientConnection extends Http2ConnectionBase implements HttpClientCon
HttpClientRequestBase req;
HttpClientResponseImpl resp;
synchronized (conn) {
req = (!requestEnded || response == null) ? request : null;
req = (!requestEnded || response == null || response.statusCode() == 100) ? request : null;
resp = response;
}
if (req != null) {

View File

@@ -2021,6 +2021,29 @@ public abstract class HttpTest extends HttpTestBase {
await();
}
@Test
public void test100ContinueTimeout() throws Exception {
waitFor(2);
server.close();
server = vertx.createHttpServer(createBaseServerOptions().setHandle100ContinueAutomatically(false));
server.requestHandler(req -> {
req.response().writeContinue();
});
client.close();
client = vertx.createHttpClient(createBaseClientOptions().setIdleTimeout(1));
startServer(testAddress);
client.request(HttpMethod.PUT, testAddress, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, resp -> fail()).exceptionHandler(err -> complete()).putHeader("Expect", "100-continue")
.continueHandler(v -> complete()).end();
await();
}
@Test
public void testClientDrainHandler() {
pausingServer(resumeFuture -> {