river-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From peter_firmst...@apache.org
Subject svn commit: r1634322 [10/41] - in /river/jtsk/skunk/qa_refactor/trunk: qa/src/com/sun/jini/qa/harness/ qa/src/com/sun/jini/test/impl/end2end/e2etest/ qa/src/com/sun/jini/test/impl/joinmanager/ qa/src/com/sun/jini/test/impl/mahalo/ qa/src/com/sun/jini/t...
Date Sun, 26 Oct 2014 13:17:31 GMT
Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java Sun Oct 26 13:17:28 2014
@@ -548,12 +548,16 @@ public class LeaseRenewDurRFE extends Ab
                 /* First wait the lease duration */
                 try{ 
                     Thread.sleep(leaseDur[v]);
-                } catch(InterruptedException e) { }
+                } catch(InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                }
                 /* Wait a delta amount to account for communication latency */
                 boolean leaseExpired = false;
                 int i = 0;
                 while( !leaseExpired && (i < rfeDelta) ) {
-                    try{ Thread.sleep(1000); } catch(InterruptedException e) {}
+                    try{ Thread.sleep(1000); } catch(InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                    }
                     i = i+1;
                     if(sdm.lookup(tmpl[v],null) == null) leaseExpired = true;
                 }//end loop

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/RaceAttrsVsTerminateISE.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/RaceAttrsVsTerminateISE.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/RaceAttrsVsTerminateISE.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/RaceAttrsVsTerminateISE.java Sun Oct 26 13:17:28 2014
@@ -1,126 +1,128 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.jini.test.impl.joinmanager;
-
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.Test;
-import com.sun.jini.test.spec.joinmanager.AbstractBaseTest;
-import java.util.List;
-import net.jini.lookup.JoinManager;
-
-import java.util.logging.Level;
-
-/** Regression test for bug #4953710 (ISE = IllegalStateException).
- *
- *  This test should be run manually against an instrumented JoinManager
- *  to test for regression. When run in automatic mode against an
- *  uninstrumented JoinManager, this should always pass. See the run()
- *  method documentation below for information on how to instrument
- *  JoinManager for this test.
- *
- *  It is not necessary to run this under all configurations.
- * 
- *  See bug ID 4953710: JoinManager - race when terminate is called after
- *                      attribute mutator methods (ex. setAttributes).
- */
-public class RaceAttrsVsTerminateISE extends AbstractBaseTest {
-
-    private JoinManager jm;
-
-    /** Performs actions necessary to prepare for execution of the 
-     *  current test as follows:
-     * <p><ul>
-     *     <li> starts N lookup service(s) whose member groups are finite
-     *          and unique relative to the member groups of all other lookup
-     *          services running within the same multicast radius of the new
-     *          lookup services
-     *     <li> creates an instance of JoinManager inputting an instance of
-     *          a test service, a set of attributes (either null or non-null)
-     *          with which to register the service, and a non-null instance
-     *          of a lookup discovery manager configured to discover the
-     *          lookup services started in the previous step
-     *   </ul>
-     */
-    public Test construct(QAConfig sysConfig) throws Exception {
-        super.construct(sysConfig);
-        newServiceAttrs =
-               removeDups( addAttrsDup1DupAll(serviceAttrs,newServiceAttrs) );
-        /* Discover & join lookups just started */
-        jm = new JoinManager(testService,serviceAttrs,serviceID,
-                             getLookupDiscoveryManager(),leaseMgr,
-                             sysConfig.getConfiguration());
-        return this;
-    }//end construct
-
-    /** Call one of the attribute mutator methods, delay N seconds, and then
-     *  terminate the JoinManager to test for regression. Regression occurs
-     *  if an IllegalStateException (caused by an UnmarshalException, which
-     *  is caused by an IOException from a thread interrupt) is encountered
-     *  and logged; thus, this test should be manually run and the output
-     *  should be visually inspected for a stack trace containing
-     *  IllegalStateException.
-     *
-     *  Note that in order to create the conditions that can result in
-     *  an IllegalStateException, the JoinManager must be instrumented,
-     *  and the test must be run, in the following way:
-     *
-     * 1. Place a 5 second delay in JoinManager.setAttributes, just prior
-     *    to the call to srvcRegistration.setAttributes(attSet)
-     * 2. Use the instrumented JoinManager to register a service with a
-     *    lookup service and then call setAttributes() (or addAttributes()
-     *    or modifyAttributes()),  delay 5 seconds (probably best to delay
-     *    the same amount of time as in the JoinManager), then call
-     *    terminate(). 
-     * 
-     * Without the bug fix in JoinManager, this should cause a stack trace
-     * originating in the WakeupManager to be displayed.
-     */
-    public void run() throws Exception {
-        /* Verify all lookups are discovered */
-        List lookupsStarted = getLookupServices().getLookupsStarted();
-        mainListener.setLookupsToDiscover(lookupsStarted,
-                                          toGroupsArray(lookupsStarted));
-        waitForDiscovery(mainListener);
-        logger.log(Level.INFO, "discovery verified: discovered "
-                              +curLookupListSize("RaceAttrsVsTerminateISE.run")
-                              +" lookup service(s)");
-        /* Verify service has joined all lookups */
-        verifyJoin();
-        logger.log(Level.INFO, "join verified: joined "
-                              +curLookupListSize("RaceAttrsVsTerminateISE.run")
-                              +" lookup service(s)");
-        /* Verify initial attributes are registered with all lookups */
-        verifyPropagation(serviceAttrs);
-        logger.log(Level.INFO, "initial attributes verified: registered with "
-                               +curLookupListSize("RegisterAttributes.run")
-                               +" lookup service(s)");
-        /* Call setAttributes(), delay, then call terminate() */
-        long nMS = 5*1000;
-
-        logger.log(Level.INFO,  "JoinManager.setAttributes");
-        jm.setAttributes(newServiceAttrs);
-
-        logger.log(Level.INFO,  "Delay "+(nMS/1000)+" seconds");
-        try { Thread.sleep(nMS); } catch (InterruptedException e) { }
-
-        logger.log(Level.INFO,  "JoinManager.terminate");
-        jm.terminate();
-    }//end run
-
-}//end class RaceAttrsVsTerminateISE
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.jini.test.impl.joinmanager;
+
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.Test;
+import com.sun.jini.test.spec.joinmanager.AbstractBaseTest;
+import java.util.List;
+import net.jini.lookup.JoinManager;
+
+import java.util.logging.Level;
+
+/** Regression test for bug #4953710 (ISE = IllegalStateException).
+ *
+ *  This test should be run manually against an instrumented JoinManager
+ *  to test for regression. When run in automatic mode against an
+ *  uninstrumented JoinManager, this should always pass. See the run()
+ *  method documentation below for information on how to instrument
+ *  JoinManager for this test.
+ *
+ *  It is not necessary to run this under all configurations.
+ * 
+ *  See bug ID 4953710: JoinManager - race when terminate is called after
+ *                      attribute mutator methods (ex. setAttributes).
+ */
+public class RaceAttrsVsTerminateISE extends AbstractBaseTest {
+
+    private JoinManager jm;
+
+    /** Performs actions necessary to prepare for execution of the 
+     *  current test as follows:
+     * <p><ul>
+     *     <li> starts N lookup service(s) whose member groups are finite
+     *          and unique relative to the member groups of all other lookup
+     *          services running within the same multicast radius of the new
+     *          lookup services
+     *     <li> creates an instance of JoinManager inputting an instance of
+     *          a test service, a set of attributes (either null or non-null)
+     *          with which to register the service, and a non-null instance
+     *          of a lookup discovery manager configured to discover the
+     *          lookup services started in the previous step
+     *   </ul>
+     */
+    public Test construct(QAConfig sysConfig) throws Exception {
+        super.construct(sysConfig);
+        newServiceAttrs =
+               removeDups( addAttrsDup1DupAll(serviceAttrs,newServiceAttrs) );
+        /* Discover & join lookups just started */
+        jm = new JoinManager(testService,serviceAttrs,serviceID,
+                             getLookupDiscoveryManager(),leaseMgr,
+                             sysConfig.getConfiguration());
+        return this;
+    }//end construct
+
+    /** Call one of the attribute mutator methods, delay N seconds, and then
+     *  terminate the JoinManager to test for regression. Regression occurs
+     *  if an IllegalStateException (caused by an UnmarshalException, which
+     *  is caused by an IOException from a thread interrupt) is encountered
+     *  and logged; thus, this test should be manually run and the output
+     *  should be visually inspected for a stack trace containing
+     *  IllegalStateException.
+     *
+     *  Note that in order to create the conditions that can result in
+     *  an IllegalStateException, the JoinManager must be instrumented,
+     *  and the test must be run, in the following way:
+     *
+     * 1. Place a 5 second delay in JoinManager.setAttributes, just prior
+     *    to the call to srvcRegistration.setAttributes(attSet)
+     * 2. Use the instrumented JoinManager to register a service with a
+     *    lookup service and then call setAttributes() (or addAttributes()
+     *    or modifyAttributes()),  delay 5 seconds (probably best to delay
+     *    the same amount of time as in the JoinManager), then call
+     *    terminate(). 
+     * 
+     * Without the bug fix in JoinManager, this should cause a stack trace
+     * originating in the WakeupManager to be displayed.
+     */
+    public void run() throws Exception {
+        /* Verify all lookups are discovered */
+        List lookupsStarted = getLookupServices().getLookupsStarted();
+        mainListener.setLookupsToDiscover(lookupsStarted,
+                                          toGroupsArray(lookupsStarted));
+        waitForDiscovery(mainListener);
+        logger.log(Level.INFO, "discovery verified: discovered "
+                              +curLookupListSize("RaceAttrsVsTerminateISE.run")
+                              +" lookup service(s)");
+        /* Verify service has joined all lookups */
+        verifyJoin();
+        logger.log(Level.INFO, "join verified: joined "
+                              +curLookupListSize("RaceAttrsVsTerminateISE.run")
+                              +" lookup service(s)");
+        /* Verify initial attributes are registered with all lookups */
+        verifyPropagation(serviceAttrs);
+        logger.log(Level.INFO, "initial attributes verified: registered with "
+                               +curLookupListSize("RegisterAttributes.run")
+                               +" lookup service(s)");
+        /* Call setAttributes(), delay, then call terminate() */
+        long nMS = 5*1000;
+
+        logger.log(Level.INFO,  "JoinManager.setAttributes");
+        jm.setAttributes(newServiceAttrs);
+
+        logger.log(Level.INFO,  "Delay "+(nMS/1000)+" seconds");
+        try { Thread.sleep(nMS); } catch (InterruptedException e) { 
+            Thread.currentThread().interrupt();
+        }
+
+        logger.log(Level.INFO,  "JoinManager.terminate");
+        jm.terminate();
+    }//end run
+
+}//end class RaceAttrsVsTerminateISE

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mahalo/RandomStressTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mahalo/RandomStressTest.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mahalo/RandomStressTest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mahalo/RandomStressTest.java Sun Oct 26 13:17:28 2014
@@ -241,7 +241,9 @@ public class RandomStressTest extends Tx
 
 	    try {
 		Thread.sleep(sleep_time);
-	    } catch (InterruptedException ie) {}
+	    } catch (InterruptedException ie) {
+                Thread.currentThread().interrupt();
+	}
 	}
 
 	if (!allComplete) {

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mahalo/TxnMgrImplNullRecoveredLocators.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mahalo/TxnMgrImplNullRecoveredLocators.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mahalo/TxnMgrImplNullRecoveredLocators.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mahalo/TxnMgrImplNullRecoveredLocators.java Sun Oct 26 13:17:28 2014
@@ -1,150 +1,151 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.sun.jini.test.impl.mahalo;
-
-import java.util.logging.Level;
-
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.QATestEnvironment;
-import net.jini.config.ConfigurationException;
-import com.sun.jini.start.ServiceStarter;
-import com.sun.jini.start.SharedGroup;
-import com.sun.jini.qa.harness.OverrideProvider;
-import com.sun.jini.qa.harness.TestException;
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.Test;
-import com.sun.jini.qa.harness.VMKiller;
-
-import java.io.*;
-import java.rmi.*;
-import java.util.*;
-
-import net.jini.core.transaction.server.TransactionManager;
-
-/**
- * Verifies that proxies for the same shared group service 
- * are equal and that proxies for different shared groups 
- * are not equal
- */
- 
-public class TxnMgrImplNullRecoveredLocators extends QATestEnvironment implements Test {
-
-    private static class OverrideGenerator implements OverrideProvider {
-
-	public String[] getOverrides(QAConfig config, 
-				     String servicePrefix, 
-				     int index) throws TestException 
-	{
-	    String[] ret = new String[0];
-	    if (servicePrefix == null) { // check for test override
-		return ret;
-	    }
-	    String override = 
-		config.getServiceStringProperty(servicePrefix,
-						     "override",
-						     index);
-            logger.log(Level.INFO, 
-		       "getOverrides for " + servicePrefix + "." + index);
-	    if (override != null) {
-		StringTokenizer st = new StringTokenizer(override, "|");
-		String token;
-		ArrayList pairs = new ArrayList();
-		while(st.hasMoreTokens()) {
-		    token = st.nextToken(); 
-		    int eq = token.indexOf('=');
-		    if (eq == -1) {
-		        throw new IllegalArgumentException("override missing "
-							 + "'=' character: " +
-							   token);
-		    }
-		    pairs.add(token.substring(0, eq));
-		    pairs.add(token.substring(eq + 1));
-		}
-                logger.log(Level.INFO, "getOverrides returning " + pairs);
-		ret = (String[])pairs.toArray(new String[pairs.size()]);
-	    }
-	    return ret;
-	}
-    }
-
-    public Test construct(QAConfig sysConfig) throws Exception {
-	super.construct(sysConfig);
-        sysConfig.addOverrideProvider(new OverrideGenerator());
-        return this;
-    }
-
-    public void run() throws Exception {
-	logger.log(Level.INFO, "run()");
-
-        TransactionManager txn_mgr_proxy = null;
-	final String serviceName = 
-	    "net.jini.core.transaction.server.TransactionManager";
-	try {
-	    txn_mgr_proxy = 
-		(TransactionManager)getManager().startService(serviceName); 
-	    if (!getManager().killVM(txn_mgr_proxy)) {
-		logger.log(Level.INFO, "Could not kill " + serviceName);
-	    }
-
-	    // get delay in seconds
-	    int killDelay = getConfig().getIntConfigVal(
-		    "com.sun.jini.qa.harness.killvm.delay", 15);
-
-	    if (killDelay < 0) {
-	        killDelay = 15;
-	    }
-	    
-	    // Allow service time to auto-restart, which should fail
-	    try {
-		Thread.sleep(killDelay * 1000);
-	    } catch (InterruptedException ie) {
-		logger.log(Level.INFO, "Sleep was interrupted");
-		//ignore
-            }
-	} catch (Exception e) { 
-	    e.printStackTrace();
-	    throw new TestException("Caught unexpected exception: " + e);
-	}
-	try {
-	    /*
-	     * Should recover locators upon startup and try to 
-	     * use null recovered locator preparer.
-		 */
-	    txn_mgr_proxy.create(1000);
-	    throw new TestException("Restarted service with "
-				  + "invalid configuration");
-	} catch (Throwable e) {
-	    e.printStackTrace();
-	    if (!verifyConfigurationException(e)) {
-		throw new TestException("Service failed due to "
-				      + "non-configuration related exception.");
-	    }
-	    logger.log(Level.INFO, "Caught expected exception");
-	}
-	return;
-    }
-
-    private static boolean verifyConfigurationException(Throwable e) {
-	Throwable cause = e;
-	while (cause.getCause() != null) {
-	   cause = cause.getCause(); 
-	}
-	return (cause instanceof ConfigurationException);
-    }
-}
-	
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.sun.jini.test.impl.mahalo;
+
+import java.util.logging.Level;
+
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.QATestEnvironment;
+import net.jini.config.ConfigurationException;
+import com.sun.jini.start.ServiceStarter;
+import com.sun.jini.start.SharedGroup;
+import com.sun.jini.qa.harness.OverrideProvider;
+import com.sun.jini.qa.harness.TestException;
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.Test;
+import com.sun.jini.qa.harness.VMKiller;
+
+import java.io.*;
+import java.rmi.*;
+import java.util.*;
+
+import net.jini.core.transaction.server.TransactionManager;
+
+/**
+ * Verifies that proxies for the same shared group service 
+ * are equal and that proxies for different shared groups 
+ * are not equal
+ */
+ 
+public class TxnMgrImplNullRecoveredLocators extends QATestEnvironment implements Test {
+
+    private static class OverrideGenerator implements OverrideProvider {
+
+	public String[] getOverrides(QAConfig config, 
+				     String servicePrefix, 
+				     int index) throws TestException 
+	{
+	    String[] ret = new String[0];
+	    if (servicePrefix == null) { // check for test override
+		return ret;
+	    }
+	    String override = 
+		config.getServiceStringProperty(servicePrefix,
+						     "override",
+						     index);
+            logger.log(Level.INFO, 
+		       "getOverrides for " + servicePrefix + "." + index);
+	    if (override != null) {
+		StringTokenizer st = new StringTokenizer(override, "|");
+		String token;
+		ArrayList pairs = new ArrayList();
+		while(st.hasMoreTokens()) {
+		    token = st.nextToken(); 
+		    int eq = token.indexOf('=');
+		    if (eq == -1) {
+		        throw new IllegalArgumentException("override missing "
+							 + "'=' character: " +
+							   token);
+		    }
+		    pairs.add(token.substring(0, eq));
+		    pairs.add(token.substring(eq + 1));
+		}
+                logger.log(Level.INFO, "getOverrides returning " + pairs);
+		ret = (String[])pairs.toArray(new String[pairs.size()]);
+	    }
+	    return ret;
+	}
+    }
+
+    public Test construct(QAConfig sysConfig) throws Exception {
+	super.construct(sysConfig);
+        sysConfig.addOverrideProvider(new OverrideGenerator());
+        return this;
+    }
+
+    public void run() throws Exception {
+	logger.log(Level.INFO, "run()");
+
+        TransactionManager txn_mgr_proxy = null;
+	final String serviceName = 
+	    "net.jini.core.transaction.server.TransactionManager";
+	try {
+	    txn_mgr_proxy = 
+		(TransactionManager)getManager().startService(serviceName); 
+	    if (!getManager().killVM(txn_mgr_proxy)) {
+		logger.log(Level.INFO, "Could not kill " + serviceName);
+	    }
+
+	    // get delay in seconds
+	    int killDelay = getConfig().getIntConfigVal(
+		    "com.sun.jini.qa.harness.killvm.delay", 15);
+
+	    if (killDelay < 0) {
+	        killDelay = 15;
+	    }
+	    
+	    // Allow service time to auto-restart, which should fail
+	    try {
+		Thread.sleep(killDelay * 1000);
+	    } catch (InterruptedException ie) {
+                Thread.currentThread().interrupt();
+		logger.log(Level.INFO, "Sleep was interrupted");
+		//ignore
+            }
+	} catch (Exception e) { 
+	    e.printStackTrace();
+	    throw new TestException("Caught unexpected exception: " + e);
+	}
+	try {
+	    /*
+	     * Should recover locators upon startup and try to 
+	     * use null recovered locator preparer.
+		 */
+	    txn_mgr_proxy.create(1000);
+	    throw new TestException("Restarted service with "
+				  + "invalid configuration");
+	} catch (Throwable e) {
+	    e.printStackTrace();
+	    if (!verifyConfigurationException(e)) {
+		throw new TestException("Service failed due to "
+				      + "non-configuration related exception.");
+	    }
+	    logger.log(Level.INFO, "Caught expected exception");
+	}
+	return;
+    }
+
+    private static boolean verifyConfigurationException(Throwable e) {
+	Throwable cause = e;
+	while (cause.getCause() != null) {
+	   cause = cause.getCause(); 
+	}
+	return (cause instanceof ConfigurationException);
+    }
+}
+	

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/EMSTestBase.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/EMSTestBase.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/EMSTestBase.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/EMSTestBase.java Sun Oct 26 13:17:28 2014
@@ -1,208 +1,212 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.sun.jini.test.impl.mercury;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.logging.Level;
-
-import java.rmi.RemoteException;
-
-import com.sun.jini.constants.TimeConstants;
-
-import net.jini.core.event.RemoteEvent;
-import net.jini.event.EventMailbox;
-import net.jini.event.MailboxRegistration;
-import net.jini.event.MailboxPullRegistration;
-import net.jini.core.lease.Lease;
-import net.jini.core.event.RemoteEventListener;
-import net.jini.space.JavaSpace;
-
-import com.sun.jini.qa.harness.TestException;
-
-
-public abstract class EMSTestBase extends MailboxTestBase {
-
-    public void assertCount(TestListener tl, long desired) throws TestException {
-	long evCnt = 0;
-	try {
-	    evCnt = tl.getEventCount();
-	} catch (Exception e) {
-	    throw new TestException ("Unexpected exception while "
-				   + "getting event count", e);
-	}
-	if (evCnt != desired) {
-	    throw new TestException ("Unexpected event count of " + evCnt +
-		 " when expecting count of " + desired);
-	}
-    }
-    
-    public void assertCount(TestPullListener tpl, long desired) 
-        throws TestException 
-    {
-	long evCnt = 0;
-	try {
-	    evCnt = tpl.getCollectedRemoteEventsSize();
-	} catch (Exception e) {
-	    throw new TestException ("Unexpected exception while "
-				   + "getting event count", e);
-	}
-	if (evCnt != desired) {
-	    throw new TestException ("Unexpected event count of " + evCnt +
-		 " when expecting count of " + desired);
-	}
-    }
-
-    public void getCollectedRemoteEvents(
-        TestPullListener tpl, MailboxPullRegistration mr, 
-        int desired, long maxDelay) 
-	throws Exception
-    {
-        long start = System.currentTimeMillis();
-        boolean done = false;
-	// Collect new events, if any
-	Collection events = tpl.getRemoteEvents(mr);
-	while (!done) {
-            if (tpl.getCollectedRemoteEventsSize() >= desired) {
-                done = true;
-	    } else if (getTime() - start >= maxDelay) {
-	        done = true;
-	    } else {
-	        try {
-		    // Sleep one second between checks
-		    Thread.sleep(1000);
-// 	            Thread.yield(); //Give someone else a chance
-	        } catch (InterruptedException ie) { /* ignore */ }
-	    }
-	    events = tpl.getRemoteEvents(mr);
-        }
-	/**
-	 * Would like to check event source for the proper "type". 
-	 * Our test generator can be tested for "instanceof TestGenerator", but
-	 * the JavaSpace source is of type "OutriggerServer" and "JavaSpace".
-	 * So, rather than introduce "private" classes, we'll defer the 
-	 * source checking to verifyEvents.
-	 **/
-    }
-
-
-    public void waitForEvents(TestListener tl, int desired, long maxDelay) 
-	throws RemoteException
-    {
-        long start = System.currentTimeMillis();
-        boolean done = false;
-        while (!done) {
-	    try {
-		// Sleep one second between checks
-		Thread.sleep(1000);
-	    } catch (InterruptedException ie) { /* ignore */ }
-
-            long received = tl.getEventCount();
-            if (received >= desired)
-                done = true;
-	    else if (getTime() - start >= maxDelay)
-	        done = true;
-	    else if ((received % ((desired / 10) + 1)) == 0) {
-                // output log msg for every 1/10th of desired events
-                logger.log(Level.FINE, Thread.currentThread().getName() 
-                    + " has received " + received + " events.");
-            }
-
-//	    Thread.yield(); //Give someone else a chance
-        }
-    }
-
-    protected void assertEvents(TestListener tl, RemoteEvent[] events) 
-	throws RemoteException, TestException
-    {
-	if (tl.verifyEvents(events) == false) {
-	    throw new TestException ("Failed to verify event set");
-	}
-    }
-    protected void assertEvent(TestListener tl, RemoteEvent event) 
-	throws RemoteException, TestException
-    {
-	if (tl.verifyEvent(event) == false) {
-	    throw new TestException ("Failed to verify event");
-	}
-    }
-    protected void assertEvents(TestPullListener tpl, RemoteEvent[] events) 
-	throws RemoteException, TestException
-    {
-	if (tpl.verifyEvents(events) == false) {
-	    throw new TestException ("Failed to verify event set");
-	}
-    }
-    protected void assertEvent(TestPullListener tpl, RemoteEvent event) 
-	throws RemoteException, TestException
-    {
-	if (tpl.verifyEvent(event) == false) {
-	    throw new TestException ("Failed to verify event");
-	}
-    }
-    
-    protected void assertEvents(Collection src, Collection tgt) 
-	throws RemoteException, TestException
-    {
-        int i = 0;
-        RemoteEvent[] sent = (RemoteEvent[]) src.toArray(new RemoteEvent[0]);
-        ArrayList srcList = new ArrayList(sent.length);
-        for (i=0; i < sent.length; i++) {
-            srcList.add(new RemoteEventHandle(sent[i]));
-        }
-        
-        RemoteEvent[] rcvd = (RemoteEvent[]) tgt.toArray(new RemoteEvent[0]);
-        ArrayList tgtList = new ArrayList(rcvd.length);
-        for (i=0; i < rcvd.length; i++) {
-            tgtList.add(new RemoteEventHandle(rcvd[i]));
-        }
-        if (!srcList.containsAll(tgtList)) {
-            throw new TestException("Expected events not received.");
-        }
-    }
-    
-    protected void assertEvent(RemoteEvent src, RemoteEvent tgt) 
-	throws RemoteException, TestException
-    {
-        if (!new RemoteEventHandle(src).equals(new RemoteEventHandle(tgt))) {
-            throw new TestException("Expected event doesn't match");
-        }
-    }
-
-    protected long getTime() {
-        return System.currentTimeMillis();
-    }
-    
-    protected static java.util.ArrayList getClassLoaderTree(ClassLoader classloader) {
-	java.util.ArrayList loaderList = new java.util.ArrayList();
-	while(classloader != null) {
-            loaderList.add(classloader);
-	    final ClassLoader myClassLoader = classloader;
-            classloader = (ClassLoader)
-	      java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
-               public Object run() {
-                  return myClassLoader.getParent();
-               }
-            });
-	}//end loop
-	loaderList.add(null); //Append boot classloader
-	java.util.Collections.reverse(loaderList);
-	return loaderList;
-    }//end getClassLoaderTree
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.sun.jini.test.impl.mercury;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.logging.Level;
+
+import java.rmi.RemoteException;
+
+import com.sun.jini.constants.TimeConstants;
+
+import net.jini.core.event.RemoteEvent;
+import net.jini.event.EventMailbox;
+import net.jini.event.MailboxRegistration;
+import net.jini.event.MailboxPullRegistration;
+import net.jini.core.lease.Lease;
+import net.jini.core.event.RemoteEventListener;
+import net.jini.space.JavaSpace;
+
+import com.sun.jini.qa.harness.TestException;
+
+
+public abstract class EMSTestBase extends MailboxTestBase {
+
+    public void assertCount(TestListener tl, long desired) throws TestException {
+	long evCnt = 0;
+	try {
+	    evCnt = tl.getEventCount();
+	} catch (Exception e) {
+	    throw new TestException ("Unexpected exception while "
+				   + "getting event count", e);
+	}
+	if (evCnt != desired) {
+	    throw new TestException ("Unexpected event count of " + evCnt +
+		 " when expecting count of " + desired);
+	}
+    }
+    
+    public void assertCount(TestPullListener tpl, long desired) 
+        throws TestException 
+    {
+	long evCnt = 0;
+	try {
+	    evCnt = tpl.getCollectedRemoteEventsSize();
+	} catch (Exception e) {
+	    throw new TestException ("Unexpected exception while "
+				   + "getting event count", e);
+	}
+	if (evCnt != desired) {
+	    throw new TestException ("Unexpected event count of " + evCnt +
+		 " when expecting count of " + desired);
+	}
+    }
+
+    public void getCollectedRemoteEvents(
+        TestPullListener tpl, MailboxPullRegistration mr, 
+        int desired, long maxDelay) 
+	throws Exception
+    {
+        long start = System.currentTimeMillis();
+        boolean done = false;
+	// Collect new events, if any
+	Collection events = tpl.getRemoteEvents(mr);
+	while (!done) {
+            if (tpl.getCollectedRemoteEventsSize() >= desired) {
+                done = true;
+	    } else if (getTime() - start >= maxDelay) {
+	        done = true;
+	    } else {
+	        try {
+		    // Sleep one second between checks
+		    Thread.sleep(1000);
+// 	            Thread.yield(); //Give someone else a chance
+	        } catch (InterruptedException ie) { /* ignore */ 
+                    Thread.currentThread().interrupt();
+	    }
+	    }
+	    events = tpl.getRemoteEvents(mr);
+        }
+	/**
+	 * Would like to check event source for the proper "type". 
+	 * Our test generator can be tested for "instanceof TestGenerator", but
+	 * the JavaSpace source is of type "OutriggerServer" and "JavaSpace".
+	 * So, rather than introduce "private" classes, we'll defer the 
+	 * source checking to verifyEvents.
+	 **/
+    }
+
+
+    public void waitForEvents(TestListener tl, int desired, long maxDelay) 
+	throws RemoteException
+    {
+        long start = System.currentTimeMillis();
+        boolean done = false;
+        while (!done) {
+	    try {
+		// Sleep one second between checks
+		Thread.sleep(1000);
+	    } catch (InterruptedException ie) { /* ignore */
+                Thread.currentThread().interrupt();
+            }
+
+            long received = tl.getEventCount();
+            if (received >= desired)
+                done = true;
+	    else if (getTime() - start >= maxDelay)
+	        done = true;
+	    else if ((received % ((desired / 10) + 1)) == 0) {
+                // output log msg for every 1/10th of desired events
+                logger.log(Level.FINE, Thread.currentThread().getName() 
+                    + " has received " + received + " events.");
+            }
+
+//	    Thread.yield(); //Give someone else a chance
+        }
+    }
+
+    protected void assertEvents(TestListener tl, RemoteEvent[] events) 
+	throws RemoteException, TestException
+    {
+	if (tl.verifyEvents(events) == false) {
+	    throw new TestException ("Failed to verify event set");
+	}
+    }
+    protected void assertEvent(TestListener tl, RemoteEvent event) 
+	throws RemoteException, TestException
+    {
+	if (tl.verifyEvent(event) == false) {
+	    throw new TestException ("Failed to verify event");
+	}
+    }
+    protected void assertEvents(TestPullListener tpl, RemoteEvent[] events) 
+	throws RemoteException, TestException
+    {
+	if (tpl.verifyEvents(events) == false) {
+	    throw new TestException ("Failed to verify event set");
+	}
+    }
+    protected void assertEvent(TestPullListener tpl, RemoteEvent event) 
+	throws RemoteException, TestException
+    {
+	if (tpl.verifyEvent(event) == false) {
+	    throw new TestException ("Failed to verify event");
+	}
+    }
+    
+    protected void assertEvents(Collection src, Collection tgt) 
+	throws RemoteException, TestException
+    {
+        int i = 0;
+        RemoteEvent[] sent = (RemoteEvent[]) src.toArray(new RemoteEvent[0]);
+        ArrayList srcList = new ArrayList(sent.length);
+        for (i=0; i < sent.length; i++) {
+            srcList.add(new RemoteEventHandle(sent[i]));
+        }
+        
+        RemoteEvent[] rcvd = (RemoteEvent[]) tgt.toArray(new RemoteEvent[0]);
+        ArrayList tgtList = new ArrayList(rcvd.length);
+        for (i=0; i < rcvd.length; i++) {
+            tgtList.add(new RemoteEventHandle(rcvd[i]));
+        }
+        if (!srcList.containsAll(tgtList)) {
+            throw new TestException("Expected events not received.");
+        }
+    }
+    
+    protected void assertEvent(RemoteEvent src, RemoteEvent tgt) 
+	throws RemoteException, TestException
+    {
+        if (!new RemoteEventHandle(src).equals(new RemoteEventHandle(tgt))) {
+            throw new TestException("Expected event doesn't match");
+        }
+    }
+
+    protected long getTime() {
+        return System.currentTimeMillis();
+    }
+    
+    protected static java.util.ArrayList getClassLoaderTree(ClassLoader classloader) {
+	java.util.ArrayList loaderList = new java.util.ArrayList();
+	while(classloader != null) {
+            loaderList.add(classloader);
+	    final ClassLoader myClassLoader = classloader;
+            classloader = (ClassLoader)
+	      java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
+               public Object run() {
+                  return myClassLoader.getParent();
+               }
+            });
+	}//end loop
+	loaderList.add(null); //Append boot classloader
+	java.util.Collections.reverse(loaderList);
+	return loaderList;
+    }//end getClassLoaderTree
+
+}

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/PullTimeoutTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/PullTimeoutTest.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/PullTimeoutTest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/PullTimeoutTest.java Sun Oct 26 13:17:28 2014
@@ -1,293 +1,294 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.sun.jini.test.impl.mercury;
-
-import java.util.logging.Level;
-
-import java.rmi.RemoteException;
-import java.rmi.NoSuchObjectException;
-import java.rmi.ServerException;
-import java.util.Date;
-import java.util.ArrayList;
-import java.util.logging.Logger;
-
-
-import net.jini.event.InvalidIteratorException;
-import net.jini.event.MailboxPullRegistration;
-import net.jini.event.PullEventMailbox;
-import net.jini.event.RemoteEventIterator;
-import net.jini.core.lease.Lease;
-import net.jini.core.event.EventRegistration;
-import net.jini.core.event.RemoteEvent;
-import net.jini.core.event.RemoteEventListener;
-import net.jini.core.event.UnknownEventException;
-
-import com.sun.jini.constants.TimeConstants;
-
-import com.sun.jini.test.impl.mercury.EMSTestBase;
-import com.sun.jini.test.impl.mercury.TestUtils;
-import com.sun.jini.test.impl.mercury.TestListener;
-import com.sun.jini.test.impl.mercury.TestGenerator;
-
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.Test;
-import com.sun.jini.qa.harness.TestException;
-
-public class PullTimeoutTest 
-    extends EMSTestBase implements TimeConstants 
-{
-
-    //
-    // This should be long enough to sensibly run the test.
-    // If the service doesn't grant long enough leases, then
-    // we might have to resort to using something like the
-    // LeaseRenewalManager to keep our leases current.
-    //
-    private final long DURATION1 = 3*HOURS;
-
-    private final int NUM_EVENTS = 5;
-
-    private final long EVENT_ID = 1234;
-    private final long EVENT_ID2 = 5678;
-
-    private final long MAX_WAIT_GET_EVENT = 60 * 1000;
-    private final long MAX_WAIT_SEND_EVENT = MAX_WAIT_GET_EVENT / 4;
-    
-    class MyEventGeneratorRunnable implements Runnable {
-        final TestGenerator myGen;
-        final long evid;
-        final int maxTries;
-        final int numEvents;
-        final Logger logger;
-        final long delay;
-        MyEventGeneratorRunnable(TestGenerator myGen, long evid, int maxTries, 
-                int numEvents, Logger logger, long delay) 
-        {
-            this.myGen = myGen;
-            this.evid = evid;
-            this.maxTries = maxTries;
-            this.numEvents = numEvents;  
-            this.logger = logger;
-            this.delay = delay;
-        }
-        public void run() {
-            try {
-                logger.log(Level.FINEST, 
-                    "MyEventGeneratorRunnable sleeping @ {0} for {1} ms", 
-                    new Object[] { new Date(), new Long(delay)});
-                Thread.sleep(delay);
-                logger.log(Level.FINEST, 
-                    "MyEventGeneratorRunnable awoken @ {0}", new Date());
-            } catch (InterruptedException ie) {
-                // ignore
-                logger.log(Level.FINEST, 
-                    "Sleep interrupted", ie);
-            }
-            for (int i = 0; i < numEvents; i++) {
-                try {
-                    myGen.generateEvent(evid, maxTries);                    
-                    logger.log(Level.FINEST, "Sent event @ {0}", new Date());
-                } catch (RemoteException re) {
-                   logger.log(Level.FINEST, 
-                       "Ignoring RemoteException from generating event",
-                           re);
-                } catch (UnknownEventException uee) {
-                   logger.log(Level.FINEST, 
-                       "Ignoring UnknownEventException from generating event",
-                           uee);
-                }
-            }
-        }
-    }
-
-    public void run() throws Exception {
-	logger.log(Level.INFO, "Starting up " + this.getClass().toString()); 
-
-	PullEventMailbox mb = getPullMailbox();
-	int i = 0;
-
-	// Register and check lease
-	MailboxPullRegistration mr = getPullRegistration(mb, DURATION1);
-	Lease mrl = getPullMailboxLease(mr);
-	checkLease(mrl, DURATION1); 
-
-	// Get the mailbox service provided listener
-	RemoteEventListener mbRel = getPullMailboxListener(mr);
-
-	// Create an event generator and pass it the
-	// mailbox's remote event listener.
-	TestGenerator myGen = TestUtils.createGenerator(getManager());
-	logger.log(Level.FINEST, 
-	    "Test generator class tree" 
-	    + getClassLoaderTree(myGen.getClass().getClassLoader()));
-	EventRegistration evtReg = 
-	    myGen.register(EVENT_ID,	// Event ID to use
-			   null,		// handback
-			   mbRel,		// Notification target
-			   DURATION1);	// Lease duration
-	Lease tgl = evtReg.getLease();
-	checkLease(tgl, DURATION1); 
-
-	// Create another event generator and pass it the
-	// mailbox's remote event listener.
-	TestGenerator myGen2 = TestUtils.createGenerator(getManager());
-	logger.log(Level.FINEST, 
-	    "Test generator class tree" 
-	    + getClassLoaderTree(myGen2.getClass().getClassLoader()));
-	EventRegistration evtReg2 = 
-	    myGen2.register(EVENT_ID2,	// Event ID to use
-			   null,		// handback
-			   mbRel,		// Notification target
-			   DURATION1);	// Lease duration
-	Lease tgl2 = evtReg2.getLease();
-	checkLease(tgl2, DURATION1); 
-        
-        // Get events and verify
-	logger.log(Level.INFO, "Getting events from empty mailbox.");
-        RemoteEventIterator rei = mr.getRemoteEvents();
-        RemoteEvent rei_event;
-        Date before = new Date();
-	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
-        rei_event = rei.next(MAX_WAIT_GET_EVENT);
-        Date after = new Date();
-	logger.log(Level.INFO, "Returned from next() @ {0}", after);   
-        //Verify that timeout was honored
-        long delta = after.getTime() - before.getTime();
-        if (delta < MAX_WAIT_GET_EVENT) {
-             throw new TestException("Returned from next() before expected: "
-                     + delta);
-        }
-        if (rei_event != null) {
-            throw new TestException(
-                "Received unexpected event from empty mailbox: " + rei_event);
-        }
-
-        // Start event generator thread with a delay of MAX_WAIT_SEND_EVENT
-        Thread t = 
-            new Thread(
-                new MyEventGeneratorRunnable(myGen, evtReg.getID(), 3, 1, 
-                                             logger, MAX_WAIT_SEND_EVENT ));
-        t.start();
-        before = new Date();
-	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
-        rei_event = rei.next(MAX_WAIT_GET_EVENT);
-        after = new Date();
-        //Verify that we returned before the timeout
-        delta = after.getTime() - before.getTime();        
-	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
-            new Object[] {after, new Long(delta)});   
-        if (delta >= MAX_WAIT_GET_EVENT) {
-             throw new TestException("Returned from next() after expected: " 
-                     + delta);
-        } else if (delta <= MAX_WAIT_SEND_EVENT) {
-             throw new TestException("Returned from next() before expected: "
-                     + delta);            
-        }
-        if (rei_event == null) {
-            throw new TestException(
-                "Did not receive expected event from mailbox.");
-        }
-            
-        //Generate a soon-to-be unknown event.
-        myGen.generateEvent(evtReg.getID(), 3);
-        
-        /*
-         * Add genereated event to unknown list and verify that they aren't 
-         * subsequently received.
-         */
-        ArrayList unknowns = new ArrayList(1);
-        unknowns.add(rei_event);
-        mr.addUnknownEvents(unknowns);
-        
-        before = new Date();
-	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
-        rei_event = rei.next(MAX_WAIT_GET_EVENT);
-        after = new Date();
-        //Verify that we returned after the timeout
-        delta = after.getTime() - before.getTime();        
-	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
-            new Object[] {after, new Long(delta)});   
-        if (delta < MAX_WAIT_GET_EVENT) {
-             throw new TestException("Returned from next() before expected: " 
-                     + delta);
-        } 
-        if (rei_event != null) {
-            throw new TestException(
-                "Received unexpected event from mailbox: " + rei_event);
-        }
-            
-        // Start event generator thread with a delay of MAX_WAIT_SEND_EVENT
-        // from a "good" event source.
-        t = new Thread(
-            new MyEventGeneratorRunnable(myGen2, evtReg2.getID(), 3, 1, 
-                                         logger, MAX_WAIT_SEND_EVENT ));      
-        t.start();
-        // Call with "infinite" timeout.
-        before = new Date();
-	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
-        rei_event = rei.next(Long.MAX_VALUE);
-        after = new Date();
-        delta = after.getTime() - before.getTime();        
-	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
-            new Object[] {after, new Long(delta)}); 
-        if (delta <= MAX_WAIT_SEND_EVENT) {
-             throw new TestException("Returned from next() before expected: "
-                     + delta);            
-        }
-        /*
-         * No need to check delta > Long.MAX_VALUE since the test would 
-         * have been interrupted well before then.
-         */
-        if (rei_event == null) {
-            throw new TestException(
-                "Did not receive expected event from mailbox.");
-        }        
-            
-        // Call with zero timeout.
-        before = new Date();
-	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
-        rei_event = rei.next(0);
-        after = new Date();
-        delta = after.getTime() - before.getTime();        
-	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
-            new Object[] {after, new Long(delta)});   
-        if (rei_event != null) {
-            throw new TestException(
-                "Received unexpected event from empty mailbox: " + rei_event);
-        }
-            
-        try {
-            rei.next(-1);
-            throw new TestException("Successfully called next() with -1");
-        } catch (IllegalArgumentException iae) {
-            logger.log(Level.FINEST, 
-                "Caught IllegalArgumentException -- expected", iae);
-        }
-            
-    }
-    /**
-     * Invoke parent's construct and parser
-     * @exception TestException will usually indicate an "unresolved"
-     *  condition because at this point the test has not yet begun.
-     */
-    public Test construct(QAConfig sysConfig) throws Exception {
-	super.construct(sysConfig);
-	parse();
-        return this;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.sun.jini.test.impl.mercury;
+
+import java.util.logging.Level;
+
+import java.rmi.RemoteException;
+import java.rmi.NoSuchObjectException;
+import java.rmi.ServerException;
+import java.util.Date;
+import java.util.ArrayList;
+import java.util.logging.Logger;
+
+
+import net.jini.event.InvalidIteratorException;
+import net.jini.event.MailboxPullRegistration;
+import net.jini.event.PullEventMailbox;
+import net.jini.event.RemoteEventIterator;
+import net.jini.core.lease.Lease;
+import net.jini.core.event.EventRegistration;
+import net.jini.core.event.RemoteEvent;
+import net.jini.core.event.RemoteEventListener;
+import net.jini.core.event.UnknownEventException;
+
+import com.sun.jini.constants.TimeConstants;
+
+import com.sun.jini.test.impl.mercury.EMSTestBase;
+import com.sun.jini.test.impl.mercury.TestUtils;
+import com.sun.jini.test.impl.mercury.TestListener;
+import com.sun.jini.test.impl.mercury.TestGenerator;
+
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.Test;
+import com.sun.jini.qa.harness.TestException;
+
+public class PullTimeoutTest 
+    extends EMSTestBase implements TimeConstants 
+{
+
+    //
+    // This should be long enough to sensibly run the test.
+    // If the service doesn't grant long enough leases, then
+    // we might have to resort to using something like the
+    // LeaseRenewalManager to keep our leases current.
+    //
+    private final long DURATION1 = 3*HOURS;
+
+    private final int NUM_EVENTS = 5;
+
+    private final long EVENT_ID = 1234;
+    private final long EVENT_ID2 = 5678;
+
+    private final long MAX_WAIT_GET_EVENT = 60 * 1000;
+    private final long MAX_WAIT_SEND_EVENT = MAX_WAIT_GET_EVENT / 4;
+    
+    class MyEventGeneratorRunnable implements Runnable {
+        final TestGenerator myGen;
+        final long evid;
+        final int maxTries;
+        final int numEvents;
+        final Logger logger;
+        final long delay;
+        MyEventGeneratorRunnable(TestGenerator myGen, long evid, int maxTries, 
+                int numEvents, Logger logger, long delay) 
+        {
+            this.myGen = myGen;
+            this.evid = evid;
+            this.maxTries = maxTries;
+            this.numEvents = numEvents;  
+            this.logger = logger;
+            this.delay = delay;
+        }
+        public void run() {
+            try {
+                logger.log(Level.FINEST, 
+                    "MyEventGeneratorRunnable sleeping @ {0} for {1} ms", 
+                    new Object[] { new Date(), new Long(delay)});
+                Thread.sleep(delay);
+                logger.log(Level.FINEST, 
+                    "MyEventGeneratorRunnable awoken @ {0}", new Date());
+            } catch (InterruptedException ie) {
+                Thread.currentThread().interrupt();
+                // ignore
+                logger.log(Level.FINEST, 
+                    "Sleep interrupted", ie);
+            }
+            for (int i = 0; i < numEvents; i++) {
+                try {
+                    myGen.generateEvent(evid, maxTries);                    
+                    logger.log(Level.FINEST, "Sent event @ {0}", new Date());
+                } catch (RemoteException re) {
+                   logger.log(Level.FINEST, 
+                       "Ignoring RemoteException from generating event",
+                           re);
+                } catch (UnknownEventException uee) {
+                   logger.log(Level.FINEST, 
+                       "Ignoring UnknownEventException from generating event",
+                           uee);
+                }
+            }
+        }
+    }
+
+    public void run() throws Exception {
+	logger.log(Level.INFO, "Starting up " + this.getClass().toString()); 
+
+	PullEventMailbox mb = getPullMailbox();
+	int i = 0;
+
+	// Register and check lease
+	MailboxPullRegistration mr = getPullRegistration(mb, DURATION1);
+	Lease mrl = getPullMailboxLease(mr);
+	checkLease(mrl, DURATION1); 
+
+	// Get the mailbox service provided listener
+	RemoteEventListener mbRel = getPullMailboxListener(mr);
+
+	// Create an event generator and pass it the
+	// mailbox's remote event listener.
+	TestGenerator myGen = TestUtils.createGenerator(getManager());
+	logger.log(Level.FINEST, 
+	    "Test generator class tree" 
+	    + getClassLoaderTree(myGen.getClass().getClassLoader()));
+	EventRegistration evtReg = 
+	    myGen.register(EVENT_ID,	// Event ID to use
+			   null,		// handback
+			   mbRel,		// Notification target
+			   DURATION1);	// Lease duration
+	Lease tgl = evtReg.getLease();
+	checkLease(tgl, DURATION1); 
+
+	// Create another event generator and pass it the
+	// mailbox's remote event listener.
+	TestGenerator myGen2 = TestUtils.createGenerator(getManager());
+	logger.log(Level.FINEST, 
+	    "Test generator class tree" 
+	    + getClassLoaderTree(myGen2.getClass().getClassLoader()));
+	EventRegistration evtReg2 = 
+	    myGen2.register(EVENT_ID2,	// Event ID to use
+			   null,		// handback
+			   mbRel,		// Notification target
+			   DURATION1);	// Lease duration
+	Lease tgl2 = evtReg2.getLease();
+	checkLease(tgl2, DURATION1); 
+        
+        // Get events and verify
+	logger.log(Level.INFO, "Getting events from empty mailbox.");
+        RemoteEventIterator rei = mr.getRemoteEvents();
+        RemoteEvent rei_event;
+        Date before = new Date();
+	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
+        rei_event = rei.next(MAX_WAIT_GET_EVENT);
+        Date after = new Date();
+	logger.log(Level.INFO, "Returned from next() @ {0}", after);   
+        //Verify that timeout was honored
+        long delta = after.getTime() - before.getTime();
+        if (delta < MAX_WAIT_GET_EVENT) {
+             throw new TestException("Returned from next() before expected: "
+                     + delta);
+        }
+        if (rei_event != null) {
+            throw new TestException(
+                "Received unexpected event from empty mailbox: " + rei_event);
+        }
+
+        // Start event generator thread with a delay of MAX_WAIT_SEND_EVENT
+        Thread t = 
+            new Thread(
+                new MyEventGeneratorRunnable(myGen, evtReg.getID(), 3, 1, 
+                                             logger, MAX_WAIT_SEND_EVENT ));
+        t.start();
+        before = new Date();
+	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
+        rei_event = rei.next(MAX_WAIT_GET_EVENT);
+        after = new Date();
+        //Verify that we returned before the timeout
+        delta = after.getTime() - before.getTime();        
+	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
+            new Object[] {after, new Long(delta)});   
+        if (delta >= MAX_WAIT_GET_EVENT) {
+             throw new TestException("Returned from next() after expected: " 
+                     + delta);
+        } else if (delta <= MAX_WAIT_SEND_EVENT) {
+             throw new TestException("Returned from next() before expected: "
+                     + delta);            
+        }
+        if (rei_event == null) {
+            throw new TestException(
+                "Did not receive expected event from mailbox.");
+        }
+            
+        //Generate a soon-to-be unknown event.
+        myGen.generateEvent(evtReg.getID(), 3);
+        
+        /*
+         * Add genereated event to unknown list and verify that they aren't 
+         * subsequently received.
+         */
+        ArrayList unknowns = new ArrayList(1);
+        unknowns.add(rei_event);
+        mr.addUnknownEvents(unknowns);
+        
+        before = new Date();
+	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
+        rei_event = rei.next(MAX_WAIT_GET_EVENT);
+        after = new Date();
+        //Verify that we returned after the timeout
+        delta = after.getTime() - before.getTime();        
+	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
+            new Object[] {after, new Long(delta)});   
+        if (delta < MAX_WAIT_GET_EVENT) {
+             throw new TestException("Returned from next() before expected: " 
+                     + delta);
+        } 
+        if (rei_event != null) {
+            throw new TestException(
+                "Received unexpected event from mailbox: " + rei_event);
+        }
+            
+        // Start event generator thread with a delay of MAX_WAIT_SEND_EVENT
+        // from a "good" event source.
+        t = new Thread(
+            new MyEventGeneratorRunnable(myGen2, evtReg2.getID(), 3, 1, 
+                                         logger, MAX_WAIT_SEND_EVENT ));      
+        t.start();
+        // Call with "infinite" timeout.
+        before = new Date();
+	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
+        rei_event = rei.next(Long.MAX_VALUE);
+        after = new Date();
+        delta = after.getTime() - before.getTime();        
+	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
+            new Object[] {after, new Long(delta)}); 
+        if (delta <= MAX_WAIT_SEND_EVENT) {
+             throw new TestException("Returned from next() before expected: "
+                     + delta);            
+        }
+        /*
+         * No need to check delta > Long.MAX_VALUE since the test would 
+         * have been interrupted well before then.
+         */
+        if (rei_event == null) {
+            throw new TestException(
+                "Did not receive expected event from mailbox.");
+        }        
+            
+        // Call with zero timeout.
+        before = new Date();
+	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
+        rei_event = rei.next(0);
+        after = new Date();
+        delta = after.getTime() - before.getTime();        
+	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
+            new Object[] {after, new Long(delta)});   
+        if (rei_event != null) {
+            throw new TestException(
+                "Received unexpected event from empty mailbox: " + rei_event);
+        }
+            
+        try {
+            rei.next(-1);
+            throw new TestException("Successfully called next() with -1");
+        } catch (IllegalArgumentException iae) {
+            logger.log(Level.FINEST, 
+                "Caught IllegalArgumentException -- expected", iae);
+        }
+            
+    }
+    /**
+     * Invoke parent's construct and parser
+     * @exception TestException will usually indicate an "unresolved"
+     *  condition because at this point the test has not yet begun.
+     */
+    public Test construct(QAConfig sysConfig) throws Exception {
+	super.construct(sysConfig);
+	parse();
+        return this;
+    }
+}

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/PullTimeoutTest3.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/PullTimeoutTest3.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/PullTimeoutTest3.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/PullTimeoutTest3.java Sun Oct 26 13:17:28 2014
@@ -1,164 +1,165 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.sun.jini.test.impl.mercury;
-
-import java.util.logging.Level;
-
-import java.rmi.RemoteException;
-import java.rmi.NoSuchObjectException;
-import java.rmi.ServerException;
-import java.util.Date;
-import java.util.ArrayList;
-import java.util.logging.Logger;
-
-
-import net.jini.event.InvalidIteratorException;
-import net.jini.event.MailboxPullRegistration;
-import net.jini.event.PullEventMailbox;
-import net.jini.event.RemoteEventIterator;
-import net.jini.core.lease.Lease;
-import net.jini.core.lease.UnknownLeaseException;
-import net.jini.core.event.EventRegistration;
-import net.jini.core.event.RemoteEvent;
-import net.jini.core.event.RemoteEventListener;
-import net.jini.core.event.UnknownEventException;
-
-import com.sun.jini.constants.TimeConstants;
-
-import com.sun.jini.test.impl.mercury.EMSTestBase;
-import com.sun.jini.test.impl.mercury.TestUtils;
-import com.sun.jini.test.impl.mercury.TestListener;
-import com.sun.jini.test.impl.mercury.TestGenerator;
-
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.Test;
-import com.sun.jini.qa.harness.TestException;
-
-public class PullTimeoutTest3 
-    extends EMSTestBase implements TimeConstants 
-{
-
-    //
-    // This should be long enough to sensibly run the test.
-    // If the service doesn't grant long enough leases, then
-    // we might have to resort to using something like the
-    // LeaseRenewalManager to keep our leases current.
-    //
-    private final long REG_LEASE = 60 * 1000;
-    private final long REG_LEASE_WAIT = REG_LEASE * 2;
-    private final long REG_LEASE_CANCEL_WAIT = REG_LEASE / 2;    
-    
-    private final int NUM_EVENTS = 5;
-
-    private final long EVENT_ID = 1234;
-    private final long EVENT_ID2 = 5678;
-
-    class Canceler implements Runnable {
-        final Lease l;
-        final long delay;
-        final Logger logger;
-        Canceler(Lease l, long delay, Logger logger) 
-        {
-            this.l = l;
-            this.delay = delay;
-            this.logger = logger;        
-        }
-        public void run() {
-            try {
-                logger.log(Level.FINEST, 
-                    "Canceler sleeping @ {0} for {1} ms", 
-                    new Object[] { new Date(), new Long(delay)});
-                Thread.sleep(delay);
-                logger.log(Level.FINEST, 
-                    "Canceler awoken @ {0}", new Date());
-            } catch (InterruptedException ie) {
-                // ignore
-                logger.log(Level.FINEST, 
-                    "Sleep interrupted", ie);
-            }
-            try {
-                l.cancel();                    
-                logger.log(Level.FINEST, "Cancelled reg @ {0}", new Date());
-            } catch (RemoteException re) {
-               logger.log(Level.FINEST, 
-                   "Ignoring RemoteException from generating event",
-                       re);
-            } catch (UnknownLeaseException ule) {
-               logger.log(Level.FINEST, 
-                   "Ignoring UnknownEventException from generating event",
-                       ule);
-            }
-        }
-    }
-    
-    public void run() throws Exception {
-	logger.log(Level.INFO, "Starting up " + this.getClass().toString()); 
-
-	PullEventMailbox mb = getPullMailbox();
-	int i = 0;
-
-	// Register and check lease
-        Date gotLease = new Date();
-	MailboxPullRegistration mr = getPullRegistration(mb, REG_LEASE);
-	Lease mrl = getPullMailboxLease(mr);
-	checkLease(mrl, REG_LEASE); 
-
-        // Start canceler thread with a delay of REG_LEASE_CANCEL_WAIT
-        Thread t = 
-            new Thread(
-                new Canceler(mrl, REG_LEASE_CANCEL_WAIT, logger));
-        t.start();
-        
-        // Get events and verify
-	logger.log(Level.INFO, "Getting events from empty mailbox.");
-        RemoteEventIterator rei = mr.getRemoteEvents();
-        RemoteEvent rei_event;
-        Date before = new Date();
-	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
-        try {
-            rei_event = rei.next(REG_LEASE_WAIT);
-            throw new TestException("Successfully called next on expired reg.");
-        } catch (NoSuchObjectException nsoe) {
-            logger.log(Level.INFO, "Received expected exception", nsoe);
-        }
-        Date after = new Date();
-        //Verify that we returned in time
-        long delta = after.getTime() - before.getTime();        
-	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
-            new Object[] {after, new Long(delta)});   
-        if (delta >= REG_LEASE_WAIT) {
-             throw new TestException("Returned from next() after expected: " 
-                     + delta);
-        } else if (after.getTime() <= (gotLease.getTime() + REG_LEASE_CANCEL_WAIT)) {
-             throw new TestException("Returned from next() before expected: "
-                     + after.getTime() + " ms versus " 
-                     + (gotLease.getTime() + REG_LEASE) + " ms.");            
-        }
-
-    }
-    /**
-     * Invoke parent's construct and parser
-     * @exception TestException will usually indicate an "unresolved"
-     *  condition because at this point the test has not yet begun.
-     */
-    public Test construct(QAConfig sysConfig) throws Exception {
-	super.construct(sysConfig);
-	parse();
-        return this;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.sun.jini.test.impl.mercury;
+
+import java.util.logging.Level;
+
+import java.rmi.RemoteException;
+import java.rmi.NoSuchObjectException;
+import java.rmi.ServerException;
+import java.util.Date;
+import java.util.ArrayList;
+import java.util.logging.Logger;
+
+
+import net.jini.event.InvalidIteratorException;
+import net.jini.event.MailboxPullRegistration;
+import net.jini.event.PullEventMailbox;
+import net.jini.event.RemoteEventIterator;
+import net.jini.core.lease.Lease;
+import net.jini.core.lease.UnknownLeaseException;
+import net.jini.core.event.EventRegistration;
+import net.jini.core.event.RemoteEvent;
+import net.jini.core.event.RemoteEventListener;
+import net.jini.core.event.UnknownEventException;
+
+import com.sun.jini.constants.TimeConstants;
+
+import com.sun.jini.test.impl.mercury.EMSTestBase;
+import com.sun.jini.test.impl.mercury.TestUtils;
+import com.sun.jini.test.impl.mercury.TestListener;
+import com.sun.jini.test.impl.mercury.TestGenerator;
+
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.Test;
+import com.sun.jini.qa.harness.TestException;
+
+public class PullTimeoutTest3 
+    extends EMSTestBase implements TimeConstants 
+{
+
+    //
+    // This should be long enough to sensibly run the test.
+    // If the service doesn't grant long enough leases, then
+    // we might have to resort to using something like the
+    // LeaseRenewalManager to keep our leases current.
+    //
+    private final long REG_LEASE = 60 * 1000;
+    private final long REG_LEASE_WAIT = REG_LEASE * 2;
+    private final long REG_LEASE_CANCEL_WAIT = REG_LEASE / 2;    
+    
+    private final int NUM_EVENTS = 5;
+
+    private final long EVENT_ID = 1234;
+    private final long EVENT_ID2 = 5678;
+
+    class Canceler implements Runnable {
+        final Lease l;
+        final long delay;
+        final Logger logger;
+        Canceler(Lease l, long delay, Logger logger) 
+        {
+            this.l = l;
+            this.delay = delay;
+            this.logger = logger;        
+        }
+        public void run() {
+            try {
+                logger.log(Level.FINEST, 
+                    "Canceler sleeping @ {0} for {1} ms", 
+                    new Object[] { new Date(), new Long(delay)});
+                Thread.sleep(delay);
+                logger.log(Level.FINEST, 
+                    "Canceler awoken @ {0}", new Date());
+            } catch (InterruptedException ie) {
+                Thread.currentThread().interrupt();
+                // ignore
+                logger.log(Level.FINEST, 
+                    "Sleep interrupted", ie);
+            }
+            try {
+                l.cancel();                    
+                logger.log(Level.FINEST, "Cancelled reg @ {0}", new Date());
+            } catch (RemoteException re) {
+               logger.log(Level.FINEST, 
+                   "Ignoring RemoteException from generating event",
+                       re);
+            } catch (UnknownLeaseException ule) {
+               logger.log(Level.FINEST, 
+                   "Ignoring UnknownEventException from generating event",
+                       ule);
+            }
+        }
+    }
+    
+    public void run() throws Exception {
+	logger.log(Level.INFO, "Starting up " + this.getClass().toString()); 
+
+	PullEventMailbox mb = getPullMailbox();
+	int i = 0;
+
+	// Register and check lease
+        Date gotLease = new Date();
+	MailboxPullRegistration mr = getPullRegistration(mb, REG_LEASE);
+	Lease mrl = getPullMailboxLease(mr);
+	checkLease(mrl, REG_LEASE); 
+
+        // Start canceler thread with a delay of REG_LEASE_CANCEL_WAIT
+        Thread t = 
+            new Thread(
+                new Canceler(mrl, REG_LEASE_CANCEL_WAIT, logger));
+        t.start();
+        
+        // Get events and verify
+	logger.log(Level.INFO, "Getting events from empty mailbox.");
+        RemoteEventIterator rei = mr.getRemoteEvents();
+        RemoteEvent rei_event;
+        Date before = new Date();
+	logger.log(Level.INFO, "Calling next() on empty set @ {0}", before);        
+        try {
+            rei_event = rei.next(REG_LEASE_WAIT);
+            throw new TestException("Successfully called next on expired reg.");
+        } catch (NoSuchObjectException nsoe) {
+            logger.log(Level.INFO, "Received expected exception", nsoe);
+        }
+        Date after = new Date();
+        //Verify that we returned in time
+        long delta = after.getTime() - before.getTime();        
+	logger.log(Level.INFO, "Returned from next() @ {0}, delta = {1}", 
+            new Object[] {after, new Long(delta)});   
+        if (delta >= REG_LEASE_WAIT) {
+             throw new TestException("Returned from next() after expected: " 
+                     + delta);
+        } else if (after.getTime() <= (gotLease.getTime() + REG_LEASE_CANCEL_WAIT)) {
+             throw new TestException("Returned from next() before expected: "
+                     + after.getTime() + " ms versus " 
+                     + (gotLease.getTime() + REG_LEASE) + " ms.");            
+        }
+
+    }
+    /**
+     * Invoke parent's construct and parser
+     * @exception TestException will usually indicate an "unresolved"
+     *  condition because at this point the test has not yet begun.
+     */
+    public Test construct(QAConfig sysConfig) throws Exception {
+	super.construct(sysConfig);
+	parse();
+        return this;
+    }
+}



Mime
View raw message