[jboss-svn-commits] JBL Code SVN: r21594 - labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 18 03:27:56 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-08-18 03:27:55 -0400 (Mon, 18 Aug 2008)
New Revision: 21594

Added:
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java
Log:
JBRULES-1738 Support XAResource transactions and generic save points
JBRULES-1739 in-memory XAResource
-Added PersistenceManagerTest

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/MemoryPersistenceManagerTest.java	2008-08-18 07:27:55 UTC (rev 21594)
@@ -0,0 +1,103 @@
+package org.drools.persistence.memory;
+
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+import org.drools.persistence.DroolsXid;
+import org.drools.persistence.memory.MemoryPersistenceManager;
+import org.drools.persistence.memory.MemoryXaResource;
+import org.drools.transaction.MockByteArraySnapshotter;
+
+import junit.framework.TestCase;
+
+public class MemoryPersistenceManagerTest extends  TestCase {
+    private byte[] data1 = new byte[] { 1, 1, 1, 1, 1 };
+    private byte[] data2 = new byte[] { 1, 1, 1, 1, 0 };
+    private byte[] data3 = new byte[] { 1, 1, 1, 0, 0 };
+    
+    MockByteArraySnapshotter snapshotter;
+    MemoryPersistenceManager pm;
+    
+    protected void setUp() throws Exception {
+    	snapshotter =  new MockByteArraySnapshotter();
+        pm = new MemoryPersistenceManager( snapshotter );
+    }
+    
+    public void testSave() {
+    	snapshotter.loadSnapshot( data1 );
+    	pm.save();
+        assertTrue( assertEquals( data1, snapshotter.bytes ) );
+        
+    	snapshotter.loadSnapshot( data2 );    	
+    	assertTrue( assertEquals( data2, snapshotter.bytes ) );
+    	
+    	pm.load();    	
+    	assertTrue( assertEquals( data1, snapshotter.bytes ) );    
+    }
+    
+    public void testSaveInOpenTransaction() throws XAException {
+    	snapshotter.loadSnapshot( data1 );
+    	
+    	XAResource xa = pm.getXAResource();    	
+        Xid xid = new DroolsXid(100, new byte[]{0x01}, new byte[]{0x01});        
+        xa.start(xid, XAResource.TMNOFLAGS);
+        
+        try {
+        	pm.save();
+        	fail( "save should fail as the session currently has an open transaction" );
+        } catch ( Exception e) {
+        	// success
+        }
+    }
+    
+    public void testLoadInOpenTransaction() throws XAException {
+    	snapshotter.loadSnapshot( data1 );
+    	pm.save();
+    	
+    	XAResource xa = pm.getXAResource();    	
+        Xid xid = new DroolsXid(100, new byte[]{0x01}, new byte[]{0x01});        
+        xa.start(xid, XAResource.TMNOFLAGS);
+        
+        try {
+        	pm.load();
+        	fail( "load should fail as the session currently has an open transaction" );
+        } catch ( Exception e) {
+        	// success
+        }
+    }    
+    
+    public void testLoadSaveAfterTransaction() throws Exception {
+    	snapshotter.loadSnapshot( data1 );    	
+    	XAResource xa = pm.getXAResource();    	
+        Xid xid = new DroolsXid(100, new byte[]{0x01}, new byte[]{0x01});        
+        xa.start(xid, XAResource.TMNOFLAGS);
+
+        
+        snapshotter.loadSnapshot( data2 );
+        xa.commit(xid, true);        
+        
+        pm.save();
+    	assertTrue( assertEquals( data2, snapshotter.bytes ) );  
+    	    	
+        snapshotter.loadSnapshot( data3 );
+    	assertTrue( assertEquals( data3, snapshotter.bytes ) );
+
+        pm.load();
+    	assertTrue( assertEquals( data2, snapshotter.bytes ) );
+    }
+    
+    public boolean assertEquals( byte[] bytes1, byte[] bytes2) {
+        if ( bytes1.length != bytes2.length ) {
+            return false;
+        }
+        
+        for ( int i = 0; i < bytes1.length; i++ ) {
+            if ( bytes1[i] != bytes2[i] ) {
+                return false;
+            }
+        }
+        
+        return true;
+    }    
+}




More information about the jboss-svn-commits mailing list