コード例 #1
0
  public void testGetConnection() {
    MultiThreadedHttpConnectionManager mgr = new MultiThreadedHttpConnectionManager();

    HostConfiguration hostConfiguration = new HostConfiguration();
    hostConfiguration.setHost("www.nosuchserver.com", 80, "http");

    // Create a new connection
    HttpConnection conn = mgr.getConnection(hostConfiguration);
    // Validate the connection properties
    assertEquals("Host", "www.nosuchserver.com", conn.getHost());
    assertEquals("Port", 80, conn.getPort());
    // Release the connection
    mgr.releaseConnection(conn);

    // Create a new connection
    hostConfiguration.setHost("www.nosuchserver.com", -1, "https");
    conn = mgr.getConnection(hostConfiguration);
    // Validate the connection properties
    assertEquals("Host", "www.nosuchserver.com", conn.getHost());
    assertEquals("Port", 443, conn.getPort());
    // Release the connection
    mgr.releaseConnection(conn);

    // Create a new connection
    hostConfiguration.setHost("www.nowhere.org", 8080, "http");
    conn = mgr.getConnection(hostConfiguration);
    // Validate the connection properties
    assertEquals("Host", "www.nowhere.org", conn.getHost());
    assertEquals("Port", 8080, conn.getPort());
    // Release the connection
    mgr.releaseConnection(conn);
  }
コード例 #2
0
  /**
   * Tests the MultiThreadedHttpConnectionManager's ability to restrict the maximum number of
   * connections.
   */
  public void testMaxConnections() {

    MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
    connectionManager.getParams().setDefaultMaxConnectionsPerHost(1);
    connectionManager.getParams().setMaxTotalConnections(2);

    HostConfiguration host1 = new HostConfiguration();
    host1.setHost("host1", -1, "http");

    HostConfiguration host2 = new HostConfiguration();
    host2.setHost("host2", -1, "http");

    HttpConnection connection1 = connectionManager.getConnection(host1);
    HttpConnection connection2 = connectionManager.getConnection(host2);

    try {
      // this should fail quickly since the connection has not been released
      connectionManager.getConnectionWithTimeout(host2, 100);
      fail("ConnectionPoolTimeoutException should not be available");
    } catch (ConnectionPoolTimeoutException e) {
      // this should throw an exception
    }

    // release one of the connections
    connection2.releaseConnection();
    connection2 = null;

    try {
      // there should be a connection available now
      connection2 = connectionManager.getConnectionWithTimeout(host2, 100);
    } catch (ConnectionPoolTimeoutException e) {
      e.printStackTrace();
      fail("a httpConnection should have been available: " + e);
    }
  }
コード例 #3
0
  /** Tests the MultiThreadedHttpConnectionManager's ability to reclaim unused connections. */
  public void testConnectionReclaiming() {

    MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
    connectionManager.getParams().setDefaultMaxConnectionsPerHost(1);
    connectionManager.getParams().setMaxTotalConnections(1);

    HostConfiguration host1 = new HostConfiguration();
    host1.setHost("host1", -1, "http");

    HostConfiguration host2 = new HostConfiguration();
    host2.setHost("host2", -1, "http");

    HttpConnection connection = connectionManager.getConnection(host1);
    // now release this connection
    connection.releaseConnection();
    connection = null;

    try {
      // the connection from host1 should be reclaimed
      connection = connectionManager.getConnectionWithTimeout(host2, 100);
    } catch (ConnectTimeoutException e) {
      e.printStackTrace();
      fail("a httpConnection should have been available: " + e);
    }
  }
