test connection GC in TSCCM
git-svn-id: https://svn.apache.org/repos/asf/jakarta/httpcomponents/httpclient/trunk@539856 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7f12408be7
commit
2bd467f080
|
@ -96,27 +96,12 @@ public class TestTSCCMWithServer extends ServerTestBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates default parameters for a connection manager.
|
|
||||||
*
|
|
||||||
* @return the default parameters
|
|
||||||
*/
|
|
||||||
public HttpParams createManagerParams() {
|
|
||||||
|
|
||||||
HttpParams params = new BasicHttpParams();
|
|
||||||
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
|
|
||||||
HttpProtocolParams.setUseExpectContinue(params, false);
|
|
||||||
|
|
||||||
return params;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests releasing and re-using a connection after a response is read.
|
* Tests releasing and re-using a connection after a response is read.
|
||||||
*/
|
*/
|
||||||
public void testReleaseConnection() throws Exception {
|
public void testReleaseConnection() throws Exception {
|
||||||
|
|
||||||
HttpParams mgrpar = createManagerParams();
|
HttpParams mgrpar = defaultParams.copy();
|
||||||
HttpConnectionManagerParams.setMaxTotalConnections(mgrpar, 1);
|
HttpConnectionManagerParams.setMaxTotalConnections(mgrpar, 1);
|
||||||
|
|
||||||
ThreadSafeClientConnManager mgr = createTSCCM(mgrpar, null);
|
ThreadSafeClientConnManager mgr = createTSCCM(mgrpar, null);
|
||||||
|
@ -198,6 +183,65 @@ public class TestTSCCMWithServer extends ServerTestBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests GC of an unreferenced connection.
|
||||||
|
*/
|
||||||
|
public void testConnectionGC() throws Exception {
|
||||||
|
// 3.x: TestHttpConnectionManager.testReclaimUnusedConnection
|
||||||
|
|
||||||
|
HttpParams mgrpar = defaultParams.copy();
|
||||||
|
HttpConnectionManagerParams.setMaxTotalConnections(mgrpar, 1);
|
||||||
|
|
||||||
|
ThreadSafeClientConnManager mgr = createTSCCM(mgrpar, null);
|
||||||
|
|
||||||
|
final HttpHost target = getServerHttp();
|
||||||
|
final HttpRoute route = new HttpRoute(target, null, false);
|
||||||
|
final int rsplen = 8;
|
||||||
|
final String uri = "/random/" + rsplen;
|
||||||
|
|
||||||
|
HttpRequest request =
|
||||||
|
new BasicHttpRequest("GET", uri, HttpVersion.HTTP_1_1);
|
||||||
|
|
||||||
|
ManagedClientConnection conn = mgr.getConnection(route);
|
||||||
|
conn.open(route, httpContext, defaultParams);
|
||||||
|
|
||||||
|
// a new context is created for each testcase, no need to reset
|
||||||
|
HttpResponse response = Helper.execute
|
||||||
|
(request, conn, target, httpExecutor, httpProcessor, httpContext);
|
||||||
|
|
||||||
|
// we leave the connection in mid-use
|
||||||
|
// it's not really re-usable, but it must be closed anyway
|
||||||
|
conn.markReusable();
|
||||||
|
|
||||||
|
// first check that we can't get another connection
|
||||||
|
try {
|
||||||
|
// this should fail quickly, connection has not been released
|
||||||
|
mgr.getConnection(route, 10L);
|
||||||
|
fail("ConnectionPoolTimeoutException should have been thrown");
|
||||||
|
} catch (ConnectionPoolTimeoutException e) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
|
||||||
|
// We now drop the hard references to the connection and trigger GC.
|
||||||
|
WeakReference wref = new WeakReference(conn);
|
||||||
|
conn = null;
|
||||||
|
response = null;
|
||||||
|
httpContext = null; // holds a reference to the connection
|
||||||
|
|
||||||
|
// Java does not guarantee that this will trigger the GC, but
|
||||||
|
// it does in the test environment. GC is asynchronous, so we
|
||||||
|
// need to give the garbage collector some time afterwards.
|
||||||
|
System.gc();
|
||||||
|
Thread.sleep(1000);
|
||||||
|
|
||||||
|
assertNull("connection not garbage collected", wref.get());
|
||||||
|
conn = mgr.getConnection(route, 10L);
|
||||||
|
assertFalse("GCed connection not closed", conn.isOpen());
|
||||||
|
|
||||||
|
mgr.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests GC of an unreferenced connection manager.
|
* Tests GC of an unreferenced connection manager.
|
||||||
*/
|
*/
|
||||||
|
@ -257,7 +301,7 @@ public class TestTSCCMWithServer extends ServerTestBase {
|
||||||
//
|
//
|
||||||
// + testReleaseConnection
|
// + testReleaseConnection
|
||||||
// + testDroppedThread
|
// + testDroppedThread
|
||||||
// testReclaimUnusedConnection, depends on execution framework
|
// + testReclaimUnusedConnection
|
||||||
// testGetFromMultipleThreads, depends on execution framework
|
// testGetFromMultipleThreads, depends on execution framework
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue