[jboss-svn-commits] JBL Code SVN: r27943 - in labs/jbosstm/trunk/ArjunaCore/arjuna: tests and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 13 05:34:56 EDT 2009


Author: adinn
Date: 2009-07-13 05:34:55 -0400 (Mon, 13 Jul 2009)
New Revision: 27943

Added:
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/objectstore.txt
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/reaper.txt
Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/build.xml
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreReactivationTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreReactivationTest2.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreRecoveryTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreRecoveryTest2.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreTest2.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStressTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStressTest2.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperMonitorTest.java
Log:
modified objectstore tests so they actually use the store specified in Environment.OBJECTSTORE_TYPE by setting Environment.TRANSACTION_LOG to ON, added byteman scripts for several of the reaper and objectstore tests and modified build script to run these tests using the script

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/build.xml
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/build.xml	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/build.xml	2009-07-13 09:34:55 UTC (rev 27943)
@@ -38,7 +38,6 @@
     </target>
 
     <target name="run.tests">
-
         <run.tests.macro>
             <tests>
                 <fileset dir="tests/classes" includes="**/*.java">
@@ -57,10 +56,38 @@
                     <!-- ReaperTestCase2 and 3 have timing issues - adinn to fix - JBTM-567 -->
                     <exclude name="**/ReaperTestCase2.java"/>
                     <exclude name="**/ReaperTestCase3.java"/>
+                    <!-- tests which have been modified to run using byteman scripts -->
+                    <exclude name="**/reaper/ReaperMonitorTest.java"/>
+                    <exclude name="**/objectstore/LogStoreRecoveryTest.java"/>
+                    <exclude name="**/objectstore/LogStoreTest2.java"/>
                 </fileset>
             </tests>
         </run.tests.macro>
-
+        <!-- reaper tests run using script reaper.txt -->
+        <run.tests.macro script="reaper.txt">
+            <tests>
+                <fileset dir="tests/classes">
+                    <include name="**/reaper/ReaperMonitorTest.java"/>
+                </fileset>
+            </tests>
+            <!--
+            <additional.jvmargs>
+                <jvmarg value="-Dorg.jboss.byteman.dump.generated.classes"/>
+                <jvmarg value="-Dorg.jboss.byteman.dump.generated.classes.directory=dump"/>
+                <jvmarg value="-Xdebug"/>
+                <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"/>
+            </additional.jvmargs>
+            -->
+        </run.tests.macro>
+        <!-- object store tests run using script objectstore.txt -->
+        <run.tests.macro script="objectstore.txt">
+            <tests>
+                <fileset dir="tests/classes">
+                    <include name="**/objectstore/LogStoreRecoveryTest.java"/>
+                    <include name="**/objectstore/LogStoreTest2.java"/>
+                </fileset>
+            </tests>
+        </run.tests.macro>
     </target>
 
 </project>

