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 2004/02/13 19:58:24 UTC
cvs commit: db-ojb/src/test/org/apache/ojb repository_junit.xml
arminw 2004/02/13 10:58:24
Modified: src/schema ojbtest-schema.xml
src/test/org/apache/ojb/broker BatchModeTest.java
src/test/org/apache/ojb repository_junit.xml
Log:
add more tests for batch mode
Revision Changes Path
1.63 +19 -0 db-ojb/src/schema/ojbtest-schema.xml
Index: ojbtest-schema.xml
===================================================================
RCS file: /home/cvs/db-ojb/src/schema/ojbtest-schema.xml,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- ojbtest-schema.xml 4 Feb 2004 00:25:27 -0000 1.62
+++ ojbtest-schema.xml 13 Feb 2004 18:58:24 -0000 1.63
@@ -680,12 +680,31 @@
<!-- =================================================== -->
+ <!-- PB - BatchModeTest tables -->
+ <!-- =================================================== -->
+ <table name="BATCH_MAIN_OBJ">
+ <column name="OBJ_ID" required="true" primaryKey="true" type="BIGINT"/>
+ <column name="NAME" type="VARCHAR" size="100"/>
+ </table>
+
+ <table name="BATCH_SUB_OBJ">
+ <column name="OBJ_ID" required="true" primaryKey="true" type="BIGINT"/>
+ <column name="FK_MAIN_ID" type="BIGINT"/>
+ <column name="NAME" type="VARCHAR" size="100"/>
+ <foreign-key foreignTable="BATCH_MAIN_OBJ">
+ <reference local="FK_MAIN_ID" foreign="OBJ_ID"/>
+ </foreign-key>
+ </table>
+
+
+ <!-- =================================================== -->
<!-- ObjectCache tests -->
<!-- =================================================== -->
<table name="CACHE_TEST">
<column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
<column name="NAME" type="VARCHAR" size="100"/>
</table>
+
<!-- =================================================== -->
<!-- Reference test tables -->
1.7 +248 -25 db-ojb/src/test/org/apache/ojb/broker/BatchModeTest.java
Index: BatchModeTest.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/BatchModeTest.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- BatchModeTest.java 18 Jan 2004 16:42:21 -0000 1.6
+++ BatchModeTest.java 13 Feb 2004 18:58:24 -0000 1.7
@@ -7,18 +7,15 @@
package org.apache.ojb.broker;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import junit.framework.TestCase;
import org.apache.ojb.broker.accesslayer.ConnectionManagerIF;
-import org.apache.ojb.broker.util.logging.LoggerFactory;
-import org.apache.ojb.broker.query.QueryFactory;
-import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.Criteria;
-
-import java.util.Collection;
-import java.util.Iterator;
+import org.apache.ojb.broker.query.Query;
+import org.apache.ojb.broker.query.QueryFactory;
/**
* @author Oleg Nitz
@@ -27,6 +24,7 @@
{
PersistenceBroker broker;
+ private static long timestamp = System.currentTimeMillis();
public BatchModeTest(String testName)
{
@@ -35,14 +33,7 @@
public void setUp()
{
- try
- {
- broker = PersistenceBrokerFactory.defaultPersistenceBroker();
- }
- catch (Throwable t)
- {
- LoggerFactory.getBootLogger().error("error getting broker", t);
- }
+ broker = PersistenceBrokerFactory.defaultPersistenceBroker();
}
public void tearDown()
@@ -50,22 +41,118 @@
try
{
broker.clearCache();
- broker.close();
}
- catch (Throwable t)
+ catch(Exception e)
{
}
+ finally
+ {
+ if(broker != null) broker.close();
+ }
+ }
+
+ private long getNewId()
+ {
+ return timestamp++;
}
public static void main(String[] args)
{
- junit.textui.TestRunner.run(suite());
+ String[] arr = {BatchModeTest.class.getName()};
+ junit.textui.TestRunner.main(arr);
+ }
+
+ /**
+ * A common (no specific batch) test
+ */
+ public void testEquals()
+ {
+ long pk = getNewId();
+ String nameMain = "testEquals_Main_" + pk;
+ String nameSub = "testEquals_Sub_" + pk;
+
+ MainObject main1 = new MainObject(pk, nameMain);
+ main1.add(new SubObject(nameSub));
+ MainObject main2 = new MainObject(pk, nameMain );
+ main2.add(new SubObject(nameSub));
+
+ broker.beginTransaction();
+ broker.store(main1);
+ // delete object before add new instance with same PK
+ broker.delete(main1);
+ broker.store(main2);
+ broker.commitTransaction();
+
+ // new PB instance
+ tearDown();
+ setUp();
+
+ MainObject main3 = new MainObject(pk, nameMain);
+ main3.add(new SubObject(nameSub));
+
+ Identity oid = new Identity(main1, broker);
+ broker.clearCache();
+ MainObject main4 = (MainObject) broker.getObjectByIdentity(oid);
+
+ assertEquals(main3, main4);
+ }
+
+ /**
+ * A common (no specific batch) test
+ */
+ public void testDelete()
+ {
+ long pk = getNewId();
+ String nameMain = "testDelete_Main_" + pk;
+ String nameSub = "testDelete_Sub_" + pk;
+
+ MainObject main1 = new MainObject(pk, nameMain);
+ main1.add(new SubObject(nameSub));
+ main1.add(new SubObject(nameSub));
+
+ broker.beginTransaction();
+ broker.store(main1);
+ broker.delete(main1);
+ broker.commitTransaction();
+
+ Identity oid = new Identity(main1, broker);
+ MainObject newMain = (MainObject) broker.getObjectByIdentity(oid);
+ assertNull(newMain);
+ Criteria crit = new Criteria();
+ crit.addLike("name", nameSub);
+ Query q = QueryFactory.newQuery(SubObject.class, crit);
+ Collection result = broker.getCollectionByQuery(q);
+ assertEquals(0, result.size());
}
- public static Test suite()
+ public void testDeleteInsert()
{
- TestSuite suite = new TestSuite(BatchModeTest.class);
- return suite;
+ long pk = getNewId();
+ String nameMain = "testDeleteInsert_Main_" + pk;
+ String nameSub = "testDeleteInsert_Sub_" + pk;
+
+ MainObject main1 = new MainObject(pk, nameMain);
+ main1.add(new SubObject("normal_" + nameSub));
+ broker.beginTransaction();
+ broker.store(main1);
+ broker.commitTransaction();
+
+ // enable batch mode before start tx
+ broker.serviceConnectionManager().setBatchMode(true);
+ Identity oid = new Identity(main1, broker);
+ broker.beginTransaction();
+ broker.delete(main1);
+ MainObject main2 = new MainObject(pk, nameMain);
+ main2.add(new SubObject("updated_" + nameSub));
+ broker.store(main2);
+
+ broker.commitTransaction();
+
+ broker.clearCache();
+ MainObject newMain = (MainObject) broker.getObjectByIdentity(oid);
+ assertNotNull(newMain);
+ assertNotNull(newMain.getSubObjects());
+ assertEquals(1, newMain.getSubObjects().size());
}
public void testBatchStatementsOrder()
@@ -228,7 +315,7 @@
broker.serviceConnectionManager().setBatchMode(true);
broker.beginTransaction();
- for (int i = 200 - 1; i >= 0; i--)
+ for(int i = 200 - 1; i >= 0; i--)
{
Person p = new Person();
p.setFirstname("a mass test");
@@ -244,7 +331,7 @@
assertEquals(200, result.size());
broker.beginTransaction();
- for (Iterator iterator = result.iterator(); iterator.hasNext();)
+ for(Iterator iterator = result.iterator(); iterator.hasNext();)
{
broker.delete(iterator.next());
}
@@ -312,5 +399,141 @@
broker.serviceConnectionManager().setBatchMode(true);
broker.serviceConnectionManager().getConnection();
broker.abortTransaction();
+ }
+
+
+ //==========================================================
+ // inner classes used for testing
+ //==========================================================
+ public static class MainObject
+ {
+ private Long id;
+ private String name;
+ private Collection subObjects;
+
+ public MainObject()
+ {
+ }
+
+ public MainObject(long id, String name)
+ {
+ setId(new Long(id));
+ setName(name);
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public Collection getSubObjects()
+ {
+ return subObjects;
+ }
+
+ public void setSubObjects(Collection subObjects)
+ {
+ this.subObjects = subObjects;
+ }
+
+ public void add(SubObject obj)
+ {
+ if(subObjects == null)
+ {
+ subObjects = new ArrayList();
+ }
+ subObjects.add(obj);
+ }
+
+ public boolean equals(Object other)
+ {
+ if(other instanceof MainObject)
+ {
+ MainObject main = (MainObject) other;
+ return ((name == null) ? main.name == null : name.equals(main.name))
+ && ((subObjects == null || subObjects.isEmpty())
+ ? (main.subObjects == null || main.subObjects.isEmpty())
+ : subObjects.equals(main.subObjects));
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+
+ public static class SubObject
+ {
+ private Long id;
+ private String name;
+ private Long mainId;
+
+ public SubObject()
+ {
+ }
+
+ public SubObject(String name)
+ {
+ setName(name);
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getMainId()
+ {
+ return mainId;
+ }
+
+ public void setMainId(Long mainId)
+ {
+ this.mainId = mainId;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public boolean equals(Object other)
+ {
+ if(other instanceof SubObject)
+ {
+ SubObject sub = (SubObject) other;
+ return (name == null) ? sub.name == null : name.equals(sub.name);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
}
}
1.105 +55 -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.104
retrieving revision 1.105
diff -u -r1.104 -r1.105
--- repository_junit.xml 27 Jan 2004 20:45:24 -0000 1.104
+++ repository_junit.xml 13 Feb 2004 18:58:24 -0000 1.105
@@ -2527,6 +2527,60 @@
<!-- ************************************************* -->
+<!-- Classes used in BatchModeTest -->
+<!-- ************************************************* -->
+ <class-descriptor
+ class="org.apache.ojb.broker.BatchModeTest$MainObject"
+ table="BATCH_MAIN_OBJ">
+
+ <field-descriptor
+ name="id"
+ column="OBJ_ID"
+ jdbc-type="BIGINT"
+ primarykey="true"
+ autoincrement="false"/>
+
+ <field-descriptor
+ name="name"
+ column="NAME"
+ jdbc-type="VARCHAR"
+ />
+ <collection-descriptor
+ name="subObjects"
+ element-class-ref="org.apache.ojb.broker.BatchModeTest$SubObject"
+ auto-update="true"
+ auto-retrieve="true"
+ auto-delete="true">
+ <inverse-foreignkey field-ref="mainId"/>
+ <orderby name="OBJ_ID"/>
+ </collection-descriptor>
+
+ </class-descriptor>
+
+ <class-descriptor
+ class="org.apache.ojb.broker.BatchModeTest$SubObject"
+ table="BATCH_SUB_OBJ">
+
+ <field-descriptor
+ name="id"
+ column="OBJ_ID"
+ jdbc-type="BIGINT"
+ primarykey="true"
+ autoincrement="true" />
+
+ <field-descriptor
+ name="name"
+ column="NAME"
+ jdbc-type="VARCHAR" />
+
+ <field-descriptor
+ name="mainId"
+ column="FK_MAIN_ID"
+ jdbc-type="BIGINT" />
+ </class-descriptor>
+
+
+<!-- ************************************************* -->
<!-- Tests checking field conversion -->
<!-- ************************************************* -->
<class-descriptor
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org