Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/DiscoveryServiceUtil.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/DiscoveryServiceUtil.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/DiscoveryServiceUtil.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/DiscoveryServiceUtil.java
 Sun Oct 26 13:17:28 2014
@@ -1,380 +1,382 @@
-/*
- * 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.share;
-
-import java.util.logging.Level;
-
-import com.sun.jini.qa.harness.QATestEnvironment;
-import com.sun.jini.qa.harness.QAConfig;
-
-import net.jini.discovery.DiscoveryGroupManagement;
-import net.jini.discovery.LookupDiscoveryService;
-import net.jini.discovery.LookupDiscoveryRegistration;
-
-import net.jini.core.discovery.LookupLocator;
-import net.jini.core.event.RemoteEvent;
-import net.jini.core.event.RemoteEventListener;
-
-import java.io.IOException;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.net.MalformedURLException;
-import java.rmi.MarshalledObject;
-import java.rmi.RemoteException;
-
-import net.jini.config.Configuration;
-import net.jini.config.ConfigurationException;
-import net.jini.export.Exporter;
-import net.jini.security.ProxyPreparer;
-import net.jini.security.TrustVerifier;
-import net.jini.security.proxytrust.ServerProxyTrust;
-
-import com.sun.jini.proxy.BasicProxyTrustVerifier;
-import java.rmi.server.ExportException;
-
-/**
- * This class contains a set of static methods that provide general-purpose
- * functions related to the use of the lookup discovery service. This
- * utility class is intended to be useful to all categories of tests that
- * wish to use instances of that service.
- *
- * @see net.jini.discovery.LookupDiscoveryService
- * @see net.jini.discovery.LookupDiscoveryRegistration
- */
-public class DiscoveryServiceUtil {
-    /** Convenience class for handling the events sent by the service
-     *  with which the client (the test) has registered
-     */
-    public static class BasicEventListener 
-       implements RemoteEventListener, ServerProxyTrust, Serializable 
-    {
-        private final Exporter exporter;
-       private Object proxy;
-
-        public BasicEventListener() throws RemoteException {
-            super();
-           Configuration c = QAConfig.getConfig().getConfiguration();
-           Exporter exporter = QAConfig.getDefaultExporter();
-           if (c instanceof com.sun.jini.qa.harness.QAConfiguration) {
-               try {
-                   exporter = (Exporter) c.getEntry("test",
-                                                    "fiddlerListenerExporter", 
-                                                    Exporter.class);
-               } catch (ConfigurationException e) {
-                   throw new RemoteException("Configuration problem", e);
-               }
-           }
-            this.exporter = exporter;
-        }
-        
-        public synchronized void export() throws ExportException{
-            proxy = exporter.export(this);
-        }
-
-       private synchronized Object writeReplace() throws ObjectStreamException 
{
-           return proxy;
-       }
-
-        public void notify(RemoteEvent ev) {
-        }
-
-       public synchronized TrustVerifier getProxyVerifier() {
-           return new BasicProxyTrustVerifier(proxy);
-       }
-    }//end class BasicEventListener
-
-    public  static final long defaultDuration = 1*30*1000;
-
-    private static final String[] defaultGroups
-                                         = DiscoveryGroupManagement.NO_GROUPS;
-    private static final LookupLocator[] defaultLocators
-                                         = new LookupLocator[0];
-    private static final Integer defaultHbVal    = new Integer(93);
-
-   /** Converts a given absolute expiration time to a time of duration
-     *  relative to the value of the <code>curTime</code> parameter.
-     *
-     *  Because inaccurracies in the value of the current system time are
-     *  expected, this method rounds the result to the smallest whole
-     *  number greater than or equal to the decimal representatin of the
-     *  computed duration.
-     * 
-     *  @param expiration the absolute expiration time in milliseconds of
-     *                    the lease whose duration is to be computed
-     *
-     *  @return the relative duration of the lease whose absolute expiration
-     *          is equal to the value in the <code>expiration</code>
-     *          parameter; rounded to the next whole number
-     */
-    public static long expirationToDuration(long expiration, long curTime) {
-        double dExpiration = (double)expiration;
-        double dCurTime    = (double)curTime;
-        double dDur        = (dExpiration-dCurTime)/1000;
-        double wDur        = Math.floor(dDur);
-        double remainder   = dDur - wDur;
-        double dDuration   = ( (remainder>0) ? (wDur+1) : wDur );
-        return (long)(1000*dDuration);
-    }//end expirationToDuration
-
-    /** Sleeps for the given number of milliseconds */
-    public static void delayMS(long nMS) {
-        try {
-            Thread.sleep(nMS);
-        } catch (InterruptedException e) { }
-    }//end delayMS
-
-    /** Converts a given absolute expiration time to a time of duration
-     *  relative to the current system time.
-     *
-     *  Because inaccurracies in the value of the current system time are
-     *  expected, this method rounds the result to the smallest whole
-     *  number greater than or equal to the decimal representatin of the
-     *  computed duration.
-     * 
-     *  @param expiration the absolute expiration time in milliseconds of
-     *                    the lease whose duration is to be computed
-     *
-     *  @return the relative duration of the lease whose absolute expiration
-     *          is equal to the value in the <code>expiration</code>
-     *          parameter; rounded to the next whole number
-     */
-    public static long expirationToDuration(long expiration) {
-        return expirationToDuration(expiration,System.currentTimeMillis());
-    }//end expirationToDuration
-
-    /** Given a proxy to a lookup discovery service, this method is one of
-     *  a number of overloaded versions that request a registration with
-     *  the service to which the <code>proxy</code> parameter corresponds.
-     *  This version of the method contains a fully defined argument
-     *  list; that is, all other versions of this method ultimately
-     *  invoke this method.
-     * 
-     *  @param proxy    the proxy object through which the request for
-     *                  registration with the service is made
-     *  @param listener the remote event listener with which to register
-     *                   with the service's event mechanism
-     *  @param groups   <code>String</code> containing the names of the
-     *                  groups containing the lookup services to discover
-     *  @param locators array of instances of <code>LookupLocator</code>,
-     *                  where each element of the array corresponds to a
-     *                  specific lookup service to discover
-     *  @param duration the number of milliseconds to request for the duration
-     *                  of the lease granted on the requested registration
-     *  @param handback the object that will be returned in any events
-     *                  sent by the registration to the listener 
-     *
-     *  @return a <code>net.jini.discovery.LookupDiscoveryRegistration</code>
-     *          instance through which the registered client can manipulate
-     *          the state of its registration with the service
-     */
-    public static LookupDiscoveryRegistration
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 String[] groups,
-                                                 LookupLocator[] locators,
-                                                 long duration,
-                                                 MarshalledObject handback)
-                                                        throws RemoteException
-    {
-           return proxy.register(groups,locators,listener,handback,duration);
-    }//end getRegistration
-
-    /* 1. No handback parameter */
-    public static LookupDiscoveryRegistration
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 String[] groups,
-                                                 LookupLocator[] locators,
-                                                 long duration)
-                                                        throws RemoteException
-    {
-        try {
-            return getRegistration(proxy,listener,groups,locators,duration,
-                                   new MarshalledObject(defaultHbVal) );
-        } catch (IOException e) {
-            return getRegistration(proxy,listener,groups,locators,duration,
-                                   null);
-        }
-    }//end getRegistration
-
-    /* 2. No duration parameter */
-    public static LookupDiscoveryRegistration
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 String[] groups,
-                                                 LookupLocator[] locators,
-                                                 MarshalledObject handback)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,groups,locators,
-                               defaultDuration,handback);
-    }//end getRegistration
-
-    /* 3. No duration or handback parameter */
-    public static LookupDiscoveryRegistration
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 String[] groups,
-                                                 LookupLocator[] locators)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,groups,locators,defaultDuration);
-    }//end getRegistration
-
-    /* 4. No locators parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 String[] groups,
-                                                 long duration,
-                                                 MarshalledObject handback)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,groups,defaultLocators,
-                               duration,handback);
-    }//end getRegistration
-
-    /* 5. No locators or handback parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 String[] groups,
-                                                 long duration)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,groups,defaultLocators,duration);
-    }//end getRegistration
-
-    /* 6. No groups parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 LookupLocator[] locators,
-                                                 long duration,
-                                                 MarshalledObject handback)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,defaultGroups,locators,
-                               duration,handback);
-    }//end getRegistration
-
-    /* 7. No groups or handback parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 LookupLocator[] locators,
-                                                 long duration)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,defaultGroups,locators,duration);
-    }//end getRegistration
-
-    /* 8. No locators or duration parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 String[] groups,
-                                                 MarshalledObject handback)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,groups,defaultLocators,
-                               defaultDuration,handback);
-    }//end getRegistration
-
-    /* 9. No locators, duration, or handback parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 String[] groups)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener, groups,
-                               defaultLocators,defaultDuration);
-    }//end getRegistration
-
-    /* 10. No groups or duration parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 LookupLocator[] locators,
-                                                 MarshalledObject handback)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,defaultGroups,locators,
-                               defaultDuration,handback);
-    }//end getRegistration
-
-    /* 11. No groups, duration, or handback parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 LookupLocator[] locators)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,defaultGroups,locators,
-                               defaultDuration);
-    }//end getRegistration
-
-    /* 12. No groups or locators parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 long duration,
-                                                 MarshalledObject handback)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,defaultGroups,defaultLocators,
-                               duration,handback);
-    }//end getRegistration
-
-    /* 13. No groups, locators, or handback parameter */
-    public static LookupDiscoveryRegistration 
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 long duration)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,defaultGroups,defaultLocators,
-                               duration);
-    }//end getRegistration
-
-    /* 14. No groups, locators, or duration parameter */
-    public static LookupDiscoveryRegistration
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener,
-                                                 MarshalledObject handback)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,defaultGroups,defaultLocators,
-                               defaultDuration,handback);
-    }//end getRegistration
-
-    /* 15. No groups, locators, duration, or handback parameter */
-    public static LookupDiscoveryRegistration
-                                 getRegistration(LookupDiscoveryService proxy,
-                                                 RemoteEventListener listener)
-                                                        throws RemoteException
-    {
-        return getRegistration(proxy,listener,defaultGroups, defaultLocators,
-                               defaultDuration);
-    }//end getRegistration
-
-} //end class DiscoveryServiceUtil
-
-
+/*
+ * 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.share;
+
+import java.util.logging.Level;
+
+import com.sun.jini.qa.harness.QATestEnvironment;
+import com.sun.jini.qa.harness.QAConfig;
+
+import net.jini.discovery.DiscoveryGroupManagement;
+import net.jini.discovery.LookupDiscoveryService;
+import net.jini.discovery.LookupDiscoveryRegistration;
+
+import net.jini.core.discovery.LookupLocator;
+import net.jini.core.event.RemoteEvent;
+import net.jini.core.event.RemoteEventListener;
+
+import java.io.IOException;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.net.MalformedURLException;
+import java.rmi.MarshalledObject;
+import java.rmi.RemoteException;
+
+import net.jini.config.Configuration;
+import net.jini.config.ConfigurationException;
+import net.jini.export.Exporter;
+import net.jini.security.ProxyPreparer;
+import net.jini.security.TrustVerifier;
+import net.jini.security.proxytrust.ServerProxyTrust;
+
+import com.sun.jini.proxy.BasicProxyTrustVerifier;
+import java.rmi.server.ExportException;
+
+/**
+ * This class contains a set of static methods that provide general-purpose
+ * functions related to the use of the lookup discovery service. This
+ * utility class is intended to be useful to all categories of tests that
+ * wish to use instances of that service.
+ *
+ * @see net.jini.discovery.LookupDiscoveryService
+ * @see net.jini.discovery.LookupDiscoveryRegistration
+ */
+public class DiscoveryServiceUtil {
+    /** Convenience class for handling the events sent by the service
+     *  with which the client (the test) has registered
+     */
+    public static class BasicEventListener 
+       implements RemoteEventListener, ServerProxyTrust, Serializable 
+    {
+        private final Exporter exporter;
+       private Object proxy;
+
+        public BasicEventListener() throws RemoteException {
+            super();
+           Configuration c = QAConfig.getConfig().getConfiguration();
+           Exporter exporter = QAConfig.getDefaultExporter();
+           if (c instanceof com.sun.jini.qa.harness.QAConfiguration) {
+               try {
+                   exporter = (Exporter) c.getEntry("test",
+                                                    "fiddlerListenerExporter", 
+                                                    Exporter.class);
+               } catch (ConfigurationException e) {
+                   throw new RemoteException("Configuration problem", e);
+               }
+           }
+            this.exporter = exporter;
+        }
+        
+        public synchronized void export() throws ExportException{
+            proxy = exporter.export(this);
+        }
+
+       private synchronized Object writeReplace() throws ObjectStreamException 
{
+           return proxy;
+       }
+
+        public void notify(RemoteEvent ev) {
+        }
+
+       public synchronized TrustVerifier getProxyVerifier() {
+           return new BasicProxyTrustVerifier(proxy);
+       }
+    }//end class BasicEventListener
+
+    public  static final long defaultDuration = 1*30*1000;
+
+    private static final String[] defaultGroups
+                                         = DiscoveryGroupManagement.NO_GROUPS;
+    private static final LookupLocator[] defaultLocators
+                                         = new LookupLocator[0];
+    private static final Integer defaultHbVal    = new Integer(93);
+
+   /** Converts a given absolute expiration time to a time of duration
+     *  relative to the value of the <code>curTime</code> parameter.
+     *
+     *  Because inaccurracies in the value of the current system time are
+     *  expected, this method rounds the result to the smallest whole
+     *  number greater than or equal to the decimal representatin of the
+     *  computed duration.
+     * 
+     *  @param expiration the absolute expiration time in milliseconds of
+     *                    the lease whose duration is to be computed
+     *
+     *  @return the relative duration of the lease whose absolute expiration
+     *          is equal to the value in the <code>expiration</code>
+     *          parameter; rounded to the next whole number
+     */
+    public static long expirationToDuration(long expiration, long curTime) {
+        double dExpiration = (double)expiration;
+        double dCurTime    = (double)curTime;
+        double dDur        = (dExpiration-dCurTime)/1000;
+        double wDur        = Math.floor(dDur);
+        double remainder   = dDur - wDur;
+        double dDuration   = ( (remainder>0) ? (wDur+1) : wDur );
+        return (long)(1000*dDuration);
+    }//end expirationToDuration
+
+    /** Sleeps for the given number of milliseconds */
+    public static void delayMS(long nMS) {
+        try {
+            Thread.sleep(nMS);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+        }
+    }//end delayMS
+
+    /** Converts a given absolute expiration time to a time of duration
+     *  relative to the current system time.
+     *
+     *  Because inaccurracies in the value of the current system time are
+     *  expected, this method rounds the result to the smallest whole
+     *  number greater than or equal to the decimal representatin of the
+     *  computed duration.
+     * 
+     *  @param expiration the absolute expiration time in milliseconds of
+     *                    the lease whose duration is to be computed
+     *
+     *  @return the relative duration of the lease whose absolute expiration
+     *          is equal to the value in the <code>expiration</code>
+     *          parameter; rounded to the next whole number
+     */
+    public static long expirationToDuration(long expiration) {
+        return expirationToDuration(expiration,System.currentTimeMillis());
+    }//end expirationToDuration
+
+    /** Given a proxy to a lookup discovery service, this method is one of
+     *  a number of overloaded versions that request a registration with
+     *  the service to which the <code>proxy</code> parameter corresponds.
+     *  This version of the method contains a fully defined argument
+     *  list; that is, all other versions of this method ultimately
+     *  invoke this method.
+     * 
+     *  @param proxy    the proxy object through which the request for
+     *                  registration with the service is made
+     *  @param listener the remote event listener with which to register
+     *                   with the service's event mechanism
+     *  @param groups   <code>String</code> containing the names of the
+     *                  groups containing the lookup services to discover
+     *  @param locators array of instances of <code>LookupLocator</code>,
+     *                  where each element of the array corresponds to a
+     *                  specific lookup service to discover
+     *  @param duration the number of milliseconds to request for the duration
+     *                  of the lease granted on the requested registration
+     *  @param handback the object that will be returned in any events
+     *                  sent by the registration to the listener 
+     *
+     *  @return a <code>net.jini.discovery.LookupDiscoveryRegistration</code>
+     *          instance through which the registered client can manipulate
+     *          the state of its registration with the service
+     */
+    public static LookupDiscoveryRegistration
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 String[] groups,
+                                                 LookupLocator[] locators,
+                                                 long duration,
+                                                 MarshalledObject handback)
+                                                        throws RemoteException
+    {
+           return proxy.register(groups,locators,listener,handback,duration);
+    }//end getRegistration
+
+    /* 1. No handback parameter */
+    public static LookupDiscoveryRegistration
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 String[] groups,
+                                                 LookupLocator[] locators,
+                                                 long duration)
+                                                        throws RemoteException
+    {
+        try {
+            return getRegistration(proxy,listener,groups,locators,duration,
+                                   new MarshalledObject(defaultHbVal) );
+        } catch (IOException e) {
+            return getRegistration(proxy,listener,groups,locators,duration,
+                                   null);
+        }
+    }//end getRegistration
+
+    /* 2. No duration parameter */
+    public static LookupDiscoveryRegistration
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 String[] groups,
+                                                 LookupLocator[] locators,
+                                                 MarshalledObject handback)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,groups,locators,
+                               defaultDuration,handback);
+    }//end getRegistration
+
+    /* 3. No duration or handback parameter */
+    public static LookupDiscoveryRegistration
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 String[] groups,
+                                                 LookupLocator[] locators)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,groups,locators,defaultDuration);
+    }//end getRegistration
+
+    /* 4. No locators parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 String[] groups,
+                                                 long duration,
+                                                 MarshalledObject handback)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,groups,defaultLocators,
+                               duration,handback);
+    }//end getRegistration
+
+    /* 5. No locators or handback parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 String[] groups,
+                                                 long duration)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,groups,defaultLocators,duration);
+    }//end getRegistration
+
+    /* 6. No groups parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 LookupLocator[] locators,
+                                                 long duration,
+                                                 MarshalledObject handback)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,defaultGroups,locators,
+                               duration,handback);
+    }//end getRegistration
+
+    /* 7. No groups or handback parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 LookupLocator[] locators,
+                                                 long duration)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,defaultGroups,locators,duration);
+    }//end getRegistration
+
+    /* 8. No locators or duration parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 String[] groups,
+                                                 MarshalledObject handback)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,groups,defaultLocators,
+                               defaultDuration,handback);
+    }//end getRegistration
+
+    /* 9. No locators, duration, or handback parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 String[] groups)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener, groups,
+                               defaultLocators,defaultDuration);
+    }//end getRegistration
+
+    /* 10. No groups or duration parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 LookupLocator[] locators,
+                                                 MarshalledObject handback)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,defaultGroups,locators,
+                               defaultDuration,handback);
+    }//end getRegistration
+
+    /* 11. No groups, duration, or handback parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 LookupLocator[] locators)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,defaultGroups,locators,
+                               defaultDuration);
+    }//end getRegistration
+
+    /* 12. No groups or locators parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 long duration,
+                                                 MarshalledObject handback)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,defaultGroups,defaultLocators,
+                               duration,handback);
+    }//end getRegistration
+
+    /* 13. No groups, locators, or handback parameter */
+    public static LookupDiscoveryRegistration 
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 long duration)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,defaultGroups,defaultLocators,
+                               duration);
+    }//end getRegistration
+
+    /* 14. No groups, locators, or duration parameter */
+    public static LookupDiscoveryRegistration
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener,
+                                                 MarshalledObject handback)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,defaultGroups,defaultLocators,
+                               defaultDuration,handback);
+    }//end getRegistration
+
+    /* 15. No groups, locators, duration, or handback parameter */
+    public static LookupDiscoveryRegistration
+                                 getRegistration(LookupDiscoveryService proxy,
+                                                 RemoteEventListener listener)
+                                                        throws RemoteException
+    {
+        return getRegistration(proxy,listener,defaultGroups, defaultLocators,
+                               defaultDuration);
+    }//end getRegistration
+
+} //end class DiscoveryServiceUtil
+
+

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/KillVMUtil.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/KillVMUtil.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/KillVMUtil.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/KillVMUtil.java
 Sun Oct 26 13:17:28 2014