Added: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/objectstore.txt
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/objectstore.txt	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/objectstore.txt	2009-07-13 09:34:55 UTC (rev 27943)
@@ -0,0 +1,96 @@
+########################################################################
+#
+# byteman script used to ensure that core tests can sequence various
+# operations which normally depend upon waiting around for a background
+# thread to be scheduled.
+#
+
+#########################################################################
+# 3 rules to stop the log purger from proceeding until it is signalled
+# at a suitable point during a test. the log purger also signals in
+# order to allow the test code to detect that a purge has completed
+# should it wish to do so
+
+# rule to ensure the transaction log purger uses a very small timeout
+# so that it is ready to proceed straight away when signalled
+
+RULE override TRANSACTION_LOG_PURGE_TIME
+CLASS com.arjuna.ats.internal.arjuna.objectstore.LogStore
+METHOD <clinit>
+AT ENTRY
+BIND NOTHING
+IF TRUE
+DO System.setProperty(com.arjuna.ats.arjuna.common.Environment.TRANSACTION_LOG_PURGE_TIME, "100")
+ENDRULE
+
+# rule to ensure that the LogStore does not proceed to purge any
+# logs until the test signals it do so
+
+RULE delay log purge
+CLASS com.arjuna.ats.internal.arjuna.objectstore.LogPurger
+METHOD run()
+AT CALL writeRemovalEntries
+BIND NOTHING
+IF TRUE
+DO debug("LogStore waiting before purge"),
+   waitFor("LogStore.purge"),
+   debug("LogStore proceeding with purge")
+ENDRULE
+
+# matching rule to ensure that the LogStore signals any thread which
+# is waiting for it to finish purging the logs
+
+RULE done log purge
+CLASS com.arjuna.ats.internal.arjuna.objectstore.LogPurger
+METHOD run()
+AFTER CALL truncateLogs
+BIND NOTHING
+IF TRUE
+DO debug("Signalling purge complete"),
+   signalWake("LogStore.purged", true),
+   debug("Signalled purge complete")
+ENDRULE
+
+#########################################################################
+#
+# rules appropriate to specific tests
+#
+# n.b. several of the test don't want the purger to run. this happens by
+# default since the purger hist the waitFor and never gets signalled
+#
+
+#########################################################################
+# LogStoreRecoveryTest wants to delay the purge until it is ready for it
+# and then delay proceeding with the test until the purge has actually
+# happened
+
+RULE log store recovery test allow purge to proceed
+CLASS com.hp.mwtests.ts.arjuna.objectstore.LogStoreRecoveryTest
+METHOD test()
+AT CALL InputObjectState.<init>
+BIND NOTHING
+IF TRUE
+DO debug("Signalling purge to proceed"),
+   signalWake("LogStore.purge", true),
+   debug("Signalled purge to proceed -- waiting for completion"),
+   waitFor("LogStore.purged"),
+   debug("Purge completed")
+ENDRULE
+
+#########################################################################
+# LogStoreTest2 wants to delay the purge until it is ready for it
+# and then delay proceeding with the test until the purge has actually
+# happened
+
+RULE log store recovery test allow purge to proceed
+CLASS com.hp.mwtests.ts.arjuna.objectstore.LogStoreTest2
+METHOD test()
+AT CALL InputObjectState.<init>
+BIND NOTHING
+IF TRUE
+DO debug("Signalling purge to proceed"),
+   signalWake("LogStore.purge", true),
+   debug("Signalled purge to proceed -- waiting for completion"),
+   waitFor("LogStore.purged"),
+   debug("Purge completed")
+ENDRULE

Added: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/reaper.txt
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/reaper.txt	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/byteman-scripts/reaper.txt	2009-07-13 09:34:55 UTC (rev 27943)
@@ -0,0 +1,76 @@
+########################################################################
+#
+# byteman script used to ensure that core transaction reaper tests can
+# sequence various operations which normally depend upon waiting around
+# for the reaper thread and reaper worker thread to be scheduled.
+#
+
+#########################################################################
+# rules to control progress of the transaction reaper thread
+#
+
+# rule to pause the reaper thread inside its check method before it processes
+# a timed out entry. this rule also counts how many times this point has been
+# reached allowing other rules to ensure that they know which reapable is being
+# processes. It also signals before waiting so that other rules can delay until
+# this point is reached.
+
+RULE pause transaction reaper
+CLASS com.arjuna.ats.arjuna.coordinator.TransactionReaper
+METHOD check
+AT READ _status
+BIND reaper: TransactionReaper = $0,
+     element : ReaperElement = $e
+IF isRendezvous(reaper, 2)
+DO createCounter(element, 0)
+   rendezvous(reaper)
+ENDRULE
+
+#########################################################################
+# rules to control progress of the transaction reaper worker threads
+#
+
+# this rule makes sure the reaper worker thread pauses before starting
+# to process a queued reapable. this rule alsoadds a counter associated
+# with the reapable which is incremented as the status of the reapable
+# changes to reflect the new state.
+
+RULE pause transaction reaper worker
+CLASS com.arjuna.ats.arjuna.coordinator.TransactionReaper
+METHOD doCancellations
+AT READ _control
+BIND element : ReaperElement = $e,
+     worker : Thread = element._worker
+IF isRendezvous(worker, 2)
+DO incrementCounter(worker),
+   rendezvous(worker, 2)
+ENDRULE
+
+#########################################################################
+#
+# rules appropriate to specific tests
+
+#########################################################################
+# ReaperMonitorTest wants remote control of the reaper thread
+#
+
+RULE ReaperMonitorTest reaper remote control
+CLASS com.hp.mwtests.ts.arjuna.reaper.ReaperMonitorTest
+METHOD test()
+AT ENTRY
+BIND NOTHING
+IF TRUE
+DO createRendezvous($reaper, 2)
+ENDRULE
+
+# ReaperMonitorTest wants to delay the reaper check until it has inserted
+# a reapable
+
+RULE ReaperMonitorTest unlatch reaper thread
+CLASS com.hp.mwtests.ts.arjuna.reaper.ReaperMonitorTest
+METHOD test()
+AFTER CALL TransactionReaper.insert
+BIND NOTHING
+IF TRUE
+DO rendezvous($reaper)
+ENDRULE

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreReactivationTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreReactivationTest.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreReactivationTest.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -49,8 +49,10 @@
     {
         System.setProperty(Environment.COMMIT_ONE_PHASE, "NO");
         System.setProperty(Environment.OBJECTSTORE_TYPE, ArjunaNames.Implementation_ObjectStore_ActionLogStore().stringForm());
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
         System.setProperty(Environment.TRANSACTION_LOG_SYNC_REMOVAL, "false");
-        System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "1000000");  // essentially infinite
+        // the byteman script will enforce this
+        //System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "1000000");  // essentially infinite
 
         AtomicAction A = new AtomicAction();
         Uid txId = A.get_uid();

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreReactivationTest2.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreReactivationTest2.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreReactivationTest2.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -49,8 +49,10 @@
     {
         System.setProperty(Environment.COMMIT_ONE_PHASE, "NO");
         System.setProperty(Environment.OBJECTSTORE_TYPE, ArjunaNames.Implementation_ObjectStore_ActionLogStore().stringForm());
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
         System.setProperty(Environment.TRANSACTION_LOG_SYNC_REMOVAL, "true");
-        System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "1000000");  // essentially infinite
+        // the byteman script will enforce this
+        //System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "1000000");  // essentially infinite
 
         AtomicAction A = new AtomicAction();
         Uid txId = A.get_uid();

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreRecoveryTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreRecoveryTest.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreRecoveryTest.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -48,7 +48,8 @@
     public void test()
     {
         System.setProperty(Environment.OBJECTSTORE_TYPE, ArjunaNames.Implementation_ObjectStore_ActionLogStore().stringForm());
-        System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "10000");
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
+        //System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "10000");
 
         ObjectStore objStore = TxControl.getStore();
         final int numberOfTransactions = 1000;
@@ -86,18 +87,20 @@
                 ex.printStackTrace();
             }
         }
-
+        /*
         try {
+        */
             /*
                 * Give the purger thread a chance to run and delete
                 * the entries we've "removed" (really only marked as
                 * being removable.)
                 */
-
+       /*
             Thread.sleep(12000);
         }
         catch (final Exception ex) {
         }
+        */
 
         /*
            * Now get a list of entries to work on.

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreRecoveryTest2.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreRecoveryTest2.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreRecoveryTest2.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -81,8 +81,10 @@
 
         System.setProperty(Environment.COMMIT_ONE_PHASE, "NO");
         System.setProperty(Environment.OBJECTSTORE_TYPE, ArjunaNames.Implementation_ObjectStore_ActionLogStore().stringForm());
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
         System.setProperty(Environment.TRANSACTION_LOG_SYNC_REMOVAL, "false");
-        System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "1000000");  // essentially infinite
+        // the byteman script will enforce this
+        //System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "1000000");  // essentially infinite
 
         TestWorker[] workers = new TestWorker[threads];
 

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreTest.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreTest.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -47,6 +47,7 @@
     public void test()
     {
         System.setProperty(Environment.OBJECTSTORE_TYPE, ArjunaNames.Implementation_ObjectStore_ActionLogStore().stringForm());
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
 
         ObjectStore objStore = TxControl.getStore();
         final int numberOfTransactions = 1000;

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreTest2.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreTest2.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStoreTest2.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -47,7 +47,9 @@
     public void test()
     {
         System.setProperty(Environment.OBJECTSTORE_TYPE, ArjunaNames.Implementation_ObjectStore_ActionLogStore().stringForm());
-        System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "10000");
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
+        // the byteman script will manage this
+        //System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "10000");
 
         ObjectStore objStore = TxControl.getStore();
         final int numberOfTransactions = 1000;
@@ -75,16 +77,19 @@
             ex.printStackTrace();
         }
 
+        /*
         try {
+        */
             /*
                 * Give the purger thread a chance to run and delete
                 * the entry.
                 */
