@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();
    }
  }
Beispiel #7
0
 @Override
 public void close() throws IOException {
   asyncHttpClient.close();
 }