@@ -1,179 +1,183 @@
-/*
- * 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.share;
-
-//import com.sun.jini.start.ClassLoaderUtil;
-
-import java.io.IOException;
-
-import java.net.MalformedURLException;
-
-import java.rmi.activation.Activatable;
-import java.rmi.activation.ActivationDesc;
-import java.rmi.activation.ActivationException;
-import java.rmi.activation.ActivationGroupID;
-import java.rmi.activation.ActivationID;
-
-import java.rmi.MarshalledObject;
-import java.rmi.Remote;
-
-import java.rmi.RemoteException;
-
-/**
- * This class contains a set of static classes and methods that provide 
- * general-purpose functions related to shutting down an ActivationGroup (VM)
- * in which one or activatable processes are executing. This utility class
- * is intended to be useful to all categories of tests that wish to simulate
- * a system crash. For example, tests that verify the ability of an 
- * application to persist its state may find this utility particularly
- * useful.
- */
-public class KillVMUtil {
-    /** Utility method used to kill the VM (ActivationGroup) referenced
-     *  by the <code>gid</code> parameter. If an activatable service is
-     *  started in NON-restartable mode, calling this method with
-     *  the <code>ActivationGroupID</code> of that service's
-     *  <code>ActivationGroup</code> will cause a special object to be
-     *  registered with that VM; an object whose only function is to
-     *  perform a <code>System.exit</code> on the VM. After registering
-     *  this special object with the indicated <code>ActivationGroup</code>,
-     *  this method invokes the killVM() method on that object, resulting
-     *  in the stoppage of all processes running in the VM.
-     *
-     *  Note that if the original service was started in restart mode,
-     *  after stopping the VM, RMID will simply re-spawn the VM and 
-     *  re-start the service. 
-     */
-    public static void killActivationGroup(ActivationGroupID gid)
-                                   throws MalformedURLException,
-                                          ActivationException, RemoteException
-    {
-        String implClass = KillVMObjectImpl.class.getName();
-       String codeLocation = null; //BDJ - TEMP WORKAROUND FOR COMPILE
-//          String codeLocation = ClassLoaderUtil.URLsToString
-//                                (ClassLoaderUtil.getClasspathURLs
-//                                  (System.getProperty("java.class.path")));
-        ActivationDesc desc = new ActivationDesc(gid,implClass,
-                                                 codeLocation,null,false);
-        KillVMObject serverStub = (KillVMObject)(Activatable.register(desc));
-        long delay = serverStub.killVM();        
-        try {Thread.sleep(delay);} catch (InterruptedException e) { }
-    }//end killActivationGroup
-
-    /** Remote interface that should be implemented by any object desiring
-     *  the capability to abruptly stop all processes in a given
-     *  ActivationGroup (VM).
-     */
-    public interface KillVMObject extends Remote {
-        /** Abruptly stops the VM in which this method's implementation
-         *  executes.
-         *  
-         * @return a <code>long</code> value representing an estimate of the
-         *         number of milliseconds that will elapse before the VM is
-         *         completely shutdown. The caller of this method should not
-         *         call any processes in this VM until after this time has
-         *         elapsed.
-         */
-        public long killVM() throws java.rmi.RemoteException;
-    }//end interface KillVMObject
-
-    /** Special activatable class whose instance, once registered with a
-     *  given ActivationGroup (VM), can be used to completely stop (or "kill")
-     *  all processes registered and running in that VM.
-     *
-     *  Note that because calls to this class' killVM() method are
-     *  asynchronous, certain requirements are imposed on the implementation.
-     *  If the VM is exited from the current thread, rather than from a
-     *  separate thread, entities which invoke this method will always
-     *  receive a <code>RemoteException</code> because exiting the VM in
-     *  the current thread will break the communication link between the
-     *  frontend and the backend of the service. Thus, the VM must be
-     *  exited from a separate thread.
-     *  
-     *  Another implementation requirement, related to the thread requirement,
-     *  involves preventing <code>RemoteException</code>s through the
-     *  introduction of timing delays. If the VM is exited before the remote
-     *  call has had a chance to complete, just as with the case of exiting
-     *  the VM from the current thread, the communication link between the
-     *  this class' frontend and backend will be broken, resulting in a
-     *  <code>RemoteException</code>. Thus, not only must the VM be exited
-     *  from a separate thread, but it also must be exited only after the
-     *  remote call to this method has completed. By instructing the thread
-     *  that exits the VM to delay a certain amount of time before actually
-     *  exiting the VM, this method attempts to "guarantee" that the VM will
-     *  not be exited until the remote call has completed. Note that the
-     *  amount of time to delay is simply a rough estimate of the amount
-     *  of time a typical remote call should take to complete. Thus, a
-     *  <code>RemoteException</code> may occur because the time delay is
-     *  too small.
-     *
-     *  Next, note that the use of the killVM() method also imposes a related
-     *  timing requirement on the client-side entity. That is, when an
-     *  entity invokes this method, it must also delay a certain amount
-     *  time before attempting to again interact with any process that
-     *  was registered with the killed VM in restart mode. This delay is
-     *  necessary to allow such services to be re-activated and to recover
-     *  any persisted state. The killVM() method returns a <code>long</code>
-     *  value that represents the amount of time the client-side entity
-     *  should delay before again attempting to interact with those
-     *  restartable processes. As with the server side time estimate,
-     *  this time value is a rough estimate, and may need to be adjusted
-     *  if the entity experiences <code>RemoteException</code>s on a
-     *  regular basis when the entity attempts to interact with any
-     *  restarted processes after invoking this method.
-     *
-     *  Finally, note that because this class is an inner class, it must 
-     *  be declared static. If it is not declared static, misleading
-     *  ActivationExceptions will occur that seem to indicate a missing
-     *  activation constructor (the exception will also say something about
-     *  and problems while intializing (<init>). These exceptions occur
-     *  because the non-static inner class will have an implicit reference
-     *  to the outter class which is not registered with the activation
-     *  system.
-     */
-    public static class KillVMObjectImpl implements KillVMObject {
-        public KillVMObjectImpl(ActivationID activationID,
-                                MarshalledObject data) throws IOException
-        {
-            Activatable.exportObject(this, activationID, 0);
-        }//end constructor
-        public long killVM() throws RemoteException {
-            long delay = 20; // wait N milliseconds before exiting VM
-            (new KillVMThread(delay)).start();
-            return (delay*1000); //just an estimate
-        }
-        private class KillVMThread extends Thread {
-            long delay;
-           /** Thread that inherits its daemon status from main thread */
-           public KillVMThread(long delay) {
-               super("killVM");
-                this.delay = delay;
-            }
-           public void run() {
-                try {
-                    Thread.sleep(delay);
-                } catch (InterruptedException e) { }
-                System.exit(0);
-           }
-        }//end class KillVMThread
-    }//end class KillVMObjectImpl
-
-} //end class KillVMUtil
-
-
+/*
+ * 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.share;
+
+//import com.sun.jini.start.ClassLoaderUtil;
+
+import java.io.IOException;
+
+import java.net.MalformedURLException;
+
+import java.rmi.activation.Activatable;
+import java.rmi.activation.ActivationDesc;
+import java.rmi.activation.ActivationException;
+import java.rmi.activation.ActivationGroupID;
+import java.rmi.activation.ActivationID;
+
+import java.rmi.MarshalledObject;
+import java.rmi.Remote;
+
+import java.rmi.RemoteException;
+
+/**
+ * This class contains a set of static classes and methods that provide 
+ * general-purpose functions related to shutting down an ActivationGroup (VM)
+ * in which one or activatable processes are executing. This utility class
+ * is intended to be useful to all categories of tests that wish to simulate
+ * a system crash. For example, tests that verify the ability of an 
+ * application to persist its state may find this utility particularly
+ * useful.
+ */
+public class KillVMUtil {
+    /** Utility method used to kill the VM (ActivationGroup) referenced
+     *  by the <code>gid</code> parameter. If an activatable service is
+     *  started in NON-restartable mode, calling this method with
+     *  the <code>ActivationGroupID</code> of that service's
+     *  <code>ActivationGroup</code> will cause a special object to be
+     *  registered with that VM; an object whose only function is to
+     *  perform a <code>System.exit</code> on the VM. After registering
+     *  this special object with the indicated <code>ActivationGroup</code>,
+     *  this method invokes the killVM() method on that object, resulting
+     *  in the stoppage of all processes running in the VM.
+     *
+     *  Note that if the original service was started in restart mode,
+     *  after stopping the VM, RMID will simply re-spawn the VM and 
+     *  re-start the service. 
+     */
+    public static void killActivationGroup(ActivationGroupID gid)
+                                   throws MalformedURLException,
+                                          ActivationException, RemoteException
+    {
+        String implClass = KillVMObjectImpl.class.getName();
+       String codeLocation = null; //BDJ - TEMP WORKAROUND FOR COMPILE
+//          String codeLocation = ClassLoaderUtil.URLsToString
+//                                (ClassLoaderUtil.getClasspathURLs
+//                                  (System.getProperty("java.class.path")));
+        ActivationDesc desc = new ActivationDesc(gid,implClass,
+                                                 codeLocation,null,false);
+        KillVMObject serverStub = (KillVMObject)(Activatable.register(desc));
+        long delay = serverStub.killVM();        
+        try {Thread.sleep(delay);} catch (InterruptedException e) { 
+            Thread.currentThread().interrupt();
+        }
+    }//end killActivationGroup
+
+    /** Remote interface that should be implemented by any object desiring
+     *  the capability to abruptly stop all processes in a given
+     *  ActivationGroup (VM).
+     */
+    public interface KillVMObject extends Remote {
+        /** Abruptly stops the VM in which this method's implementation
+         *  executes.
+         *  
+         * @return a <code>long</code> value representing an estimate of the
+         *         number of milliseconds that will elapse before the VM is
+         *         completely shutdown. The caller of this method should not
+         *         call any processes in this VM until after this time has
+         *         elapsed.
+         */
+        public long killVM() throws java.rmi.RemoteException;
+    }//end interface KillVMObject
+
+    /** Special activatable class whose instance, once registered with a
+     *  given ActivationGroup (VM), can be used to completely stop (or "kill")
+     *  all processes registered and running in that VM.
+     *
+     *  Note that because calls to this class' killVM() method are
+     *  asynchronous, certain requirements are imposed on the implementation.
+     *  If the VM is exited from the current thread, rather than from a
+     *  separate thread, entities which invoke this method will always
+     *  receive a <code>RemoteException</code> because exiting the VM in
+     *  the current thread will break the communication link between the
+     *  frontend and the backend of the service. Thus, the VM must be
+     *  exited from a separate thread.
+     *  
+     *  Another implementation requirement, related to the thread requirement,
+     *  involves preventing <code>RemoteException</code>s through the
+     *  introduction of timing delays. If the VM is exited before the remote
+     *  call has had a chance to complete, just as with the case of exiting
+     *  the VM from the current thread, the communication link between the
+     *  this class' frontend and backend will be broken, resulting in a
+     *  <code>RemoteException</code>. Thus, not only must the VM be exited
+     *  from a separate thread, but it also must be exited only after the
+     *  remote call to this method has completed. By instructing the thread
+     *  that exits the VM to delay a certain amount of time before actually
+     *  exiting the VM, this method attempts to "guarantee" that the VM will
+     *  not be exited until the remote call has completed. Note that the
+     *  amount of time to delay is simply a rough estimate of the amount
+     *  of time a typical remote call should take to complete. Thus, a
+     *  <code>RemoteException</code> may occur because the time delay is
+     *  too small.
+     *
+     *  Next, note that the use of the killVM() method also imposes a related
+     *  timing requirement on the client-side entity. That is, when an
+     *  entity invokes this method, it must also delay a certain amount
+     *  time before attempting to again interact with any process that
+     *  was registered with the killed VM in restart mode. This delay is
+     *  necessary to allow such services to be re-activated and to recover
+     *  any persisted state. The killVM() method returns a <code>long</code>
+     *  value that represents the amount of time the client-side entity
+     *  should delay before again attempting to interact with those
+     *  restartable processes. As with the server side time estimate,
+     *  this time value is a rough estimate, and may need to be adjusted
+     *  if the entity experiences <code>RemoteException</code>s on a
+     *  regular basis when the entity attempts to interact with any
+     *  restarted processes after invoking this method.
+     *
+     *  Finally, note that because this class is an inner class, it must 
+     *  be declared static. If it is not declared static, misleading
+     *  ActivationExceptions will occur that seem to indicate a missing
+     *  activation constructor (the exception will also say something about
+     *  and problems while intializing (<init>). These exceptions occur
+     *  because the non-static inner class will have an implicit reference
+     *  to the outter class which is not registered with the activation
+     *  system.
+     */
+    public static class KillVMObjectImpl implements KillVMObject {
+        public KillVMObjectImpl(ActivationID activationID,
+                                MarshalledObject data) throws IOException
+        {
+            Activatable.exportObject(this, activationID, 0);
+        }//end constructor
+        public long killVM() throws RemoteException {
+            long delay = 20; // wait N milliseconds before exiting VM
+            (new KillVMThread(delay)).start();
+            return (delay*1000); //just an estimate
+        }
+        private class KillVMThread extends Thread {
+            long delay;
+           /** Thread that inherits its daemon status from main thread */
+           public KillVMThread(long delay) {
+               super("killVM");
+                this.delay = delay;
+            }
+           public void run() {
+                try {
+                    Thread.sleep(delay);
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                }
+                System.exit(0);
+           }
+        }//end class KillVMThread
+    }//end class KillVMObjectImpl
+
+} //end class KillVMUtil
+
+

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LeaseUsesTestBase.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LeaseUsesTestBase.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LeaseUsesTestBase.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LeaseUsesTestBase.java
 Sun Oct 26 13:17:28 2014
