use of io.vertx.core.http.HttpClientRequest in project vert.x by eclipse.
the class HttpTest method testFormUploadAttributes2.
@Test
public void testFormUploadAttributes2() throws Exception {
AtomicInteger attributeCount = new AtomicInteger();
server.requestHandler(req -> {
if (req.method() == HttpMethod.POST) {
assertEquals(req.path(), "/form");
req.setExpectMultipart(true);
req.uploadHandler(event -> event.handler(buffer -> {
fail("Should not get here");
}));
req.endHandler(v -> {
MultiMap attrs = req.formAttributes();
attributeCount.set(attrs.size());
assertEquals("junit-testUserAlias", attrs.get("origin"));
assertEquals("admin@foo.bar", attrs.get("login"));
assertEquals("admin", attrs.get("pass word"));
req.response().end();
});
}
});
server.listen(onSuccess(s -> {
HttpClientRequest req = client.request(HttpMethod.POST, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/form", resp -> {
assertEquals(200, resp.statusCode());
resp.bodyHandler(body -> {
assertEquals(0, body.length());
});
assertEquals(3, attributeCount.get());
testComplete();
});
Buffer buffer = Buffer.buffer();
buffer.appendString("origin=junit-testUserAlias&login=admin%40foo.bar&pass+word=admin");
req.headers().set("content-length", String.valueOf(buffer.length()));
req.headers().set("content-type", "application/x-www-form-urlencoded");
req.write(buffer).end();
}));
await();
}
use of io.vertx.core.http.HttpClientRequest in project vert.x by eclipse.
the class HttpTest method testClientConnectionClose.
@Test
public void testClientConnectionClose() throws Exception {
// Test client connection close + server close handler
CountDownLatch latch = new CountDownLatch(1);
server.requestHandler(req -> {
AtomicInteger len = new AtomicInteger();
req.handler(buff -> {
if (len.addAndGet(buff.length()) == 1024) {
latch.countDown();
}
});
req.connection().closeHandler(v -> {
testComplete();
});
});
CountDownLatch listenLatch = new CountDownLatch(1);
server.listen(onSuccess(s -> listenLatch.countDown()));
awaitLatch(listenLatch);
HttpClientRequest req = client.post(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath", resp -> {
fail();
});
req.setChunked(true);
req.write(TestUtils.randomBuffer(1024));
awaitLatch(latch);
req.connection().close();
await();
}
use of io.vertx.core.http.HttpClientRequest in project vert.x by eclipse.
the class HttpTest method testClientRequestArguments.
@Test
public void testClientRequestArguments() throws Exception {
HttpClientRequest req = client.request(HttpMethod.PUT, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, DEFAULT_TEST_URI, noOpHandler());
assertNullPointerException(() -> req.putHeader((String) null, "someValue"));
assertNullPointerException(() -> req.putHeader((CharSequence) null, "someValue"));
assertNullPointerException(() -> req.putHeader("someKey", (Iterable<String>) null));
assertNullPointerException(() -> req.write((Buffer) null));
assertNullPointerException(() -> req.write((String) null));
assertNullPointerException(() -> req.write(null, "UTF-8"));
assertNullPointerException(() -> req.write("someString", null));
assertNullPointerException(() -> req.end((Buffer) null));
assertNullPointerException(() -> req.end((String) null));
assertNullPointerException(() -> req.end(null, "UTF-8"));
assertNullPointerException(() -> req.end("someString", null));
assertIllegalArgumentException(() -> req.setTimeout(0));
}
use of io.vertx.core.http.HttpClientRequest in project vert.x by eclipse.
the class HttpMetricsTest method testPushPromise.
@Test
public void testPushPromise() throws Exception {
waitFor(2);
int numBuffers = 10;
int contentLength = numBuffers * 1000;
server.requestHandler(req -> {
req.response().push(HttpMethod.GET, "/wibble", ar -> {
HttpServerResponse pushedResp = ar.result();
FakeHttpServerMetrics serverMetrics = FakeMetricsBase.getMetrics(server);
HttpServerMetric serverMetric = serverMetrics.getMetric(pushedResp);
assertNotNull(serverMetric);
pushedResp.putHeader("content-length", "" + contentLength);
AtomicInteger numBuffer = new AtomicInteger(numBuffers);
vertx.setPeriodic(1, timerID -> {
if (numBuffer.getAndDecrement() == 0) {
pushedResp.end();
assertNull(serverMetrics.getMetric(pushedResp));
vertx.cancelTimer(timerID);
complete();
} else {
pushedResp.write(TestUtils.randomBuffer(1000));
}
});
});
});
startServer();
client = vertx.createHttpClient(new HttpClientOptions().setProtocolVersion(HttpVersion.HTTP_2));
FakeHttpClientMetrics metrics = FakeMetricsBase.getMetrics(client);
HttpClientRequest req = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath", resp -> {
});
req.pushHandler(pushedReq -> {
HttpClientMetric metric = metrics.getMetric(pushedReq);
assertNotNull(metric);
assertSame(pushedReq, metric.request);
pushedReq.handler(resp -> {
resp.endHandler(v -> {
assertNull(metrics.getMetric(pushedReq));
complete();
});
});
});
req.end();
await();
}
use of io.vertx.core.http.HttpClientRequest in project vert.x by eclipse.
the class HttpMetricsTest method testHttpMetricsLifecycle.
private void testHttpMetricsLifecycle(HttpVersion protocol) throws Exception {
waitFor(2);
int numBuffers = 10;
int contentLength = numBuffers * 1000;
AtomicReference<HttpServerMetric> serverMetric = new AtomicReference<>();
server.requestHandler(req -> {
assertEquals(protocol, req.version());
FakeHttpServerMetrics serverMetrics = FakeMetricsBase.getMetrics(server);
assertNotNull(serverMetrics);
serverMetric.set(serverMetrics.getMetric(req));
assertNotNull(serverMetric.get());
assertNotNull(serverMetric.get().socket);
assertTrue(serverMetric.get().socket.connected.get());
req.bodyHandler(buff -> {
assertEquals(contentLength, buff.length());
HttpServerResponse resp = req.response().putHeader("Content-Length", "" + contentLength);
AtomicInteger numBuffer = new AtomicInteger(numBuffers);
vertx.setPeriodic(1, timerID -> {
if (numBuffer.getAndDecrement() == 0) {
resp.end();
assertNull(serverMetrics.getMetric(req));
vertx.cancelTimer(timerID);
} else {
resp.write(TestUtils.randomBuffer(1000));
}
});
});
});
startServer();
CountDownLatch latch = new CountDownLatch(1);
AtomicReference<HttpClientMetric> clientMetric = new AtomicReference<>();
client = vertx.createHttpClient(new HttpClientOptions().setProtocolVersion(protocol));
FakeHttpClientMetrics metrics = FakeMetricsBase.getMetrics(client);
Context ctx = vertx.getOrCreateContext();
ctx.runOnContext(v -> {
HttpClientRequest req = client.get(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/somepath").exceptionHandler(this::fail);
assertNull(metrics.getMetric(req));
req.setChunked(true).handler(resp -> {
clientMetric.set(metrics.getMetric(req));
assertNotNull(clientMetric.get());
assertNotNull(clientMetric.get().socket);
assertTrue(clientMetric.get().socket.connected.get());
resp.bodyHandler(buff -> {
assertNull(metrics.getMetric(req));
assertEquals(contentLength, buff.length());
latch.countDown();
});
});
for (int i = 0; i < numBuffers; i++) {
req.write(TestUtils.randomBuffer(1000));
}
req.end();
});
awaitLatch(latch);
client.close();
waitUntil(() -> !serverMetric.get().socket.connected.get());
assertEquals(contentLength, serverMetric.get().socket.bytesRead.get());
assertEquals(contentLength, serverMetric.get().socket.bytesWritten.get());
waitUntil(() -> !clientMetric.get().socket.connected.get());
assertEquals(contentLength, clientMetric.get().socket.bytesRead.get());
assertEquals(contentLength, clientMetric.get().socket.bytesWritten.get());
}
Aggregations