-
+        /*
             Thread.sleep(12000);
         }
         catch (final Exception ex) {
         }
+        */
 
         InputObjectState ios = new InputObjectState();
         boolean passed = false;

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStressTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStressTest.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStressTest.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -98,8 +98,10 @@
 
         System.setProperty(Environment.COMMIT_ONE_PHASE, "NO");
         System.setProperty(Environment.OBJECTSTORE_TYPE, ArjunaNames.Implementation_ObjectStore_ActionLogStore().stringForm());
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
         
-        System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "10000");
+        // the byteman script will manage this
+        //System.setProperty(Environment.TRANSACTION_LOG_PURGE_TIME, "10000");
 
         StressWorker[] workers = new StressWorker[threads];
 

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStressTest2.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStressTest2.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/LogStressTest2.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -51,6 +51,7 @@
     {
         System.setProperty(Environment.COMMIT_ONE_PHASE, "NO");
         System.setProperty(Environment.OBJECTSTORE_TYPE, ArjunaNames.Implementation_ObjectStore_ActionLogStore().stringForm());
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
         System.setProperty(Environment.TRANSACTION_LOG_SIZE, "10000");
 
         int timeLimit = 4; // hours

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTest.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTest.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -55,6 +55,7 @@
         ObjectName objName = new ObjectName("JNS:myname");
 
         objName.setClassNameAttribute(Environment.OBJECTSTORE_TYPE, imple);
+        System.setProperty(Environment.TRANSACTION_LOG, "ON");
         objName.setStringAttribute(Environment.LOCALOSROOT, localOSRoot);
         objName.setStringAttribute(Environment.OBJECTSTORE_DIR, objectStoreDir);
         objName.setStringAttribute(Environment.OBJECTSTORE_SHARE, shareStatus);

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperMonitorTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperMonitorTest.java	2009-07-13 09:09:07 UTC (rev 27942)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperMonitorTest.java	2009-07-13 09:34:55 UTC (rev 27943)
@@ -33,17 +33,35 @@
 {
     class DummyMonitor implements ReaperMonitor
     {
-        public void rolledBack (Uid txId)
+        public synchronized void rolledBack (Uid txId)
         {
             success = true;
+            notify();
+            notified = true;
         }
         
-        public void markedRollbackOnly (Uid txId)
+        public synchronized void markedRollbackOnly (Uid txId)
         {
             success = false;
+            notify();
+            notified = true;
         }
         
         public boolean success = false;
+        public boolean notified = false;
+
+        public synchronized boolean checkSucceeded(int msecsTimeout)
+        {
+            if (!notified) {
+                try {
+                    wait(msecsTimeout);
+                } catch (InterruptedException e) {
+                    // ignore
+                }
+            }
+
+            return success;
+        }
     }
     
     @Test
@@ -59,29 +77,14 @@
 
         A.begin();
 
+        /*
+         * the reaper byteman script will make sure we synchronize with the reaper after this call
+         * just before it schedules the reapable for processing. the timout in the check method is
+         * there in case something is really wrong and the reapabel does not get cancelled
+         */
         reaper.insert(A, 1);
-        
-        try
-        {
-            Thread.sleep(1100);
-        }
-        catch (final Throwable ex)
-        {  
-        }
 
-        reaper.check();
-        
-        try
-        {
-            Thread.sleep(500);
-        }
-        catch (final Throwable ex)
-        {  
-        }
-        
-        reaper.check();
-        
-        assertTrue(listener.success);
+        assertTrue(listener.checkSucceeded(30 * 1000));
     }
 
     public static boolean success = false;




More information about the jboss-svn-commits mailing list