[jboss-svn-commits] JBL Code SVN: r37210 - labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Jul 2 12:40:22 EDT 2011


Author: mark.little at jboss.com
Date: 2011-07-02 12:40:22 -0400 (Sat, 02 Jul 2011)
New Revision: 37210

Added:
   labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/ComparisonUnitTest.java
   labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/LinkedListUnitTest.java
Log:


Added: labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/ComparisonUnitTest.java
===================================================================
--- labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/ComparisonUnitTest.java	                        (rev 0)
+++ labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/ComparisonUnitTest.java	2011-07-02 16:40:22 UTC (rev 37210)
@@ -0,0 +1,291 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY 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 along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.stm;
+
+import java.io.IOException;
+
+import org.jboss.stm.annotations.Transactional;
+import org.jboss.stm.annotations.ReadLock;
+import org.jboss.stm.annotations.DurableState;
+import org.jboss.stm.annotations.WriteLock;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.ObjectType;
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.coordinator.ActionStatus;
+import com.arjuna.ats.arjuna.coordinator.BasicAction;
+import com.arjuna.ats.arjuna.state.InputObjectState;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+import com.arjuna.ats.txoj.Lock;
+import com.arjuna.ats.txoj.LockManager;
+import com.arjuna.ats.txoj.LockMode;
+import com.arjuna.ats.txoj.LockResult;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for the Class class.
+ * 
+ * @author Mark Little
+ */
+
+public class ComparisonUnitTest extends TestCase
+{
+
+    public class AtomicObject extends LockManager
+    {
+        public AtomicObject()
+        {
+            super();
+            
+            state = 0;
+
+            AtomicAction A = new AtomicAction();
+
+            A.begin();
+
+            if (setlock(new Lock(LockMode.WRITE), 0) == LockResult.GRANTED)
+            {
+                if (A.commit() == ActionStatus.COMMITTED)
+                    System.out.println("Created persistent object " + get_uid());
+                else
+                    System.out.println("Action.commit error.");
+            }
+            else
+            {
+                A.abort();
+
+                System.out.println("setlock error.");
+            }
+        }
+  
+        public void incr (int value) throws Exception
+        {
+            AtomicAction A = new AtomicAction();
+
+            A.begin();
+
+            if (setlock(new Lock(LockMode.WRITE), 0) == LockResult.GRANTED)
+            {
+                state += value;
+
+                if (A.commit() != ActionStatus.COMMITTED)
+                    throw new Exception("Action commit error.");
+                else
+                    return;
+            }
+
+            A.abort();
+
+            throw new Exception("Write lock error.");
+        }
+
+        public void set (int value) throws Exception
+        {
+            AtomicAction A = new AtomicAction();
+
+            A.begin();
+
+            if (setlock(new Lock(LockMode.WRITE), 0) == LockResult.GRANTED)
+            {
+                state = value;
+
+                if (A.commit() != ActionStatus.COMMITTED)
+                    throw new Exception("Action commit error.");
+                else
+                    return;
+            }
+
+            A.abort();
+
+            throw new Exception("Write lock error.");
+        }
+
+        public int get () throws Exception
+        {
+            AtomicAction A = new AtomicAction();
+            int value = -1;
+
+            A.begin();
+
+            if (setlock(new Lock(LockMode.READ), 0) == LockResult.GRANTED)
+            {
+                value = state;
+
+                if (A.commit() == ActionStatus.COMMITTED)
+                    return value;
+                else
+                    throw new Exception("Action commit error.");
+            }
+
+            A.abort();
+
+            throw new Exception("Read lock error.");
+        }
+
+        public boolean save_state (OutputObjectState os, int ot)
+        {
+            boolean result = super.save_state(os, ot);
+
+            if (!result)
+                return false;
+
+            try
+            {
+                os.packInt(state);
+            }
+            catch (IOException e)
+            {
+                result = false;
+            }
+
+            return result;
+        }
+
+        public boolean restore_state (InputObjectState os, int ot)
+        {
+            boolean result = super.restore_state(os, ot);
+
+            if (!result)
+                return false;
+
+            try
+            {
+                state = os.unpackInt();
+            }
+            catch (IOException e)
+            {
+                result = false;
+            }
+
+            return result;
+        }
+
+        public String type ()
+        {
+            return "/StateManager/LockManager/AtomicObject";
+        }
+
+        private int state;
+    }
+    
+    @Transactional
+    public interface Atomic
+    {
+        public void incr (int value) throws Exception;
+        
+        public void set (int value) throws Exception;
+        
+        public int get () throws Exception;
+    }
+    
+    @Transactional
+    public class ExampleSTM implements Atomic
+    {   
+        @ReadLock
+        public int get () throws Exception
+        {
+            return state;
+        }
+
+        @WriteLock
+        public void set (int value) throws Exception
+        {
+            state = value;
+        }
+        
+        @WriteLock
+        public void incr (int value) throws Exception
+        {
+            state += value;
+        }
+
+        @DurableState
+        private int state;
+    }
+
+    public void testAtomicObject () throws Exception
+    {
+        AtomicObject obj = new AtomicObject();
+        AtomicAction a = new AtomicAction();
+        
+        a.begin();
+        
+        obj.set(1234);
+        
+        a.commit();
+        
+        assertEquals(obj.get(), 1234);
+        
+        a = new AtomicAction();
+        
+        a.begin();
+        
+        obj.incr(1);
+        
+        a.abort();
+        
+        assertEquals(obj.get(), 1234);
+    }
+    
+    public void testExampleSTM () throws Exception
+    {
+        RecoverableContainer<Atomic> theContainer = new RecoverableContainer<Atomic>();
+        ExampleSTM basic = new ExampleSTM();
+        boolean success = true;
+        Atomic obj = null;
+        
+        try
+        {
+            obj = theContainer.enlist(basic);
+        }
+        catch (final Throwable ex)
+        {
+            ex.printStackTrace();
+            
+            success = false;
+        }
+        
+        assertTrue(success);
+        
+        AtomicAction a = new AtomicAction();
+        
+        a.begin();
+        
+        obj.set(1234);
+        
+        a.commit();
+
+        assertEquals(obj.get(), 1234);
+        
+        a = new AtomicAction();
+
+        a.begin();
+
+        obj.incr(1);
+        
+        a.abort();
+
+        assertEquals(obj.get(), 1234);
+    }
+}


