Return-Path: Delivered-To: apmail-db-ojb-dev-archive@www.apache.org Received: (qmail 68481 invoked from network); 3 Jan 2004 02:06:32 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 3 Jan 2004 02:06:32 -0000 Received: (qmail 91869 invoked by uid 500); 3 Jan 2004 02:06:14 -0000 Delivered-To: apmail-db-ojb-dev-archive@db.apache.org Received: (qmail 91841 invoked by uid 500); 3 Jan 2004 02:06:14 -0000 Mailing-List: contact ojb-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "OJB Developers List" Reply-To: "OJB Developers List" Delivered-To: mailing list ojb-dev@db.apache.org Received: (qmail 91828 invoked by uid 500); 3 Jan 2004 02:06:14 -0000 Received: (qmail 91825 invoked from network); 3 Jan 2004 02:06:14 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 3 Jan 2004 02:06:14 -0000 Received: (qmail 68468 invoked by uid 1510); 3 Jan 2004 02:06:30 -0000 Date: 3 Jan 2004 02:06:30 -0000 Message-ID: <20040103020630.68467.qmail@minotaur.apache.org> From: arminw@apache.org To: db-ojb-cvs@apache.org Subject: cvs commit: db-ojb/src/test/org/apache/ojb/odmg ODMGRollbackTest.java OdmgExamples.java DListTest.java CollectionsTest.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N arminw 2004/01/02 18:06:30 Modified: src/test/org/apache/ojb/odmg ODMGRollbackTest.java OdmgExamples.java DListTest.java CollectionsTest.java Log: add new odmg test cases Revision Changes Path 1.17 +39 -0 db-ojb/src/test/org/apache/ojb/odmg/ODMGRollbackTest.java Index: ODMGRollbackTest.java =================================================================== RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/odmg/ODMGRollbackTest.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- ODMGRollbackTest.java 16 Oct 2003 16:57:39 -0000 1.16 +++ ODMGRollbackTest.java 3 Jan 2004 02:06:30 -0000 1.17 @@ -13,6 +13,8 @@ import org.apache.ojb.broker.query.Criteria; import org.apache.ojb.broker.query.Query; import org.apache.ojb.broker.query.QueryByCriteria; +import org.apache.ojb.broker.query.QueryFactory; +import org.apache.ojb.broker.query.QueryByIdentity; import org.odmg.Database; import org.odmg.Implementation; import org.odmg.OQLQuery; @@ -29,6 +31,43 @@ public ODMGRollbackTest(String s) { super(s); + } + + public void testTransactionFlush() throws Exception + { + Implementation odmg = OJB.getInstance(); + Database db = odmg.newDatabase(); + db.open(databaseName, Database.OPEN_READ_WRITE); + TransactionExt tx = (TransactionExt) odmg.newTransaction(); + + tx.begin(); + PersistenceBroker broker = tx.getBroker(); + ODMGZoo obj = new ODMGZoo(); + tx.lock(obj, tx.WRITE); + obj.setName("testTransactionFlush"); + + tx.flush(); + + Criteria crit = new Criteria(); + crit.addEqualTo("name", obj.getName()); + QueryByCriteria query = QueryFactory.newQuery(ODMGZoo.class, crit); + // we flushed all objects, thus we should found object in DB/cache + Iterator it = broker.getIteratorByQuery(query); + assertTrue(it.hasNext()); + assertSame(obj, it.next()); + assertFalse(it.hasNext()); + // now we abort tx, so all flushed objects shouldn't be found + // in further queries + tx.abort(); + + tx = (TransactionExt) odmg.newTransaction(); + tx.begin(); + broker = tx.getBroker(); + QueryByIdentity query2 = new QueryByIdentity(obj); + Object result = broker.getObjectByQuery(query2); + tx.commit(); + + assertNull("We should not find objects from aborted tx", result); } /** 1.13 +3 -17 db-ojb/src/test/org/apache/ojb/odmg/OdmgExamples.java Index: OdmgExamples.java =================================================================== RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/odmg/OdmgExamples.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- OdmgExamples.java 6 Aug 2003 00:20:13 -0000 1.12 +++ OdmgExamples.java 3 Jan 2004 02:06:30 -0000 1.13 @@ -1,5 +1,7 @@ package org.apache.ojb.odmg; +import java.util.List; + import junit.framework.TestCase; import org.apache.ojb.broker.Identity; import org.apache.ojb.broker.PersistenceBroker; @@ -16,8 +18,6 @@ import org.odmg.OQLQuery; import org.odmg.Transaction; -import java.util.List; - /** Demo Application that shows basic concepts for Applications using the OJB ODMG * implementation as an transactional object server. */ @@ -25,36 +25,22 @@ { public static void main(String[] args) { - String[] arr = {CLASS.getName()}; + String[] arr = {OdmgExamples.class.getName()}; junit.textui.TestRunner.main(arr); } - private static Class CLASS = OdmgExamples.class; private String databaseName; - /** - * Insert the method's description here. - * Creation date: (24.12.2000 00:33:40) - */ public OdmgExamples(String name) - { super(name); } - /** - * Insert the method's description here. - * Creation date: (06.12.2000 21:58:53) - */ public void setUp() { databaseName = TestHelper.DEF_DATABASE_NAME; } - /** - * Insert the method's description here. - * Creation date: (06.12.2000 21:59:14) - */ public void tearDown() { databaseName = null; 1.18 +135 -7 db-ojb/src/test/org/apache/ojb/odmg/DListTest.java Index: DListTest.java =================================================================== RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/odmg/DListTest.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- DListTest.java 30 Aug 2003 23:07:43 -0000 1.17 +++ DListTest.java 3 Jan 2004 02:06:30 -0000 1.18 @@ -1,17 +1,20 @@ package org.apache.ojb.odmg; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + import junit.framework.TestCase; -import org.apache.ojb.broker.TestHelper; import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.ojb.broker.TestHelper; import org.odmg.DBag; import org.odmg.DList; import org.odmg.DSet; import org.odmg.Database; import org.odmg.Implementation; +import org.odmg.OQLQuery; import org.odmg.Transaction; -import java.util.Iterator; - /** * Demo Application that shows basic concepts for Applications using the OJB ODMG * implementation as an transactional object server. @@ -51,7 +54,7 @@ databaseName = null; } - public void testAdding() throws Exception + public void testAddingLockupWithTx() throws Exception { // create a unique name: final String name = "testAdding_" + System.currentTimeMillis(); @@ -64,6 +67,7 @@ Transaction tx = odmg.newTransaction(); tx.begin(); + // create DList and bound by name DList list = odmg.newDList(); db.bind(list, name); tx.commit(); @@ -75,6 +79,7 @@ tx = odmg.newTransaction(); tx.begin(); + // add objects to list for (int i = 0; i < 5; i++) { DListObject a = createObject(name); @@ -82,6 +87,7 @@ } tx.commit(); + // check current list Iterator iter = list.iterator(); while (iter.hasNext()) { @@ -91,8 +97,9 @@ tx = odmg.newTransaction(); tx.begin(); - ((HasBroker) odmg.currentTransaction()).getBroker().clearCache(); + ((TransactionExt) odmg.currentTransaction()).getBroker().clearCache(); + // lookup list and check entries DList lookedUp = (DList) db.lookup(name); assertNotNull("binded DList not found", lookedUp); @@ -106,12 +113,133 @@ assertNotNull(a); assertNotNull(b); assertEquals(a.getId(), b.getId()); + } + tx.commit(); + + // add new entries to list + tx.begin(); + for (int i = 0; i < 3; i++) + { + DListObject a = createObject(name + "_new_entry"); + list.add(a); + } + tx.commit(); + + tx = odmg.newTransaction(); + tx.begin(); + ((TransactionExt) odmg.currentTransaction()).getBroker().clearCache(); + lookedUp = (DList) db.lookup(name); + iter = lookedUp.iterator(); + iter1 = list.iterator(); + assertEquals("Wrong number of DListEntry found", 8, list.size()); + while (iter.hasNext()) + { + DListObject a = (DListObject) iter.next(); + DListObject b = (DListObject) iter1.next(); + assertNotNull(a); + assertNotNull(b); + assertEquals(a.getId(), b.getId()); + } + tx.commit(); + assertNotNull("binded DList not found", lookedUp); + } + + public void testReadAndStore() throws Exception + { + // create a unique name: + final String name = "testReadAndStore_" + System.currentTimeMillis(); + + // get facade instance + Implementation odmg = OJB.getInstance(); + Database db = odmg.newDatabase(); + //open database + db.open(databaseName, Database.OPEN_READ_WRITE); + + // create test objects + Transaction tx = odmg.newTransaction(); + tx.begin(); + // add objects to list + for (int i = 0; i < 5; i++) + { + tx.lock(createObject(name), Transaction.WRITE); + } + tx.commit(); + + tx.begin(); + // query test objects + OQLQuery q = odmg.newOQLQuery(); + q.create("select all from "+DListObject.class.getName()+" where name=$1"); + q.bind(name); + Collection ret = (Collection) q.execute(); + // check result list size + assertEquals(5, ret.size()); + // do read lock + for (Iterator it = ret.iterator(); it.hasNext(); ) + { + tx.lock(it.next(), Transaction.READ); + } + // create new list for results + ArrayList result = new ArrayList(); + result.addAll(ret); + tx.commit(); + } - //System.out.print(a.getArticleId() + ", "); + public void testIterateWithoutTx() throws Exception + { + // create a unique name: + final String name = "testAdding_" + System.currentTimeMillis(); + + // get facade instance + Implementation odmg = OJB.getInstance(); + Database db = odmg.newDatabase(); + //open database + db.open(databaseName, Database.OPEN_READ_WRITE); + // get DList and fill with objects + DList list = odmg.newDList(); + Transaction tx = odmg.newTransaction(); + tx.begin(); + for (int i = 0; i < 5; i++) + { + DListObject a = createObject(name); + list.add(a); } - //System.out.println(); + // bind the new list + db.bind(list, name); + tx.commit(); + tx = odmg.newTransaction(); + tx.begin(); + Object obj = db.lookup(name); tx.commit(); + assertNotNull("binded DList not found", obj); + + // iterate list + Iterator iter = list.iterator(); + while (iter.hasNext()) + { + DListObject a = (DListObject) iter.next(); + assertNotNull(a); + } + assertEquals(5, list.size()); + + tx = odmg.newTransaction(); + tx.begin(); + ((TransactionExt) odmg.currentTransaction()).getBroker().clearCache(); + DList lookedUp = (DList) db.lookup(name); + tx.commit(); + assertNotNull("binded DList not found", lookedUp); + + //System.out.println("sequence of items in lookedup list:"); + iter = lookedUp.iterator(); + Iterator iter1 = list.iterator(); + while (iter.hasNext()) + { + DListObject a = (DListObject) iter.next(); + DListObject b = (DListObject) iter1.next(); + assertNotNull(a); + assertNotNull(b); + assertEquals(a.getId(), b.getId()); + } } /** 1.6 +146 -1 db-ojb/src/test/org/apache/ojb/odmg/CollectionsTest.java Index: CollectionsTest.java =================================================================== RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/odmg/CollectionsTest.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- CollectionsTest.java 7 Jun 2003 10:19:04 -0000 1.5 +++ CollectionsTest.java 3 Jan 2004 02:06:30 -0000 1.6 @@ -13,6 +13,7 @@ import java.util.Collection; import java.util.List; import java.util.Vector; +import java.util.Iterator; /** * Test case handles with collections. @@ -124,6 +125,150 @@ fetchedGat = (Gatherer) result.iterator().next(); colsA = fetchedGat.getCollectiblesA(); assertEquals("Wrong number of CollectiblesA found in Gatherer", 2, colsA.size()); + tx.commit(); + } + + public void testStoreUpdate() throws Exception + { + String prefix = "testInsertDelete" + System.currentTimeMillis(); + String queryStr = "select gatherer from " + Gatherer.class.getName() + " where gatId=$1"; + + // prepare test case + Gatherer gat = new Gatherer(null, prefix + "_Gatherer"); + CollectibleA[] cols = prepareCollectibleA(prefix); + CollectibleB[] colsB = prepareCollectibleB(prefix); + List colList = Arrays.asList(cols); + List colListB = Arrays.asList(colsB); + // set List of CollectibleBase objects + gat.setCollectiblesA(colList); + gat.setCollectiblesB(colListB); + TransactionExt tx = (TransactionExt) odmg.newTransaction(); + tx.begin(); + db.makePersistent(gat); + tx.commit(); + + // check if gatherer was stored + tx.begin(); + tx.getBroker().clearCache(); + OQLQuery query = odmg.newOQLQuery(); + query.create(queryStr); + Integer gatId = gat.getGatId(); + assertNotNull(gatId); + query.bind(gatId); + Collection result = (Collection) query.execute(); + tx.commit(); + assertEquals("Wrong number of objects found", 1, result.size()); + Gatherer fetchedGat = (Gatherer) result.iterator().next(); + + assertNotNull(fetchedGat.getCollectiblesA()); + assertNotNull(fetchedGat.getCollectiblesB()); + assertEquals(3, fetchedGat.getCollectiblesA().size()); + assertEquals(3, fetchedGat.getCollectiblesB().size()); + assertNotNull(fetchedGat.getCollectiblesA().get(0)); + assertNotNull(fetchedGat.getCollectiblesB().get(0)); + + tx.begin(); + tx.getBroker().clearCache(); + tx.lock(fetchedGat, Transaction.WRITE); + fetchedGat.getCollectiblesA().remove(0); + fetchedGat.getCollectiblesB().remove(0); + tx.commit(); + + tx.begin(); + tx.getBroker().clearCache(); + query = odmg.newOQLQuery(); + query.create(queryStr); + gatId = gat.getGatId(); + assertNotNull(gatId); + query.bind(gatId); + result = (Collection) query.execute(); + tx.commit(); + assertEquals("Wrong number of objects found", 1, result.size()); + fetchedGat = (Gatherer) result.iterator().next(); + + assertNotNull(fetchedGat.getCollectiblesA()); + assertNotNull(fetchedGat.getCollectiblesB()); + assertEquals(2, fetchedGat.getCollectiblesA().size()); + assertEquals(2, fetchedGat.getCollectiblesB().size()); + assertNotNull(fetchedGat.getCollectiblesA().get(0)); + assertNotNull(fetchedGat.getCollectiblesB().get(0)); + } + + public void testStoreUpdateReference() throws Exception + { + String name = "testStoreUpdateReference" + System.currentTimeMillis(); + String queryStr = "select colls from " + CollectibleA.class.getName() + " where name=$1"; + + // prepare test case + Gatherer gat_1 = new Gatherer(null, "Gatherer_" + name); + CollectibleA coll_1 = new CollectibleA(name); + Gatherer gat_2 = new Gatherer(null, "Gatherer_" + name); + CollectibleA coll_2 = new CollectibleA(name); + + coll_1.setGatherer(gat_1); + coll_2.setGatherer(gat_2); + + Transaction tx = odmg.newTransaction(); + tx.begin(); + db.makePersistent(coll_1); + db.makePersistent(coll_2); + tx.commit(); + + tx.begin(); + ((TransactionExt)tx).getBroker().clearCache(); + OQLQuery query = odmg.newOQLQuery(); + query.create(queryStr); + query.bind(name); + Collection result = (Collection) query.execute(); + assertNotNull(result); + assertEquals(2, result.size()); + + for (Iterator iterator = result.iterator(); iterator.hasNext();) + { + CollectibleA collectible = (CollectibleA) iterator.next(); + Gatherer gat = collectible.getGatherer(); + assertNotNull(gat); + assertEquals("Gatherer_"+name, gat.getName()); + tx.lock(collectible, Transaction.WRITE); + collectible.getGatherer().setName("New_"+name); + } + tx.commit(); + + tx.begin(); + ((TransactionExt)tx).getBroker().clearCache(); + query = odmg.newOQLQuery(); + query.create(queryStr); + query.bind(name); + result = (Collection) query.execute(); + assertNotNull(result); + assertEquals(2, result.size()); + + for (Iterator iterator = result.iterator(); iterator.hasNext();) + { + CollectibleA collectible = (CollectibleA) iterator.next(); + Gatherer gat = collectible.getGatherer(); + assertNotNull(gat); + assertEquals("New_"+name, gat.getName()); + tx.lock(collectible, Transaction.WRITE); + collectible.setGatherer(null); + } + tx.commit(); + + tx.begin(); + ((TransactionExt)tx).getBroker().clearCache(); + query = odmg.newOQLQuery(); + query.create(queryStr); + query.bind(name); + result = (Collection) query.execute(); + assertNotNull(result); + assertEquals(2, result.size()); + + for (Iterator iterator = result.iterator(); iterator.hasNext();) + { + CollectibleA collectible = (CollectibleA) iterator.next(); + Gatherer gat = collectible.getGatherer(); + assertNull(gat); + } tx.commit(); } --------------------------------------------------------------------- To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org For additional commands, e-mail: ojb-dev-help@db.apache.org