You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2013/01/27 06:10:14 UTC

svn commit: r1439020 - in /river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share: BaseQATest.java LookupServices.java

Author: peter_firmstone
Date: Sun Jan 27 05:10:13 2013
New Revision: 1439020

URL: http://svn.apache.org/viewvc?rev=1439020&view=rev
Log:
Fix index out of range for LookupServices

Changed waitForDiscovery() method to wait on object monitor for discovery events with a timeout.  I suspect that the synchronized block inside the loop and following loop can optimised outside the loop by the compiler, waiting on the object monitor ensures the lock is released, so that discovery events can be received.

Modified:
    river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java
    river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupServices.java

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java?rev=1439020&r1=1439019&r2=1439020&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java Sun Jan 27 05:10:13 2013
@@ -304,6 +304,7 @@ abstract public class BaseQATest extends
             synchronized(this){
                 discardedMap.remove(l);
                 discoveredMap.put(l, groups);
+                this.notifyAll();
             }
         }
         
@@ -383,6 +384,7 @@ abstract public class BaseQATest extends
                                       (LocatorGroupsPair)locGroupsList.get(i);
                     discoveredMap.put(pair.getLocator(), pair.getGroups());
                 }//end loop
+                this.notifyAll();
             }//end sync(this)
         }//end setDiscoveredMap
 
@@ -403,6 +405,7 @@ abstract public class BaseQATest extends
                     discoveredMap.put(pair.getLocator(), pair.getGroups());
                     expectedDiscardedMap.put(pair.getLocator(), pair.getGroups());
                 }//end loop
+                this.notifyAll();
             }//end sync(this)
         }//end clearDiscardEventInfo
 
@@ -829,6 +832,7 @@ abstract public class BaseQATest extends
                     logger.log(Level.FINE,
                               " number of currently discovered lookup(s) = "
                               +discoveredMap.size());
+                    this.notifyAll();
                 }//end sync(this)
             } else {//(regs == null)
                 logger.log(Level.FINE, " discard event received "
@@ -1568,9 +1572,9 @@ abstract public class BaseQATest extends
         boolean discoveryComplete = false;
         boolean showCompInfo = true;//turn this off after 1st pass thru loop
 	Map discoveredClone = null;
+        synchronized (listener){
         iLoop:
-        for(int i=0;i<nSecsToWait1;i++) {
-            synchronized(listener) {
+            for(int i=0;i<nSecsToWait1;i++) {
                 Map discoveredMap = listener.discoveredMap;
                 Map expectedDiscoveredMap = listener.expectedDiscoveredMap;
 
@@ -1660,10 +1664,16 @@ abstract public class BaseQATest extends
                                               +discoveredMap.size()+")");
                     }//endif
                 }//endif(nEventsReceived == nEventsExpected)
-            }//end sync(listener)
-            DiscoveryServiceUtil.delayMS(1000);
-            showCompInfo = false;//display comparison info only when i = 0
-        }//end loop(iLoop)
+                try {
+                    listener.wait(1000); // Wait for discovery for up to 1000 ms.
+                } catch (InterruptedException ex) {
+                    throw new TestException("Interrupted while waiting for discovery", ex);
+                }
+                //DiscoveryServiceUtil.delayMS(1000);
+                showCompInfo = false;//display comparison info only when i = 0
+            }//end loop(iLoop)
+
+        }//end sync(listener)
         logger.log(Level.FINE, " DISCOVERY wait period complete");
         synchronized(listener) {
             if(!discoveryComplete) {
@@ -1681,9 +1691,9 @@ abstract public class BaseQATest extends
                               +" discovery event(s) expected, "
                               +listener.discoveredMap.size()
                               +" discovery event(s) received");
-        }//end sync(listener)
+        
     }//end waitForDiscovery
