[jboss-cvs] JBossRemoting/src/tests/org/jboss/test/remoting/transport/bisocket ...
Ron Sigal
ron_sigal at yahoo.com
Wed Mar 14 01:09:58 EDT 2007
User: rsigal
Date: 07/03/14 01:09:58
Modified: src/tests/org/jboss/test/remoting/transport/bisocket
BisocketTestCase.java
Log:
JBREM-721: Added unit test for leaks with quick removeListener().
Revision Changes Path
1.10 +155 -9 JBossRemoting/src/tests/org/jboss/test/remoting/transport/bisocket/BisocketTestCase.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: BisocketTestCase.java
===================================================================
RCS file: /cvsroot/jboss/JBossRemoting/src/tests/org/jboss/test/remoting/transport/bisocket/BisocketTestCase.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- BisocketTestCase.java 11 Mar 2007 20:57:25 -0000 1.9
+++ BisocketTestCase.java 14 Mar 2007 05:09:58 -0000 1.10
@@ -64,7 +64,7 @@
/**
* @author <a href="ron.sigal at jboss.com">Ron Sigal</a>
- * @version $Revision: 1.9 $
+ * @version $Revision: 1.10 $
* <p>
* Copyright Nov 25, 2006
* </p>
@@ -1209,7 +1209,6 @@
assertEquals(1, controlConnectionThreadMap.size());
Thread t = (Thread) controlConnectionThreadMap.values().iterator().next();
Class[] classes = BisocketServerInvoker.class.getDeclaredClasses();
- assertEquals(3, classes.length);
Class invokerClass = null;
for (int i = 0; i < classes.length; i++)
{
@@ -1348,7 +1347,6 @@
Collection controlConnectionThreads = controlConnectionThreadMap.values();
Thread controlConnectionThread = (Thread) controlConnectionThreads.iterator().next();
Class[] classes = BisocketServerInvoker.class.getDeclaredClasses();
- assertEquals(3, classes.length);
Class controlConnectionThreadClass = null;
for (int i = 0; i < classes.length; i++)
{
@@ -1614,6 +1612,8 @@
HashMap config = new HashMap();
config.put(InvokerLocator.FORCE_REMOTE, "true");
config.put(Bisocket.IS_CALLBACK_SERVER, "true");
+ config.put(Bisocket.PING_FREQUENCY, TEST_PING_FREQUENCY_STRING);
+
addExtraClientConfig(config);
Client client = new Client(serverLocator, config);
client.connect();
@@ -1654,8 +1654,8 @@
Map callbackConnectors = (Map) field.get(client);
assertEquals(CALLBACK_HANDLER_COUNT, callbackConnectors.size());
ServerInvoker[] serverInvokers = new ServerInvoker[CALLBACK_HANDLER_COUNT];
- Map[] listenerIdToInvokerLocatorMaps = new HashMap[CALLBACK_HANDLER_COUNT];
- Map[] controlConnectionThreadMaps = new HashMap[CALLBACK_HANDLER_COUNT];
+ Map[] listenerIdToInvokerLocatorMaps = new Map[CALLBACK_HANDLER_COUNT];
+ Map[] controlConnectionThreadMaps = new Map[CALLBACK_HANDLER_COUNT];
int i = 0;
Iterator it = callbackConnectors.values().iterator();
@@ -1697,13 +1697,159 @@
assertEquals(0, listenerIdToCallbackClientInvokerMap.size());
assertEquals(0, listenerIdToSocketsMap.size());
+ Class[] classes = BisocketServerInvoker.class.getDeclaredClasses();
+ Class controlMonitorTimerTaskClass = null;
+ for (int j = 0; j < classes.length; j++)
+ {
+ log.info(classes[j]);
+ String fqn = classes[j].getName();
+ String className = fqn.substring(fqn.lastIndexOf('.') + 1);
+ log.info(className);
+ if ("BisocketServerInvoker$ControlMonitorTimerTask".equals(className))
+ {
+ controlMonitorTimerTaskClass = classes[j];
+ break;
+ }
+ }
+ assertNotNull(controlMonitorTimerTaskClass);
+
for (int j = 0; j < CALLBACK_HANDLER_COUNT; j++)
{
- assertEquals(0, listenerIdToInvokerLocatorMaps[j].size());
- assertEquals(0, controlConnectionThreadMaps[j].size());
+ assertEquals("server invoker: " + j, 0, listenerIdToInvokerLocatorMaps[j].size());
+ assertEquals("server invoker: " + j, 0, controlConnectionThreadMaps[j].size());
+
field = BisocketServerInvoker.class.getDeclaredField("controlMonitorTimerTask");
field.setAccessible(true);
- assertNull(field.get(serverInvokers[j]));
+ Object controlMonitorTimerTask = field.get(serverInvokers[j]);
+ field = controlMonitorTimerTaskClass.getDeclaredField("listenerIdToInvokerLocatorMap");
+ field.setAccessible(true);
+ assertNull("server invoker: " + j, field.get(controlMonitorTimerTask));
+ field = controlMonitorTimerTaskClass.getDeclaredField("controlConnectionThreadMap");
+ field.setAccessible(true);
+ assertNull("server invoker: " + j, field.get(controlMonitorTimerTask));
+ }
+
+ client.disconnect();
+ }
+
+
+ public void testForLeaksQuickRemoveListener() throws Throwable
+ {
+ log.info("entering " + getName());
+ String host = InetAddress.getLocalHost().getHostName();
+ String locatorURI = getTransport() + "://" + host + ":" + port;
+ InvokerLocator serverLocator = new InvokerLocator(locatorURI);
+ log.info("Connecting to: " + serverLocator);
+ HashMap config = new HashMap();
+ config.put(InvokerLocator.FORCE_REMOTE, "true");
+ config.put(Bisocket.IS_CALLBACK_SERVER, "true");
+ config.put(Bisocket.PING_FREQUENCY, TEST_PING_FREQUENCY_STRING);
+
+ addExtraClientConfig(config);
+ Client client = new Client(serverLocator, config);
+ client.connect();
+ log.info("client is connected");
+ assertTrue(client.getInvoker() instanceof BisocketClientInvoker);
+
+ int CALLBACK_HANDLER_COUNT = 5;
+ SimpleCallbackHandler[] callbackHandlers = new SimpleCallbackHandler[CALLBACK_HANDLER_COUNT];
+ for (int i = 0; i < CALLBACK_HANDLER_COUNT; i++)
+ {
+ callbackHandlers[i] = new SimpleCallbackHandler();
+ client.addListener(callbackHandlers[i], new HashMap());
+ }
+
+ client.invoke(CALLBACK_TEST);
+ for (int i = 0; i < CALLBACK_HANDLER_COUNT; i++)
+ {
+ assertEquals(1, callbackHandlers[i].callbackCounter);
+ }
+
+ // Static fields.
+ Field field = BisocketServerInvoker.class.getDeclaredField("listenerIdToServerInvokerMap");
+ field.setAccessible(true);
+ Map listenerIdToServerInvokerMap = (Map) field.get(null);
+ field = BisocketClientInvoker.class.getDeclaredField("listenerIdToClientInvokerMap");
+ field.setAccessible(true);
+ Map listenerIdToClientInvokerMap = (Map) field.get(null);
+
+ // Non-static fields.
+ field = Client.class.getDeclaredField("callbackConnectors");
+ field.setAccessible(true);
+ Map callbackConnectors = (Map) field.get(client);
+ assertEquals(CALLBACK_HANDLER_COUNT, callbackConnectors.size());
+ ServerInvoker[] serverInvokers = new ServerInvoker[CALLBACK_HANDLER_COUNT];
+ Map[] listenerIdToInvokerLocatorMaps = new Map[CALLBACK_HANDLER_COUNT];
+ Map[] controlConnectionThreadMaps = new Map[CALLBACK_HANDLER_COUNT];
+
+ int i = 0;
+ Iterator it = callbackConnectors.values().iterator();
+ while (it.hasNext())
+ {
+ Connector c = (Connector) it.next();
+ serverInvokers[i] = c.getServerInvoker();
+ assertTrue(serverInvokers[i] instanceof BisocketServerInvoker);
+ field = BisocketServerInvoker.class.getDeclaredField("listenerIdToInvokerLocatorMap");
+ field.setAccessible(true);
+ listenerIdToInvokerLocatorMaps[i] = (Map) field.get(serverInvokers[i]);
+ field = BisocketServerInvoker.class.getDeclaredField("controlConnectionThreadMap");
+ field.setAccessible(true);
+ controlConnectionThreadMaps[i] = (Map) field.get(serverInvokers[i]);
+ i++;
+ }
+
+ assertEquals(CALLBACK_HANDLER_COUNT, listenerIdToServerInvokerMap.size());
+ assertEquals(CALLBACK_HANDLER_COUNT, listenerIdToClientInvokerMap.size());
+
+ for (int j = 0; j < CALLBACK_HANDLER_COUNT; j++)
+ {
+ assertEquals(1, listenerIdToInvokerLocatorMaps[j].size());
+ assertEquals(1, controlConnectionThreadMaps[j].size());
+ field = BisocketServerInvoker.class.getDeclaredField("controlMonitorTimerTask");
+ field.setAccessible(true);
+ assertNotNull(field.get(serverInvokers[j]));
+ }
+
+ client.setDisconnectTimeout(0);
+
+ for (int j = 0; j < CALLBACK_HANDLER_COUNT; j++)
+ {
+ client.removeListener(callbackHandlers[j]);
+ }
+
+ assertEquals(0, listenerIdToServerInvokerMap.size());
+ assertEquals(0, listenerIdToClientInvokerMap.size());
+
+ Class[] classes = BisocketServerInvoker.class.getDeclaredClasses();
+ Class controlMonitorTimerTaskClass = null;
+ for (int j = 0; j < classes.length; j++)
+ {
+ log.info(classes[j]);
+ String fqn = classes[j].getName();
+ String className = fqn.substring(fqn.lastIndexOf('.') + 1);
+ log.info(className);
+ if ("BisocketServerInvoker$ControlMonitorTimerTask".equals(className))
+ {
+ controlMonitorTimerTaskClass = classes[j];
+ break;
+ }
+ }
+ assertNotNull(controlMonitorTimerTaskClass);
+
+ for (int j = 0; j < CALLBACK_HANDLER_COUNT; j++)
+ {
+ assertEquals("server invoker: " + j, 0, listenerIdToInvokerLocatorMaps[j].size());
+ assertEquals("server invoker: " + j, 0, controlConnectionThreadMaps[j].size());
+
+ field = BisocketServerInvoker.class.getDeclaredField("controlMonitorTimerTask");
+ field.setAccessible(true);
+ Object controlMonitorTimerTask = field.get(serverInvokers[j]);
+ field = controlMonitorTimerTaskClass.getDeclaredField("listenerIdToInvokerLocatorMap");
+ field.setAccessible(true);
+ assertNull("server invoker: " + j, field.get(controlMonitorTimerTask));
+ field = controlMonitorTimerTaskClass.getDeclaredField("controlConnectionThreadMap");
+ field.setAccessible(true);
+ assertNull("server invoker: " + j, field.get(controlMonitorTimerTask));
}
client.disconnect();
@@ -1716,7 +1862,7 @@
try
{
testCase.setUp();
- Thread.sleep(600000);
+// testCase.testConfiguration();
testCase.tearDown();
}
catch(Throwable e)
More information about the jboss-cvs-commits
mailing list