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 {


Reply via email to