[jboss-svn-commits] JBL Code SVN: r31579 - in labs/jbosstm/trunk/ArjunaCore/arjuna: classes/com/arjuna/ats/arjuna/common and 14 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 11 14:44:21 EST 2010


Author: mark.little at jboss.com
Date: 2010-02-11 14:44:20 -0500 (Thu, 11 Feb 2010)
New Revision: 31579

Added:
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/atomicaction/AppendLogUnitTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/TxLogStateManagerUnitTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/uid/UidHelperUnitTest.java
Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/AtomicAction.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/StateManager.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/Mutex.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/Uid.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/state/OutputObjectState.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/Header.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/LogWriteStateManager.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/common/UidHelper.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/AppendLogTransaction.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/objectstore/ActionStore.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/tools/log/EditableAtomicAction.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/common/MutexUnitTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/common/TypesUnitTest.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/resources/BasicThreadedObject.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/ExtendedObject.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/ExtendedUnitTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/threadaction/ThreadActionTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/tools/LogEditorUnitTest.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/uid/UidUnitTest.java
Log:
https://jira.jboss.org/jira/browse/JBTM-698

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/AtomicAction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/AtomicAction.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/AtomicAction.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -336,7 +336,7 @@
 	 * @return a handle on the current AtomicAction (if any) so that the thread
 	 *         can later resume association if required.
 	 *
-	 * message com.arjuna.ats.atomicaction_1 Attempt to suspend a
+	 * @message com.arjuna.ats.atomicaction_1 [com.arjuna.ats.atomicaction_1] Attempt to suspend a
 	 * non-AtomicAction transaction. Type is {0}
 	 */
 

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/StateManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/StateManager.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/StateManager.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -423,7 +423,7 @@
                 }
             }
         }
-
+        
         return result;
     }
 
@@ -1472,10 +1472,10 @@
                         usingActions.put(action.get_uid(), action);
                 }
             }
+            
+            result = true;
         }
 
-        result = true;
-
         return result;
     }
 

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/Mutex.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/Mutex.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/Mutex.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -146,7 +146,7 @@
 		    tsLogger.arjLoggerI18N.warn("com.arjuna.ats.arjuna.common.Mutex_2");
 		}
 		
