diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java index caa8816f009..0ce07dc44aa 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java @@ -459,9 +459,10 @@ public class HttpClient extends ContainerLifeCycle HttpHeader.PROXY_AUTHORIZATION == header) continue; + String name = field.getName(); String value = field.getValue(); - if (!newRequest.getHeaders().contains(header, value)) - newRequest.header(field.getName(), value); + if (!newRequest.getHeaders().contains(name, value)) + newRequest.header(name, value); } return newRequest; } diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java index 6dbb9920e75..ba947943fcf 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java @@ -1549,6 +1549,68 @@ public class HttpClientTest extends AbstractHttpClientServerTest Assert.assertThat(new String(response.getContent(), StandardCharsets.ISO_8859_1),Matchers.startsWith("[::1]:")); } + @Test + public void testCopyRequest() + throws Exception + { + startClient(); + + assertCopyRequest(client.newRequest("http://example.com/some/url") + .method(HttpMethod.HEAD) + .version(HttpVersion.HTTP_2) + .content(new StringContentProvider("some string")) + .timeout(321, TimeUnit.SECONDS) + .idleTimeout(2221, TimeUnit.SECONDS) + .followRedirects(true) + .header(HttpHeader.CONTENT_TYPE, "application/json") + .header("X-Some-Custom-Header", "some-value")); + + assertCopyRequest(client.newRequest("https://example.com") + .method(HttpMethod.POST) + .version(HttpVersion.HTTP_1_0) + .content(new StringContentProvider("some other string")) + .timeout(123231, TimeUnit.SECONDS) + .idleTimeout(232342, TimeUnit.SECONDS) + .followRedirects(false) + .header(HttpHeader.ACCEPT, "application/json") + .header("X-Some-Other-Custom-Header", "some-other-value")); + + assertCopyRequest(client.newRequest("https://example.com") + .header(HttpHeader.ACCEPT, "application/json") + .header(HttpHeader.ACCEPT, "application/xml") + .header("x-same-name", "value1") + .header("x-same-name", "value2")); + + assertCopyRequest(client.newRequest("https://example.com") + .header(HttpHeader.ACCEPT, "application/json") + .header(HttpHeader.CONTENT_TYPE, "application/json")); + + assertCopyRequest(client.newRequest("https://example.com") + .header("Accept", "application/json") + .header("Content-Type", "application/json")); + + assertCopyRequest(client.newRequest("https://example.com") + .header("X-Custom-Header-1", "value1") + .header("X-Custom-Header-2", "value2")); + + assertCopyRequest(client.newRequest("https://example.com") + .header("X-Custom-Header-1", "value") + .header("X-Custom-Header-2", "value")); + } + + private void assertCopyRequest(Request original) + { + Request copy = client.copyRequest((HttpRequest) original, original.getURI()); + Assert.assertEquals(original.getURI(), copy.getURI()); + Assert.assertEquals(original.getMethod(), copy.getMethod()); + Assert.assertEquals(original.getVersion(), copy.getVersion()); + Assert.assertEquals(original.getContent(), copy.getContent()); + Assert.assertEquals(original.getIdleTimeout(), copy.getIdleTimeout()); + Assert.assertEquals(original.getTimeout(), copy.getTimeout()); + Assert.assertEquals(original.isFollowRedirects(), copy.isFollowRedirects()); + Assert.assertEquals(original.getHeaders(), copy.getHeaders()); + } + private void consume(InputStream input, boolean eof) throws IOException { int crlfs = 0; diff --git a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc index 01870b13ef6..f23c99692ae 100644 --- a/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/http2/configuring-http2.adoc @@ -65,5 +65,5 @@ Currently there are very few HTTP/2 configuration properties and the default val |======================================================================= |Property |Description |jetty.http2.maxConcurrentStreams |The maximum number of concurrently open streams allowed on a single HTTP/2 connection (default 1024). Larger values increase parallelism but cost a memory commitment. -|jetty.http2.initialStreamSendWindow |The initial flow control window size for a new stream (default 65535). Larger values may allow greater throughput but also risk head of line blocking if TCP/IP flow control is triggered. +|jetty.http2.initialStreamRecvWindow |The initial receive flow control window size for a new stream (default 65535). Larger values may allow greater throughput but also risk head of line blocking if TCP/IP flow control is triggered. |======================================================================= diff --git a/jetty-http2/http2-server/src/main/config/etc/jetty-http2.xml b/jetty-http2/http2-server/src/main/config/etc/jetty-http2.xml index b23f25b41f7..226941d5e71 100644 --- a/jetty-http2/http2-server/src/main/config/etc/jetty-http2.xml +++ b/jetty-http2/http2-server/src/main/config/etc/jetty-http2.xml @@ -10,7 +10,7 @@ - + @@ -23,4 +23,3 @@ - diff --git a/jetty-http2/http2-server/src/main/config/etc/jetty-http2c.xml b/jetty-http2/http2-server/src/main/config/etc/jetty-http2c.xml index ccd3af14048..4e8610cc1ef 100644 --- a/jetty-http2/http2-server/src/main/config/etc/jetty-http2c.xml +++ b/jetty-http2/http2-server/src/main/config/etc/jetty-http2c.xml @@ -10,9 +10,8 @@ - + - diff --git a/jetty-http2/http2-server/src/main/config/modules/http2.mod b/jetty-http2/http2-server/src/main/config/modules/http2.mod index ece1e331b52..88baddb13ab 100644 --- a/jetty-http2/http2-server/src/main/config/modules/http2.mod +++ b/jetty-http2/http2-server/src/main/config/modules/http2.mod @@ -16,5 +16,5 @@ etc/jetty-http2.xml ## Max number of concurrent streams per connection # jetty.http2.maxConcurrentStreams=1024 -## Initial stream send (server to client) window -# jetty.http2.initialStreamSendWindow=65535 +## Initial stream receive window (client to server) +# jetty.http2.initialStreamRecvWindow=65535 diff --git a/jetty-http2/http2-server/src/main/config/modules/http2c.mod b/jetty-http2/http2-server/src/main/config/modules/http2c.mod index dfca925ee57..80b2a28a335 100644 --- a/jetty-http2/http2-server/src/main/config/modules/http2c.mod +++ b/jetty-http2/http2-server/src/main/config/modules/http2c.mod @@ -15,5 +15,5 @@ etc/jetty-http2c.xml ## Max number of concurrent streams per connection # jetty.http2c.maxConcurrentStreams=1024 -## Initial stream send (server to client) window -# jetty.http2c.initialStreamSendWindow=65535 +## Initial stream receive window (client to server) +# jetty.http2c.initialStreamRecvWindow=65535 diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncIOServletTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncIOServletTest.java index 6d7b6d793b9..e8b5940b240 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncIOServletTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncIOServletTest.java @@ -54,7 +54,6 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.ContextHandler.Context; -import org.eclipse.jetty.toolchain.test.AdvancedRunner; import org.eclipse.jetty.toolchain.test.http.SimpleHttpParser; import org.eclipse.jetty.toolchain.test.http.SimpleHttpResponse; import org.eclipse.jetty.util.IO; @@ -63,7 +62,6 @@ import org.hamcrest.Matchers; import org.junit.After; import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.instanceOf; @@ -73,21 +71,19 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -@RunWith (AdvancedRunner.class) public class AsyncIOServletTest { private Server server; private ServerConnector connector; private LocalConnector local; - private ServletContextHandler context; private String path = "/path"; private static final ThreadLocal scope = new ThreadLocal<>(); public void startServer(HttpServlet servlet) throws Exception { - startServer(servlet,30000); + startServer(servlet, 30000); } - + public void startServer(HttpServlet servlet, long idleTimeout) throws Exception { server = new Server(); @@ -98,7 +94,7 @@ public class AsyncIOServletTest local = new LocalConnector(server); server.addConnector(local); - context = new ServletContextHandler(server, "/", false, false); + ServletContextHandler context = new ServletContextHandler(server, "/", false, false); ServletHolder holder = new ServletHolder(servlet); holder.setAsyncSupported(true); context.addServlet(holder, path); @@ -108,18 +104,19 @@ public class AsyncIOServletTest @Override public void enterScope(Context context, Request request, Object reason) { - if (scope.get()!=null) + if (scope.get() != null) { - System.err.println(Thread.currentThread()+" Already entered scope!!!"); + System.err.println(Thread.currentThread() + " Already entered scope!!!"); scope.get().printStackTrace(); throw new IllegalStateException(); } scope.set(new Throwable()); } + @Override public void exitScope(Context context, Request request) { - if (scope.get()==null) + if (scope.get() == null) throw new IllegalStateException(); scope.set(null); } @@ -130,7 +127,7 @@ public class AsyncIOServletTest private static void assertScope() { - if (scope.get()==null) + if (scope.get() == null) Assert.fail("Not in scope"); } @@ -138,7 +135,7 @@ public class AsyncIOServletTest public void stopServer() throws Exception { server.stop(); - if (scope.get()!=null) + if (scope.get() != null) { System.err.println("Still in scope after stop!"); scope.get().printStackTrace(); @@ -192,8 +189,8 @@ public class AsyncIOServletTest public void onError(Throwable t) { assertScope(); - Assert.assertThat("onError type",t,instanceOf(throwable.getClass())); - Assert.assertThat("onError message",t.getMessage(),is(throwable.getMessage())); + Assert.assertThat("onError type", t, instanceOf(throwable.getClass())); + Assert.assertThat("onError message", t.getMessage(), is(throwable.getMessage())); latch.countDown(); response.setStatus(500); @@ -218,13 +215,13 @@ public class AsyncIOServletTest output.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); - String line=in.readLine(); + String line = in.readLine(); assertThat(line, containsString("500 Server Error")); - while (line.length()>0) + while (line.length() > 0) { - line=in.readLine(); + line = in.readLine(); } - line=in.readLine(); + line = in.readLine(); assertTrue(latch.await(5, TimeUnit.SECONDS)); } @@ -270,7 +267,7 @@ public class AsyncIOServletTest } }); } - },1000); + }, 1000); String data1 = "0123456789"; String data2 = "ABCDEF"; @@ -308,13 +305,13 @@ public class AsyncIOServletTest protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { assertScope(); - if (request.getDispatcherType()==DispatcherType.ERROR) + if (request.getDispatcherType() == DispatcherType.ERROR) { response.flushBuffer(); return; } - final AsyncContext asyncContext = request.startAsync(request, response); + request.startAsync(request, response); request.getInputStream().setReadListener(new ReadListener() { @Override @@ -335,7 +332,10 @@ public class AsyncIOServletTest { assertScope(); errors.incrementAndGet(); - throw new NullPointerException("explicitly_thrown_by_test_2"){{this.initCause(t);}}; + throw new NullPointerException("explicitly_thrown_by_test_2") + {{ + this.initCause(t); + }}; } }); } @@ -435,8 +435,8 @@ public class AsyncIOServletTest { final CountDownLatch latch = new CountDownLatch(1); String text = "Now is the winter of our discontent. How Now Brown Cow. The quick brown fox jumped over the lazy dog.\n"; - for (int i=0;i<10;i++) - text=text+text; + for (int i = 0; i < 10; i++) + text = text + text; final byte[] data = text.getBytes(StandardCharsets.ISO_8859_1); startServer(new HttpServlet() @@ -462,11 +462,11 @@ public class AsyncIOServletTest Thread.sleep(100); out.write(data); } - catch(IOException e) + catch (IOException e) { throw e; } - catch(Exception e) + catch (Exception e) { e.printStackTrace(); } @@ -495,13 +495,13 @@ public class AsyncIOServletTest output.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); - String line=in.readLine(); + String line = in.readLine(); assertThat(line, containsString("200 OK")); - while (line.length()>0) - line=in.readLine(); - line=in.readLine(); + while (line.length() > 0) + line = in.readLine(); + line = in.readLine(); assertThat(line, not(containsString(" "))); - line=in.readLine(); + line = in.readLine(); assertThat(line, containsString("discontent. How Now Brown Cow. The ")); } @@ -530,9 +530,9 @@ public class AsyncIOServletTest in.setReadListener(new ReadListener() { - transient int _i=0; - transient boolean _minusOne=false;; - transient boolean _finished=false;; + transient int _i = 0; + transient boolean _minusOne = false; + transient boolean _finished = false; @Override public void onError(Throwable t) @@ -546,24 +546,24 @@ public class AsyncIOServletTest public void onDataAvailable() throws IOException { assertScope(); - while(in.isReady() && !in.isFinished()) + while (in.isReady() && !in.isFinished()) { int b = in.read(); - if (b==-1) - _minusOne=true; - else if (data[_i++]!=b) + if (b == -1) + _minusOne = true; + else if (data[_i++] != b) throw new IllegalStateException(); } if (in.isFinished()) - _finished=true; + _finished = true; } @Override public void onAllDataRead() throws IOException { assertScope(); - out.write(String.format("i=%d eof=%b finished=%b",_i,_minusOne,_finished).getBytes(StandardCharsets.ISO_8859_1)); + out.write(String.format("i=%d eof=%b finished=%b", _i, _minusOne, _finished).getBytes(StandardCharsets.ISO_8859_1)); async.complete(); } }); @@ -572,8 +572,8 @@ public class AsyncIOServletTest String request = "GET " + path + " HTTP/1.1\r\n" + "Host: localhost:" + connector.getLocalPort() + "\r\n" + - "Content-Type: text/plain\r\n"+ - "Content-Length: "+data.length+"\r\n" + + "Content-Type: text/plain\r\n" + + "Content-Length: " + data.length + "\r\n" + "Connection: close\r\n" + "\r\n"; @@ -586,12 +586,12 @@ public class AsyncIOServletTest output.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); - String line=in.readLine(); + String line = in.readLine(); assertThat(line, containsString("200 OK")); - while (line.length()>0) - line=in.readLine(); - line=in.readLine(); - assertThat(line, containsString("i="+data.length+" eof=true finished=true")); + while (line.length() > 0) + line = in.readLine(); + line = in.readLine(); + assertThat(line, containsString("i=" + data.length + " eof=true finished=true")); } } @@ -634,14 +634,14 @@ public class AsyncIOServletTest Thread.sleep(1000); if (!in.isReady()) throw new IllegalStateException(); - if (in.read()!='X') + if (in.read() != 'X') throw new IllegalStateException(); if (!in.isReady()) throw new IllegalStateException(); - if (in.read()!=-1) + if (in.read() != -1) throw new IllegalStateException(); } - catch(Exception e) + catch (Exception e) { e.printStackTrace(); } @@ -660,8 +660,8 @@ public class AsyncIOServletTest String request = "GET " + path + " HTTP/1.1\r\n" + "Host: localhost:" + connector.getLocalPort() + "\r\n" + - "Content-Type: text/plain\r\n"+ - "Content-Length: "+data.length+"\r\n" + + "Content-Type: text/plain\r\n" + + "Content-Length: " + data.length + "\r\n" + "Connection: close\r\n" + "\r\n"; @@ -676,11 +676,11 @@ public class AsyncIOServletTest output.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); - String line=in.readLine(); + String line = in.readLine(); assertThat(line, containsString("200 OK")); - while (line.length()>0) - line=in.readLine(); - line=in.readLine(); + while (line.length() > 0) + line = in.readLine(); + line = in.readLine(); assertThat(line, containsString("OK")); } } @@ -704,7 +704,7 @@ public class AsyncIOServletTest final ServletInputStream in = request.getInputStream(); final ServletOutputStream out = response.getOutputStream(); - if (request.getDispatcherType()==DispatcherType.ERROR) + if (request.getDispatcherType() == DispatcherType.ERROR) throw new IllegalStateException(); in.setReadListener(new ReadListener() @@ -721,28 +721,24 @@ public class AsyncIOServletTest public void onDataAvailable() throws IOException { assertScope(); - async.start( - new Runnable() + async.start(() -> { - public void run() + assertScope(); + try { - assertScope(); - try - { - Thread.sleep(1000); - if (!in.isReady()) - throw new IllegalStateException(); - if (in.read()!='X') - throw new IllegalStateException(); - if (!in.isReady()) - throw new IllegalStateException(); - if (in.read()!=-1) - throw new IllegalStateException(); - } - catch(Exception e) - { - e.printStackTrace(); - } + Thread.sleep(1000); + if (!in.isReady()) + throw new IllegalStateException(); + if (in.read() != 'X') + throw new IllegalStateException(); + if (!in.isReady()) + throw new IllegalStateException(); + if (in.read() != -1) + throw new IllegalStateException(); + } + catch (Exception e) + { + e.printStackTrace(); } }); } @@ -759,8 +755,8 @@ public class AsyncIOServletTest String request = "GET " + path + " HTTP/1.1\r\n" + "Host: localhost:" + connector.getLocalPort() + "\r\n" + - "Content-Type: text/plain\r\n"+ - "Content-Length: "+data.length+"\r\n" + + "Content-Type: text/plain\r\n" + + "Content-Length: " + data.length + "\r\n" + "Connection: close\r\n" + "\r\n"; @@ -775,11 +771,11 @@ public class AsyncIOServletTest output.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); - String line=in.readLine(); + String line = in.readLine(); assertThat(line, containsString("200 OK")); - while (line.length()>0) - line=in.readLine(); - line=in.readLine(); + while (line.length() > 0) + line = in.readLine(); + line = in.readLine(); assertThat(line, containsString("OK")); } } @@ -820,7 +816,7 @@ public class AsyncIOServletTest while (in.isReady()) { int b = in.read(); - if (b<0) + if (b < 0) { out.write("OK\n".getBytes(StandardCharsets.ISO_8859_1)); async.complete(); @@ -843,8 +839,8 @@ public class AsyncIOServletTest String request = "GET " + path + " HTTP/1.1\r\n" + "Host: localhost:" + connector.getLocalPort() + "\r\n" + - "Content-Type: text/plain\r\n"+ - "Content-Length: "+data.length+"\r\n" + + "Content-Type: text/plain\r\n" + + "Content-Length: " + data.length + "\r\n" + "Connection: close\r\n" + "\r\n"; @@ -858,13 +854,13 @@ public class AsyncIOServletTest output.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); - String line=in.readLine(); + String line = in.readLine(); assertThat(line, containsString("200 OK")); - while (line.length()>0) + while (line.length() > 0) { - line=in.readLine(); + line = in.readLine(); } - line=in.readLine(); + line = in.readLine(); assertThat(line, containsString("OK")); Assert.assertFalse(allDataRead.get()); } @@ -926,7 +922,7 @@ public class AsyncIOServletTest output.flush(); String response = IO.toString(client.getInputStream()); - assertThat(response,containsString(" 200 OK")); + assertThat(response, containsString(" 200 OK")); // wait for onAllDataRead BEFORE closing client latch.await(); } @@ -990,7 +986,7 @@ public class AsyncIOServletTest @Override public void onWritePossible() throws IOException { - if (writeLatch.getCount()==0) + if (writeLatch.getCount() == 0) asyncContext.complete(); else writeLatch.countDown(); @@ -1013,7 +1009,7 @@ public class AsyncIOServletTest "Host: localhost:" + connector.getLocalPort() + "\r\n" + "Transfer-Encoding: chunked\r\n" + "\r\n" + - Integer.toHexString(content.length())+"\r\n" + + Integer.toHexString(content.length()) + "\r\n" + content + "\r\n"; endp.addInput(ByteBuffer.wrap(request.getBytes("UTF-8"))); diff --git a/jetty-unixsocket/src/main/config/etc/jetty-unixsocket-http2c.xml b/jetty-unixsocket/src/main/config/etc/jetty-unixsocket-http2c.xml index 1213f1b2fd9..40494fd5c79 100644 --- a/jetty-unixsocket/src/main/config/etc/jetty-unixsocket-http2c.xml +++ b/jetty-unixsocket/src/main/config/etc/jetty-unixsocket-http2c.xml @@ -10,7 +10,7 @@ - + diff --git a/jetty-unixsocket/src/main/config/modules/unixsocket-http2c.mod b/jetty-unixsocket/src/main/config/modules/unixsocket-http2c.mod index 4755fe7e02c..59f844977be 100644 --- a/jetty-unixsocket/src/main/config/modules/unixsocket-http2c.mod +++ b/jetty-unixsocket/src/main/config/modules/unixsocket-http2c.mod @@ -16,6 +16,5 @@ etc/jetty-unixsocket-http2c.xml ## Max number of concurrent streams per connection # jetty.http2.maxConcurrentStreams=1024 -## Initial stream send (server to client) window -# jetty.http2.initialStreamSendWindow=65535 - +## Initial stream receive window (client to server) +# jetty.http2.initialStreamRecvWindow=65535 diff --git a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientConnectTimeoutTest.java b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientConnectTimeoutTest.java index 2774e9fd523..5e8b8b6b81f 100644 --- a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientConnectTimeoutTest.java +++ b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/HttpClientConnectTimeoutTest.java @@ -27,8 +27,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.client.api.Response; -import org.eclipse.jetty.client.api.Result; import org.junit.Assert; import org.junit.Assume; import org.junit.Ignore; @@ -51,21 +49,17 @@ public class HttpClientConnectTimeoutTest extends AbstractTest int connectTimeout = 1000; assumeConnectTimeout(host, port, connectTimeout); - start(null); + start(new EmptyServerHandler()); client.stop(); client.setConnectTimeout(connectTimeout); client.start(); final CountDownLatch latch = new CountDownLatch(1); Request request = client.newRequest(host, port); - request.send(new Response.CompleteListener() + request.send(result -> { - @Override - public void onComplete(Result result) - { - if (result.isFailed()) - latch.countDown(); - } + if (result.isFailed()) + latch.countDown(); }); Assert.assertTrue(latch.await(2 * connectTimeout, TimeUnit.MILLISECONDS)); @@ -80,7 +74,7 @@ public class HttpClientConnectTimeoutTest extends AbstractTest int connectTimeout = 2000; assumeConnectTimeout(host, port, connectTimeout); - start(null); + start(new EmptyServerHandler()); client.stop(); client.setConnectTimeout(connectTimeout); client.start(); @@ -89,14 +83,10 @@ public class HttpClientConnectTimeoutTest extends AbstractTest final CountDownLatch latch = new CountDownLatch(2); Request request = client.newRequest(host, port); request.timeout(connectTimeout / 2, TimeUnit.MILLISECONDS) - .send(new Response.CompleteListener() + .send(result -> { - @Override - public void onComplete(Result result) - { - completes.incrementAndGet(); - latch.countDown(); - } + completes.incrementAndGet(); + latch.countDown(); }); Assert.assertFalse(latch.await(2 * connectTimeout, TimeUnit.MILLISECONDS)); @@ -112,31 +102,23 @@ public class HttpClientConnectTimeoutTest extends AbstractTest int connectTimeout = 1000; assumeConnectTimeout(host, port, connectTimeout); - start(null); + start(new EmptyServerHandler()); client.stop(); client.setConnectTimeout(connectTimeout); client.start(); final CountDownLatch latch = new CountDownLatch(1); Request request = client.newRequest(host, port); - request.send(new Response.CompleteListener() + request.send(result1 -> { - @Override - public void onComplete(Result result) + if (result1.isFailed()) { - if (result.isFailed()) + // Retry + client.newRequest(host, port).send(result2 -> { - // Retry - client.newRequest(host, port).send(new Response.CompleteListener() - { - @Override - public void onComplete(Result result) - { - if (result.isFailed()) - latch.countDown(); - } - }); - } + if (result2.isFailed()) + latch.countDown(); + }); } });