@@ -1,258 +1,260 @@
-/*
- * 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.share;
-
-import java.util.logging.Level;
-
-// Test harness specific classes
-import com.sun.jini.qa.harness.TestException;
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.Test;
-
-import java.rmi.*;
-import net.jini.core.lease.Lease;
-
-
-/**
- * Base class for tests which acquire some resource under a lease and
- * then use until the lease expires. Also tests to see if the lease
- * has the appropriate duration.  Have variations that cancel and/or
- * renew the lease.
- */
-public abstract class LeaseUsesTestBase extends LeaseGrantTestBase {
-    /**
-     * Lease being used
-     */
-    protected volatile Lease lease = null;
-
-    // Time lease will expire
-    private volatile long expTime;
-
-    // Time lease of lease duration
-    private volatile long durTime;
-
-    // How long until the lease should be renewed
-    private volatile long renewTime;
-
-    // What to set renewTime to, if < 0 the half of duration
-    private volatile long renewWait;
-
-    // Time to let cancel to propgate
-    private volatile long cancelSlop;
-
-    // Set renew and exp times
-    private void setTimes() {
-       final long curTime = System.currentTimeMillis();
-
-       expTime = lease.getExpiration();
-       durTime = expTime - curTime;
-       
-       if (renewWait < 0)
-           renewTime = expTime - durTime / 2;
-       else
-           renewTime = renewWait + curTime;
-    }
-
-    protected volatile long renewals = 0;
-    protected volatile boolean cancel;
-    protected volatile long shutdownTime = -1;
-    protected volatile long restartSleep = 10000;
-
-    /** 
-     * Method should acquire some resource under a lease and return
-     * the Lease.  Note the returned value will be stored in
-     * the <code>lease</code> field
-     * @see LeaseUsesTestBase#lease
-     */
-    protected abstract Lease acquireResource() throws TestException;
-
-    /**
-     * Method should test to see if the resource acquired by
-     * acquireResource() is still available, returning
-     * <code>true</code> if is and <code>false</code> if it is not. 
-     * If some other exception occurs the method should call fail
-     */
-    protected abstract boolean isAvailable() throws TestException;
-
-    /**
-     * Parse our args
-     * <DL>
-     *
-     * <DT>-cancel<DD> Makes the test run the cancel variation of the
-     * test where the lease is canceled before it expires.
-     *
-     * <DT>-renew <var>int</var><DD> Renew the lease <var>int</var>
-     * times using the initial duration befor letting it expire or
-     * canceling it.  Defaults to 0 (no renewals.) 
-     *
-     * <DT>-cancel_slop <var>int</var><DD> Allow for a leased resource
-     * to disappear up to <var>int</var> milliseconds after cancel is
-     * called.  Provided for tests that don't directly test resource
-     * availability, most tests should not use this option. Defaults to
-     * 0.
-     * </DL> */
-    protected void parse() throws Exception {
-       super.parse();
-
-       renewals = getConfig().getIntConfigVal("com.sun.jini.test.share.renew", 
0);
-       cancel = 
getConfig().getBooleanConfigVal("com.sun.jini.test.share.cancel", false);
-       renewWait = 
getConfig().getLongConfigVal("com.sun.jini.test.share.renew_wait", -1);
-       shutdownTime = 
getConfig().getLongConfigVal("com.sun.jini.test.share.shutdownTime", -1);
-       restartSleep = 
getConfig().getLongConfigVal("com.sun.jini.test.share.restartSleep", 10000);
-       cancelSlop = 
getConfig().getLongConfigVal("com.sun.jini.test.share.cancel_slop", 0);
-    }
-
-    public Test construct(QAConfig config) throws Exception {
-       super.construct(config);
-       parse();
-        return this;
-    }
-
-    public void run() throws Exception {
-       lease = acquireResource(); 
-       addLease(lease, true);
-       setTimes();
-
-       if (shutdownTime > 0) {
-           final long curTime = System.currentTimeMillis();
-           shutdownTime = curTime + shutdownTime;
-       }
-
-       logger.log(Level.INFO, "Resource acquired");
-       logRequest("resource", lease);
-
-       if (!isAcceptable(lease))
-           throw new TestException("Lease had an improper duration");
-
-       if (cancel && renewals <= 0) {
-           cancel();
-       } else {
-           logger.log(Level.INFO, "Expire Test: Slop = {0}", slop);
-           while (true) {
-               // We measure the time twice so propagation delays do
-               // not cause the test to fail.  The test only fails on
-               // availability if:
-               //
-               //    Before the check was made the lease had expired,
-               //    but the resource was still available, or;
-               //
-               //    after the check was made the lease had not
-               //    expired but the resource was unavailable.
-               //
-               // In both cases modulo slop.
-               //
-               // This eliminates the possibility of the test failing
-               // because the service rightfully believes the
-               // resource is available, but propagation delays cause
-               // isAvailable to return after expiration, or because
-               // isAvaialable is called before expiration, but
-               // because of propagation delays the service thinks
-               // the resource is unavailable.
-
-               final long preTime = System.currentTimeMillis();
-               final boolean stillThere = isAvailable();
-
-               // We also use postTime as an approximation of the 
-               // current time for the remainder of this iteration
-               final long postTime = System.currentTimeMillis();
-
-               // Check for late expiration against preTime
-               // postTime - slop elemnates overflow problems when
-               // expTime == FOREVER
-               if (stillThere && (preTime - slop > expTime))
-                   throw new TestException("Resource was available after lease 
expiration");
-
-               // Check for early expiration against postTime
-               if (!stillThere && (postTime < expTime - slop))
-                   throw new TestException("Resource was not available before 
lease expiration");
-
-               if (!stillThere) break;
-               // No use testing once it is gone
-
-               // Do we need to renew
-               if (renewals > 0 && postTime > renewTime) {
-                   try {
-                       lease.renew(durationRequest);
-                       resourceRequested();
-                   } catch (Exception e) {
-                       throw new TestException("Could not renew lease:" + 
e.getMessage());
-                   }
-                   setTimes();
-                   logRequest("renew", lease);
-
-                   if (!isAcceptable(lease))
-                       throw new TestException("Renewed lease had an improper 
duration");
-                    synchronized (this){
-                        renewals--;
-                    }
-               } else if (renewals == 0 && cancel) {
-                   cancel();
-                   // If we are here the cancel worked, need to break
-                   // so we don't see if it is there (which it won't be) 
-                   // and fail the test
-                   break;
-               } else if (shutdownTime > 0 && shutdownTime < postTime) {
-                   try {
-                       shutdownTime = -1; // Oneshot
-                       shutdown(0, restartSleep);
-                   } catch (InterruptedException e) {
-                       // Should never happen, and if it does we don't care
-                   } catch (Throwable e) {
-                       throw new TestException("Shutdown Failed:" + 
e.getMessage());
-                   }
-               }
-           }
-       }
-    }
-
-    private void cancel() throws TestException {
-       // Make sure the resource is there
-       logger.log(Level.INFO, "Cancel Test: checking for availability");
-       if (!isAvailable())
-           throw new TestException("Resource was never available");
-       
-       try {
-           logger.log(Level.INFO, "Cancel Test: canceling lease");
-           lease.cancel();
-       } catch (Exception e) {
-           throw new TestException("Could not cancel lease", e);
-       }
-
-       // We could poll and loop here, but one big sleep is much
-       // easer to code
-       if (cancelSlop > 0) {
-           try {
-               logger.log(Level.INFO, "Sleeping for {0}" +
-                         " milliseconds to " + "allow cancel to propagate... 
time:{1}", new Object[]{cancelSlop, System.currentTimeMillis()});
-               Thread.sleep(cancelSlop);
-               logger.log(Level.INFO, "awake ... time:{0}", 
System.currentTimeMillis());
-                
-           } catch (InterruptedException e) {
-               // Should not happen
-               throw new TestException("Cancel slop sleep interupted!");
-           }
-       }
-       
-       logger.log(Level.INFO, "Cancel Test: checking to make sure resource "+
-                   "is gone");
-       if (isAvailable())
-           throw new TestException("Resource was available after cancel");
-    }
-}
-
-
+/*
+ * 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.share;
+
+import java.util.logging.Level;
+
+// Test harness specific classes
+import com.sun.jini.qa.harness.TestException;
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.Test;
+
+import java.rmi.*;
+import net.jini.core.lease.Lease;
+
+
+/**
+ * Base class for tests which acquire some resource under a lease and
+ * then use until the lease expires. Also tests to see if the lease
+ * has the appropriate duration.  Have variations that cancel and/or
+ * renew the lease.
+ */
+public abstract class LeaseUsesTestBase extends LeaseGrantTestBase {
+    /**
+     * Lease being used
+     */
+    protected volatile Lease lease = null;
+
+    // Time lease will expire
+    private volatile long expTime;
+
+    // Time lease of lease duration
+    private volatile long durTime;
+
+    // How long until the lease should be renewed
+    private volatile long renewTime;
+
+    // What to set renewTime to, if < 0 the half of duration
+    private volatile long renewWait;
+
+    // Time to let cancel to propgate
+    private volatile long cancelSlop;
+
+    // Set renew and exp times
+    private void setTimes() {
+       final long curTime = System.currentTimeMillis();
+
+       expTime = lease.getExpiration();
+       durTime = expTime - curTime;
+       
+       if (renewWait < 0)
+           renewTime = expTime - durTime / 2;
+       else
+           renewTime = renewWait + curTime;
+    }
+
+    protected volatile long renewals = 0;
+    protected volatile boolean cancel;
+    protected volatile long shutdownTime = -1;
+    protected volatile long restartSleep = 10000;
+
+    /** 
+     * Method should acquire some resource under a lease and return
+     * the Lease.  Note the returned value will be stored in
+     * the <code>lease</code> field
+     * @see LeaseUsesTestBase#lease
+     */
+    protected abstract Lease acquireResource() throws TestException;
+
+    /**
+     * Method should test to see if the resource acquired by
+     * acquireResource() is still available, returning
+     * <code>true</code> if is and <code>false</code> if it is not. 
+     * If some other exception occurs the method should call fail
+     */
+    protected abstract boolean isAvailable() throws TestException;
+
+    /**
+     * Parse our args
+     * <DL>
+     *
+     * <DT>-cancel<DD> Makes the test run the cancel variation of the
+     * test where the lease is canceled before it expires.
+     *
+     * <DT>-renew <var>int</var><DD> Renew the lease <var>int</var>
+     * times using the initial duration befor letting it expire or
+     * canceling it.  Defaults to 0 (no renewals.) 
+     *
+     * <DT>-cancel_slop <var>int</var><DD> Allow for a leased resource
+     * to disappear up to <var>int</var> milliseconds after cancel is
+     * called.  Provided for tests that don't directly test resource
+     * availability, most tests should not use this option. Defaults to
+     * 0.
+     * </DL> */
+    protected void parse() throws Exception {
+       super.parse();
+
+       renewals = getConfig().getIntConfigVal("com.sun.jini.test.share.renew", 
0);
+       cancel = 
getConfig().getBooleanConfigVal("com.sun.jini.test.share.cancel", false);
+       renewWait = 
getConfig().getLongConfigVal("com.sun.jini.test.share.renew_wait", -1);
+       shutdownTime = 
getConfig().getLongConfigVal("com.sun.jini.test.share.shutdownTime", -1);
+       restartSleep = 
getConfig().getLongConfigVal("com.sun.jini.test.share.restartSleep", 10000);
+       cancelSlop = 
getConfig().getLongConfigVal("com.sun.jini.test.share.cancel_slop", 0);
+    }
+
+    public Test construct(QAConfig config) throws Exception {
+       super.construct(config);
+       parse();
+        return this;
+    }
+
+    public void run() throws Exception {
+       lease = acquireResource(); 
+       addLease(lease, true);
+       setTimes();
+
+       if (shutdownTime > 0) {
+           final long curTime = System.currentTimeMillis();
+           shutdownTime = curTime + shutdownTime;
+       }
+
+       logger.log(Level.INFO, "Resource acquired");
+       logRequest("resource", lease);
+
+       if (!isAcceptable(lease))
+           throw new TestException("Lease had an improper duration");
+
+       if (cancel && renewals <= 0) {
+           cancel();
+       } else {
+           logger.log(Level.INFO, "Expire Test: Slop = {0}", slop);
+           while (true) {
+               // We measure the time twice so propagation delays do
+               // not cause the test to fail.  The test only fails on
+               // availability if:
+               //
+               //    Before the check was made the lease had expired,
+               //    but the resource was still available, or;
+               //
+               //    after the check was made the lease had not
+               //    expired but the resource was unavailable.
+               //
+               // In both cases modulo slop.
+               //
+               // This eliminates the possibility of the test failing
+               // because the service rightfully believes the
+               // resource is available, but propagation delays cause
+               // isAvailable to return after expiration, or because
+               // isAvaialable is called before expiration, but
+               // because of propagation delays the service thinks
+               // the resource is unavailable.
+
+               final long preTime = System.currentTimeMillis();
+               final boolean stillThere = isAvailable();
+
+               // We also use postTime as an approximation of the 
+               // current time for the remainder of this iteration
+               final long postTime = System.currentTimeMillis();
+
+               // Check for late expiration against preTime
+               // postTime - slop elemnates overflow problems when
+               // expTime == FOREVER
+               if (stillThere && (preTime - slop > expTime))
+                   throw new TestException("Resource was available after lease 
expiration");
+
+               // Check for early expiration against postTime
+               if (!stillThere && (postTime < expTime - slop))
+                   throw new TestException("Resource was not available before 
lease expiration");
+
+               if (!stillThere) break;
+               // No use testing once it is gone
+
+               // Do we need to renew
+               if (renewals > 0 && postTime > renewTime) {
+                   try {
+                       lease.renew(durationRequest);
+                       resourceRequested();
+                   } catch (Exception e) {
+                       throw new TestException("Could not renew lease:" + 
e.getMessage());
+                   }
+                   setTimes();
+                   logRequest("renew", lease);
+
+                   if (!isAcceptable(lease))
+                       throw new TestException("Renewed lease had an improper 
duration");
+                    synchronized (this){
+                        renewals--;
+                    }
+               } else if (renewals == 0 && cancel) {
+                   cancel();
+                   // If we are here the cancel worked, need to break
+                   // so we don't see if it is there (which it won't be) 
+                   // and fail the test
+                   break;
+               } else if (shutdownTime > 0 && shutdownTime < postTime) {
+                   try {
+                       shutdownTime = -1; // Oneshot
+                       shutdown(0, restartSleep);
+                   } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                       // Should never happen, and if it does we don't care
+                   } catch (Throwable e) {
+                       throw new TestException("Shutdown Failed:" + 
e.getMessage());
+                   }
+               }
+           }
+       }
+    }
+
+    private void cancel() throws TestException {
+       // Make sure the resource is there
+       logger.log(Level.INFO, "Cancel Test: checking for availability");
+       if (!isAvailable())
+           throw new TestException("Resource was never available");
+       
+       try {
+           logger.log(Level.INFO, "Cancel Test: canceling lease");
+           lease.cancel();
+       } catch (Exception e) {
+           throw new TestException("Could not cancel lease", e);
+       }
+
+       // We could poll and loop here, but one big sleep is much
+       // easer to code
+       if (cancelSlop > 0) {
+           try {
+               logger.log(Level.INFO, "Sleeping for {0}" +
+                         " milliseconds to " + "allow cancel to propagate... 
time:{1}", new Object[]{cancelSlop, System.currentTimeMillis()});
+               Thread.sleep(cancelSlop);
+               logger.log(Level.INFO, "awake ... time:{0}", 
System.currentTimeMillis());
+                
+           } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+               // Should not happen
+               throw new TestException("Cancel slop sleep interupted!");
+           }
+       }
+       
+       logger.log(Level.INFO, "Cancel Test: checking to make sure resource "+
+                   "is gone");
+       if (isAvailable())
+           throw new TestException("Resource was available after cancel");
+    }
+}
+
+

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupTestBase.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupTestBase.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupTestBase.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/share/LookupTestBase.java
 Sun Oct 26 13:17:28 2014
@@ -1,174 +1,175 @@
-/*
- * 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.share;
-
-import com.sun.jini.qa.harness.Test;
-import java.util.logging.Level;
-
-// Test harness specific classes
-import java.rmi.*;
-import com.sun.jini.qa.harness.TestException;
-
-import net.jini.admin.Administrable;
-import net.jini.admin.JoinAdmin;
-
-import net.jini.space.JavaSpace;
-import net.jini.lease.LeaseRenewalService;
-import net.jini.core.transaction.server.TransactionManager;
-
-
-/**
- * Base class for tests that thest JoinAdmin related functionality
- */
-public abstract class LookupTestBase extends TestBase implements Test {
-    protected Object    service;
-    protected Object    admin;
-
-    protected boolean activatable;
-    protected boolean tryShutdown;
-    protected boolean noCleanup;
-
-    /** Return true if for every elemet in <code>a1</code> there is an
-        element that is <code>equal()</code> in <code>a2</code> and vis-versa
-    */
-    protected boolean arraysEqual(Object[] a1, Object[] a2) {
-       if (a1.length != a2.length)
-           return false;
-
-       for (int i=0; i<a1.length; i++) {
-           int j;
-           for (j=0; j<a2.length; j++)
-               if (a1[i].equals(a2[j]))
-                   break;
-           if (j == a2.length)
-               // element in a1 that was not in a2
-               return false;
-       }
-
-       // Because they are of equal length if all elements in a1 are
-       // in a2, all elements of a2 must be in a1
-       return true;
-    }
-
-    /**
-     * Dump all of the elements in <code>objects</code> to the log.
-     */
-    protected void dumpArray(Object[] objects, String separator) {
-       if (objects == null) {
-           logger.log(Level.INFO, "<array==null>");
-           return;
-       }
-
-       if (objects.length == 0) {
-           logger.log(Level.INFO, "<array.length==0>");
-           return;
-       }
-
-       for (int i=0; i<objects.length; i++) {
-           logger.log(Level.INFO, "\"" + objects[i] + "\"");
-           if (i != (objects.length - 1))
-               logger.log(Level.INFO, separator);
-       }
-
-       logger.log(Level.INFO, "");
-    }
-
-    /**
-     * Dump all of the join admin state in the passed object
-     */
-    protected void dumpJoinState(JoinAdmin joinAdmin)
-       throws RemoteException
-    {
-       logger.log(Level.INFO, "getLookupAttributes():\n\t");
-       dumpArray(joinAdmin.getLookupAttributes(), "\n\t");
-
-       logger.log(Level.INFO, "getLookupGroups():");
-       dumpArray(joinAdmin.getLookupGroups(), ",");
-
-       logger.log(Level.INFO, "getLookupLocators():");
-       dumpArray(joinAdmin.getLookupLocators(), ",");
-    }
-
-    /**
-     * sleep for <code>dur</code> milliseconds ignoring all
-     * InterruptedExceptions
-     */
-    protected void sleep(long dur) {
-       try {
-           Thread.sleep(dur);
-       } catch (InterruptedException e) {
-       }
-    }
-
-    /**
-     * Attempt to shut down <code>service</code>
-     */
-    protected void shutdown() throws Exception {
-       shutdown(0);
-    }
-
-    /**
-     * Parse command line args
-     * <DL>
-     * <DT>-notActivatable <DD> Should be used if the service
-     * undertest is not activatable
-     *
-     * <DT>-tryShutdown<DD> If used the test will attempt to shutdown
-     * the service and restart it (if it is activatable) and check to
-     * ensure the service's JoinAdmin state is persistent.
-     *
-     * <DT>-noCleanup<DD> The lookup tests change the various join
-     * admin atributs and then set them back to their orignal values
-     * after thay are done.  If <code>-noCleanup</code> is used the
-     * test will not perform this restoration.
-     * </DL>
-     */
-    protected void parse() throws Exception {
-       super.parse();
-
-       activatable = 
!getConfig().getBooleanConfigVal("com.sun.jini.test.share.notActivatable", 
false);
-       tryShutdown = 
getConfig().getBooleanConfigVal("com.sun.jini.test.share.tryShutdown", false);
-       noCleanup   = 
getConfig().getBooleanConfigVal("com.sun.jini.test.share.noCleanup", false);
-    }
-
-    protected void init() throws TestException {
-       specifyServices(new Class[]{Administrable.class});
-       service = services[0];
-       String preparerName = null;
-       if (service instanceof JavaSpace) {
-           preparerName = "test.outriggerAdminPreparer";
-       } else if (service instanceof LeaseRenewalService) {
-           preparerName = "test.normAdminPreparer";
-        } else if (service instanceof TransactionManager) {
-           preparerName = "test.mahaloAdminPreparer";
-       } else {
-           throw new TestException("Unexpected service: " + service);
-       }
-       try {
-           admin = ((Administrable)service).getAdmin();
-           admin = getConfig().prepare(preparerName, admin);
-       } catch (Throwable t) {
-           setupFailure("Could not get admin from " + service, t);
-       }
-    }
-
-}
-
-
-
+/*
+ * 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.share;
+
+import com.sun.jini.qa.harness.Test;
+import java.util.logging.Level;
+
+// Test harness specific classes
+import java.rmi.*;
+import com.sun.jini.qa.harness.TestException;
+
+import net.jini.admin.Administrable;
+import net.jini.admin.JoinAdmin;
+
+import net.jini.space.JavaSpace;
+import net.jini.lease.LeaseRenewalService;
+import net.jini.core.transaction.server.TransactionManager;
+
+
+/**
+ * Base class for tests that thest JoinAdmin related functionality
+ */
+public abstract class LookupTestBase extends TestBase implements Test {
+    protected Object    service;
+    protected Object    admin;
+
+    protected boolean activatable;
+    protected boolean tryShutdown;
+    protected boolean noCleanup;
+
+    /** Return true if for every elemet in <code>a1</code> there is an
+        element that is <code>equal()</code> in <code>a2</code> and vis-versa
+    */
+    protected boolean arraysEqual(Object[] a1, Object[] a2) {
+       if (a1.length != a2.length)
+           return false;
+
+       for (int i=0; i<a1.length; i++) {
+           int j;
+           for (j=0; j<a2.length; j++)
+               if (a1[i].equals(a2[j]))
+                   break;
+           if (j == a2.length)
+               // element in a1 that was not in a2
+               return false;
+       }
+
+       // Because they are of equal length if all elements in a1 are
+       // in a2, all elements of a2 must be in a1
+       return true;
+    }
+
+    /**
+     * Dump all of the elements in <code>objects</code> to the log.
+     */
+    protected void dumpArray(Object[] objects, String separator) {
+       if (objects == null) {
+           logger.log(Level.INFO, "<array==null>");
+           return;
+       }
+
+       if (objects.length == 0) {
+           logger.log(Level.INFO, "<array.length==0>");
+           return;
+       }
+
+       for (int i=0; i<objects.length; i++) {
+           logger.log(Level.INFO, "\"" + objects[i] + "\"");
+           if (i != (objects.length - 1))
+               logger.log(Level.INFO, separator);
+       }
+
+       logger.log(Level.INFO, "");
+    }
+
+    /**
+     * Dump all of the join admin state in the passed object
+     */
+    protected void dumpJoinState(JoinAdmin joinAdmin)
+       throws RemoteException
+    {
+       logger.log(Level.INFO, "getLookupAttributes():\n\t");
+       dumpArray(joinAdmin.getLookupAttributes(), "\n\t");
+
+       logger.log(Level.INFO, "getLookupGroups():");
+       dumpArray(joinAdmin.getLookupGroups(), ",");
+
+       logger.log(Level.INFO, "getLookupLocators():");
+       dumpArray(joinAdmin.getLookupLocators(), ",");
+    }
+
+    /**
+     * sleep for <code>dur</code> milliseconds ignoring all
+     * InterruptedExceptions
+     */
+    protected void sleep(long dur) {
+       try {
+           Thread.sleep(dur);
+       } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+       }
+    }
+
+    /**
+     * Attempt to shut down <code>service</code>
+     */
+    protected void shutdown() throws Exception {
+       shutdown(0);
+    }
+
+    /**
+     * Parse command line args
+     * <DL>
+     * <DT>-notActivatable <DD> Should be used if the service
+     * undertest is not activatable
+     *
+     * <DT>-tryShutdown<DD> If used the test will attempt to shutdown
+     * the service and restart it (if it is activatable) and check to
+     * ensure the service's JoinAdmin state is persistent.
+     *
+     * <DT>-noCleanup<DD> The lookup tests change the various join
+     * admin atributs and then set them back to their orignal values
+     * after thay are done.  If <code>-noCleanup</code> is used the
+     * test will not perform this restoration.
+     * </DL>
+     */
+    protected void parse() throws Exception {
+       super.parse();
+
+       activatable = 
!getConfig().getBooleanConfigVal("com.sun.jini.test.share.notActivatable", 
false);
+       tryShutdown = 
getConfig().getBooleanConfigVal("com.sun.jini.test.share.tryShutdown", false);
+       noCleanup   = 
getConfig().getBooleanConfigVal("com.sun.jini.test.share.noCleanup", false);
+    }
+
+    protected void init() throws TestException {
+       specifyServices(new Class[]{Administrable.class});
+       service = services[0];
+       String preparerName = null;
+       if (service instanceof JavaSpace) {
+           preparerName = "test.outriggerAdminPreparer";
+       } else if (service instanceof LeaseRenewalService) {
+           preparerName = "test.normAdminPreparer";
+        } else if (service instanceof TransactionManager) {
+           preparerName = "test.mahaloAdminPreparer";
+       } else {
+           throw new TestException("Unexpected service: " + service);
+       }
+       try {
+           admin = ((Administrable)service).getAdmin();
+           admin = getConfig().prepare(preparerName, admin);
+       } catch (Throwable t) {
+           setupFailure("Could not get admin from " + service, t);
+       }
+    }
+
+}
+
+
+


Reply via email to