@Test(groups = {"standalone", "default_provider"}) public void basicByteBufferTest() throws Exception { AsyncHttpClient c = getAsyncHttpClient(null); try { File largeFile = createTempFile(1024 * 100 * 10); final AtomicInteger byteReceived = new AtomicInteger(); try { Response response = c.preparePut(getTargetUrl()) .setBody(largeFile) .execute( new AsyncCompletionHandlerAdapter() { @Override public STATE onBodyPartReceived(final HttpResponseBodyPart content) throws Exception { byteReceived.addAndGet(content.getBodyByteBuffer().capacity()); return super.onBodyPartReceived(content); } }) .get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); assertEquals(byteReceived.get(), largeFile.length()); assertEquals(response.getResponseBody().length(), largeFile.length()); } catch (IOException ex) { fail("Should have timed out"); } } finally { c.close(); } }
// @Test(groups = { "standalone", "default_provider" }) public void relativeLocationUrl() throws Exception { isSet.getAndSet(false); AsyncHttpClient c = getAsyncHttpClient(null); try { Response response = c.preparePost(getTargetUrl()) .setFollowRedirect(true) .setHeader("X-redirect", "/foo/test") .execute() .get(); assertNotNull(response); assertEquals(response.getStatusCode(), 302); assertEquals(response.getUri().toString(), getTargetUrl()); } finally { c.close(); } }
// @Test(groups = { "online", "default_provider" }) public void notRedirected302Test() throws Exception { isSet.getAndSet(false); AsyncHttpClientConfig cg = new AsyncHttpClientConfig.Builder().setFollowRedirect(true).build(); AsyncHttpClient c = getAsyncHttpClient(cg); try { Response response = c.prepareGet(getTargetUrl()) .setFollowRedirect(false) .setHeader("X-redirect", "http://www.microsoft.com/") .execute() .get(); assertNotNull(response); assertEquals(response.getStatusCode(), 302); } finally { c.close(); } }
// @Test(groups = { "standalone", "default_provider" }) public void redirected302InvalidTest() throws Exception { isSet.getAndSet(false); AsyncHttpClient c = getAsyncHttpClient(null); try { // If the test hit a proxy, no ConnectException will be thrown and instead of 404 will be // returned. Response response = c.preparePost(getTargetUrl()) .setFollowRedirect(true) .setHeader("X-redirect", String.format("http://127.0.0.1:%d/", port2)) .execute() .get(); assertNotNull(response); assertEquals(response.getStatusCode(), 404); } catch (ExecutionException ex) { assertEquals(ex.getCause().getClass(), ConnectException.class); } finally { c.close(); } }
// @Test(groups = { "online", "default_provider" }) public void redirected302Test() throws Exception { isSet.getAndSet(false); AsyncHttpClient c = getAsyncHttpClient(null); try { Response response = c.prepareGet(getTargetUrl()) .setFollowRedirect(true) .setHeader("X-redirect", "http://www.microsoft.com/") .execute() .get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); String anyMicrosoftPage = "http://www.microsoft.com[^:]*:80"; String baseUrl = getBaseUrl(response.getUri()); assertTrue( baseUrl.matches(anyMicrosoftPage), "response does not show redirection to " + anyMicrosoftPage); } finally { c.close(); } }
@Test(groups = {"online", "default_provider"}) public void testMaxConnectionsWithinThreads() { String[] urls = new String[] {servletEndpointUri.toString(), servletEndpointUri.toString()}; final AsyncHttpClient client = getAsyncHttpClient( new AsyncHttpClientConfig.Builder() .setConnectionTimeoutInMs(1000) .setRequestTimeoutInMs(5000) .setAllowPoolingConnection(true) .setMaxConnectionsTotal(1) .setMaxConnectionsPerHost(1) .build()); try { final Boolean[] caughtError = new Boolean[] {Boolean.FALSE}; List<Thread> ts = new ArrayList<Thread>(); for (int i = 0; i < urls.length; i++) { final String url = urls[i]; Thread t = new Thread() { public void run() { try { client.prepareGet(url).execute(); } catch (IOException e) { // assert that 2nd request fails, because maxTotalConnections=1 // logger.debug(i); caughtError[0] = true; logger.error("Exception ", e); } } }; t.start(); ts.add(t); } for (Thread t : ts) { try { t.join(); } catch (InterruptedException e) { logger.error("Exception ", e); } } // Let the threads finish try { Thread.sleep(4500); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } assertTrue(caughtError[0], "Max Connections should have been reached"); boolean errorInNotThread = false; for (int i = 0; i < urls.length; i++) { final String url = urls[i]; try { client.prepareGet(url).execute(); // client.prepareGet(url).execute(); } catch (IOException e) { // assert that 2nd request fails, because maxTotalConnections=1 // logger.debug(i); errorInNotThread = true; System.err.println("============"); e.printStackTrace(); System.err.println("============"); } } // Let the request finish try { Thread.sleep(2500); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } assertTrue(errorInNotThread, "Max Connections should have been reached"); } finally { client.close(); } }
@Override public void close() throws IOException { asyncHttpClient.close(); }