@Test public void testClientDrainHandler() { pausingServer(resumeFuture -> { HttpClientRequest req = client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, noOpHandler()); req.setChunked(true); assertFalse(req.writeQueueFull()); req.setWriteQueueMaxSize(1000); Buffer buff = TestUtils.randomBuffer(10000); vertx.setPeriodic(1, id -> { req.write(buff); if (req.writeQueueFull()) { vertx.cancelTimer(id); req.drainHandler(v -> { assertFalse(req.writeQueueFull()); testComplete(); }); // Tell the server to resume resumeFuture.complete(); } }); }); await(); }
vertx.setPeriodic(1, timerID -> { Context ctx = vertx.getOrCreateContext(); if (req.writeQueueFull()) { assertTrue(paused.get()); assertEquals(1, numPause.get());
@Test public void testClientRequestExceptionHandlerCalledWhenExceptionOnDrainHandler() { pausingServer(resumeFuture -> { HttpClientRequest req = client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, noOpHandler()); req.setChunked(true); assertFalse(req.writeQueueFull()); req.setWriteQueueMaxSize(1000); Buffer buff = TestUtils.randomBuffer(10000); AtomicBoolean failed = new AtomicBoolean(); vertx.setPeriodic(1, id -> { req.write(buff); if (req.writeQueueFull()) { vertx.cancelTimer(id); req.drainHandler(v -> { throw new RuntimeException("error"); }) .exceptionHandler(t -> { // Called a second times when testComplete is called and close the http client if (failed.compareAndSet(false, true)) { testComplete(); } }); // Tell the server to resume resumeFuture.complete(); } }); }); await(); }
@Override public boolean writeQueueFull() { return httpClientRequest.writeQueueFull(); }
complete(); }).setChunked(true); while (!req1.writeQueueFull()) { req1.write(Buffer.buffer(TestUtils.randomAlphaString(512))); Thread.sleep(1); complete(); }).setChunked(true); assertFalse(req2.writeQueueFull()); req2.sendHead(v -> { assertTrue(req2.writeQueueFull()); resumeLatch.complete(null); }); resumeLatch.get(20, TimeUnit.SECONDS); AsyncTestBase.assertWaitUntil(() -> !req2.writeQueueFull()); req1.end(); req2.end(buffer);
})).exceptionHandler(this::fail) .setChunked(true); while (!req.writeQueueFull()) { Buffer buff = Buffer.buffer(TestUtils.randomAlphaString(1024)); expected.appendBuffer(buff);
@Test public void testUseRequestAfterComplete() { server.requestHandler(noOpHandler()); server.listen(onSuccess(server -> { HttpClientRequest req = client.request(HttpMethod.POST, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, noOpHandler()); req.end(); Buffer buff = Buffer.buffer(); assertIllegalStateException(() -> req.end()); assertIllegalStateException(() -> req.continueHandler(noOpHandler())); assertIllegalStateException(() -> req.drainHandler(noOpHandler())); assertIllegalStateException(() -> req.end("foo")); assertIllegalStateException(() -> req.end(buff)); assertIllegalStateException(() -> req.end("foo", "UTF-8")); assertIllegalStateException(() -> req.sendHead()); assertIllegalStateException(() -> req.setChunked(false)); assertIllegalStateException(() -> req.setWriteQueueMaxSize(123)); assertIllegalStateException(() -> req.write(buff)); assertIllegalStateException(() -> req.write("foo")); assertIllegalStateException(() -> req.write("foo", "UTF-8")); assertIllegalStateException(() -> req.write(buff)); assertIllegalStateException(() -> req.writeQueueFull()); testComplete(); })); await(); }
@Override public boolean isFull() { return clientRequest.writeQueueFull(); }
/** * This will return <code>true</code> if there are more bytes in the write queue than the value set using {@link io.vertx.rxjava.core.http.HttpClientRequest#setWriteQueueMaxSize} * @return true if write queue is full */ public boolean writeQueueFull() { boolean ret = delegate.writeQueueFull(); return ret; }
@Override public boolean writeQueueFull() { return httpClientRequest.writeQueueFull(); }
@Override public boolean writeQueueFull() { return httpClientRequest.writeQueueFull(); }
/** * This will return <code>true</code> if there are more bytes in the write queue than the value set using {@link io.vertx.rxjava.core.http.HttpClientRequest#setWriteQueueMaxSize} * @return true if write queue is full */ public boolean writeQueueFull() { boolean ret = delegate.writeQueueFull(); return ret; }
@Override public boolean writeQueueFull() { return cReq.writeQueueFull(); }
@Test public void testClientDrainHandler() { pausingServer(resumeFuture -> { HttpClientRequest req = client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, noOpHandler()); req.setChunked(true); assertFalse(req.writeQueueFull()); req.setWriteQueueMaxSize(1000); Buffer buff = TestUtils.randomBuffer(10000); vertx.setPeriodic(1, id -> { req.write(buff); if (req.writeQueueFull()) { vertx.cancelTimer(id); req.drainHandler(v -> { assertFalse(req.writeQueueFull()); testComplete(); }); // Tell the server to resume resumeFuture.complete(); } }); }); await(); }
vertx.setPeriodic(1, timerID -> { Context ctx = vertx.getOrCreateContext(); if (req.writeQueueFull()) { assertTrue(paused.get()); assertEquals(1, numPause.get());
}).exceptionHandler(this::fail) .setChunked(true); while (!req.writeQueueFull()) { Buffer buff = Buffer.buffer(TestUtils.randomAlphaString(1024)); expected.appendBuffer(buff);
complete(); }).setChunked(true); while (!req1.writeQueueFull()) { req1.write(Buffer.buffer(TestUtils.randomAlphaString(512))); Thread.sleep(1); complete(); }).setChunked(true); assertFalse(req2.writeQueueFull()); req2.sendHead(v -> { assertTrue(req2.writeQueueFull()); resumeLatch.complete(null); }); resumeLatch.get(20, TimeUnit.SECONDS); AsyncTestBase.assertWaitUntil(() -> !req2.writeQueueFull()); req1.end(); req2.end(buffer);
@Test public void testClientRequestExceptionHandlerCalledWhenExceptionOnDrainHandler() { pausingServer(resumeFuture -> { HttpClientRequest req = client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, noOpHandler()); req.setChunked(true); assertFalse(req.writeQueueFull()); req.setWriteQueueMaxSize(1000); Buffer buff = TestUtils.randomBuffer(10000); AtomicBoolean failed = new AtomicBoolean(); vertx.setPeriodic(1, id -> { req.write(buff); if (req.writeQueueFull()) { vertx.cancelTimer(id); req.drainHandler(v -> { throw new RuntimeException("error"); }) .exceptionHandler(t -> { // Called a second times when testComplete is called and close the http client if (failed.compareAndSet(false, true)) { testComplete(); } }); // Tell the server to resume resumeFuture.complete(); } }); }); await(); }
@Test public void testUseRequestAfterComplete() { server.requestHandler(noOpHandler()); server.listen(onSuccess(server -> { HttpClientRequest req = client.request(HttpMethod.POST, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, noOpHandler()); req.end(); Buffer buff = Buffer.buffer(); assertIllegalStateException(() -> req.end()); assertIllegalStateException(() -> req.continueHandler(noOpHandler())); assertIllegalStateException(() -> req.drainHandler(noOpHandler())); assertIllegalStateException(() -> req.end("foo")); assertIllegalStateException(() -> req.end(buff)); assertIllegalStateException(() -> req.end("foo", "UTF-8")); assertIllegalStateException(() -> req.sendHead()); assertIllegalStateException(() -> req.setChunked(false)); assertIllegalStateException(() -> req.setWriteQueueMaxSize(123)); assertIllegalStateException(() -> req.write(buff)); assertIllegalStateException(() -> req.write("foo")); assertIllegalStateException(() -> req.write("foo", "UTF-8")); assertIllegalStateException(() -> req.write(buff)); assertIllegalStateException(() -> req.writeQueueFull()); testComplete(); })); await(); }
@Override public void write(IApimanBuffer chunk) { if (inboundFinished) { throw new IllegalStateException(Messages.getString("HttpConnector.0")); } if (chunk.getNativeBuffer() instanceof Buffer) { clientRequest.write((Buffer) chunk.getNativeBuffer()); // When write queue has diminished sufficiently, drain handler will be invoked. if (clientRequest.writeQueueFull() && drainHandler != null) { clientRequest.drainHandler(drainHandler::handle); } } else { throw new IllegalArgumentException(Messages.getString("HttpConnector.1")); } }