[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