@Test public void testQueryParameters() throws IOException, ExecutionException, TimeoutException, InterruptedException { try (AsyncHttpClient client = asyncHttpClient()) { Future<Response> f = client.prepareGet("http://localhost:" + port1).addQueryParam("a", "1").addQueryParam("b", "2").execute(); Response resp = f.get(3, TimeUnit.SECONDS); assertNotNull(resp); assertEquals(resp.getStatusCode(), HttpServletResponse.SC_OK); assertEquals(resp.getHeader("a"), "1"); assertEquals(resp.getHeader("b"), "2"); } }
@Test public void zeroCopyPutTest() throws IOException, ExecutionException, InterruptedException { try (AsyncHttpClient client = asyncHttpClient()) { Future<Response> f = client.preparePut("http://localhost:" + port1 + "/").setBody(SIMPLE_TEXT_FILE).execute(); Response resp = f.get(); assertNotNull(resp); assertEquals(resp.getStatusCode(), HttpServletResponse.SC_OK); assertEquals(resp.getResponseBody(), SIMPLE_TEXT_FILE_STRING); } }
String requestUrl = new URL(serviceNameResolver.resolveHostUri().toURL(), path).toString(); AuthenticationDataProvider authData = authentication.getAuthData(); BoundRequestBuilder builder = httpClient.prepareGet(requestUrl); builder.setHeader(header.getKey(), header.getValue()); final ListenableFuture<Response> responseFuture = builder.setHeader("Accept", "application/json") .execute(new AsyncCompletionHandler<Response>() { try { Response response = responseFuture.get(); if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { log.warn("[{}] HTTP get request failed: {}", requestUrl, response.getStatusText()); Exception e; if (response.getStatusCode() == HttpURLConnection.HTTP_NOT_FOUND) { e = new NotFoundException("Not found: " + response.getStatusText()); } else { e = new PulsarClientException("HTTP get request failed: " + response.getStatusText()); T data = ObjectMapperFactory.getThreadLocal().readValue(response.getResponseBodyAsBytes(), clazz); future.complete(data); } catch (Exception e) {
private void fireCompleted(Response response) { if (listener != null) { listener.onCompleted(uri, response.getStatusCode(), response.getStatusText()); } } }
@Test public void urlWithoutSlashTest() throws Exception { try (AsyncHttpClient c = asyncHttpClient()) { String body = "hello there"; Response response = c.preparePost(String.format("http://localhost:%d/foo/test", port1)).setBody(body).setHeader("Content-Type", "text/html").execute().get(TIMEOUT, TimeUnit.SECONDS); assertEquals(response.getResponseBody(), body); } } }
@Test public void testPutImageFile() throws Exception { try (AsyncHttpClient client = asyncHttpClient(config().setRequestTimeout(100 * 6000))) { InputStream inputStream = new BufferedInputStream(new FileInputStream(LARGE_IMAGE_FILE)); Response response = client.preparePut(getTargetUrl()).addBodyPart(new InputStreamPart("test", inputStream, LARGE_IMAGE_FILE.getName(), LARGE_IMAGE_FILE.length(), "application/octet-stream", UTF_8)).execute().get(); assertEquals(response.getStatusCode(), 200); } }
@Test(groups = "online", enabled = false) public void redirected302Test() throws Exception { isSet.getAndSet(false); try (AsyncHttpClient c = asyncHttpClient(config().setFollowRedirect(true))) { Response response = c.prepareGet(getTargetUrl()).setHeader("X-redirect", "http://www.google.com/").execute().get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); String baseUrl = getBaseUrl(response.getUri()); assertTrue(baseUrl.startsWith("http://www.google."), "response does not show redirection to a google subdomain, got " + baseUrl); } }
@Test(groups = "standalone") public void testQueryParameters() throws Exception { try (AsyncHttpClient client = asyncHttpClient()) { Future<Response> f = client.prepareGet("http://localhost:" + port1 + "/foo").addHeader("Accepts", "*/*").execute(); Response resp = f.get(3, TimeUnit.SECONDS); assertNotNull(resp); assertEquals(resp.getStatusCode(), 400); assertEquals(resp.getResponseBody(), BAD_REQUEST_STR); } }
@Test public void testParameters() throws IOException, ExecutionException, TimeoutException, InterruptedException { String value = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKQLMNOPQRSTUVWXYZ1234567809`~!@#$%^&*()_+-=,.<>/?;:'\"[]{}\\| "; try (AsyncHttpClient client = asyncHttpClient()) { Future<Response> f = client.preparePost("http://localhost:" + port1).addFormParam("test", value).execute(); Response resp = f.get(10, TimeUnit.SECONDS); assertNotNull(resp); assertEquals(resp.getStatusCode(), HttpServletResponse.SC_OK); assertEquals(resp.getHeader("X-Param"), value.trim()); } }
@Test(groups = "online", enabled = false) public void notRedirected302Test() throws Exception { isSet.getAndSet(false); try (AsyncHttpClient c = asyncHttpClient(config().setFollowRedirect(true))) { Response response = c.prepareGet(getTargetUrl()).setFollowRedirect(false).setHeader("X-redirect", "http://www.microsoft.com/").execute().get(); assertNotNull(response); assertEquals(response.getStatusCode(), 302); } }
@Test public void basicTest() throws Exception { try (AsyncHttpClient c = asyncHttpClient(config().addRequestFilter(new ThrottleRequestFilter(100)))) { Response response = c.preparePost(getTargetUrl()).execute().get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); } }
@Test public void testStreamingPutImage() throws Exception { try (AsyncHttpClient client = asyncHttpClient(config().setRequestTimeout(100 * 6000))) { Response response = client.preparePut(getTargetUrl()).setBody(createAsyncPublisher(LARGE_IMAGE_BYTES, 2342)) .execute().get(); assertEquals(response.getStatusCode(), 200); assertEquals(response.getResponseBodyAsBytes(), LARGE_IMAGE_BYTES); } }
@Test public void urlWithColonTest() throws Exception { try (AsyncHttpClient c = asyncHttpClient()) { String query = "test:colon:"; Response response = c.prepareGet(String.format("http://localhost:%d/foo/test/colon?q=%s", port1, query)).setHeader("Content-Type", "text/html").execute().get(TIMEOUT, TimeUnit.SECONDS); assertEquals(response.getHeader("q"), query); } }
@Test public void testRetryNonBlockingAsyncConnect() throws IOException, InterruptedException, ExecutionException { AsyncHttpClientConfig config = config() .setKeepAlive(true) .setMaxConnections(100) .setConnectTimeout(60000) .setRequestTimeout(30000) .build(); try (AsyncHttpClient client = asyncHttpClient(config)) { List<ListenableFuture<Response>> res = new ArrayList<>(); for (int i = 0; i < 32; i++) { res.add(testMethodRequest(client, 3, "servlet", UUID.randomUUID().toString())); } StringBuilder b = new StringBuilder(); for (ListenableFuture<Response> r : res) { Response theres = r.get(); assertEquals(theres.getStatusCode(), 200); b.append("==============\r\n") .append("Response Headers\r\n"); HttpHeaders heads = theres.getHeaders(); b.append(heads).append("\r\n") .append("==============\r\n"); } System.out.println(b.toString()); System.out.flush(); } }
@Test public void testConnectionDoesNotGetClosed() throws Exception { Response response = requestBuilder.execute().get(); assertEquals(response.getStatusCode(), 200, "HTTP response was invalid on first request."); byte[] responseBody = response.getResponseBodyAsBytes(); assertEquals(Integer.valueOf(response.getHeader("X-" + CONTENT_LENGTH)).intValue(), LARGE_IMAGE_BYTES.length, "Server side payload length invalid"); assertEquals(responseBody.length, LARGE_IMAGE_BYTES.length, "Client side payload length invalid"); assertEquals(response.getHeader(CONTENT_MD5), LARGE_IMAGE_BYTES_MD5, "Server side payload MD5 invalid"); assertEquals(TestUtils.md5(responseBody), LARGE_IMAGE_BYTES_MD5, "Client side payload MD5 invalid"); assertEquals(responseBody, LARGE_IMAGE_BYTES, "Image bytes are not equal on first attempt"); response = requestBuilder.execute().get(); assertEquals(response.getStatusCode(), 200); responseBody = response.getResponseBodyAsBytes(); assertEquals(Integer.valueOf(response.getHeader("X-" + CONTENT_LENGTH)).intValue(), LARGE_IMAGE_BYTES.length, "Server side payload length invalid"); assertEquals(responseBody.length, LARGE_IMAGE_BYTES.length, "Client side payload length invalid"); assertEquals(response.getHeader(CONTENT_MD5), LARGE_IMAGE_BYTES_MD5, "Server side payload MD5 invalid"); assertEquals(TestUtils.md5(responseBody), LARGE_IMAGE_BYTES_MD5, "Client side payload MD5 invalid"); assertEquals(responseBody, LARGE_IMAGE_BYTES, "Image bytes weren't equal on subsequent test");
@Test public void emptyResponseBodyBytesAreEmpty() throws Throwable { withClient().run(client -> withServer(server).run(server -> { server.enqueueEcho(); Response response = client.prepareGet(getTargetUrl()).execute().get(); assertEquals(response.getStatusCode(), 200); assertEquals(response.getResponseBodyAsBytes(), new byte[]{}); })); }
@Test public void optionsIsSupported() throws Throwable { withClient().run(client -> withServer(server).run(server -> { server.enqueueEcho(); Response response = client.prepareOptions(getTargetUrl()).execute().get(); assertEquals(response.getStatusCode(), 200); assertEquals(response.getHeader("Allow"), "GET,HEAD,POST,OPTIONS,TRACE"); })); }
@Test public void defaultRequestBodyEncodingIsUtf8() throws Throwable { withClient().run(client -> withServer(server).run(server -> { server.enqueueEcho(); Response response = client.preparePost(getTargetUrl()) .setBody("\u017D\u017D\u017D\u017D\u017D\u017D") .execute().get(); assertEquals(response.getResponseBodyAsBytes(), "\u017D\u017D\u017D\u017D\u017D\u017D".getBytes(UTF_8)); })); }
@Test public void getEmptyBody() throws Throwable { withClient().run(client -> withServer(server).run(server -> { server.enqueueOk(); Response response = client.prepareGet(getTargetUrl()).execute(new AsyncCompletionHandlerAdapter()) .get(TIMEOUT, SECONDS); assertTrue(response.getResponseBody().isEmpty()); })); }
private void waitForAndAssertResponse(ListenableFuture<Response> responseFuture) throws InterruptedException, java.util.concurrent.ExecutionException { Response response = responseFuture.get(); if (500 == response.getStatusCode()) { logger.debug("==============\n" + "500 response from call\n" + "Headers:" + response.getHeaders() + "\n" + "==============\n"); assertEquals(response.getStatusCode(), 500, "Should have 500 status code"); assertTrue(response.getHeader("X-Exception").contains("invalid.chunk.length"), "Should have failed due to chunking"); fail("HARD Failing the test due to provided InputStreamBodyGenerator, chunking incorrectly:" + response.getHeader("X-Exception")); } else { assertEquals(response.getResponseBodyAsBytes(), LARGE_IMAGE_BYTES); } } }