[jbosscache-commits] JBoss Cache SVN: r6019 - core/trunk/src/test/java/org/jboss/cache/lock.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Jun 25 09:16:27 EDT 2008


Author: manik.surtani at jboss.com
Date: 2008-06-25 09:16:27 -0400 (Wed, 25 Jun 2008)
New Revision: 6019

Added:
   core/trunk/src/test/java/org/jboss/cache/lock/AbstractLockManagerRecordingTest.java
   core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerNoTxTest.java
   core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerRecordingTest.java
   core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerTest.java
   core/trunk/src/test/java/org/jboss/cache/lock/NodeBasedLockManagerRecordingTest.java
Log:
Lock manager tests

Added: core/trunk/src/test/java/org/jboss/cache/lock/AbstractLockManagerRecordingTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/lock/AbstractLockManagerRecordingTest.java	                        (rev 0)
+++ core/trunk/src/test/java/org/jboss/cache/lock/AbstractLockManagerRecordingTest.java	2008-06-25 13:16:27 UTC (rev 6019)
@@ -0,0 +1,72 @@
+package org.jboss.cache.lock;
+
+import org.jboss.cache.Fqn;
+import org.jboss.cache.InvocationContext;
+import org.jboss.cache.NodeSPI;
+import org.jboss.cache.UnversionedNode;
+import org.jboss.cache.invocation.InvocationContextContainer;
+import org.jboss.cache.invocation.NodeInvocationDelegate;
+import static org.jboss.cache.lock.LockType.WRITE;
+import org.jboss.cache.transaction.DummyTransaction;
+import org.jboss.cache.transaction.DummyTransactionManager;
+import org.jboss.cache.transaction.GlobalTransaction;
+import org.jboss.cache.transaction.TransactionEntry;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.Test;
+
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+
+ at Test(groups = "unit")
+public abstract class AbstractLockManagerRecordingTest
+{
+   LockManager lm;
+   InvocationContextContainer icc;
+   protected boolean fqnBasedLocking = true;
+
+   @AfterMethod
+   public void tearDown()
+   {
+      lm = null;
+   }
+
+   public void testRecordingLocksNoTx() throws InterruptedException
+   {
+      Fqn fqn = Fqn.fromString("/a/b/c");
+      NodeSPI node = createNode(fqn);
+      InvocationContext ctx = icc.get();
+
+      // lock and record.
+      lm.lockAndRecord(node, WRITE, ctx);
+      assert ctx.getLocks().contains(fqnBasedLocking ? fqn : node.getLock());
+      assert ctx.getLocks().size() == 1;
+      assert lm.isLocked(node) : "Should be locked";
+      lm.unlock(ctx);
+      assert !lm.isLocked(node) : "Should not be locked";
+   }
+
+   public void testRecordingLocksWithTx() throws InterruptedException, SystemException, RollbackException
+   {
+      Fqn fqn = Fqn.fromString("/a/b/c");
+      NodeSPI node = createNode(fqn);
+      InvocationContext ctx = icc.get();
+      ctx.setGlobalTransaction(new GlobalTransaction());
+      ctx.setTransaction(new DummyTransaction(DummyTransactionManager.getInstance()));
+      ctx.setTransactionEntry(new TransactionEntry(ctx.getTransaction()));
+
+      // lock and record.
+      lm.lockAndRecord(node, WRITE, ctx);
+      assert ctx.getLocks().contains(fqnBasedLocking ? fqn : node.getLock());
+      assert ctx.getTransactionEntry().getLocks().size() == 1;
+      assert lm.isLocked(node) : "Should be locked";
+      lm.unlock(ctx);
+      assert !lm.isLocked(node) : "Should not be locked";
+   }
+
+   protected NodeSPI createNode(Fqn fqn)
+   {
+      UnversionedNode un = new UnversionedNode(fqn);
+      un.injectDependencies(null, null, new LockStrategyFactory());
+      return new NodeInvocationDelegate(un);
+   }
+}

Added: core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerNoTxTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerNoTxTest.java	                        (rev 0)
+++ core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerNoTxTest.java	2008-06-25 13:16:27 UTC (rev 6019)
@@ -0,0 +1,15 @@
+package org.jboss.cache.lock;
+
+import org.testng.annotations.Test;
+
+import javax.transaction.TransactionManager;
+
+ at Test(groups = "unit")
+public class MVCCLockManagerNoTxTest extends MVCCLockManagerTest
+{
+   @Override
+   protected TransactionManager getTransactionManager()
+   {
+      return null; // force the use of JDK ReentrantLocks.
+   }
+}

