You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2013/02/23 12:37:23 UTC
svn commit: r1449297 - in
/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing:
LeaseGrantTestBase.java LeaseUsesTestBase.java UseNotifyLeaseTest.java
Author: peter_firmstone
Date: Sat Feb 23 11:37:22 2013
New Revision: 1449297
URL: http://svn.apache.org/r1449297
Log:
Attempt to fix last failing test UseNotifyLeaseTestRenew on arm
Modified:
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseGrantTestBase.java
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseUsesTestBase.java
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/UseNotifyLeaseTest.java
Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseGrantTestBase.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseGrantTestBase.java?rev=1449297&r1=1449296&r2=1449297&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseGrantTestBase.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseGrantTestBase.java Sat Feb 23 11:37:22 2013
@@ -45,12 +45,12 @@ public abstract class LeaseGrantTestBase
* If true then the tests expects leases to granted
* exactly. If false the grant can be for less than the request
*/
- private boolean exact = false;
+ private volatile boolean exact = false;
/**
* The length of time the lease should be asked for
*/
- protected long durationRequest;
+ protected volatile long durationRequest;
/**
* The expiration time that would be given for the duration request
@@ -58,32 +58,32 @@ public abstract class LeaseGrantTestBase
* <code>Lease.ANY</code>.
* @see #resourceRequested
*/
- protected long expirationRequest;
+ private volatile long expirationRequest;
/**
* The local time just after the request. <code>expirationRequest</code>
* is <code>requestStart + durationRequest</code>.
* @see #resourceRequested
*/
- protected long requestStart;
+ private volatile long requestStart;
/**
* The length of time that leases get cliped to if they are too
* long. A negative value indicates no cliping is expected
*/
- protected long clip = -1;
+ private volatile long clip = -1;
/*
* Acceptable slop interval between when we think lease will
* expire and when it acctually does.
*/
- protected long slop = 2000;
+ protected volatile long slop = 2000;
/**
* Test the passed lease to see if it has been granted for an
* acceptable length of time
*/
- protected boolean isAcceptable(Lease underTest) {
+ protected final synchronized boolean isAcceptable(Lease underTest) {
// if we asked for ANY lease, then any duration is cool
if (durationRequest == Lease.ANY) {
@@ -130,7 +130,7 @@ public abstract class LeaseGrantTestBase
* Return <code>true</code> if the <code>duration</code> is within
* the allowed slop range relative to the given <code>value</code>.
*/
- protected boolean withinSlop(long duration, long value) {
+ protected final synchronized boolean withinSlop(long duration, long value) {
return (duration > value - slop && duration < value + slop);
}
@@ -138,12 +138,12 @@ public abstract class LeaseGrantTestBase
* Log a requested lease and its result, for the given type of lease.
*/
protected void logRequest(String type, Lease lease) {
- logger.log(Level.INFO, "Lease " + type + ": " + lease);
- logger.log(Level.INFO, "\treq:" + expirationRequest);
- logger.log(Level.INFO, "\tgot:" + lease.getExpiration());
- logger.log(Level.INFO, "\taprox duration:" + (lease.getExpiration() -
- requestStart));
- logger.log(Level.INFO, "\tdrift:" + (lease.getExpiration() - expirationRequest));
+ logger.log(Level.INFO, "Lease {0}: {1}", new Object[]{type, lease});
+ logger.log(Level.INFO, "\treq:{0}", expirationRequest);
+ logger.log(Level.INFO, "\tgot:{0}", lease.getExpiration());
+ logger.log(Level.INFO, "\taprox duration:{0}", (lease.getExpiration() -
+ requestStart));
+ logger.log(Level.INFO, "\tdrift:{0}", (lease.getExpiration() - expirationRequest));
}
/**
@@ -153,7 +153,7 @@ public abstract class LeaseGrantTestBase
* @see #requestStart
* @see #expirationRequest
*/
- protected void resourceRequested() {
+ protected final synchronized void resourceRequested() {
requestStart = System.currentTimeMillis();
expirationRequest = requestStart + durationRequest;
@@ -219,10 +219,10 @@ public abstract class LeaseGrantTestBase
}
// Log out test options.
- logger.log(Level.INFO, "exact = " + exact);
- logger.log(Level.INFO, "clip = " + clip);
- logger.log(Level.INFO, "slop = " + slop);
- logger.log(Level.INFO, "durationRequest = " + durationRequest);
+ logger.log(Level.INFO, "exact = {0}", exact);
+ logger.log(Level.INFO, "clip = {0}", clip);
+ logger.log(Level.INFO, "slop = {0}", slop);
+ logger.log(Level.INFO, "durationRequest = {0}", durationRequest);
}
/**
Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseUsesTestBase.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseUsesTestBase.java?rev=1449297&r1=1449296&r2=1449297&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseUsesTestBase.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeaseUsesTestBase.java Sat Feb 23 11:37:22 2013
@@ -32,6 +32,7 @@ import com.sun.jini.qa.harness.QAConfig;
// Shared classes
import com.sun.jini.qa.harness.Test;
import com.sun.jini.test.share.TestBase;
+import java.util.concurrent.atomic.AtomicLong;
/**
@@ -45,22 +46,22 @@ public abstract class LeaseUsesTestBase
/**
* Lease being used
*/
- protected Lease lease = null;
+ private volatile Lease lease = null;
// Time lease will expire
- private long expTime;
+ private volatile long expTime;
// Time lease of lease duration
- private long durTime;
+ private volatile long durTime;
// How long until the lease should be renewed
- private long renewTime;
+ private volatile long renewTime;
// What to set renewTime to, if < 0 the half of duration
- private long renewWait;
+ private volatile long renewWait;
// Time to let cancel to propgate
- private long cancelSlop;
+ private volatile long cancelSlop;
// Set renew and exp times
private void setTimes() {
@@ -74,15 +75,17 @@ public abstract class LeaseUsesTestBase
renewTime = renewWait + curTime;
}
}
- private long renewals = 0;
- private boolean cancel;
- private long shutdownTime = -1;
- private long restartSleep = 10000;
+ private final AtomicLong renewals = new AtomicLong();
+ private volatile boolean cancel;
+ private volatile long shutdownTime = -1;
+ private 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
+ * @return Lease
+ * @throws TestException
* @see LeaseUsesTestBase#lease
*/
protected abstract Lease acquireResource() throws TestException;
@@ -92,6 +95,8 @@ public abstract class LeaseUsesTestBase
* 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
+ * @return true if still available
+ * @throws TestException
*/
protected abstract boolean isAvailable() throws TestException;
@@ -118,12 +123,13 @@ public abstract class LeaseUsesTestBase
* availability, most tests should not use this option. Defaults to
* 0.
* </DL>
+ * @throws Exception
*/
protected void parse() throws Exception {
super.parse();
// Get values from property file for this test.
- renewals = getConfig().getIntConfigVal("com.sun.jini.test.share.renew", 0);
+ renewals.set(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);
@@ -131,12 +137,12 @@ public abstract class LeaseUsesTestBase
cancelSlop = getConfig().getLongConfigVal("com.sun.jini.test.share.cancel_slop", 0);
// Log out test options.
- logger.log(Level.INFO, "renewals = " + renewals);
- logger.log(Level.INFO, "cancel = " + cancel);
- logger.log(Level.INFO, "renewWait = " + renewWait);
- logger.log(Level.INFO, "shutdownTime = " + shutdownTime);
- logger.log(Level.INFO, "restartSleep = " + restartSleep);
- logger.log(Level.INFO, "cancelSlop = " + cancelSlop);
+ logger.log(Level.INFO, "renewals = {0}", renewals);
+ logger.log(Level.INFO, "cancel = {0}", cancel);
+ logger.log(Level.INFO, "renewWait = {0}", renewWait);
+ logger.log(Level.INFO, "shutdownTime = {0}", shutdownTime);
+ logger.log(Level.INFO, "restartSleep = {0}", restartSleep);
+ logger.log(Level.INFO, "cancelSlop = {0}", cancelSlop);
}
public void run() throws Exception {
@@ -155,10 +161,10 @@ public abstract class LeaseUsesTestBase
throw new TestException("Lease had an improper duration");
}
- if (cancel && renewals <= 0) {
+ if (cancel && renewals.get() <= 0) {
cancel();
} else {
- logger.log(Level.INFO, "Expire Test: Slop = " + slop);
+ logger.log(Level.INFO, "Expire Test: Slop = {0}", slop);
while (true) {
@@ -185,42 +191,43 @@ public abstract class LeaseUsesTestBase
*/
final long preTime = System.currentTimeMillis();
final boolean stillThere;
+ final long postTime;
+ synchronized (this){
+ stillThere = isAvailable();
- stillThere = isAvailable();
-
- /*
- * We also use postTime as an approximation of the
- * current time for the remainder of this iteration
- */
- final long postTime = System.currentTimeMillis();
+ /*
+ * We also use postTime as an approximation of the
+ * current time for the remainder of this iteration
+ */
+ 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 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
- logger.log(Level.FINEST,
- "postTime: " + postTime
- + ", (expTime - slop): " + (expTime - slop));
- if (!stillThere && (postTime < expTime - slop)) {
- throw new TestException(
- "Resource was not available before lease expiration");
- }
+ // Check for early expiration against postTime
+ logger.log(Level.FINEST, "postTime: {0}, (expTime - slop): {1}",
+ new Object[]{postTime, expTime - slop});
+ if (!stillThere && (postTime < expTime - slop)) {
+ throw new TestException(
+ "Resource was not available before lease expiration");
+ }
- if (!stillThere) {
+ if (!stillThere) {
- // No use testing once it is gone
- break;
+ // No use testing once it is gone
+ break;
+ }
}
// Do we need to renew
- if (renewals > 0 && postTime > renewTime) {
+ if (renewals.get() > 0 && postTime > renewTime) {
lease.renew(durationRequest);
resourceRequested();
setTimes();
@@ -230,8 +237,8 @@ public abstract class LeaseUsesTestBase
throw new TestException(
"Renewed lease had an improper duration");
}
- renewals--;
- } else if (renewals == 0 && cancel) {
+ renewals.decrementAndGet();
+ } else if (renewals.get() == 0 && cancel) {
cancel();
/*
@@ -270,8 +277,8 @@ public abstract class LeaseUsesTestBase
*/
if (cancelSlop > 0) {
logger.log(Level.INFO,
- "Sleeping for " + cancelSlop + " milliseconds to "
- + "allow cancel to propagate...");
+ "Sleeping for {0}" + " milliseconds to "
+ + "allow cancel to propagate...", cancelSlop);
Thread.sleep(cancelSlop);
logger.log(Level.INFO, "awake");
}
Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/UseNotifyLeaseTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/UseNotifyLeaseTest.java?rev=1449297&r1=1449296&r2=1449297&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/UseNotifyLeaseTest.java (original)
+++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/UseNotifyLeaseTest.java Sat Feb 23 11:37:22 2013
@@ -35,16 +35,17 @@ import com.sun.jini.qa.harness.TestExcep
// Shared classes
import com.sun.jini.test.share.TestBase;
import com.sun.jini.test.share.UninterestingEntry;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Tests binding between leases and notifications in JavaSpaces
*/
public class UseNotifyLeaseTest extends LeaseUsesTestBase {
final private Entry aEntry = new UninterestingEntry();
- private LeasedSpaceListener listener;
- private JavaSpace space;
- private long callbackWait;
- private boolean verbose;
+ private volatile LeasedSpaceListener listener;
+ private volatile JavaSpace space;
+ private volatile long callbackWait;
+ private volatile boolean verbose;
/**
* Parse our args
@@ -79,6 +80,8 @@ public class UseNotifyLeaseTest extends
try {
listener = new LeasedSpaceListener(getConfig().getConfiguration());
space = (JavaSpace) services[0];
+ JavaSpace space = this.space;
+ LeasedSpaceListener listener = this.listener;
EventRegistration reg = space.notify(aEntry, null, listener,
durationRequest, null);
reg = (EventRegistration)
@@ -94,14 +97,16 @@ public class UseNotifyLeaseTest extends
}
return lease;
}
- private int count = 0;
+ private final AtomicInteger count = new AtomicInteger();
protected boolean isAvailable() throws TestException {
boolean bReturn = false;
try {
- logger.log(Level.FINEST, "Writing entry " + ++count);
- synchronized (listener) {
+ logger.log(Level.FINEST, "Writing entry {0}", count.getAndIncrement());
+ LeasedSpaceListener listener = this.listener;
+ JavaSpace space = this.space;
+ synchronized (listener) { // Can't synchronize on volatile field.
listener.received = false;
/*
@@ -110,12 +115,9 @@ public class UseNotifyLeaseTest extends
* listener.received transtion from false->true
*/
addOutriggerLease(space.write(aEntry, null, Lease.ANY), false);
- logger.log(Level.FINEST,
- "Waiting for listener to be called at "
- + (new java.util.Date()));
+ logger.log(Level.FINEST, "Waiting for listener to be called at {0}", (new java.util.Date()));
listener.wait(callbackWait);
- logger.log(Level.FINEST,
- "Wait done at " + (new java.util.Date()) + ", received = " + listener.received);
+ logger.log(Level.FINEST, "Wait done at {0}, received = {1}", new Object[]{new java.util.Date(), listener.received});
bReturn = listener.received;
}
} catch (Exception e) {