-
+    } // end sync (listener)
     /** Common code shared by each test that needs to wait for discarded
      *  events from the discovery helper utility, and verify that the
      *  expected discarded events have indeed arrived.
@@ -1718,9 +1728,9 @@ abstract public class BaseQATest extends
         boolean discardComplete = false;
         boolean showCompInfo = true;//turn this off after 1st pass thru loop
 	Map discardedClone = null;
-        iLoop:
-	for(int i=0;i<nSecsToWait1;i++) {
-            synchronized(listener) {
+        synchronized (listener){
+            iLoop:
+            for(int i=0;i<nSecsToWait1;i++) {
                 Map discardedMap = listener.discardedMap;
                 Map expectedDiscardedMap = listener.expectedDiscardedMap;
 
@@ -1810,10 +1820,15 @@ abstract public class BaseQATest extends
                                               +discardedMap.size()+")");
                     }//endif
                 }//endif(nEventsReceived == nEventsExpected)
-            }//end sync(listener)
-            DiscoveryServiceUtil.delayMS(1000);
-            showCompInfo = false;//display comparison info only when i = 0
-        }//end loop(iLoop)
+                try {
+                    listener.wait(1000);
+                } catch (InterruptedException ex) {
+                    throw new TestException("Test interrupted while waiting for discard", ex);
+                }
+                //DiscoveryServiceUtil.delayMS(1000);
+                showCompInfo = false;//display comparison info only when i = 0
+            }//end loop(iLoop)
+        }//end sync(listener)
         logger.log(Level.FINE, " DISCARD wait period complete");
         synchronized(listener) {
             if(!discardComplete) {
@@ -1868,9 +1883,9 @@ abstract public class BaseQATest extends
         boolean changeComplete = false;
         boolean showCompInfo = true;//turn this off after 1st pass thru loop
 	Map changedClone = null;
-    iLoop:
-        for(int i=0;i<nSecsToWait1;i++) {
-            synchronized(listener) {
+        synchronized (listener){
+        iLoop:
+            for(int i=0;i<nSecsToWait1;i++) {
                 Map changedMap = listener.changedMap;
                 Map expectedChangedMap = listener.expectedChangedMap;
                 if(displayOn && 
@@ -1959,10 +1974,15 @@ abstract public class BaseQATest extends
                                               +changedMap.size()+")");
                     }//endif
                 }//endif(nEventsReceived == nEventsExpected)
-            }//end sync(listener)
-            DiscoveryServiceUtil.delayMS(1000);
-            showCompInfo = false;//display comparison info only when i = 0
-        }//end loop(iLoop)
+                try {
+                    listener.wait(1000);
+                } catch (InterruptedException ex) {
+                    throw new TestException("Test interrupted while waiting for change event", ex);
+                }
+                //DiscoveryServiceUtil.delayMS(1000);
+                showCompInfo = false;//display comparison info only when i = 0
+            }//end loop(iLoop)
+        }//end sync(listener)
         logger.log(Level.FINE, " CHANGE wait period complete");
         synchronized(listener) {
             if(!changeComplete) {

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupServices.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupServices.java?rev=1439020&r1=1439019&r2=1439020&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupServices.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupServices.java Sun Jan 27 05:10:13 2013
@@ -609,17 +609,18 @@ public class LookupServices {
     }//end portInUse
     
     private void refreshLookupLocatorListsAt(int index){
+        //Only update existing records, ignore new dynamicly started lookups.
         LocatorGroupsPair locGroupsPair = lookupsStarted.get(index);
         /* index range of init lookups */
         int initLookupsBegin = nRemoteLookupServices + nAddRemoteLookupServices;
         int initLookupsEnd = initLookupsBegin + nLookupServices;
         /* index range of add lookups */
-        int addLookupsBegin = nRemoteLookupServices + nAddRemoteLookupServices + nLookupServices;
+        int addLookupsBegin = initLookupsEnd;
         int addLookupsEnd = addLookupsBegin + nAddLookupServices;
         /* update lookup lists */
         if (index >= initLookupsBegin && index < initLookupsEnd) initLookupsToStart.set(index,locGroupsPair);
-        if (index >= addLookupsBegin && index < addLookupsEnd) addLookupsToStart.set(index, locGroupsPair);
-        allLookupsToStart.set(index,locGroupsPair);
+        if (index >= addLookupsBegin && index < addLookupsEnd) addLookupsToStart.set(index-addLookupsBegin, locGroupsPair);
+        if (index < allLookupsToStart.size()) allLookupsToStart.set(index,locGroupsPair);
     }
     
     private LocatorGroupsPair getLocatorGroupsPair(int indx, String[] groups) throws TestException {