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 ar...@apache.org on 2003/09/03 20:41:09 UTC
cvs commit: db-ojb/src/test/org/apache/ojb/broker/sequence SMMultiThreadedTest.java
arminw 2003/09/03 11:41:09
Modified: src/test/org/apache/ojb repository_junit.xml
src/test/org/apache/ojb/odmg PersonImpl.java
src/test/org/apache/ojb/broker PBRollbackTest.java
AllTests.java
Added: src/test/org/apache/ojb/broker/sequence
SMMultiThreadedTest.java
Log:
- add sequence manager multithreaded test
- add more PB tx-demarcation tests
- update tests
Revision Changes Path
1.90 +24 -1 db-ojb/src/test/org/apache/ojb/repository_junit.xml
Index: repository_junit.xml
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/repository_junit.xml,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -r1.89 -r1.90
--- repository_junit.xml 30 Aug 2003 23:07:43 -0000 1.89
+++ repository_junit.xml 3 Sep 2003 18:41:08 -0000 1.90
@@ -3522,7 +3522,30 @@
/>
</class-descriptor>
-
+
+<class-descriptor
+ class="org.apache.ojb.broker.ObjectCacheTest$TestObject"
+ table="CACHE_TEST">
+ <!-- declare a per class cache -->
+ <attribute
+ attribute-name="cacheClass"
+ attribute-value="org.apache.ojb.broker.cache.ObjectCacheEmptyImpl"/>
+
+ <field-descriptor
+ name="id"
+ column="OBJ_ID"
+ jdbc-type="INTEGER"
+ primarykey="true"
+ autoincrement="true"
+ />
+ <field-descriptor
+ name="name"
+ column="NAME"
+ jdbc-type="VARCHAR"
+ />
+ </class-descriptor>
+
+
<!-- ************************************************* -->
<!-- Reference test with extents -->
<!-- ************************************************* -->
1.5 +2 -2 db-ojb/src/test/org/apache/ojb/odmg/PersonImpl.java
Index: PersonImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/odmg/PersonImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PersonImpl.java 8 Aug 2003 20:38:25 -0000 1.4
+++ PersonImpl.java 3 Sep 2003 18:41:09 -0000 1.5
@@ -114,9 +114,9 @@
* Sets the fatherId.
* @param fatherId The fatherId to set
*/
- public void setFatherId(int atherId)
+ public void setFatherId(int fatherId)
{
- fatherId = atherId;
+ this.fatherId = fatherId;
}
/**
1.6 +119 -22 db-ojb/src/test/org/apache/ojb/broker/PBRollbackTest.java
Index: PBRollbackTest.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/PBRollbackTest.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- PBRollbackTest.java 27 Dec 2002 23:06:57 -0000 1.5
+++ PBRollbackTest.java 3 Sep 2003 18:41:09 -0000 1.6
@@ -22,6 +22,45 @@
super(s);
}
+ public void testEmptyTxDemarcation_1()
+ {
+ PersistenceBroker broker = PersistenceBrokerFactory.defaultPersistenceBroker();
+ try
+ {
+ broker.beginTransaction();
+
+ broker.commitTransaction();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("'Empty' transaction demarcation sequence fails");
+ }
+ finally
+ {
+ if(broker != null && !broker.isClosed()) broker.close();
+ }
+ }
+
+ public void testEmptyTxDemarcation_2()
+ {
+ PersistenceBroker broker = PersistenceBrokerFactory.defaultPersistenceBroker();
+ try
+ {
+ broker.beginTransaction();
+
+ broker.abortTransaction();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("'Empty' transaction demarcation sequence fails");
+ }
+ finally
+ {
+ if(broker != null && !broker.isClosed()) broker.close();
+ }
+ }
public void testUserCommitClearCache() throws Exception
{
@@ -39,8 +78,7 @@
storeObjects(broker, getNewProjects(10));
//while transaction we should see all stored objects
int whileTransaction = broker.getCount(q);
- ManageableCollection result =
- (ManageableCollection) broker.getCollectionByQuery(ManageableVector.class, q);
+ ManageableCollection result = broker.getCollectionByQuery(ManageableVector.class, q);
int whileTransactionMC = 0;
Iterator it = result.ojbIterator();
while (it.hasNext())
@@ -84,8 +122,7 @@
storeObjects(broker, getNewProjects(10));
int whileTransaction = broker.getCount(q);
- ManageableCollection result =
- (ManageableCollection) broker.getCollectionByQuery(ManageableVector.class, q);
+ ManageableCollection result = broker.getCollectionByQuery(ManageableVector.class, q);
int whileTransactionMC = 0;
Iterator it = result.ojbIterator();
while (it.hasNext())
@@ -128,8 +165,7 @@
broker.clearCache();
int whileTransaction = broker.getCount(q);
- ManageableCollection result =
- (ManageableCollection) broker.getCollectionByQuery(ManageableVector.class, q);
+ ManageableCollection result = broker.getCollectionByQuery(ManageableVector.class, q);
int whileTransactionMC = 0;
Iterator it = result.ojbIterator();
while (it.hasNext())
@@ -171,8 +207,7 @@
storeObjects(broker, getNewProjects(10));
int whileTransaction = broker.getCount(q);
- ManageableCollection result =
- (ManageableCollection) broker.getCollectionByQuery(ManageableVector.class, q);
+ ManageableCollection result = broker.getCollectionByQuery(ManageableVector.class, q);
int whileTransactionMC = 0;
Iterator it = result.ojbIterator();
while (it.hasNext())
@@ -195,17 +230,26 @@
assertEquals(beforeRollback + 10, whileTransactionMC);
}
- public void testRollback() throws Exception
+ public void testRollbackCausedByNotExistingObject() throws Exception
{
Collection projects = getNewProjects(10);
PersistenceBroker broker = PersistenceBrokerFactory.defaultPersistenceBroker();
- storeObjects(broker, projects);
- Criteria c = new Criteria();
- Query q = new QueryByCriteria(Project.class, c);
- broker.beginTransaction();
- int beforeRollback = broker.getCount(q);
- broker.commitTransaction();
- broker.close();
+ Query q;
+ int beforeRollback;
+ try
+ {
+ broker.beginTransaction();
+ storeObjects(broker, projects);
+ broker.commitTransaction();
+
+ Criteria c = new Criteria();
+ q = new QueryByCriteria(Project.class, c);
+ beforeRollback = broker.getCount(q);
+ }
+ finally
+ {
+ if(broker != null && !broker.isClosed()) broker.close();
+ }
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
try
@@ -224,17 +268,70 @@
// e.printStackTrace();
broker.abortTransaction();
}
+ finally
+ {
+ if(broker != null && !broker.isClosed()) broker.close();
+ }
+
+ broker = PersistenceBrokerFactory.defaultPersistenceBroker();
+ int afterRollback = broker.getCount(q);
broker.close();
+ assertEquals("Object count does not match after rollback", beforeRollback, afterRollback);
+ }
+
+ public void testRollbackCausedBySQLException() throws Exception
+ {
+ ArrayList projects = getNewProjects(5);
+ PersistenceBroker broker = PersistenceBrokerFactory.defaultPersistenceBroker();
+ Query q;
+ int beforeRollback;
+ try
+ {
+ broker.beginTransaction();
+ storeObjects(broker, projects);
+ broker.commitTransaction();
+
+ Criteria c = new Criteria();
+ q = new QueryByCriteria(Project.class, c);
+ beforeRollback = broker.getCount(q);
+ }
+ finally
+ {
+ if(broker != null && !broker.isClosed()) broker.close();
+ }
+
+ broker = PersistenceBrokerFactory.defaultPersistenceBroker();
+ try
+ {
+ broker.beginTransaction();
+ projects = getNewProjects(5);
+
+ Project badProject = (Project) projects.get(0);
+ badProject.setTitle("Bad project!");
+ badProject.setPersons(projects);
+
+ storeObjects(broker, projects);
+
+ fail("Test should throw a exception in place");
+ broker.commitTransaction();
+ }
+ catch (PersistenceBrokerException e)
+ {
+ assertTrue(true);
+ // e.printStackTrace();
+ broker.abortTransaction();
+ }
+ finally
+ {
+ if(broker != null && !broker.isClosed()) broker.close();
+ }
+
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
-// c = new Criteria();
-// q = new QueryByCriteria(Project.class, c);
- broker.beginTransaction();
int afterRollback = broker.getCount(q);
- broker.commitTransaction();
broker.close();
- assertEquals(beforeRollback, afterRollback);
+ assertEquals("Object count does not match after rollback", beforeRollback, afterRollback);
}
protected void storeObjects(PersistenceBroker broker, Collection objects)
@@ -247,7 +344,7 @@
private static int counter;
- protected Collection getNewProjects(int count)
+ protected ArrayList getNewProjects(int count)
{
ArrayList list = new ArrayList();
for (int i = 0; i < count; i++)
1.34 +2 -0 db-ojb/src/test/org/apache/ojb/broker/AllTests.java
Index: AllTests.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/AllTests.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- AllTests.java 30 Jun 2003 21:16:04 -0000 1.33
+++ AllTests.java 3 Sep 2003 18:41:09 -0000 1.34
@@ -9,6 +9,7 @@
import org.apache.ojb.broker.metadata.MetadataMultithreadedTest;
import org.apache.ojb.broker.sequence.SequenceManagerTest;
import org.apache.ojb.broker.sequence.NativeIdentifierTest;
+import org.apache.ojb.broker.sequence.SMMultiThreadedTest;
/**
* the facade to all TestCases in this package.
@@ -60,6 +61,7 @@
suite.addTest(new TestSuite(RepositoryPersistorTest.class));
suite.addTest(new TestSuite(CustomAttributesTest.class));
suite.addTest(new TestSuite(SequenceManagerTest.class));
+ suite.addTest(new TestSuite(SMMultiThreadedTest.class));
suite.addTest(new TestSuite(KeyConstraintViolationTest.class));
suite.addTest(new TestSuite(RsIteratorTest.class));
// suite.addTest(new TestSuite(BlobTest.class)); /* doesn't work for hsqldb */
1.1 db-ojb/src/test/org/apache/ojb/broker/sequence/SMMultiThreadedTest.java
Index: SMMultiThreadedTest.java
===================================================================
package org.apache.ojb.broker.sequence;
import org.apache.ojb.broker.JUnitExtensions;
import org.apache.ojb.broker.PersistenceBroker;
import org.apache.ojb.broker.PersistenceBrokerFactory;
/**
* Test SequenceManager implementation with multiple threads.
*
* @author <a href="mailto:armin@codeAuLait.de">Armin Waibel</a>
* @version $Id: SMMultiThreadedTest.java,v 1.1 2003/09/03 18:41:09 arminw Exp $
*/
public class SMMultiThreadedTest extends JUnitExtensions.MultiThreadedTestCase
{
public SMMultiThreadedTest(String s)
{
super(s);
}
public static void main(String[] args)
{
String[] arr = {SMMultiThreadedTest.class.getName()};
junit.textui.TestRunner.main(arr);
}
protected void setUp() throws Exception
{
super.setUp();
}
protected void tearDown() throws Exception
{
super.tearDown();
}
public void testRollback()
{
int testObjects = 200;
int threads = 8;
TestCaseRunnable tct [] = new TestCaseRunnable[threads];
for (int i = 0; i < threads; i++)
{
if (i % 2 == 0)
tct[i] = new BadTestHandle(testObjects);
else
tct[i] = new GoodTestHandle(testObjects);
}
// run test classes
runTestCaseRunnables(tct);
}
class GoodTestHandle extends JUnitExtensions.MultiThreadedTestCase.TestCaseRunnable
{
int testObjects;
String name = "GoodTestHandle_" + System.currentTimeMillis() + "_";
PersistenceBroker broker;
public GoodTestHandle(int testObjects)
{
this.testObjects = testObjects;
}
void prepare()
{
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
}
void cleanup()
{
if (broker != null && !broker.isClosed()) broker.close();
}
public void runTestCase() throws Throwable
{
prepare();
try
{
broker.beginTransaction();
for (int i = testObjects - 1; i >= 0; i--)
{
Repository.SMMaxA obj = new Repository.SMMaxA();
obj.setName(name + (i + 1));
Repository.SMMaxAB obj_2 = new Repository.SMMaxAB();
obj_2.setName(name + (i + 1));
broker.store(obj);
broker.store(obj_2);
// Thread.sleep((int) (Math.random() * 5));
}
// Thread.sleep((int)(Math.random()*10));
broker.commitTransaction();
}
finally
{
cleanup();
}
}
}
class BadTestHandle extends JUnitExtensions.MultiThreadedTestCase.TestCaseRunnable
{
int testObjects;
String name = "BadTestHandle_" + System.currentTimeMillis() + "_";
PersistenceBroker broker;
public BadTestHandle(int testObjects)
{
this.testObjects = testObjects;
}
void prepare()
{
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
}
void cleanup()
{
if (broker != null && !broker.isClosed()) broker.close();
}
public void runTestCase() throws Throwable
{
prepare();
try
{
broker.beginTransaction();
for (int i = testObjects - 1; i >= 0; i--)
{
Repository.SMMaxA obj = new Repository.SMMaxA();
obj.setName(name + (i + 1));
Repository.SMMaxAB obj_2 = new Repository.SMMaxAB();
obj_2.setName(name + (i + 1));
broker.store(obj);
broker.store(obj_2);
// Thread.sleep((int) (Math.random() * 5));
}
// Thread.sleep((int)(Math.random()*10));
broker.abortTransaction();
}
finally
{
cleanup();
}
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org