Property changes on: labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/ComparisonUnitTest.java
___________________________________________________________________
Added: svn:executable
   + *

Added: labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/LinkedListUnitTest.java
===================================================================
--- labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/LinkedListUnitTest.java	                        (rev 0)
+++ labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/LinkedListUnitTest.java	2011-07-02 16:40:22 UTC (rev 37210)
@@ -0,0 +1,134 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY 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 along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.stm;
+
+import java.io.IOException;
+import java.util.Hashtable;
+
+import org.jboss.stm.annotations.RestoreState;
+import org.jboss.stm.annotations.SaveState;
+import org.jboss.stm.annotations.Transactional;
+import org.jboss.stm.annotations.ReadLock;
+import org.jboss.stm.annotations.DurableState;
+import org.jboss.stm.annotations.WriteLock;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.ObjectType;
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.coordinator.ActionStatus;
+import com.arjuna.ats.arjuna.coordinator.BasicAction;
+import com.arjuna.ats.arjuna.state.InputObjectState;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+import com.arjuna.ats.txoj.Lock;
+import com.arjuna.ats.txoj.LockManager;
+import com.arjuna.ats.txoj.LockMode;
+import com.arjuna.ats.txoj.LockResult;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for the Class class.
+ * 
+ * @author Mark Little
+ */
+
+public class LinkedListUnitTest extends TestCase
+{
+    public interface Node
+    {
+        public void setPrev (Node p);
+        public Node getPrev ();
+        
+        public void setNext (Node n);
+        public Node getNext ();
+    }
+    
+    @Transactional
+    public class NodeImple implements Node
+    {   
+        @Override
+        public Node getNext ()
+        {
+            return _next;
+        }
+
+        @Override
+        public Node getPrev ()
+        {
+           return _prev;
+        }
+
+        @Override
+        public void setNext (Node n)
+        {
+            _next = n;
+        }
+
+        @Override
+        public void setPrev (Node p)
+        {
+            _prev = p;
+        }   
+       
+        @SaveState
+        public void save_state (OutputObjectState os) throws IOException
+        {
+            theContainer.getId(_prev).pack(os);
+            theContainer.getId(_next).pack(os);
+
+            os.packString(_nodeName);
+        }
+        
+        @RestoreState
+        public void restore_state (InputObjectState os) throws IOException
+        {
+            Uid id = new Uid(Uid.nullUid());
+            
+            id.unpack(os);
+            
+            _prev = theContainer.recreate(id);
+            
+            id.unpack(os);
+            
+            _next = theContainer.recreate(id);
+
+            _nodeName = os.unpackString();
+        }
+        
+        @DurableState
+        private Node _prev;
+        
+        @DurableState
+        private Node _next;
+        
+        @DurableState
+        private String _nodeName = "";
+    }
+    
+    public void testExampleSTM () throws Exception
+    {
+        
+    }
+    
+    public RecoverableContainer<Node> theContainer = new RecoverableContainer<Node>();
+}


Property changes on: labs/jbosstm/workspace/mlittle/STM-Arjuna/src/test/java/org/jboss/stm/LinkedListUnitTest.java
___________________________________________________________________
Added: svn:executable
   + *



More information about the jboss-svn-commits mailing list