コード例 #4
0
  /**
   * Tests that {@link MultiThreadedHttpConnectionManager#shutdown()} closes all resources and makes
   * the connection manger unusable.
   */
  public void testShutdown() {

    MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
    connectionManager.getParams().setDefaultMaxConnectionsPerHost(1);
    connectionManager.getParams().setMaxTotalConnections(1);

    HostConfiguration host1 = new HostConfiguration();
    host1.setHost("host1", -1, "http");

    // hold on to the only connection
    HttpConnection connection = connectionManager.getConnection(host1);

    // wait for a connection on another thread
    GetConnectionThread getConn = new GetConnectionThread(host1, connectionManager, 0);
    getConn.start();

    connectionManager.shutdown();

    // now release this connection, this should close the connection, but have no other effect
    connection.releaseConnection();
    connection = null;

    try {
      getConn.join();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    // this thread should have caught an exception without getting a connection
    assertNull("Not connection should have been checked out", getConn.getConnection());
    assertNotNull("There should have been an exception", getConn.getException());

    try {
      connectionManager.getConnection(host1);
      fail("An exception should have occurred");
    } catch (Exception e) {
      // this is expected
    }
  }
コード例 #5
0
  public void testHostReusePreference() {

    final MultiThreadedHttpConnectionManager connectionManager =
        new MultiThreadedHttpConnectionManager();
    connectionManager.getParams().setDefaultMaxConnectionsPerHost(1);
    connectionManager.getParams().setMaxTotalConnections(1);

    final HostConfiguration host1 = new HostConfiguration();
    host1.setHost("host1", -1, "http");

    final HostConfiguration host2 = new HostConfiguration();
    host2.setHost("host2", -1, "http");

    HttpConnection connection = connectionManager.getConnection(host1);

    GetConnectionThread getHost1 = new GetConnectionThread(host1, connectionManager, 200);
    GetConnectionThread getHost2 = new GetConnectionThread(host2, connectionManager, 200);

    getHost2.start();
    getHost1.start();

    // give the threads some time to startup
    try {
      Thread.sleep(100);
    } catch (InterruptedException e1) {
      e1.printStackTrace();
    }

    // after the connection to host1 is released it should be given to getHost1
    connection.releaseConnection();
    connection = null;

    try {
      getHost1.join();
      getHost2.join();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    assertNotSame(
        "Connection should have been given to someone",
        getHost1.getConnection(),
        getHost2.getConnection());
    assertNotNull("Connection should have been given to host1", getHost1.getConnection());
    assertNull("Connection should NOT have been given to host2", getHost2.getConnection());
  }
コード例 #6
0
  public void testTimeout() {
    MultiThreadedHttpConnectionManager mgr = new MultiThreadedHttpConnectionManager();
    mgr.getParams().setDefaultMaxConnectionsPerHost(2);

    try {
      HostConfiguration hostConfig = new HostConfiguration();
      hostConfig.setHost("www.nosuchserver.com", 80, "http");

      HttpConnection conn1 = mgr.getConnection(hostConfig);
      HttpConnection conn2 = mgr.getConnection(hostConfig);

      HttpConnection conn3 = mgr.getConnectionWithTimeout(hostConfig, 1000);
      fail("Expected an HttpException.");

    } catch (ConnectTimeoutException e) {
      // Expected result
    }
  }
コード例 #7
0
  public void testDeleteClosedConnections() {

    MultiThreadedHttpConnectionManager manager = new MultiThreadedHttpConnectionManager();

    HttpConnection conn = manager.getConnection(client.getHostConfiguration());

    assertEquals("connectionsInPool", manager.getConnectionsInPool(), 1);
    assertEquals(
        "connectionsInPool(host)", manager.getConnectionsInPool(client.getHostConfiguration()), 1);

    conn.close();
    conn.releaseConnection();

    assertEquals("connectionsInPool", manager.getConnectionsInPool(), 1);
    assertEquals(
        "connectionsInPool(host)", manager.getConnectionsInPool(client.getHostConfiguration()), 1);

    manager.deleteClosedConnections();

    assertEquals("connectionsInPool", manager.getConnectionsInPool(), 0);
    assertEquals(
        "connectionsInPool(host)", manager.getConnectionsInPool(client.getHostConfiguration()), 0);
  }