-		return Mutex.LOCKED;
+		return Mutex.ERROR;
 	    }
 	    else
 	    {

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/Uid.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/Uid.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/Uid.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -148,6 +148,9 @@
 
     public Uid (byte[] byteForm)
     {
+        if (byteForm == null)
+            throw new IllegalArgumentException();
+        
         hostAddr = new long[2];
         _hashValue = -1;
         _stringForm = null;
@@ -195,6 +198,9 @@
 
     public Uid(String uidString, boolean errsOk)
     {
+        if (uidString == null)
+            throw new IllegalArgumentException();
+        
         char theBreakChar = Uid.getBreakChar(uidString);
 
         hostAddr = new long[2];
@@ -305,7 +311,14 @@
             {
                 try
                 {
+                    /*
+                     * We do this so the instance is printable, but
+                     * it shouldn't be usable from here on in!
+                     */
+                    
                     this.copy(Uid.nullUid());
+                    
+                    _valid = false;
                 }
                 catch (Exception e)
                 {

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/state/OutputObjectState.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/state/OutputObjectState.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/state/OutputObjectState.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -133,7 +133,7 @@
 	bufferUid = new Uid(newUid);
 	super._valid = bufferUid.valid();
 	
-	imageType = new String(tName);
+	imageType = (tName == null ? null : new String(tName));
     }
 
 public OutputObjectState (Uid newUid, String tName, byte[] buffer)
@@ -150,7 +150,7 @@
 	bufferUid = new Uid(newUid);
 	super._valid = bufferUid.valid();
 	
-	imageType = new String(tName);
+	imageType = (tName == null ? null : new String(tName));
     }
 
 public final boolean notempty ()

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/Header.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/Header.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/Header.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -26,7 +26,7 @@
  * Tyne and Wear,
  * UK.  	    
  *
- * $Id: LogWriteStateManager.java 2342 2006-03-30 13:06:17Z  $
+ * $Id$
  */
 
 package com.arjuna.ats.internal.arjuna;

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/LogWriteStateManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/LogWriteStateManager.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/LogWriteStateManager.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -51,6 +51,10 @@
  * @since JTS 4.1.
  */
 
+/**
+ * Needs further consideration and then completion.
+ */
+
 public class LogWriteStateManager extends StateManager
 {
 

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/common/UidHelper.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/common/UidHelper.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/common/UidHelper.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -32,7 +32,6 @@
 package com.arjuna.ats.internal.arjuna.common;
 
 import java.io.IOException;
-import java.security.InvalidParameterException;
 
 import com.arjuna.ats.arjuna.common.Uid;
 import com.arjuna.ats.arjuna.state.InputBuffer;
@@ -42,21 +41,22 @@
 {
     public static final Uid unpackFrom (InputBuffer buff) throws IOException
     {
-        byte[] byteForm = buff.unpackBytes();
+        if (buff == null)
+            throw new IllegalArgumentException();
         
-        if (byteForm == null)
-            throw new IOException();
-        
-        return new Uid(byteForm);
+        return new Uid(buff.unpackBytes());
     }
 
     public static final void packInto (Uid u, OutputBuffer buff)
             throws IOException
     {
+        if ((u == null) || (buff == null))
+            throw new IllegalArgumentException();
+        
         if (u.valid())
             buff.packBytes(u.getBytes());
         else
-            throw new InvalidParameterException();
+            throw new IllegalArgumentException();
     }
 
     private UidHelper()

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/AppendLogTransaction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/AppendLogTransaction.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/AppendLogTransaction.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -31,20 +31,21 @@
 
 package com.arjuna.ats.internal.arjuna.coordinator;
 
-import com.arjuna.ats.arjuna.logging.tsLogger;
-import com.arjuna.ats.arjuna.logging.FacilityCode;
+import com.arjuna.ats.arjuna.TopLevelAction;
 
-import com.arjuna.ats.arjuna.AtomicAction;
-
-import com.arjuna.common.util.logging.*;
-
 /**
  * @author Mark Little (mark at arjuna.com)
  * @version $Id: AppendLogTransaction.java 2342 2006-03-30 13:06:17Z  $
  * @since JTS 4.1.
  */
 
-public class AppendLogTransaction extends AtomicAction
+/**
+ * Needs further consideration and then completion.
+ */
+
+// may no longer be needed due to TxLog work.
+
+public class AppendLogTransaction extends TopLevelAction
 {
 
     public final boolean setLoggedTransaction (AppendLogTransaction previous)

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/objectstore/ActionStore.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/objectstore/ActionStore.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/objectstore/ActionStore.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -266,23 +266,8 @@
 
     public ActionStore(int shareStatus)
     {
-        super(shareStatus);
-
-        try
-        {
-            setupStore(arjPropertyManager.getObjectStoreEnvironmentBean()
-                    .getLocalOSRoot());
-        }
-        catch (ObjectStoreException e)
-        {
-            if (tsLogger.arjLoggerI18N.isWarnEnabled())
-                tsLogger.arjLogger.warn(e);
-
-            super.makeInvalid();
-
-            throw new com.arjuna.ats.arjuna.exceptions.FatalError(e.toString(),
-                    e);
-        }
+        this(arjPropertyManager.getObjectStoreEnvironmentBean()
+                    .getLocalOSRoot(), shareStatus);
     }
 
     protected synchronized boolean setupStore (String location)

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/tools/log/EditableAtomicAction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/tools/log/EditableAtomicAction.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/tools/log/EditableAtomicAction.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -27,7 +27,13 @@
 import com.arjuna.ats.arjuna.coordinator.ActionStatus;
 import com.arjuna.ats.arjuna.coordinator.RecordListIterator;
 import com.arjuna.ats.arjuna.coordinator.TwoPhaseOutcome;
+import com.arjuna.ats.arjuna.logging.tsLogger;
 
+/**
+ * @message com.arjuna.ats.internal.arjuna.tools.log.eaa1 [com.arjuna.ats.internal.arjuna.tools.log.eaa1] Transaction {0} and {1} not activate.
+ * @message com.arjuna.ats.internal.arjuna.tools.log.eaa2 [com.arjuna.ats.internal.arjuna.tools.log.eaa2] Error - could not get resource to forget heuristic. Left on Heuristic List.
+ */
+
 public class EditableAtomicAction extends AtomicAction implements EditableTransaction  // going to have to be one per action type because of state differences
 {
     public EditableAtomicAction (final Uid u)
@@ -37,7 +43,13 @@
         _activated = activate();
         
         if (!_activated)
-            System.err.println("Transaction "+u+" and "+type()+" not activated.");
+        {
+            if (tsLogger.arjLoggerI18N.isWarnEnabled())
+            {
+                    tsLogger.arjLoggerI18N.warn("com.arjuna.ats.internal.arjuna.tools.log.eaa1", new Object[]
+                    { u, type() });
+            }
+        }
     }
     
     /**
@@ -47,7 +59,7 @@
     
     public void moveHeuristicToPrepared (int index) throws IndexOutOfBoundsException
     {
-        if ((index < 0) || (index > super.heuristicList.size()))
+        if ((index < 0) || (index >= super.heuristicList.size()))
             throw new IndexOutOfBoundsException();
         else
         {
@@ -56,7 +68,7 @@
             
             RecordListIterator iter = new RecordListIterator(super.heuristicList);
             AbstractRecord rec = iter.iterate();
-            
+
             for (int i = 0; i < index; i++)
                 rec = iter.iterate();
 
@@ -91,7 +103,12 @@
                 super.updateState();
             }
             else
-                System.err.println("Error - could not get resource to forget heuristic. Left on Heuristic List.");
+            {
+                if (tsLogger.arjLoggerI18N.isWarnEnabled())
+                {
+                        tsLogger.arjLoggerI18N.warn("com.arjuna.ats.internal.arjuna.tools.log.eaa2");
+                }
+            }
         }
     }
     
@@ -101,7 +118,7 @@
     
     public void deleteHeuristicParticipant (int index) throws IndexOutOfBoundsException
     {
-        if ((index < 0) || (index > super.heuristicList.size()))
+        if ((index < 0) || (index >= super.heuristicList.size()))
             throw new IndexOutOfBoundsException();
         else
         {

Added: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/atomicaction/AppendLogUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/atomicaction/AppendLogUnitTest.java	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/atomicaction/AppendLogUnitTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.hp.mwtests.ts.arjuna.atomicaction;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.TopLevelAction;
+import com.arjuna.ats.arjuna.coordinator.ActionStatus;
+import com.arjuna.ats.internal.arjuna.coordinator.AppendLogTransaction;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class AppendLogUnitTest
+{
+    @Test
+    public void test() throws Exception
+    {
+        AppendLogTransaction alog1 = new AppendLogTransaction();
+        AppendLogTransaction alog2 = new AppendLogTransaction();
+        
+        alog1.begin();
+        alog2.begin();
+        
+        alog1.setLoggedTransaction(alog2);
+        
+        alog2.commit();
+        alog1.commit();
+    }
+}

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/common/MutexUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/common/MutexUnitTest.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/common/MutexUnitTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -26,6 +26,39 @@
 
 import static org.junit.Assert.*;
 
+class MutexThread extends Thread
+{
+    public MutexThread (Mutex share)
+    {
+        _mutex = share;
+    }
+    
+    public void run ()
+    {
+        if (_mutex.lock() == Mutex.LOCKED)
+        {
+            for (int i = 0; i < 1000; i++)
+            {
+                // do some work
+                
+                System.currentTimeMillis();
+            }
+            
+            _mutex.unlock();
+        }
+
+        _done = true;
+    }
+    
+    public boolean valid ()
+    {
+        return _done;
+    }
+    
+    private Mutex _mutex;
+    private boolean _done = false;
+}
+
 public class MutexUnitTest
 {
     @Test
@@ -39,6 +72,38 @@
     }
     
     @Test
+    public void testThreaded () throws Exception
+    {
+        Mutex mx = new Mutex();
+        MutexThread mt1 = new MutexThread(mx);
+        MutexThread mt2 = new MutexThread(mx);
+        
+        mt1.run();
+        mt2.run();
+        
+        try
+        {
+            mt1.join();
+            mt2.join();
+        }
+        catch (final Throwable ex)
+        {
+            fail();
+        }
+        
+        assertTrue(mt1.valid());
+        assertTrue(mt2.valid());
+    }
+    
+    @Test
+    public void testInvalid () throws Exception
+    {
+        Mutex mx = new Mutex();
+
+        assertEquals(mx.unlock(), Mutex.ERROR);
+    }
+    
+    @Test
     public void testReentrantMutex () throws Exception
     {
         Mutex mx = new Mutex();

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/common/TypesUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/common/TypesUnitTest.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/common/TypesUnitTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -63,6 +63,10 @@
         ObjectStatus.print(pw, ObjectStatus.ACTIVE);
         
         assertEquals(ObjectStatus.toString(ObjectStatus.ACTIVE_NEW), "ACTIVE_NEW");
+        assertEquals(ObjectStatus.toString(ObjectStatus.PASSIVE), "PASSIVE");
+        assertEquals(ObjectStatus.toString(ObjectStatus.PASSIVE_NEW), "PASSIVE_NEW");
+        assertEquals(ObjectStatus.toString(ObjectStatus.DESTROYED), "DESTROYED");
+        assertEquals(ObjectStatus.toString(ObjectStatus.UNKNOWN_STATUS), "UNKNOWN_STATUS");
     }
     
     @Test
@@ -75,6 +79,8 @@
         ObjectType.print(pw, ObjectType.ANDPERSISTENT);
         
         assertEquals(ObjectType.toString(ObjectType.NEITHER), "NEITHER");
+        assertEquals(ObjectType.toString(ObjectType.RECOVERABLE), "RECOVERABLE");
+        assertEquals(ObjectType.toString(ObjectType.UNKNOWN_TYPE), "UNKNOWN_TYPE");
     }
     
     @Test

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	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -34,6 +34,7 @@
 import com.arjuna.ats.arjuna.common.Uid;
 import com.arjuna.ats.arjuna.common.arjPropertyManager;
 import com.arjuna.ats.arjuna.coordinator.TxControl;
+import com.arjuna.ats.arjuna.exceptions.FatalError;
 import com.arjuna.ats.arjuna.exceptions.ObjectStoreException;
 import com.arjuna.ats.arjuna.objectstore.ObjectStore;
 import com.arjuna.ats.arjuna.objectstore.ObjectStoreIterator;

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/BasicThreadedObject.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/BasicThreadedObject.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/BasicThreadedObject.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -57,9 +57,10 @@
 
             Thread.yield();
         } else {
-            System.out.println("BasicThreadedObject " + uid + " adding to action " + BasicThreadedObject.A.get_uid());
+            System.out.println("BasicThreadedObject " + uid + " adding to existing action");
 
-            BasicThreadedObject.A.addThread();
+            if (A != null)
+                BasicThreadedObject.A.addThread();
 
             Thread.yield();
         }

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/ExtendedObject.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/ExtendedObject.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/resources/ExtendedObject.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -33,6 +33,8 @@
 
 import com.arjuna.ats.arjuna.*;
 import com.arjuna.ats.arjuna.common.*;
+import com.arjuna.ats.arjuna.coordinator.BasicAction;
+import com.arjuna.ats.arjuna.coordinator.RecordType;
 import com.arjuna.ats.arjuna.state.*;
 
 public class ExtendedObject extends StateManager
@@ -68,6 +70,11 @@
         getMutex().unlock();
     }
     
+    public void set_status ()
+    {
+        super.setStatus(ObjectStatus.PASSIVE);
+    }
+    
     public boolean lock ()
     {
         return super.tryLockMutex();
@@ -78,6 +85,11 @@
         return super.unlockMutex();
     }
 
+    public boolean remember (BasicAction act)
+    {
+        return super.rememberAction(act, RecordType.ACTIVATION);
+    }
+    
     public void incr(int value)
     {
         modified();

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/ExtendedUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/ExtendedUnitTest.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/ExtendedUnitTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -38,6 +38,7 @@
 import com.arjuna.ats.arjuna.ObjectStatus;
 import com.arjuna.ats.arjuna.ObjectType;
 import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.internal.arjuna.thread.ThreadActionData;
 
 import com.hp.mwtests.ts.arjuna.resources.*;
 
@@ -96,11 +97,49 @@
     }
     
     @Test
-    public void tryLock () throws Exception
+    public void testTryLock () throws Exception
     {
         ExtendedObject bo = new ExtendedObject();
         
         assertTrue(bo.lock());
         assertTrue(bo.unlock());
     }
+    
+    @Test
+    public void testFail () throws Exception
+    {
+        ExtendedObject bo = new ExtendedObject();
+        AtomicAction A = new AtomicAction();
+        
+        A.begin();
+        A.commit();
+        
+        ThreadActionData.pushAction(A);  // put it back on this thread.
+        
+        bo.deactivate();
+        bo.set_status();
+        
+        assertEquals(bo.activate(), false);
+        assertEquals(bo.destroy(), false);
+    }
+ 
+    @Test
+    public void testRememberAction () throws Exception
+    {
+        ExtendedObject bo = new ExtendedObject();
+        final Uid u = bo.get_uid();
+        
+        bo.activate();
+        bo.deactivate();
+        
+        bo = new ExtendedObject(u);
+        
+        AtomicAction A = new AtomicAction();
+        
+        A.begin();
+        
+        assertTrue(bo.remember(A));
+        
+        A.commit();
+    }
 }

Added: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/TxLogStateManagerUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/TxLogStateManagerUnitTest.java	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/statemanager/TxLogStateManagerUnitTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 1998, 1999, 2000,
+ *
+ * Arjuna Solutions Limited,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: BasicTest.java 2342 2006-03-30 13:06:17Z  $
+ */
+
+package com.hp.mwtests.ts.arjuna.statemanager;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.ObjectModel;
+import com.arjuna.ats.arjuna.ObjectStatus;
+import com.arjuna.ats.arjuna.ObjectType;
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.common.arjPropertyManager;
+import com.arjuna.ats.internal.arjuna.LogWriteStateManager;
+
+import com.hp.mwtests.ts.arjuna.resources.*;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+class TxStateManager extends LogWriteStateManager
+{
+    public TxStateManager ()
+    {
+        super(ObjectModel.MULTIPLE);
+    }
+    
+    public boolean modified ()
+    {
+        return super.modified();
+    }
+}
+
+public class TxLogStateManagerUnitTest
+{
+    @Test
+    public void test() throws Exception
+    {
+        AtomicAction A = new AtomicAction();
+        TxStateManager tm = new TxStateManager();
+        
+        arjPropertyManager.getCoordinatorEnvironmentBean().setClassicPrepare(true);
+        
+        A.begin();
+        
+        assertTrue(tm.modified());       
+        assertTrue(tm.writeOptimisation());
+        
+        A.commit();
+    }
+}

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/threadaction/ThreadActionTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/threadaction/ThreadActionTest.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/threadaction/ThreadActionTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -32,7 +32,10 @@
  */
 
 import com.hp.mwtests.ts.arjuna.resources.BasicThreadedObject;
+import com.arjuna.ats.arjuna.AtomicAction;
 import com.arjuna.ats.arjuna.coordinator.*;
+import com.arjuna.ats.internal.arjuna.thread.ThreadActionData;
+import com.arjuna.ats.internal.arjuna.thread.ThreadSetup;
 
 import java.lang.Thread;
 
@@ -41,6 +44,21 @@
 import org.junit.Test;
 import static org.junit.Assert.*;
 
+class DummySetup implements ThreadSetup
+{
+    public void setup ()
+    {
+        _called = true;
+    }
+    
+    public boolean called ()
+    {
+        return _called;
+    }
+    
+    private boolean _called = false;
+}
+
 public class ThreadActionTest
 {
     @Test
@@ -66,4 +84,31 @@
         System.out.println("Main thread has action " + BasicAction.Current());
     }
 
+    @Test
+    public void testOthers ()
+    {
+        DummySetup ds = new DummySetup();
+        
+        ThreadActionData.addSetup(ds);
+
+        AtomicAction A = new AtomicAction();
+        AtomicAction B = new AtomicAction();
+        
+        A.begin();
+        B.begin();      
+        
+        assertTrue(ThreadActionData.currentAction() != null);
+        
+        ThreadActionData.restoreActions(B);
+        
+        assertEquals(ThreadActionData.popAction(), B);
+        
+        ThreadActionData.purgeActions(Thread.currentThread());
+        
+        assertTrue(ds.called());
+        
+        ThreadActionData.removeSetup(ds);
+        
+        ThreadActionData.popAction(Thread.currentThread().getName());
+    }
 }

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/tools/LogEditorUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/tools/LogEditorUnitTest.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/tools/LogEditorUnitTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -89,7 +89,7 @@
         B.add(new CrashRecord(CrashRecord.CrashLocation.CrashInCommit,
                 CrashRecord.CrashType.HeuristicHazard));
         B.add(new CrashRecord(CrashRecord.CrashLocation.CrashInCommit,
-                CrashRecord.CrashType.HeuristicHazard));
+                CrashRecord.CrashType.Normal));
         B.add(new CrashRecord(CrashRecord.CrashLocation.CrashInCommit,
                 CrashRecord.CrashType.HeuristicHazard));
 
@@ -104,7 +104,7 @@
         
         assertTrue(eaa.toString() != null);
         
-        eaa.moveHeuristicToPrepared(0);
+        eaa.moveHeuristicToPrepared(1);
         
         try
         {

Added: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/uid/UidHelperUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/uid/UidHelperUnitTest.java	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/uid/UidHelperUnitTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors 
+ * as indicated by the @author tags. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.hp.mwtests.ts.arjuna.uid;
+
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+import com.arjuna.ats.internal.arjuna.common.UidHelper;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class UidHelperUnitTest
+{
+    @Test
+    public void test () throws Exception
+    {
+        Uid u = new Uid("hello", true);  // should be invalid!
+        
+        assertEquals(u.valid(), false);
+        
+        try
+        {
+            u = UidHelper.unpackFrom(null);
+            
+            fail();
+        }
+        catch (final IllegalArgumentException ex)
+        {
+        }
+        
+        try
+        {
+            UidHelper.packInto(null, new OutputObjectState());
+            
+            fail();
+        }
+        catch (final IllegalArgumentException ex)
+        {
+        }
+        
+        try
+        {
+            UidHelper.packInto(u, new OutputObjectState());
+            
+            fail();
+        }
+        catch (final IllegalArgumentException ex)
+        {
+        }
+    }
+}

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/uid/UidUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/uid/UidUnitTest.java	2010-02-11 18:43:58 UTC (rev 31578)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/uid/UidUnitTest.java	2010-02-11 19:44:20 UTC (rev 31579)
@@ -27,6 +27,8 @@
 import java.io.PrintStream;
 
 import com.arjuna.ats.arjuna.common.*;
+import com.arjuna.ats.arjuna.exceptions.FatalError;
+
 import org.junit.Test;
 
 import static org.junit.Assert.*;
@@ -47,6 +49,71 @@
     }
     
     @Test
+    public void testInvalid () throws Exception
+    {
+        Uid u = null;
+        
+        try
+        {
+            u = new Uid(null, 0, 0, 0);
+            
+            fail();
+        }
+        catch (final FatalError ex)
+        {
+        }   
+
+        try
+        {
+            u = new Uid("hello world", false);
+            
+            fail();
+        }
+        catch (final FatalError ex)
+        {
+        }
+
+        try
+        {
+            u = new Uid((String) null);
+            
+            fail();
+        }
+        catch (final IllegalArgumentException ex)
+        {
+        }
+        
+        try
+        {
+            u = new Uid((byte[]) null);
+            
+            fail();
+        }
+        catch (final IllegalArgumentException ex)
+        {
+        }
+        
+        byte[] b = {0, 0};
+        u = new Uid(b);
+        
+        assertEquals(u.valid(), false);
+    }
+    
+    @Test
+    public void testComparisons () throws Exception
+    {
+        Uid u = new Uid();
+
+        assertEquals(u.equals(new Object()), false);
+        assertTrue(u.notEquals(null));
+        assertEquals(u.notEquals(u), false);
+        
+        assertEquals(u.lessThan(null), false);
+        assertEquals(u.greaterThan(null), false);
+        assertEquals(u.greaterThan(u), false);
+    }
+    
+    @Test
     public void testSerialization () throws Exception
     {
         Uid u1 = new Uid();



More information about the jboss-svn-commits mailing list