[jbosscache-commits] JBoss Cache SVN: r7812 - core/branches/flat/src/test/java/org/horizon/loader.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Sun Mar 1 19:34:22 EST 2009


Author: adriancole
Date: 2009-03-01 19:34:22 -0500 (Sun, 01 Mar 2009)
New Revision: 7812

Modified:
   core/branches/flat/src/test/java/org/horizon/loader/BaseCacheStoreTest.java
Log:
added test to ensure we can commit from a different thread, and added 2PC tests that do not rely on MVCC

Modified: core/branches/flat/src/test/java/org/horizon/loader/BaseCacheStoreTest.java
===================================================================
--- core/branches/flat/src/test/java/org/horizon/loader/BaseCacheStoreTest.java	2009-03-01 12:10:33 UTC (rev 7811)
+++ core/branches/flat/src/test/java/org/horizon/loader/BaseCacheStoreTest.java	2009-03-02 00:34:22 UTC (rev 7812)
@@ -131,10 +131,38 @@
       mods.add(new Remove("k1"));
       Transaction tx = EasyMock.createNiceMock(Transaction.class);
       cs.prepare(mods, tx, false);
+      cs.commit(tx);
 
+      assert cs.load("k2").getValue().equals("v2");
       assert !cs.containsKey("k1");
+
+      cs.clear();
+
+      mods = new ArrayList<Modification>();
+      mods.add(new Store(new StoredEntry("k1", "v1", -1, -1)));
+      mods.add(new Store(new StoredEntry("k2", "v2", -1, -1)));
+      mods.add(new Clear());
+      mods.add(new Store(new StoredEntry("k3", "v3", -1, -1)));
+
+      cs.prepare(mods, tx, false);
+      cs.commit(tx);
+
+      assert !cs.containsKey("k1");
       assert !cs.containsKey("k2");
+      assert cs.containsKey("k3");
+   }
 
+   public void testTwoPhaseCommitReadCommitted() throws CacheLoaderException {
+      List<Modification> mods = new ArrayList<Modification>();
+      mods.add(new Store(new StoredEntry("k1", "v1", -1, -1)));
+      mods.add(new Store(new StoredEntry("k2", "v2", -1, -1)));
+      mods.add(new Remove("k1"));
+      Transaction tx = EasyMock.createNiceMock(Transaction.class);
+      cs.prepare(mods, tx, false);
+
+      assert !cs.containsKey("k1");
+      assert !cs.containsKey("k2");
+
       cs.commit(tx);
 
       assert cs.load("k2").getValue().equals("v2");
@@ -172,17 +200,49 @@
       mods.add(new Remove("old"));
       Transaction tx = EasyMock.createNiceMock(Transaction.class);
       cs.prepare(mods, tx, false);
+      cs.rollback(tx);
 
       assert !cs.containsKey("k1");
       assert !cs.containsKey("k2");
       assert cs.containsKey("old");
 
+      mods = new ArrayList<Modification>();
+      mods.add(new Store(new StoredEntry("k1", "v1", -1, -1)));
+      mods.add(new Store(new StoredEntry("k2", "v2", -1, -1)));
+      mods.add(new Clear());
+      mods.add(new Store(new StoredEntry("k3", "v3", -1, -1)));
+
+      cs.prepare(mods, tx, false);
       cs.rollback(tx);
 
       assert !cs.containsKey("k1");
       assert !cs.containsKey("k2");
+      assert !cs.containsKey("k3");
       assert cs.containsKey("old");
+   }
 
+   public void testRollbackReadCommitted() throws CacheLoaderException {
+
+      cs.store(new StoredEntry("old", "old", -1, -1));
+
+      List<Modification> mods = new ArrayList<Modification>();
+      mods.add(new Store(new StoredEntry("k1", "v1", -1, -1)));
+      mods.add(new Store(new StoredEntry("k2", "v2", -1, -1)));
+      mods.add(new Remove("k1"));
+      mods.add(new Remove("old"));
+      Transaction tx = EasyMock.createNiceMock(Transaction.class);
+      cs.prepare(mods, tx, false);
+
+      assert !cs.containsKey("k1");
+      assert !cs.containsKey("k2");
+      assert cs.containsKey("old");
+
+      cs.rollback(tx);
+
+      assert !cs.containsKey("k1");
+      assert !cs.containsKey("k2");
+      assert cs.containsKey("old");
+
       mods = new ArrayList<Modification>();
       mods.add(new Store(new StoredEntry("k1", "v1", -1, -1)));
       mods.add(new Store(new StoredEntry("k2", "v2", -1, -1)));
@@ -203,6 +263,53 @@
       assert cs.containsKey("old");
    }
 
+   public void testRollbackFromADifferentThreadReusingTransactionKey() throws CacheLoaderException, InterruptedException {
+
+      cs.store(new StoredEntry("old", "old", -1, -1));
+
+      List<Modification> mods = new ArrayList<Modification>();
+      mods.add(new Store(new StoredEntry("k1", "v1", -1, -1)));
+      mods.add(new Store(new StoredEntry("k2", "v2", -1, -1)));
+      mods.add(new Remove("k1"));
+      mods.add(new Remove("old"));
+      final Transaction tx = EasyMock.createNiceMock(Transaction.class);
+      cs.prepare(mods, tx, false);
+
+      Thread t = new Thread(new Runnable(){
+         public void run() {
+            cs.rollback(tx);
+         }
+      });
+
+      t.start();
+      t.join();
+
+      assert !cs.containsKey("k1");
+      assert !cs.containsKey("k2");
+      assert cs.containsKey("old");
+
+      mods = new ArrayList<Modification>();
+      mods.add(new Store(new StoredEntry("k1", "v1", -1, -1)));
+      mods.add(new Store(new StoredEntry("k2", "v2", -1, -1)));
+      mods.add(new Clear());
+      mods.add(new Store(new StoredEntry("k3", "v3", -1, -1)));
+
+      cs.prepare(mods, tx, false);
+
+      Thread t2 = new Thread(new Runnable(){
+         public void run() {
+            cs.rollback(tx);
+         }
+      });
+
+      t2.start();
+      t2.join();
+      assert !cs.containsKey("k1");
+      assert !cs.containsKey("k2");
+      assert !cs.containsKey("k3");
+      assert cs.containsKey("old");
+   }
+
    public void testCommitAndRollbackWithoutPrepare() throws CacheLoaderException {
       cs.store(new StoredEntry("old", "old", -1, -1));
       Transaction tx = EasyMock.createNiceMock(Transaction.class);




More information about the jbosscache-commits mailing list