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 [12/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/norm/OneExpireOneNotTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/norm/OneExpireOneNotTest.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/norm/OneExpireOneNotTest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/norm/OneExpireOneNotTest.java Sun Oct 26 13:17:28 2014
@@ -1,253 +1,254 @@
-/*
- * 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.norm;
-
-import java.util.logging.Level;
-
-import java.io.PrintWriter;
-
-import java.rmi.RemoteException;
-
-import net.jini.core.lease.Lease;
-
-import net.jini.lease.LeaseRenewalService;
-import net.jini.lease.LeaseRenewalSet;
-
-import com.sun.jini.qa.harness.TestException;
-import com.sun.jini.qa.harness.QAConfig;
-
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.QATestEnvironment;
-import com.sun.jini.qa.harness.Test;
-
-import com.sun.jini.test.share.LeaseBackEndImpl;
-import com.sun.jini.test.share.LeaseOwner;
-import com.sun.jini.test.share.ForeverOwner;
-import com.sun.jini.test.share.TrackingOwner;
-
-/**
- * Try to make sure that client leases associated with a set that has
- * expired do not affect client leases in a set that has not expired.
- * Create two sets and a number of leases that can be batched together
- * and expire at the same time as the sets.  Place half the leases in
- * one set and half in the other.  Let one set expire.  Make sure that
- * leases in the expired set don't get renewed after the set expires,
- * and that the other leases don't expire.
- */
-public class OneExpireOneNotTest extends QATestEnvironment implements Test {
-    /** The service under test */
-    private LeaseRenewalService lrs;
-
-    /** the name of service for which these test are written */
-    static protected final String SERVICE_NAME =
-	"net.jini.lease.LeaseRenewalService";
-
-    /** How long a lease to get on the expiring set */
-    private long setDuration = 0;
-
-    /** The time allowed for network transfers to take place  */
-    private long latencySlop = 0;
-
-    /** The maximum time granted for a lease by a renew operation.  */
-    private long renewGrant = 0;
-
-    /** Numbe of client leases to create */
-    private int leaseCount = 0;
-
-    /**
-     * Sets up the testing environment.
-     */
-    public Test construct(QAConfig sysConfig) throws Exception {
-
-       // mandatory call to parent
-       super.construct(sysConfig);
-	
-       // output the name of this test
-       logger.log(Level.FINE, "Test Name = " + this.getClass().getName());
-	
-       // Announce where we are in the test
-       logger.log(Level.FINE, "OneExpireOneNotTest:In setup() method.");
-
-       // capture an instance of the Properties file.
-       QAConfig config = (QAConfig)getConfig();
-
-       String property = "com.sun.jini.test.impl.norm.setDuration";
-       setDuration = getConfig().getLongConfigVal(property, 120000);
-
-       property = "com.sun.jini.test.impl.norm.renewGrant";
-       renewGrant = getConfig().getLongConfigVal(property, 30000);
-
-       property = "com.sun.jini.test.impl.norm.leaseCount";
-       leaseCount = getConfig().getIntConfigVal(property, 40);
-       // Make leaseCount event so filling the sets is easer
-       if (leaseCount % 2 != 0) 
-	   leaseCount++;
-
-       // capture the max time allowed for network transfer
-       property = "com.sun.jini.test.impl.norm.latencySlop";
-       latencySlop = getConfig().getLongConfigVal(property, 2000);
-
-       // Get an LRS
-       logger.log(Level.FINE, "Getting a " + SERVICE_NAME);
-       lrs = (LeaseRenewalService)getManager().startService(SERVICE_NAME);
-       return this;
-    }
-
-    public void run() throws Exception {
-	// Announce where we are in the test
-	logger.log(Level.FINE, "OneExpireOneNotTest: In run() method.");
-
-	long setCreation = System.currentTimeMillis();
-	LeaseRenewalSet setExpire = lrs.createLeaseRenewalSet(setDuration);
-	setExpire = prepareSet(setExpire);
-	logger.log(Level.FINE, "OneExpireOneNotTest: Expire set created");
-	LeaseRenewalSet setKeep = lrs.createLeaseRenewalSet(Lease.FOREVER);
-	setKeep = prepareSet(setKeep);
-	Lease expsLease = setExpire.getRenewalSetLease();
-        expsLease = (Lease) getConfig().prepare(
-            "test.normLeasePreparer", expsLease);
-
-	final LeaseBackEndImpl backend = new LeaseBackEndImpl(leaseCount);
-        backend.export();
-
-	for (int i=0; i<leaseCount; i+=2) {
-	    long initExpiration = System.currentTimeMillis() + renewGrant;
-	    LeaseOwner o = new ForeverOwner(initExpiration, renewGrant,
-	        latencySlop, Lease.FOREVER, this, true, getConfig());
-	    Lease l = backend.newLease(o, initExpiration);
-	    setKeep.renewFor(l, Lease.FOREVER);
-
-	    initExpiration = System.currentTimeMillis() + renewGrant;
-	    o = new ExpiryOwner(initExpiration, renewGrant,
-	        latencySlop, Lease.FOREVER, this, true, getConfig(), expsLease);
-	    l = backend.newLease(o, initExpiration);
-	    long delta = System.currentTimeMillis() - setCreation;
-	    System.out.println("Delta => " + delta);
-	    setExpire.renewFor(l, Lease.FOREVER);
-	}
-
-	// Sleep until the first lease expires + its initial length, or we 
-	// detect a failure
-	synchronized (this) {
-	    while (true) {
-		LeaseOwner[] owners = backend.getOwners();
-
-		// See if there have been any failures
-		for (int i=0; i<owners.length; i++) {
-		    final TrackingOwner owner = (TrackingOwner)owners[i];
-		    final String rslt = owner.didPass();
-		    if (rslt != null) {
-			throw new TestException( rslt);
-		    }
-		}
-
-		final long now = System.currentTimeMillis();
-
-		// If we have waited long enough break
-		if (now - expsLease.getExpiration() >= setDuration)
-		    break;
-
-		try {
-		    wait(expsLease.getExpiration() - now + setDuration);
-		} catch (InterruptedException e) {
-		    throw new TestException(
-			"Unexpected InterruptedException.");
-		}
-	    }
-	}
-    }
-
-    /**
-     * Subclass of forever owner that makes sure that the set
-     * containing the owned lease has not expired
-     */
-    private class ExpiryOwner extends ForeverOwner {
-
-	/** Lease of the set containing the lease we own */
-	final private Lease renewalSetLease;
-
-	/** 
-	 * Simple constructor 
-	 * @param initialExpiration Initial expiration time for lease.
-	 * @param maxExtension Maximum time this owner will be willing to extend 
-	 *                     the lease
-	 * @param slop Allowable variance from desired expiration when making a
-	 *             renewal request.
-	 * @param desiredRenewal
-	 *             Expect value of the renewDuration parameter
-	 * @param notifyOnFailure
-	 *             Object to notify if there is a failure
-	 * @param isTwoArg Should the assocated lease be registered
-	 *             with the one or two arg form
-	 * @param util QA harnss utility object
-	 * @param renewalSetLease The lease of the renewal set the
-	 *                        lease we are an owner of will be placed in
-	 */
-	public ExpiryOwner(long initialExpiration, long maxExtension,
-	    long slop, long desiredRenewal, Object notifyOnFailure,
-	    boolean isTwoArg, QAConfig config, Lease renewalSetLease) 
-	{
-	    super(initialExpiration, maxExtension, 
-		  slop, desiredRenewal, notifyOnFailure, isTwoArg, config);
-	    this.renewalSetLease = renewalSetLease;
-	}
-
-	// Inherit java doc from super type
-	protected boolean isValidExtension(long extension) {
-	    // Check to make sure the set has not expired
-            boolean t = false;
-            synchronized (this){
-                t = now - slop > renewalSetLease.getExpiration();
-            }
-            if (t) {
-                // The set has expired, this renewal should not
-                // be happending
-                setRsltIfNeeded("Expire Owner:LRS asked for a renewal " +
-                                "after renewal set expiration!");
-                return false;
-            }
-	    return super.isValidExtension(extension);
-	}
-	
-	/**
-	 * Override to not flag a failure if the lease we own has
-	 * expired and the the set's lease has as well.
-	 */
-	public synchronized String didPass() {
-	    final String rslt = getRslt();
-	    if (rslt != null) 
-		return rslt;
-	    
-	    final long now = System.currentTimeMillis();
-	    
-	    if (renewalSetLease.getExpiration() < now) {
-		// We don't care it our lease has expired or not
-		return null;
-	    }
-
-	    return super.didPass();
-	}
-    }
-
-    protected LeaseRenewalSet prepareSet(LeaseRenewalSet set) 
-        throws TestException
-    {
-	Object s = getConfig().prepare("test.normRenewalSetPreparer", set);
-	return (LeaseRenewalSet) s;
-    }
-}
+/*
+ * 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.norm;
+
+import java.util.logging.Level;
+
+import java.io.PrintWriter;
+
+import java.rmi.RemoteException;
+
+import net.jini.core.lease.Lease;
+
+import net.jini.lease.LeaseRenewalService;
+import net.jini.lease.LeaseRenewalSet;
+
+import com.sun.jini.qa.harness.TestException;
+import com.sun.jini.qa.harness.QAConfig;
+
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.QATestEnvironment;
+import com.sun.jini.qa.harness.Test;
+
+import com.sun.jini.test.share.LeaseBackEndImpl;
+import com.sun.jini.test.share.LeaseOwner;
+import com.sun.jini.test.share.ForeverOwner;
+import com.sun.jini.test.share.TrackingOwner;
+
+/**
+ * Try to make sure that client leases associated with a set that has
+ * expired do not affect client leases in a set that has not expired.
+ * Create two sets and a number of leases that can be batched together
+ * and expire at the same time as the sets.  Place half the leases in
+ * one set and half in the other.  Let one set expire.  Make sure that
+ * leases in the expired set don't get renewed after the set expires,
+ * and that the other leases don't expire.
+ */
+public class OneExpireOneNotTest extends QATestEnvironment implements Test {
+    /** The service under test */
+    private LeaseRenewalService lrs;
+
+    /** the name of service for which these test are written */
+    static protected final String SERVICE_NAME =
+	"net.jini.lease.LeaseRenewalService";
+
+    /** How long a lease to get on the expiring set */
+    private long setDuration = 0;
+
+    /** The time allowed for network transfers to take place  */
+    private long latencySlop = 0;
+
+    /** The maximum time granted for a lease by a renew operation.  */
+    private long renewGrant = 0;
+
+    /** Numbe of client leases to create */
+    private int leaseCount = 0;
+
+    /**
+     * Sets up the testing environment.
+     */
+    public Test construct(QAConfig sysConfig) throws Exception {
+
+       // mandatory call to parent
+       super.construct(sysConfig);
+	
+       // output the name of this test
+       logger.log(Level.FINE, "Test Name = " + this.getClass().getName());
+	
+       // Announce where we are in the test
+       logger.log(Level.FINE, "OneExpireOneNotTest:In setup() method.");
+
+       // capture an instance of the Properties file.
+       QAConfig config = (QAConfig)getConfig();
+
+       String property = "com.sun.jini.test.impl.norm.setDuration";
+       setDuration = getConfig().getLongConfigVal(property, 120000);
+
+       property = "com.sun.jini.test.impl.norm.renewGrant";
+       renewGrant = getConfig().getLongConfigVal(property, 30000);
+
+       property = "com.sun.jini.test.impl.norm.leaseCount";
+       leaseCount = getConfig().getIntConfigVal(property, 40);
+       // Make leaseCount event so filling the sets is easer
+       if (leaseCount % 2 != 0) 
+	   leaseCount++;
+
+       // capture the max time allowed for network transfer
+       property = "com.sun.jini.test.impl.norm.latencySlop";
+       latencySlop = getConfig().getLongConfigVal(property, 2000);
+
+       // Get an LRS
+       logger.log(Level.FINE, "Getting a " + SERVICE_NAME);
+       lrs = (LeaseRenewalService)getManager().startService(SERVICE_NAME);
+       return this;
+    }
+
+    public void run() throws Exception {
+	// Announce where we are in the test
+	logger.log(Level.FINE, "OneExpireOneNotTest: In run() method.");
+
+	long setCreation = System.currentTimeMillis();
+	LeaseRenewalSet setExpire = lrs.createLeaseRenewalSet(setDuration);
+	setExpire = prepareSet(setExpire);
+	logger.log(Level.FINE, "OneExpireOneNotTest: Expire set created");
+	LeaseRenewalSet setKeep = lrs.createLeaseRenewalSet(Lease.FOREVER);
+	setKeep = prepareSet(setKeep);
+	Lease expsLease = setExpire.getRenewalSetLease();
+        expsLease = (Lease) getConfig().prepare(
+            "test.normLeasePreparer", expsLease);
+
+	final LeaseBackEndImpl backend = new LeaseBackEndImpl(leaseCount);
+        backend.export();
+
+	for (int i=0; i<leaseCount; i+=2) {
+	    long initExpiration = System.currentTimeMillis() + renewGrant;
+	    LeaseOwner o = new ForeverOwner(initExpiration, renewGrant,
+	        latencySlop, Lease.FOREVER, this, true, getConfig());
+	    Lease l = backend.newLease(o, initExpiration);
+	    setKeep.renewFor(l, Lease.FOREVER);
+
+	    initExpiration = System.currentTimeMillis() + renewGrant;
+	    o = new ExpiryOwner(initExpiration, renewGrant,
+	        latencySlop, Lease.FOREVER, this, true, getConfig(), expsLease);
+	    l = backend.newLease(o, initExpiration);
+	    long delta = System.currentTimeMillis() - setCreation;
+	    System.out.println("Delta => " + delta);
+	    setExpire.renewFor(l, Lease.FOREVER);
+	}
+
+	// Sleep until the first lease expires + its initial length, or we 
+	// detect a failure
+	synchronized (this) {
+	    while (true) {
+		LeaseOwner[] owners = backend.getOwners();
+
+		// See if there have been any failures
+		for (int i=0; i<owners.length; i++) {
+		    final TrackingOwner owner = (TrackingOwner)owners[i];
+		    final String rslt = owner.didPass();
+		    if (rslt != null) {
+			throw new TestException( rslt);
+		    }
+		}
+
+		final long now = System.currentTimeMillis();
+
+		// If we have waited long enough break
+		if (now - expsLease.getExpiration() >= setDuration)
+		    break;
+
+		try {
+		    wait(expsLease.getExpiration() - now + setDuration);
+		} catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+		    throw new TestException(
+			"Unexpected InterruptedException.");
+		}
+	    }
+	}
+    }
+
+    /**
+     * Subclass of forever owner that makes sure that the set
+     * containing the owned lease has not expired
+     */
+    private class ExpiryOwner extends ForeverOwner {
+
+	/** Lease of the set containing the lease we own */
+	final private Lease renewalSetLease;
+
+	/** 
+	 * Simple constructor 
+	 * @param initialExpiration Initial expiration time for lease.
+	 * @param maxExtension Maximum time this owner will be willing to extend 
+	 *                     the lease
+	 * @param slop Allowable variance from desired expiration when making a
+	 *             renewal request.
+	 * @param desiredRenewal
+	 *             Expect value of the renewDuration parameter
+	 * @param notifyOnFailure
+	 *             Object to notify if there is a failure
+	 * @param isTwoArg Should the assocated lease be registered
+	 *             with the one or two arg form
+	 * @param util QA harnss utility object
+	 * @param renewalSetLease The lease of the renewal set the
+	 *                        lease we are an owner of will be placed in
+	 */
+	public ExpiryOwner(long initialExpiration, long maxExtension,
+	    long slop, long desiredRenewal, Object notifyOnFailure,
+	    boolean isTwoArg, QAConfig config, Lease renewalSetLease) 
+	{
+	    super(initialExpiration, maxExtension, 
+		  slop, desiredRenewal, notifyOnFailure, isTwoArg, config);
+	    this.renewalSetLease = renewalSetLease;
+	}
+
+	// Inherit java doc from super type
+	protected boolean isValidExtension(long extension) {
+	    // Check to make sure the set has not expired
+            boolean t = false;
+            synchronized (this){
+                t = now - slop > renewalSetLease.getExpiration();
+            }
+            if (t) {
+                // The set has expired, this renewal should not
+                // be happending
+                setRsltIfNeeded("Expire Owner:LRS asked for a renewal " +
+                                "after renewal set expiration!");
+                return false;
+            }
+	    return super.isValidExtension(extension);
+	}
+	
+	/**
+	 * Override to not flag a failure if the lease we own has
+	 * expired and the the set's lease has as well.
+	 */
+	public synchronized String didPass() {
+	    final String rslt = getRslt();
+	    if (rslt != null) 
+		return rslt;
+	    
+	    final long now = System.currentTimeMillis();
+	    
+	    if (renewalSetLease.getExpiration() < now) {
+		// We don't care it our lease has expired or not
+		return null;
+	    }
+
+	    return super.didPass();
+	}
+    }
+
+    protected LeaseRenewalSet prepareSet(LeaseRenewalSet set) 
+        throws TestException
+    {
+	Object s = getConfig().prepare("test.normRenewalSetPreparer", set);
+	return (LeaseRenewalSet) s;
+    }
+}

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/norm/RenewAtTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/norm/RenewAtTest.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/norm/RenewAtTest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/norm/RenewAtTest.java Sun Oct 26 13:17:28 2014
@@ -1,193 +1,194 @@
-/*
- * 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.norm;
-
-import java.util.logging.Level;
-
-// Test harness specific classes
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.Test;
-import com.sun.jini.qa.harness.TestException;
-
-import net.jini.core.lease.Lease;
-
-import net.jini.lease.LeaseRenewalService;
-import net.jini.lease.LeaseRenewalSet;
-
-import com.sun.jini.test.share.TestBase;
-
-
-/** 
- * Test creates a lease a number of leases and adds them with
- * diffrent desiered expiration and renew durations wait for
- * some time and makes sure that only the leases that should
- * have expired expire.
- */
-public class RenewAtTest extends TestBase implements Test {
-    /** Ammount of slop we are willing to tolerate around renewals */
-    private long slop;
-
-    /** Should we try shuting down the service under test? */
-    private boolean tryShutdown;
-
-    public Test construct(QAConfig sysConfig) throws Exception {
-	super.construct(sysConfig);
-	this.parse();
-        return this;
-    }
-
-    /**
-     * Parse our args
-     * <DL>
-     *
-     * <DT>-slop <var>int</var><DD> Amount of slop in milliseconds we
-     * are willing to tolrate in renewal requests (compared to the ideal
-     * request) and in missing expirations.
-     *
-     * <DT>-tryShutdown <DD>If used the test will kill the VM the service
-     * is running in after adding the client lease to the set and again
-     * after removing the lease from the set.
-     * </DL> 
-     */
-    protected void parse() throws Exception {
-	super.parse();
-	slop = getConfig().getLongConfigVal("slop", 5000);
-	tryShutdown = getConfig().getBooleanConfigVal("tryShutdown", false);
-    }
-
-    /**
-     * Create a new RenewAtOwner
-     * @param initialDuration This inital duration the lease should have
-     * @param maxExtension Max renewal to grant
-     * @param desiredDuration Duration we want
-     * @param desiredRenewal Renewal LRS should request
-     */
-    private RenewAtOwner createOwner(long initialDuration, long maxExtension,
-				     long desiredDuration, long desiredRenewal)
-    {
-	final long now = System.currentTimeMillis();
-	long desiredExpiration = desiredDuration + now;
-
-	if (desiredDuration == Lease.FOREVER) {
-	    desiredExpiration = Lease.FOREVER;
-	}
-
-	return new RenewAtOwner(initialDuration + now, maxExtension,
-		       desiredExpiration, slop, desiredRenewal, this);
-    }
-
-    private void checkOwners(LeaseBackEndImpl home) throws TestException {
-	final LeaseOwner owners[] = home.getOwners(); 
-	for (int i=0; i<owners.length; i++) {
-	    final RenewAtOwner owner = (RenewAtOwner)owners[i];
-	    final String rslt = owner.didPass();
-	    if (rslt != null) {
-		throw new TestException(rslt);
-	    }
-	}
-    }
-
-    public void run() throws Exception {
-	specifyServices(new Class[]{LeaseRenewalService.class});
-	LeaseRenewalService lrs = (LeaseRenewalService)services[0];
-	LeaseRenewalSet set = lrs.createLeaseRenewalSet(Lease.FOREVER);
-        set = prepareSet(set);
-	addLease(prepareNormLease(set.getRenewalSetLease()), false);
-
-	long now = System.currentTimeMillis();
-
-	// Add a local lease to get things primed
-	set.renewFor(LocalLease.getLocalLease(now + 600000, 600000, 1, 1), Lease.FOREVER);
-
-	// Create the object that will serve as the landlord
-	final RenewAtOwner owners[] = new RenewAtOwner[8];
-	final LeaseBackEndImpl home = new LeaseBackEndImpl(owners.length);
-        home.export();
-	int j = 0;
-
-	// Desired exp before end of test, desired renewal < max grant
-	owners[j++] = createOwner(60000,  60000,  300000,        30000);
-
-	// Desired exp FOREVER, desired renewal = ANY
-	owners[j++] = createOwner(30000,  45000,  Lease.FOREVER, Lease.ANY);
-
-	// Desired exp FOREVER, desired renewal > max grant
-	owners[j++] = createOwner(45000,  45000,  Lease.FOREVER, 60000);
-
-	// Desired exp FOREVER, desired renewal < max grant
-	owners[j++] = createOwner(45000,  600000, Lease.FOREVER, 75000);
-
-	// Desired exp < current exp
-	owners[j++] = createOwner(400000, 45000,  350000,        60000);
-
-	// Desired exp after end of test, desired renewal < max grant
-	owners[j++] = createOwner(30000,  60000,  600000,        45000);
-
-	// Desired exp after end of test, desired renewal > max grant
-	owners[j++] = createOwner(30000,  30000,  650000,        45000);
-
-	// Desired exp before end of test, desired renewal > max grant
-	owners[j++] = createOwner(60000,  30000,  250000,        60000);
-
-	for (int i=0; i<owners.length; i++) {
-	    final RenewAtOwner owner = (RenewAtOwner)owners[i];
-
-	    final Lease lease = home.newLease(owner, owner.getExpiration());
-	    set.renewFor(lease, owner.getDesiredDuration(),
-			 owner.getDesiredRenewal());
-	}
-
-	if (tryShutdown) 
-	    shutdown(0);
-
-	final long totalWait = 300000 + slop * 2;
-	boolean middleShutdown = false;
-
-	synchronized (this) {
-	    checkOwners(home);
-	    final long start = System.currentTimeMillis();
-	    long elapsed = 0;
-
-	    while (elapsed < totalWait) {
-		try {
-		    long waitFor = totalWait - elapsed;
-
-		    if (!middleShutdown && tryShutdown) 
-			waitFor = totalWait/2 - elapsed;
-
-		    logger.log(Level.INFO, "Sleeping for " + waitFor);
-		    wait(waitFor);
-
-		    if (!middleShutdown && tryShutdown) {
-			middleShutdown = true;
-			shutdown(0);
-		    }
-		} catch (InterruptedException e) {
-		    throw new TestException("wait interupted:" + e.getMessage());
-		}
-
-		checkOwners(home);       		    
-		elapsed = System.currentTimeMillis() - start;
-	    }
-
-	    checkOwners(home);
-	}
-    }
-}
-
-
+/*
+ * 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.norm;
+
+import java.util.logging.Level;
+
+// Test harness specific classes
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.Test;
+import com.sun.jini.qa.harness.TestException;
+
+import net.jini.core.lease.Lease;
+
+import net.jini.lease.LeaseRenewalService;
+import net.jini.lease.LeaseRenewalSet;
+
+import com.sun.jini.test.share.TestBase;
+
+
+/** 
+ * Test creates a lease a number of leases and adds them with
+ * diffrent desiered expiration and renew durations wait for
+ * some time and makes sure that only the leases that should
+ * have expired expire.
+ */
+public class RenewAtTest extends TestBase implements Test {
+    /** Ammount of slop we are willing to tolerate around renewals */
+    private long slop;
+
+    /** Should we try shuting down the service under test? */
+    private boolean tryShutdown;
+
+    public Test construct(QAConfig sysConfig) throws Exception {
+	super.construct(sysConfig);
+	this.parse();
+        return this;
+    }
+
+    /**
+     * Parse our args
+     * <DL>
+     *
+     * <DT>-slop <var>int</var><DD> Amount of slop in milliseconds we
+     * are willing to tolrate in renewal requests (compared to the ideal
+     * request) and in missing expirations.
+     *
+     * <DT>-tryShutdown <DD>If used the test will kill the VM the service
+     * is running in after adding the client lease to the set and again
+     * after removing the lease from the set.
+     * </DL> 
+     */
+    protected void parse() throws Exception {
+	super.parse();
+	slop = getConfig().getLongConfigVal("slop", 5000);
+	tryShutdown = getConfig().getBooleanConfigVal("tryShutdown", false);
+    }
+
+    /**
+     * Create a new RenewAtOwner
+     * @param initialDuration This inital duration the lease should have
+     * @param maxExtension Max renewal to grant
+     * @param desiredDuration Duration we want
+     * @param desiredRenewal Renewal LRS should request
+     */
+    private RenewAtOwner createOwner(long initialDuration, long maxExtension,
+				     long desiredDuration, long desiredRenewal)
+    {
+	final long now = System.currentTimeMillis();
+	long desiredExpiration = desiredDuration + now;
+
+	if (desiredDuration == Lease.FOREVER) {
+	    desiredExpiration = Lease.FOREVER;
+	}
+
+	return new RenewAtOwner(initialDuration + now, maxExtension,
+		       desiredExpiration, slop, desiredRenewal, this);
+    }
+
+    private void checkOwners(LeaseBackEndImpl home) throws TestException {
+	final LeaseOwner owners[] = home.getOwners(); 
+	for (int i=0; i<owners.length; i++) {
+	    final RenewAtOwner owner = (RenewAtOwner)owners[i];
+	    final String rslt = owner.didPass();
+	    if (rslt != null) {
+		throw new TestException(rslt);
+	    }
+	}
+    }
+
+    public void run() throws Exception {
+	specifyServices(new Class[]{LeaseRenewalService.class});
+	LeaseRenewalService lrs = (LeaseRenewalService)services[0];
+	LeaseRenewalSet set = lrs.createLeaseRenewalSet(Lease.FOREVER);
+        set = prepareSet(set);
+	addLease(prepareNormLease(set.getRenewalSetLease()), false);
+
+	long now = System.currentTimeMillis();
+
+	// Add a local lease to get things primed
+	set.renewFor(LocalLease.getLocalLease(now + 600000, 600000, 1, 1), Lease.FOREVER);
+
+	// Create the object that will serve as the landlord
+	final RenewAtOwner owners[] = new RenewAtOwner[8];
+	final LeaseBackEndImpl home = new LeaseBackEndImpl(owners.length);
+        home.export();
+	int j = 0;
+
+	// Desired exp before end of test, desired renewal < max grant
+	owners[j++] = createOwner(60000,  60000,  300000,        30000);
+
+	// Desired exp FOREVER, desired renewal = ANY
+	owners[j++] = createOwner(30000,  45000,  Lease.FOREVER, Lease.ANY);
+
+	// Desired exp FOREVER, desired renewal > max grant
+	owners[j++] = createOwner(45000,  45000,  Lease.FOREVER, 60000);
+
+	// Desired exp FOREVER, desired renewal < max grant
+	owners[j++] = createOwner(45000,  600000, Lease.FOREVER, 75000);
+
+	// Desired exp < current exp
+	owners[j++] = createOwner(400000, 45000,  350000,        60000);
+
+	// Desired exp after end of test, desired renewal < max grant
+	owners[j++] = createOwner(30000,  60000,  600000,        45000);
+
+	// Desired exp after end of test, desired renewal > max grant
+	owners[j++] = createOwner(30000,  30000,  650000,        45000);
+
+	// Desired exp before end of test, desired renewal > max grant
+	owners[j++] = createOwner(60000,  30000,  250000,        60000);
+
+	for (int i=0; i<owners.length; i++) {
+	    final RenewAtOwner owner = (RenewAtOwner)owners[i];
+
+	    final Lease lease = home.newLease(owner, owner.getExpiration());
+	    set.renewFor(lease, owner.getDesiredDuration(),
+			 owner.getDesiredRenewal());
+	}
+
+	if (tryShutdown) 
+	    shutdown(0);
+
+	final long totalWait = 300000 + slop * 2;
+	boolean middleShutdown = false;
+
+	synchronized (this) {
+	    checkOwners(home);
+	    final long start = System.currentTimeMillis();
+	    long elapsed = 0;
+
+	    while (elapsed < totalWait) {
+		try {
+		    long waitFor = totalWait - elapsed;
+
+		    if (!middleShutdown && tryShutdown) 
+			waitFor = totalWait/2 - elapsed;
+
+		    logger.log(Level.INFO, "Sleeping for " + waitFor);
+		    wait(waitFor);
+
+		    if (!middleShutdown && tryShutdown) {
+			middleShutdown = true;
+			shutdown(0);
+		    }
+		} catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+		    throw new TestException("wait interupted:" + e.getMessage());
+		}
+
+		checkOwners(home);       		    
+		elapsed = System.currentTimeMillis() - start;
+	    }
+
+	    checkOwners(home);
+	}
+    }
+}
+
+

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/api/InterruptTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/api/InterruptTest.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/api/InterruptTest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/api/InterruptTest.java Sun Oct 26 13:17:28 2014
@@ -1,95 +1,96 @@
-/*
- * 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.outrigger.api;
-
-import java.util.logging.Level;
-
-// java classes
-import java.rmi.RemoteException;
-
-// jini classes
-import net.jini.space.JavaSpace;
-import net.jini.admin.Administrable;
-
-// Test harness specific classes
-import com.sun.jini.qa.harness.TestException;
-import com.sun.jini.qa.harness.QAConfig;
-import com.sun.jini.qa.harness.QATestEnvironment;
-
-
-
-// Shared classes
-import com.sun.jini.qa.harness.Test;
-import com.sun.jini.test.share.TestBase;
-
-
-/**
- * Test to make sure blocking reads can be interrupted
- */
-public class InterruptTest extends TestBase implements Test {
-
-
-    private class ReadThread extends Thread {
-        Exception rslt = null;
-        JavaSpace space;
-
-        ReadThread(JavaSpace s) {
-            super("ReadThread");
-            space = s;
-        }
-
-        public void run() {
-            try {
-                space.read(null, null, 10000);
-            } catch (InterruptedException e) {
-                rslt = e;
-            } catch (Exception e) {
-                rslt = e;
-            }
-        }
-    }
-
-    public Test construct(QAConfig config) throws Exception {
-        super.construct(config);
-        super.parse();
-        return this;
-    }
-
-    public void run() throws Exception {
-        specifyServices(new Class[] {JavaSpace.class});
-        final JavaSpace space = (JavaSpace) services[0];
-
-        // Kick of read in a seperate thread
-        ReadThread readThread = new ReadThread(space);
-        readThread.start();
-
-	Thread.sleep(5000);
-	readThread.interrupt();
-	readThread.join();
-
-        if (readThread.rslt == null) {
-            throw new TestException("Read returned normally");
-        } else if (readThread.rslt instanceof InterruptedException) {
-            return;
-        } else {
-            throw new TestException(
-                    "Expected: InterruptedException. Returned: "
-                    + readThread.rslt.getMessage());
-        }
-    }
-}
+/*
+ * 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.outrigger.api;
+
+import java.util.logging.Level;
+
+// java classes
+import java.rmi.RemoteException;
+
+// jini classes
+import net.jini.space.JavaSpace;
+import net.jini.admin.Administrable;
+
+// Test harness specific classes
+import com.sun.jini.qa.harness.TestException;
+import com.sun.jini.qa.harness.QAConfig;
+import com.sun.jini.qa.harness.QATestEnvironment;
+
+
+
+// Shared classes
+import com.sun.jini.qa.harness.Test;
+import com.sun.jini.test.share.TestBase;
+
+
+/**
+ * Test to make sure blocking reads can be interrupted
+ */
+public class InterruptTest extends TestBase implements Test {
+
+
+    private class ReadThread extends Thread {
+        Exception rslt = null;
+        JavaSpace space;
+
+        ReadThread(JavaSpace s) {
+            super("ReadThread");
+            space = s;
+        }
+
+        public void run() {
+            try {
+                space.read(null, null, 10000);
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                rslt = e;
+            } catch (Exception e) {
+                rslt = e;
+            }
+        }
+    }
+
+    public Test construct(QAConfig config) throws Exception {
+        super.construct(config);
+        super.parse();
+        return this;
+    }
+
+    public void run() throws Exception {
+        specifyServices(new Class[] {JavaSpace.class});
+        final JavaSpace space = (JavaSpace) services[0];
+
+        // Kick of read in a seperate thread
+        ReadThread readThread = new ReadThread(space);
+        readThread.start();
+
+	Thread.sleep(5000);
+	readThread.interrupt();
+	readThread.join();
+
+        if (readThread.rslt == null) {
+            throw new TestException("Read returned normally");
+        } else if (readThread.rslt instanceof InterruptedException) {
+            Thread.currentThread().interrupt();
+        } else {
+            throw new TestException(
+                    "Expected: InterruptedException. Returned: "
+                    + readThread.rslt.getMessage());
+        }
+    }
+}

Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/javaspace05/MutatingContentsTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/javaspace05/MutatingContentsTest.java?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/javaspace05/MutatingContentsTest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/javaspace05/MutatingContentsTest.java Sun Oct 26 13:17:28 2014
@@ -1,494 +1,495 @@
-/*
- * 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.outrigger.javaspace05;
-
-import com.sun.jini.qa.harness.Test;
-import java.util.logging.Level;
-
-// Test harness specific classes
-import com.sun.jini.qa.harness.TestException;
-
-// All other imports
-
-import java.util.Collection;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.Iterator;
-import java.util.Random;
-
-import net.jini.core.lease.Lease;
-import net.jini.core.entry.Entry;
-import net.jini.lease.LeaseRenewalManager;
-
-import net.jini.space.JavaSpace;
-import net.jini.space.JavaSpace05;
-import net.jini.space.MatchSet;
-
-import com.sun.jini.test.share.TestBase;
-
-
-/**
- * writes a configurable number of random entries and uses a
- * configurable number of concurrent threads that perform a
- * configurable number of contents calls using a random sets of
- * templates. Additionally one thread is writing and taking random
- * entries from the space concurrently with the contents calls. Each
- * trail makes sure that all of the expected entries and only the
- * expected entries come back - making allowances for entries that
- * were added and removed during the course of the iteration.  
- */
-public class MutatingContentsTest extends TestBase implements Test {
-    final private static String configNameBase = 
-	"com.sun.jini.test.impl.outrigger.javaspace05.MutatingContentsTest.";
-
-    /** Space under test */
-    public void run() throws Exception {
-	// Initialize our selves
-
-        specifyServices(new Class[] { JavaSpace.class });
-        final JavaSpace05 space = (JavaSpace05)services[0];
-
-	final int threadCount = 
-	    getConfig().getIntConfigVal(configNameBase + "threadCount", 5);
-	final int trials =
-	    getConfig().getIntConfigVal(configNameBase + "trials", 10);
-	final int batchSize =
-	    getConfig().getIntConfigVal(configNameBase + "batchSize", 100);
-	final int testSetSize =
-	    getConfig().getIntConfigVal(configNameBase + "testSetSize", 1500);
-
-	final LeaseRenewalManager lrm = new LeaseRenewalManager();
-
-	logger.log(Level.INFO, "threadCount = " + threadCount);
-	logger.log(Level.INFO, "trials = " + trials);
-	logger.log(Level.INFO, "batchSize = " + batchSize);
-	logger.log(Level.INFO, "testSetSize = " + testSetSize);
-
-
-	// Initialize the space
-
-	logger.log(Level.INFO, "Writing test entries");
-
-	final List testSet = new java.util.LinkedList();
-	for (int i=0; i<testSetSize; i++)
-	    testSet.add(TestEntries.newEntry());
-
-	final Long maxValue = new Long(Lease.FOREVER);
-	for (Iterator i=testSet.iterator(); i.hasNext();) {
-	    final List entries = new LinkedList();
-	    final List leases = new ArrayList();
-	    for (int j=0; j<100 && i.hasNext(); j++) {
-		entries.add(i.next());
-		leases.add(maxValue);
-	    }
-
-	    space.write(entries, null, leases);
-	}
-
-	logger.log(Level.INFO, "Test entries writen");
-
-	
-	// Spawn the reader threads
-	logger.log(Level.INFO, "Spawning readers");
-	
-	final ReaderThread[] threads = new ReaderThread[threadCount];
-	for (int i=0; i<threads.length; i++) {
-	    threads[i] = new ReaderThread(i, trials, batchSize, testSet, lrm, 
-					  space);
-	    threads[i].start();
-	}
-
-	logger.log(Level.INFO, "Readers spawned");
-
-	logger.log(Level.INFO, "Spawning mutator");
-	final MutatorThread mutator = new MutatorThread(testSet, threads, space);
-	mutator.start();
-	logger.log(Level.INFO, "Mutator spawned");
-	
-	for (int i=0; i<threads.length; i++) {
-	    threads[i].join();
-	}
-
-	mutator.kill();
-	mutator.join();
-
-	for (int i=0; i<threads.length; i++) {
-	    final ReaderThread t = threads[i];
-	    t.getCompletionState();
-	}
-
-	mutator.getCompletionState();
-    }
-
-    /**
-     * Return a String which describes this test
-     */
-    public String getDescription() {
-        return "Test Name = MuatatingContentsTest.";
-    }
-
-    /**
-     * Return an array of String whose elements comprise the
-     * categories to which this test belongs.
-     */
-    public String[] getCategories() {
-        return new String[] {
-            "outrigger" };
-    }
-
-    private static class MutatorThread extends Thread {
-	final private JavaSpace05 space;
-	final private List testSet;
-	final private Random random = new Random();
-	final private ReaderThread[] readers;
-	final private int idealSize;
-	private Throwable completionState = null;
-
-	private boolean done = false;
-
-	synchronized void setCompletionState(Throwable v) {
-	    if (completionState != null)
-		completionState = v;
-	}
-
-	synchronized Exception getCompletionState() throws Exception {
-	    if (completionState == null) return null;
-	    
-	    if (completionState instanceof Exception)
-		throw (Exception)completionState;
-
-	    if (completionState instanceof Error) 
-		throw (Error)completionState;
-
-	    throw new AssertionError(completionState);
-	}
-
-
-	private MutatorThread(List testSet, ReaderThread[] readers, 
-			      JavaSpace05 space) 
-	{
-	    super("Mutator");
-	    this.space = space;
-	    this.testSet = testSet;
-	    this.readers = readers;
-	    idealSize = testSet.size();
-	}
-
-	private synchronized void kill() {
-	    done = true;
-	}
-
-	public void run() {
-	    while (true) {
-		try {
-		    synchronized (this) {
-			if (done)
-			    return;
-		    }
-
-		    final int size = testSet.size();
-		    boolean doWrite;
-		    if (size < idealSize * 0.66)
-			doWrite = true;
-		    else if (size > idealSize * 1.33)
-			doWrite = false;
-		    else 
-			doWrite = random.nextBoolean();
-
-		    if (doWrite) {
-			final TestEntry e = TestEntries.newEntry();
-			for (int i=0; i<readers.length; i++)
-			    readers[i].writen(e);
-			space.write((Entry)e, null, Long.MAX_VALUE);
-			testSet.add(e);
-		    } else {
-			final int c = random.nextInt(size);
-			final TestEntry e = (TestEntry)testSet.remove(c);
-			for (int i=0; i<readers.length; i++)
-			    readers[i].removed(e);
-			if (null == space.take((Entry)e, null, 0)) {
-			    final String msg = getName() + " take returned null";
-			    logger.log(Level.INFO, msg);
-			    setCompletionState(new TestException(msg));
-			    return;
-			}
-		    }		    
-		} catch (Throwable t) {
-		    final String msg = getName() + " failure in main loop";
-		    logger.log(Level.INFO, msg, t);
-		    setCompletionState(new TestException(msg, t));
-		    return;
-		}
-	    }
-	}
-    }
-
-    private static class ReaderThread extends Thread {
-	final private LeaseRenewalManager lrm;
-	final private int batchSize;
-	final private Collection testSet;
-	final private int trails;
-	final private JavaSpace05 space;
-	private Throwable completionState = null;
-
-	private LinkedList removals = new LinkedList();
-	private LinkedList writes = new LinkedList();
-
-	private boolean waitingOnCommit = false;
-
-	// Current trail
-	private int trailNumber = -1;
-	
-	private ReaderThread(int threadNum, int trails, int batchSize,
-			     Collection testSet, LeaseRenewalManager lrm,
-			     JavaSpace05 space)
-	{
-	    super("ReaderThread-" + threadNum);
-	    this.lrm = lrm;
-	    this.batchSize = batchSize;
-	    this.trails = trails;
-	    this.testSet = new java.util.HashSet(testSet);
-	    this.space = space;
-	}
-
-	synchronized void setCompletionState(Throwable v) {
-	    if (completionState == null)
-		completionState = v;
-	}
-
-	synchronized Exception getCompletionState() throws Exception {
-	    if (completionState == null) return null;
-	    
-	    if (completionState instanceof Exception)
-		throw (Exception)completionState;
-
-	    if (completionState instanceof Error) 
-		throw (Error)completionState;
-
-	    throw new AssertionError(completionState);
-	}
-
-	private String nameAndTrail() {
-	    return getName() + ":trial:" + trailNumber + " ";
-	}
-
-	private TestException failure(String msg) throws TestException {
-	    msg = nameAndTrail() + msg;
-	    logger.log(Level.INFO, msg);
-	    throw new TestException(msg);
-	}
-
-	private TestException failure(String msg, Throwable t)
-	    throws TestException
-	{
-	    msg = nameAndTrail() + msg;
-	    logger.log(Level.INFO, msg, t);
-	    throw new TestException(msg, t);
-	}
-
-	private synchronized void removed(TestEntry e) {
-	    removals.add(e);
-	    if (waitingOnCommit) {
-		waitingOnCommit = false;
-		notifyAll();
-	    }
-	}
-
-	private synchronized void writen(TestEntry e) {
-	    writes.add(e);
-	    if (waitingOnCommit) {
-		waitingOnCommit = false;
-		notifyAll();
-	    }
-	}
-
-	public void run() {
-	    try {
-		for (trailNumber=0; trailNumber<trails; trailNumber++) {
-		    trail();
-		}
-	    } catch (TestException t) {
-		setCompletionState(t);
-	    } catch (Throwable t) {
-		logger.log(Level.INFO, nameAndTrail() + "failed with", t);
-		setCompletionState(t);
-	    }
-	}
-
-	private void trail() throws TestException {
-	    synchronized (this) {
-		while (waitingOnCommit) {
-		    try {
-			wait();
-		    } catch (InterruptedException e) {
-			failure("interrupted", e);
-			return;
-		    }
-		}
-	    }
-		
-	    logger.log(Level.INFO, nameAndTrail() + " starting trial ");
-	    final Collection tmpls = TestEntries.newTemplates();
-	    final Set tbf = new java.util.HashSet();
-	    for (Iterator j=testSet.iterator(); j.hasNext();) {
-		final TestEntry e = (TestEntry)j.next();
-		if (TestEntries.isMatch(tmpls, e)) {
-		    tbf.add(e);
-		}
-	    }
-	    
-	    logger.log(Level.INFO, 
-		       nameAndTrail() + "looking for " + tbf.size() + " entries");
-	    logger.log(Level.INFO, 
-		       nameAndTrail() + "using:" + TestEntries.toString(tmpls));
-
-	    final MatchSet cr;
-	    final Lease l;
-	    TestEntry e;
-	    try {
-		cr = space.contents(tmpls, null, 60000, Long.MAX_VALUE);
-
-		l = cr.getLease();
-		if (tbf.size() < batchSize && l != null) {
-		    throw failure(
-		        "failed! got lease, but should not have. tbf.size:" + 
-			tbf.size());
-		} else if (tbf.size() >= batchSize && l == null) {
-		    throw failure(
-                        "failed! did not get lease, but should have. tbf.size:"
-			+ tbf.size());
-		}
-		    
-		if (l != null) {
-		    lrm.renewFor(l, Long.MAX_VALUE, 60000, null);
-		}
-
-		e = (TestEntry)cr.next();
-	    } catch (Throwable t) {
-		throw failure("failed with " + t + " during contents call phase",
-			      t);
-	    }
-
-	    final LinkedList notInTBF = new LinkedList();
-	    
-	    while (e != null) {
-		if (!tbf.remove(e)) {
-		    notInTBF.add(e);
-		    
-		    // Make sure all the extras match
-		    boolean found = TestEntries.isMatch(tmpls, e);
-		    if (!found) {
-			throw failure("failed. " + TestEntries.toString(e) +
-				      " did not match any templates");
-		    }		       
-		}
-
-		try {
-		    e = (TestEntry)cr.next();
-		} catch (Throwable t) {			
-		    throw failure("failed with " + t + " during next call", t);
-		}
-	    }
-
-	    final LinkedList removals;
-	    final LinkedList writes;
-	    synchronized (this) {
-		removals = this.removals;
-		writes = this.writes;
-		this.removals = new LinkedList();
-		this.writes = new LinkedList();
-		waitingOnCommit = true;
-	    }
-
-	    final int extras = notInTBF.size();
-	    final int missing = tbf.size();
-
-	    /* Go through the entries that were written while we were
-	     * going through the match set to see if any of them match
-	     * the `extras' entries we found (all of the extra entries
-	     * are in notInTBF). Also update the testSet 
-	     */
-	    while (!writes.isEmpty()) {
-		final TestEntry we = (TestEntry)writes.removeFirst();
-		
-		// Make sure there are no dups in the ones we did
-		// not know were coming
-		if (writes.contains(we)) {
-		    throw failure("failed." + TestEntries.toString(we) +
-				  " returned by contents twice");
-		}
-		    
-		testSet.add(we);
-		notInTBF.remove(we);
-	    }
-		
-	    // After accounting for the concurrent writes, if notInTBF
-	    // is still non-empty, we got something we should not have
-	    if (!notInTBF.isEmpty()) {
-		for (Iterator j=notInTBF.iterator(); j.hasNext();) {
-		    TestEntry ee = (TestEntry)j.next();
-		    logger.log(Level.INFO, nameAndTrail() + 
-			       TestEntries.toString(ee) + " not in tbf");
-		    }
-		
-		throw failure("Set of entries not found in TBF non-empty after " +
-			      "accounting for concurrent writes");
-	    }
-
-	    /* Go through the entries that were taken while we were
-	     * going through the match set to see if any of them match
-	     * the missing matches that were in testSet, but we could
-	     * not find. Along the way update testSet 
-	     */
-	    while (!removals.isEmpty()) {
-		final TestEntry re = (TestEntry)removals.removeFirst();
-		if (!testSet.remove(re)) {
-		    throw failure("Removed entry not in testSet", 
-				  new AssertionError());
-		}
-
-		tbf.remove(re);
-	    }
-
-
-	    // After account for concurrent takes, if tbf is still
-	    // non-empty we did not get something we should have
-	    if (!tbf.isEmpty()) {
-		final String msg = nameAndTrail() + "failed. tbf non-empty";
-		logger.log(Level.INFO, msg);
-		logger.log(Level.INFO, TestEntries.toString(tbf));
-		throw new TestException(msg);
-	    } else {
-		logger.log(Level.INFO, nameAndTrail() + "success(" +
-			   extras + " extras, " + missing + " missing)");
-	    }
-
-	    if (l != null) {
-		try {
-		    lrm.cancel(l);
-		} catch (Throwable t) {
-		    throw failure("failed with " + t + 
-				  " while canceling MatchSet lease", 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.impl.outrigger.javaspace05;
+
+import com.sun.jini.qa.harness.Test;
+import java.util.logging.Level;
+
+// Test harness specific classes
+import com.sun.jini.qa.harness.TestException;
+
+// All other imports
+
+import java.util.Collection;
+import java.util.List;
+import java.util.LinkedList;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.Iterator;
+import java.util.Random;
+
+import net.jini.core.lease.Lease;
+import net.jini.core.entry.Entry;
+import net.jini.lease.LeaseRenewalManager;
+
+import net.jini.space.JavaSpace;
+import net.jini.space.JavaSpace05;
+import net.jini.space.MatchSet;
+
+import com.sun.jini.test.share.TestBase;
+
+
+/**
+ * writes a configurable number of random entries and uses a
+ * configurable number of concurrent threads that perform a
+ * configurable number of contents calls using a random sets of
+ * templates. Additionally one thread is writing and taking random
+ * entries from the space concurrently with the contents calls. Each
+ * trail makes sure that all of the expected entries and only the
+ * expected entries come back - making allowances for entries that
+ * were added and removed during the course of the iteration.  
+ */
+public class MutatingContentsTest extends TestBase implements Test {
+    final private static String configNameBase = 
+	"com.sun.jini.test.impl.outrigger.javaspace05.MutatingContentsTest.";
+
+    /** Space under test */
+    public void run() throws Exception {
+	// Initialize our selves
+
+        specifyServices(new Class[] { JavaSpace.class });
+        final JavaSpace05 space = (JavaSpace05)services[0];
+
+	final int threadCount = 
+	    getConfig().getIntConfigVal(configNameBase + "threadCount", 5);
+	final int trials =
+	    getConfig().getIntConfigVal(configNameBase + "trials", 10);
+	final int batchSize =
+	    getConfig().getIntConfigVal(configNameBase + "batchSize", 100);
+	final int testSetSize =
+	    getConfig().getIntConfigVal(configNameBase + "testSetSize", 1500);
+
+	final LeaseRenewalManager lrm = new LeaseRenewalManager();
+
+	logger.log(Level.INFO, "threadCount = " + threadCount);
+	logger.log(Level.INFO, "trials = " + trials);
+	logger.log(Level.INFO, "batchSize = " + batchSize);
+	logger.log(Level.INFO, "testSetSize = " + testSetSize);
+
+
+	// Initialize the space
+
+	logger.log(Level.INFO, "Writing test entries");
+
+	final List testSet = new java.util.LinkedList();
+	for (int i=0; i<testSetSize; i++)
+	    testSet.add(TestEntries.newEntry());
+
+	final Long maxValue = new Long(Lease.FOREVER);
+	for (Iterator i=testSet.iterator(); i.hasNext();) {
+	    final List entries = new LinkedList();
+	    final List leases = new ArrayList();
+	    for (int j=0; j<100 && i.hasNext(); j++) {
+		entries.add(i.next());
+		leases.add(maxValue);
+	    }
+
+	    space.write(entries, null, leases);
+	}
+
+	logger.log(Level.INFO, "Test entries writen");
+
+	
+	// Spawn the reader threads
+	logger.log(Level.INFO, "Spawning readers");
+	
+	final ReaderThread[] threads = new ReaderThread[threadCount];
+	for (int i=0; i<threads.length; i++) {
+	    threads[i] = new ReaderThread(i, trials, batchSize, testSet, lrm, 
+					  space);
+	    threads[i].start();
+	}
+
+	logger.log(Level.INFO, "Readers spawned");
+
+	logger.log(Level.INFO, "Spawning mutator");
+	final MutatorThread mutator = new MutatorThread(testSet, threads, space);
+	mutator.start();
+	logger.log(Level.INFO, "Mutator spawned");
+	
+	for (int i=0; i<threads.length; i++) {
+	    threads[i].join();
+	}
+
+	mutator.kill();
+	mutator.join();
+
+	for (int i=0; i<threads.length; i++) {
+	    final ReaderThread t = threads[i];
+	    t.getCompletionState();
+	}
+
+	mutator.getCompletionState();
+    }
+
+    /**
+     * Return a String which describes this test
+     */
+    public String getDescription() {
+        return "Test Name = MuatatingContentsTest.";
+    }
+
+    /**
+     * Return an array of String whose elements comprise the
+     * categories to which this test belongs.
+     */
+    public String[] getCategories() {
+        return new String[] {
+            "outrigger" };
+    }
+
+    private static class MutatorThread extends Thread {
+	final private JavaSpace05 space;
+	final private List testSet;
+	final private Random random = new Random();
+	final private ReaderThread[] readers;
+	final private int idealSize;
+	private Throwable completionState = null;
+
+	private boolean done = false;
+
+	synchronized void setCompletionState(Throwable v) {
+	    if (completionState != null)
+		completionState = v;
+	}
+
+	synchronized Exception getCompletionState() throws Exception {
+	    if (completionState == null) return null;
+	    
+	    if (completionState instanceof Exception)
+		throw (Exception)completionState;
+
+	    if (completionState instanceof Error) 
+		throw (Error)completionState;
+
+	    throw new AssertionError(completionState);
+	}
+
+
+	private MutatorThread(List testSet, ReaderThread[] readers, 
+			      JavaSpace05 space) 
+	{
+	    super("Mutator");
+	    this.space = space;
+	    this.testSet = testSet;
+	    this.readers = readers;
+	    idealSize = testSet.size();
+	}
+
+	private synchronized void kill() {
+	    done = true;
+	}
+
+	public void run() {
+	    while (true) {
+		try {
+		    synchronized (this) {
+			if (done)
+			    return;
+		    }
+
+		    final int size = testSet.size();
+		    boolean doWrite;
+		    if (size < idealSize * 0.66)
+			doWrite = true;
+		    else if (size > idealSize * 1.33)
+			doWrite = false;
+		    else 
+			doWrite = random.nextBoolean();
+
+		    if (doWrite) {
+			final TestEntry e = TestEntries.newEntry();
+			for (int i=0; i<readers.length; i++)
+			    readers[i].writen(e);
+			space.write((Entry)e, null, Long.MAX_VALUE);
+			testSet.add(e);
+		    } else {
+			final int c = random.nextInt(size);
+			final TestEntry e = (TestEntry)testSet.remove(c);
+			for (int i=0; i<readers.length; i++)
+			    readers[i].removed(e);
+			if (null == space.take((Entry)e, null, 0)) {
+			    final String msg = getName() + " take returned null";
+			    logger.log(Level.INFO, msg);
+			    setCompletionState(new TestException(msg));
+			    return;
+			}
+		    }		    
+		} catch (Throwable t) {
+		    final String msg = getName() + " failure in main loop";
+		    logger.log(Level.INFO, msg, t);
+		    setCompletionState(new TestException(msg, t));
+		    return;
+		}
+	    }
+	}
+    }
+
+    private static class ReaderThread extends Thread {
+	final private LeaseRenewalManager lrm;
+	final private int batchSize;
+	final private Collection testSet;
+	final private int trails;
+	final private JavaSpace05 space;
+	private Throwable completionState = null;
+
+	private LinkedList removals = new LinkedList();
+	private LinkedList writes = new LinkedList();
+
+	private boolean waitingOnCommit = false;
+
+	// Current trail
+	private int trailNumber = -1;
+	
+	private ReaderThread(int threadNum, int trails, int batchSize,
+			     Collection testSet, LeaseRenewalManager lrm,
+			     JavaSpace05 space)
+	{
+	    super("ReaderThread-" + threadNum);
+	    this.lrm = lrm;
+	    this.batchSize = batchSize;
+	    this.trails = trails;
+	    this.testSet = new java.util.HashSet(testSet);
+	    this.space = space;
+	}
+
+	synchronized void setCompletionState(Throwable v) {
+	    if (completionState == null)
+		completionState = v;
+	}
+
+	synchronized Exception getCompletionState() throws Exception {
+	    if (completionState == null) return null;
+	    
+	    if (completionState instanceof Exception)
+		throw (Exception)completionState;
+
+	    if (completionState instanceof Error) 
+		throw (Error)completionState;
+
+	    throw new AssertionError(completionState);
+	}
+
+	private String nameAndTrail() {
+	    return getName() + ":trial:" + trailNumber + " ";
+	}
+
+	private TestException failure(String msg) throws TestException {
+	    msg = nameAndTrail() + msg;
+	    logger.log(Level.INFO, msg);
+	    throw new TestException(msg);
+	}
+
+	private TestException failure(String msg, Throwable t)
+	    throws TestException
+	{
+	    msg = nameAndTrail() + msg;
+	    logger.log(Level.INFO, msg, t);
+	    throw new TestException(msg, t);
+	}
+
+	private synchronized void removed(TestEntry e) {
+	    removals.add(e);
+	    if (waitingOnCommit) {
+		waitingOnCommit = false;
+		notifyAll();
+	    }
+	}
+
+	private synchronized void writen(TestEntry e) {
+	    writes.add(e);
+	    if (waitingOnCommit) {
+		waitingOnCommit = false;
+		notifyAll();
+	    }
+	}
+
+	public void run() {
+	    try {
+		for (trailNumber=0; trailNumber<trails; trailNumber++) {
+		    trail();
+		}
+	    } catch (TestException t) {
+		setCompletionState(t);
+	    } catch (Throwable t) {
+		logger.log(Level.INFO, nameAndTrail() + "failed with", t);
+		setCompletionState(t);
+	    }
+	}
+
+	private void trail() throws TestException {
+	    synchronized (this) {
+		while (waitingOnCommit) {
+		    try {
+			wait();
+		    } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+			failure("interrupted", e);
+			return;
+		    }
+		}
+	    }
+		
+	    logger.log(Level.INFO, nameAndTrail() + " starting trial ");
+	    final Collection tmpls = TestEntries.newTemplates();
+	    final Set tbf = new java.util.HashSet();
+	    for (Iterator j=testSet.iterator(); j.hasNext();) {
+		final TestEntry e = (TestEntry)j.next();
+		if (TestEntries.isMatch(tmpls, e)) {
+		    tbf.add(e);
+		}
+	    }
+	    
+	    logger.log(Level.INFO, 
+		       nameAndTrail() + "looking for " + tbf.size() + " entries");
+	    logger.log(Level.INFO, 
+		       nameAndTrail() + "using:" + TestEntries.toString(tmpls));
+
+	    final MatchSet cr;
+	    final Lease l;
+	    TestEntry e;
+	    try {
+		cr = space.contents(tmpls, null, 60000, Long.MAX_VALUE);
+
+		l = cr.getLease();
+		if (tbf.size() < batchSize && l != null) {
+		    throw failure(
+		        "failed! got lease, but should not have. tbf.size:" + 
+			tbf.size());
+		} else if (tbf.size() >= batchSize && l == null) {
+		    throw failure(
+                        "failed! did not get lease, but should have. tbf.size:"
+			+ tbf.size());
+		}
+		    
+		if (l != null) {
+		    lrm.renewFor(l, Long.MAX_VALUE, 60000, null);
+		}
+
+		e = (TestEntry)cr.next();
+	    } catch (Throwable t) {
+		throw failure("failed with " + t + " during contents call phase",
+			      t);
+	    }
+
+	    final LinkedList notInTBF = new LinkedList();
+	    
+	    while (e != null) {
+		if (!tbf.remove(e)) {
+		    notInTBF.add(e);
+		    
+		    // Make sure all the extras match
+		    boolean found = TestEntries.isMatch(tmpls, e);
+		    if (!found) {
+			throw failure("failed. " + TestEntries.toString(e) +
+				      " did not match any templates");
+		    }		       
+		}
+
+		try {
+		    e = (TestEntry)cr.next();
+		} catch (Throwable t) {			
+		    throw failure("failed with " + t + " during next call", t);
+		}
+	    }
+
+	    final LinkedList removals;
+	    final LinkedList writes;
+	    synchronized (this) {
+		removals = this.removals;
+		writes = this.writes;
+		this.removals = new LinkedList();
+		this.writes = new LinkedList();
+		waitingOnCommit = true;
+	    }
+
+	    final int extras = notInTBF.size();
+	    final int missing = tbf.size();
+
+	    /* Go through the entries that were written while we were
+	     * going through the match set to see if any of them match
+	     * the `extras' entries we found (all of the extra entries
+	     * are in notInTBF). Also update the testSet 
+	     */
+	    while (!writes.isEmpty()) {
+		final TestEntry we = (TestEntry)writes.removeFirst();
+		
+		// Make sure there are no dups in the ones we did
+		// not know were coming
+		if (writes.contains(we)) {
+		    throw failure("failed." + TestEntries.toString(we) +
+				  " returned by contents twice");
+		}
+		    
+		testSet.add(we);
+		notInTBF.remove(we);
+	    }
+		
+	    // After accounting for the concurrent writes, if notInTBF
+	    // is still non-empty, we got something we should not have
+	    if (!notInTBF.isEmpty()) {
+		for (Iterator j=notInTBF.iterator(); j.hasNext();) {
+		    TestEntry ee = (TestEntry)j.next();
+		    logger.log(Level.INFO, nameAndTrail() + 
+			       TestEntries.toString(ee) + " not in tbf");
+		    }
+		
+		throw failure("Set of entries not found in TBF non-empty after " +
+			      "accounting for concurrent writes");
+	    }
+
+	    /* Go through the entries that were taken while we were
+	     * going through the match set to see if any of them match
+	     * the missing matches that were in testSet, but we could
+	     * not find. Along the way update testSet 
+	     */
+	    while (!removals.isEmpty()) {
+		final TestEntry re = (TestEntry)removals.removeFirst();
+		if (!testSet.remove(re)) {
+		    throw failure("Removed entry not in testSet", 
+				  new AssertionError());
+		}
+
+		tbf.remove(re);
+	    }
+
+
+	    // After account for concurrent takes, if tbf is still
+	    // non-empty we did not get something we should have
+	    if (!tbf.isEmpty()) {
+		final String msg = nameAndTrail() + "failed. tbf non-empty";
+		logger.log(Level.INFO, msg);
+		logger.log(Level.INFO, TestEntries.toString(tbf));
+		throw new TestException(msg);
+	    } else {
+		logger.log(Level.INFO, nameAndTrail() + "success(" +
+			   extras + " extras, " + missing + " missing)");
+	    }
+
+	    if (l != null) {
+		try {
+		    lrm.cancel(l);
+		} catch (Throwable t) {
+		    throw failure("failed with " + t + 
+				  " while canceling MatchSet lease", t);
+		}
+	    }
+	}
+    }
+}
+



Mime
View raw message