You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ol...@apache.org on 2003/05/25 22:59:53 UTC
cvs commit: db-ojb/src/test/org/apache/ojb/otm LockTestBase.java LockTestCommittedReads.java LockTestRepeatableReads.java LockTestSerializable.java LockTestUncommittedReads.java AllTests.java
olegnitz 2003/05/25 13:59:53
Modified: src/test/org/apache/ojb/otm AllTests.java
Added: src/test/org/apache/ojb/otm LockTestBase.java
LockTestCommittedReads.java
LockTestRepeatableReads.java
LockTestSerializable.java
LockTestUncommittedReads.java
Log:
OTM transaction isolation tests (based on ODMG tests)
Revision Changes Path
1.6 +4 -0 db-ojb/src/test/org/apache/ojb/otm/AllTests.java
Index: AllTests.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/otm/AllTests.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AllTests.java 8 Apr 2003 20:19:30 -0000 1.5
+++ AllTests.java 25 May 2003 20:59:53 -0000 1.6
@@ -30,6 +30,10 @@
{
TestSuite suite = new TestSuite();
suite.addTest(new TestSuite(OtmExamples.class));
+ suite.addTest(new TestSuite(LockTestUncommittedReads.class));
+ suite.addTest(new TestSuite(LockTestCommittedReads.class));
+ suite.addTest(new TestSuite(LockTestRepeatableReads.class));
+ suite.addTest(new TestSuite(LockTestSerializable.class));
return suite;
}
1.1 db-ojb/src/test/org/apache/ojb/otm/LockTestBase.java
Index: LockTestBase.java
===================================================================
package org.apache.ojb.otm;
/**
* This is the base abstract class for all isolation TestSuites
* based on the ODMG locking documentation
*/
import junit.framework.TestCase;
import org.apache.ojb.broker.Article;
import org.apache.ojb.broker.Identity;
import org.apache.ojb.broker.PersistenceBrokerFactory;
import org.apache.ojb.otm.core.Transaction;
import org.apache.ojb.otm.lock.ObjectLock;
import org.apache.ojb.otm.lock.LockingException;
import org.apache.ojb.otm.lock.isolation.TransactionIsolation;
import org.apache.ojb.otm.lock.wait.NoWaitStrategy;
import org.apache.ojb.otm.lock.wait.TimeoutStrategy;
public abstract class LockTestBase extends TestCase
{
protected TestKit _kit;
protected OTMConnection _conn1;
protected OTMConnection _conn2;
protected Transaction _tx1;
protected Transaction _tx2;
protected ObjectLock _lock;
protected TransactionIsolation _isolation;
public LockTestBase(String name)
{
super(name);
}
protected abstract TransactionIsolation newIsolation();
public void setUp()
{
_kit = TestKit.getTestInstance();
_kit.setLockWaitStrategy(new NoWaitStrategy());
_isolation = newIsolation();
try
{
_conn1 = _kit.acquireConnection(PersistenceBrokerFactory.getDefaultKey());
_tx1 = _kit.getTransaction(_conn1);
_tx1.begin();
_conn2 = _kit.acquireConnection(PersistenceBrokerFactory.getDefaultKey());
_tx2 = _kit.getTransaction(_conn2);
_tx2.begin();
Article obj = Article.createInstance();
obj.setArticleId(333);
_lock = new ObjectLock(_conn1.getIdentity(obj));
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
protected boolean readLock(Transaction tx)
{
try
{
_isolation.readLock(tx, _lock);
return true;
}
catch (LockingException ex)
{
return false;
}
}
protected boolean writeLock(Transaction tx)
{
try
{
_isolation.writeLock(tx, _lock);
return true;
}
catch (LockingException ex)
{
return false;
}
}
protected boolean releaseLock(Transaction tx)
{
_lock.releaseLock(tx);
return true;
}
public void tearDown()
{
try
{
_tx1.rollback();
_conn1 = null;
_tx2.rollback();
_conn2 = null;
}
catch (Throwable t)
{
}
_kit.setLockWaitStrategy(new TimeoutStrategy());
}
}
1.1 db-ojb/src/test/org/apache/ojb/otm/LockTestCommittedReads.java
Index: LockTestCommittedReads.java
===================================================================
package org.apache.ojb.otm;
/**
* This is the TestSuite based on the ODMG locking documentation
*/
import org.apache.ojb.otm.lock.isolation.TransactionIsolation;
import org.apache.ojb.otm.lock.isolation.ReadCommittedIsolation;
public class LockTestCommittedReads extends LockTestBase
{
private static Class CLASS = LockTestCommittedReads.class;
public LockTestCommittedReads(String name)
{
super(name);
}
protected TransactionIsolation newIsolation()
{
return new ReadCommittedIsolation();
}
/**
* Test 1
*/
public void testSingleReadLock()
{
assertTrue(readLock(_tx1));
}
/**
* Test3
*/
public void testReadThenWrite()
{
assertTrue(readLock(_tx1));
assertTrue(writeLock(_tx1));
}
/**
* Test 4
*/
public void testSingleWriteLock()
{
assertTrue(writeLock(_tx1));
}
/**
* Test 5
*/
public void testWriteThenRead()
{
assertTrue(writeLock(_tx1));
assertTrue(readLock(_tx1));
}
/**
* Test 6
*/
public void testMultipleReadLock()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
}
/**
* Test 8
*/
public void testWriteWithExistingReader()
{
assertTrue(readLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 10
*/
public void testWriteWithMultipleReaders()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
assertTrue(writeLock(_tx2));
}
/**
* Test 12
*/
public void testWriteWithMultipleReadersOn1()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
assertTrue(writeLock(_tx1));
}
/**
* Test 13
*/
public void testReadWithExistingWriter()
{
assertTrue(writeLock(_tx1));
assertTrue(!readLock(_tx2));
}
/**
* Test 14
*/
public void testMultipleWriteLock()
{
assertTrue(writeLock(_tx1));
assertTrue(!writeLock(_tx2));
}
/**
* Test 15
*/
public void testReleaseReadLock()
{
assertTrue(readLock(_tx1));
assertTrue(releaseLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 17
*/
public void testReleaseWriteLock()
{
assertTrue(writeLock(_tx1));
assertTrue(releaseLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 18
*/
public void testReadThenRead()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx1));
}
public static void main(String[] args)
{
String[] arr = {CLASS.getName()};
junit.textui.TestRunner.main(arr);
}
}
1.1 db-ojb/src/test/org/apache/ojb/otm/LockTestRepeatableReads.java
Index: LockTestRepeatableReads.java
===================================================================
package org.apache.ojb.otm;
/**
* This is the TestSuite based on the ODMG locking documentation
*/
import org.apache.ojb.otm.lock.isolation.TransactionIsolation;
import org.apache.ojb.otm.lock.isolation.RepeatableReadIsolation;
public class LockTestRepeatableReads extends LockTestBase
{
private static Class CLASS = LockTestRepeatableReads.class;
public LockTestRepeatableReads(String name)
{
super(name);
}
protected TransactionIsolation newIsolation()
{
return new RepeatableReadIsolation();
}
/**
* Test 1
*/
public void testSingleReadLock()
{
assertTrue(readLock(_tx1));
}
/**
* Test3
*/
public void testReadThenWrite()
{
assertTrue(readLock(_tx1));
assertTrue(writeLock(_tx1));
}
/**
* Test 4
*/
public void testSingleWriteLock()
{
assertTrue(writeLock(_tx1));
}
/**
* Test 5
*/
public void testWriteThenRead()
{
assertTrue(writeLock(_tx1));
assertTrue(readLock(_tx1));
}
/**
* Test 6
*/
public void testMultipleReadLock()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
}
/**
* Test 8
*/
public void testWriteWithExistingReader()
{
assertTrue(readLock(_tx1));
assertTrue(!writeLock(_tx2));
}
/**
* Test 10
*/
public void testWriteWithMultipleReaders()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
assertTrue(!writeLock(_tx2));
}
/**
* Test 12
*/
public void testWriteWithMultipleReadersOn1()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
assertTrue(!writeLock(_tx1));
}
/**
* Test 13
*/
public void testReadWithExistingWriter()
{
assertTrue(writeLock(_tx1));
assertTrue(!readLock(_tx2));
}
/**
* Test 14
*/
public void testMultipleWriteLock()
{
assertTrue(writeLock(_tx1));
assertTrue(!writeLock(_tx2));
}
/**
* Test 15
*/
public void testReleaseReadLock()
{
assertTrue(readLock(_tx1));
assertTrue(releaseLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 17
*/
public void testReleaseWriteLock()
{
assertTrue(writeLock(_tx1));
assertTrue(releaseLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 18
*/
public void testReadThenRead()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx1));
}
public static void main(String[] args)
{
String[] arr = {CLASS.getName()};
junit.textui.TestRunner.main(arr);
}
}
1.1 db-ojb/src/test/org/apache/ojb/otm/LockTestSerializable.java
Index: LockTestSerializable.java
===================================================================
package org.apache.ojb.otm;
/**
* This is the TestSuite based on the ODMG locking documentation
*/
import org.apache.ojb.otm.lock.isolation.TransactionIsolation;
import org.apache.ojb.otm.lock.isolation.SerializableIsolation;
public class LockTestSerializable extends LockTestBase
{
private static Class CLASS = LockTestSerializable.class;
public LockTestSerializable(String name)
{
super(name);
}
protected TransactionIsolation newIsolation()
{
return new SerializableIsolation();
}
/**
* Test 1
*/
public void testSingleReadLock()
{
assertTrue(readLock(_tx1));
}
/**
* Test3
*/
public void testReadThenWrite()
{
assertTrue(readLock(_tx1));
assertTrue(writeLock(_tx1));
}
/**
* Test 4
*/
public void testSingleWriteLock()
{
assertTrue(writeLock(_tx1));
}
/**
* Test 5
*/
public void testWriteThenRead()
{
assertTrue(writeLock(_tx1));
assertTrue(readLock(_tx1));
}
/**
* Test 6
*/
public void testMultipleReadLock()
{
assertTrue(readLock(_tx1));
assertTrue(!readLock(_tx2));
}
/**
* Test 8
*/
public void testWriteWithExistingReader()
{
assertTrue(readLock(_tx1));
assertTrue(!writeLock(_tx2));
}
/**
* Test 10
*/
public void testWriteWithMultipleReaders()
{
assertTrue(readLock(_tx1));
assertTrue(!readLock(_tx2));
assertTrue(!writeLock(_tx2));
}
/**
* Test 12
*/
public void testWriteWithMultipleReadersOn1()
{
assertTrue(readLock(_tx1));
assertTrue(!readLock(_tx2));
assertTrue(writeLock(_tx1));
}
/**
* Test 13
*/
public void testReadWithExistingWriter()
{
assertTrue(writeLock(_tx1));
assertTrue(!readLock(_tx2));
}
/**
* Test 14
*/
public void testMultipleWriteLock()
{
assertTrue(writeLock(_tx1));
assertTrue(!writeLock(_tx2));
}
/**
* Test 15
*/
public void testReleaseReadLock()
{
assertTrue(readLock(_tx1));
assertTrue(releaseLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 17
*/
public void testReleaseWriteLock()
{
assertTrue(writeLock(_tx1));
assertTrue(releaseLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 18
*/
public void testReadThenRead()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx1));
}
public static void main(String[] args)
{
String[] arr = {CLASS.getName()};
junit.textui.TestRunner.main(arr);
}
}
1.1 db-ojb/src/test/org/apache/ojb/otm/LockTestUncommittedReads.java
Index: LockTestUncommittedReads.java
===================================================================
package org.apache.ojb.otm;
/**
* This is the TestSuite based on the ODMG locking documentation
*/
import org.apache.ojb.otm.lock.isolation.TransactionIsolation;
import org.apache.ojb.otm.lock.isolation.ReadUncommittedIsolation;
public class LockTestUncommittedReads extends LockTestBase
{
private static Class CLASS = LockTestUncommittedReads.class;
public LockTestUncommittedReads(String name)
{
super(name);
}
protected TransactionIsolation newIsolation()
{
return new ReadUncommittedIsolation();
}
/**
* Test 1
*/
public void testSingleReadLock()
{
assertTrue(readLock(_tx1));
}
/**
* Test3
*/
public void testReadThenWrite()
{
assertTrue(readLock(_tx1));
assertTrue(writeLock(_tx1));
}
/**
* Test 4
*/
public void testSingleWriteLock()
{
assertTrue(writeLock(_tx1));
}
/**
* Test 5
*/
public void testWriteThenRead()
{
assertTrue(writeLock(_tx1));
assertTrue(readLock(_tx1));
}
/**
* Test 6
*/
public void testMultipleReadLock()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
}
/**
* Test 8
*/
public void testWriteWithExistingReader()
{
assertTrue(readLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 10
*/
public void testWriteWithMultipleReaders()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
assertTrue(writeLock(_tx2));
}
/**
* Test 12
*/
public void testWriteWithMultipleReadersOn1()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx2));
assertTrue(writeLock(_tx1));
}
/**
* Test 13
*/
public void testReadWithExistingWriter()
{
assertTrue(writeLock(_tx1));
assertTrue(readLock(_tx2));
}
/**
* Test 14
*/
public void testMultipleWriteLock()
{
assertTrue(writeLock(_tx1));
assertTrue(!writeLock(_tx2));
}
/**
* Test 15
*/
public void testReleaseReadLock()
{
assertTrue(readLock(_tx1));
assertTrue(releaseLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 17
*/
public void testReleaseWriteLock()
{
assertTrue(writeLock(_tx1));
assertTrue(releaseLock(_tx1));
assertTrue(writeLock(_tx2));
}
/**
* Test 18
*/
public void testReadThenRead()
{
assertTrue(readLock(_tx1));
assertTrue(readLock(_tx1));
}
public static void main(String[] args)
{
String[] arr = {CLASS.getName()};
junit.textui.TestRunner.main(arr);
}
}