Added: core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerRecordingTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerRecordingTest.java	                        (rev 0)
+++ core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerRecordingTest.java	2008-06-25 13:16:27 UTC (rev 6019)
@@ -0,0 +1,28 @@
+package org.jboss.cache.lock;
+
+import org.jboss.cache.invocation.InvocationContextContainer;
+import org.jboss.cache.transaction.DummyTransactionManager;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import javax.transaction.TransactionManager;
+
+/**
+ * @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
+ * @since 3.0
+ */
+ at Test(groups = "unit")
+public class MVCCLockManagerRecordingTest extends AbstractLockManagerRecordingTest
+{
+   @BeforeMethod
+   public void setUp()
+   {
+      icc = new InvocationContextContainer();
+      MVCCLockManager mvccLockManager = new MVCCLockManager();
+      TransactionManager tm = DummyTransactionManager.getInstance();
+      mvccLockManager.injectDataContainer(null, null, tm, icc);
+      mvccLockManager.startLockManager();
+      lm = mvccLockManager;
+   }
+
+}

Added: core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerTest.java	                        (rev 0)
+++ core/trunk/src/test/java/org/jboss/cache/lock/MVCCLockManagerTest.java	2008-06-25 13:16:27 UTC (rev 6019)
@@ -0,0 +1,98 @@
+package org.jboss.cache.lock;
+
+import org.jboss.cache.Fqn;
+import org.jboss.cache.NodeSPI;
+import org.jboss.cache.UnversionedNode;
+import org.jboss.cache.invocation.InvocationContextContainer;
+import org.jboss.cache.invocation.NodeInvocationDelegate;
+import static org.jboss.cache.lock.LockType.READ;
+import static org.jboss.cache.lock.LockType.WRITE;
+import org.jboss.cache.transaction.DummyTransactionManager;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import javax.transaction.TransactionManager;
+
+ at Test(groups = "unit")
+public class MVCCLockManagerTest
+{
+   MVCCLockManager lm;
+   InvocationContextContainer icc;
+
+   @BeforeMethod
+   public void setUp()
+   {
+      icc = new InvocationContextContainer();
+      lm = new MVCCLockManager();
+      TransactionManager tm = getTransactionManager();
+      lm.injectDataContainer(null, null, tm, icc);
+      lm.startLockManager();
+   }
+
+   protected TransactionManager getTransactionManager()
+   {
+      return DummyTransactionManager.getInstance(); // use this to ensure the lock manager uses ownable reentrant locks
+   }
+
+   @AfterMethod
+   public void tearDown()
+   {
+      lm = null;
+   }
+
+   public void testUsingReadLocks()
+   {
+      // using any READ locks should throw an exception
+      try
+      {
+         lm.isLocked(null, READ);
+         assert false : "Should fail";
+      }
+      catch (Exception e)
+      {
+         // good
+      }
+
+      try
+      {
+         lm.getReadOwners(Fqn.ROOT);
+         assert false : "Should fail";
+      }
+      catch (Exception e)
+      {
+         // good
+      }
+
+      try
+      {
+         lm.getReadOwners((NodeSPI) null);
+         assert false : "Should fail";
+      }
+      catch (Exception e)
+      {
+         // good
+      }
+   }
+
+   public void testLockReentrancy() throws InterruptedException
+   {
+      Fqn fqn = Fqn.fromString("/a/b/c");
+      NodeSPI node = new NodeInvocationDelegate(new UnversionedNode(fqn));
+
+      assert lm.lock(fqn, WRITE, null);
+      assert lm.isLocked(node);
+
+      assert lm.lock(node, WRITE, null);
+      assert lm.isLocked(node);
+
+      lm.unlock(node, null);
+
+      assert lm.isLocked(node) : "Should still be locked";
+      assert lm.ownsLock(node, Thread.currentThread());
+
+      lm.unlock(fqn, null);
+
+      assert !lm.isLocked(node) : "Should not be locked";
+   }
+}

Added: core/trunk/src/test/java/org/jboss/cache/lock/NodeBasedLockManagerRecordingTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/lock/NodeBasedLockManagerRecordingTest.java	                        (rev 0)
+++ core/trunk/src/test/java/org/jboss/cache/lock/NodeBasedLockManagerRecordingTest.java	2008-06-25 13:16:27 UTC (rev 6019)
@@ -0,0 +1,21 @@
+package org.jboss.cache.lock;
+
+import org.jboss.cache.invocation.InvocationContextContainer;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
+ * @since 3.0
+ */
+ at Test(groups = "unit")
+public class NodeBasedLockManagerRecordingTest extends AbstractLockManagerRecordingTest
+{
+   @BeforeMethod
+   public void setUp()
+   {
+      icc = new InvocationContextContainer();
+      lm = new NodeBasedLockManager();
+      fqnBasedLocking = false;
+   }
+}




More information about the jbosscache-commits mailing list