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 ma...@apache.org on 2003/07/02 02:04:18 UTC
cvs commit: db-ojb/src/test/org/apache/ojb/otm MtoNTest.java
mattbaird 2003/07/01 17:04:18
Added: src/test/org/apache/ojb/otm MtoNTest.java
Log:
M2N Test equivalent for the OTM. Thanks Oliver Matz.
Revision Changes Path
1.1 db-ojb/src/test/org/apache/ojb/otm/MtoNTest.java
Index: MtoNTest.java
===================================================================
/**
* User: om
*/
package org.apache.ojb.otm;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import junit.framework.TestCase;
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.metadata.CollectionDescriptor;
import org.apache.ojb.broker.util.collections.ManageableArrayList;
import org.apache.ojb.broker.util.collections.RemovalAwareCollection;
import org.apache.ojb.broker.*;
import org.apache.ojb.otm.lock.LockingException;
import org.apache.ojb.otm.core.Transaction;
/**
* @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird</a>
* @version $Id$
*/
public class MtoNTest extends TestCase
{
private static Class CLASS = MtoNTest.class;
private TestKit _kit;
private OTMConnection _conn;
private static final int COUNT = 1;
private static final long TIME = System.currentTimeMillis();
public void setUp() throws LockingException
{
_kit = TestKit.getTestInstance();
_conn = _kit.acquireConnection(PersistenceBrokerFactory.getDefaultKey());
}
public void tearDown() throws LockingException
{
_conn.close();
_conn = null;
};
public static void main(String[] args)
{
String[] arr = {CLASS.getName()};
junit.textui.TestRunner.main(arr);
}
private Paper createPaper() throws LockingException
{
String now = new Date().toString();
Paper paper = new Paper();
paper.setAuthor("Jonny Myers");
paper.setDate(now);
Qualifier qual1 = new Topic();
qual1.setName("qual1 " + now);
Qualifier qual2 = new Topic();
qual2.setName("qual2 " + now);
List qualifiers = new Vector();
qualifiers.add(qual1);
qualifiers.add(qual2);
paper.setQualifiers(qualifiers);
Transaction trans = _kit.getTransaction(_conn);
trans.begin();
_conn.makePersistent(qual1);
_conn.makePersistent(qual2);
_conn.makePersistent(paper);
Identity paperId = _conn.getIdentity(paper);
trans.commit();
// sanity check
trans = _kit.getTransaction(_conn);
trans.begin();
Paper retPaper = (Paper) _conn.getObjectByIdentity(paperId);
qualifiers = retPaper.getQualifiers();
assertEquals(2, qualifiers.size());
trans.commit();
return retPaper;
}
public void testCreate() throws Exception
{
Paper paper = createPaper();
}
public void testStoringWithAutoUpdateFalse() throws Exception
{
ClassDescriptor cld = _conn.getDescriptorFor(Paper.class);
CollectionDescriptor cod = cld.getCollectionDescriptorByName("qualifiers");
boolean autoUpdate = cod.getCascadeStore();
cod.setCascadeStore(false);
try
{
String now = new Date().toString();
Paper paper = new Paper();
paper.setAuthor("Jonny Myers");
paper.setDate(now);
Qualifier qual = new Topic();
qual.setName("qual " + now);
paper.setQualifiers(Arrays.asList(new Qualifier[]{qual}));
Transaction trans = _kit.getTransaction(_conn);
trans.begin();
_conn.makePersistent(paper); // store Paper and intermediary table only
Identity paperId = _conn.getIdentity(paper);
trans.commit();
// broker.clearCache();
trans = _kit.getTransaction(_conn);
trans.begin();
Paper retPaper = (Paper) _conn.getObjectByIdentity(paperId);
assertEquals(0, retPaper.getQualifiers().size());
trans.commit();
;
}
finally
{
cod.setCascadeStore(autoUpdate);
}
}
public void testStoringWithAutoUpdateTrue() throws Exception
{
ClassDescriptor cld = _conn.getDescriptorFor(Paper.class);
CollectionDescriptor cod = cld.getCollectionDescriptorByName("qualifiers");
boolean autoUpdate = cod.getCascadeStore();
cod.setCascadeStore(true);
try
{
String now = new Date().toString();
Paper paper = new Paper();
paper.setAuthor("Jonny Myers");
paper.setDate(now);
Qualifier qual = new Topic();
qual.setName("qual " + now);
paper.setQualifiers(Arrays.asList(new Qualifier[]{qual}));
Transaction trans = _kit.getTransaction(_conn);
trans.begin();
_conn.makePersistent(paper); // store Paper, intermediary and Qualifier
Identity paperId = _conn.getIdentity(paper);
trans.commit();
//broker.clearCache();
trans = _kit.getTransaction(_conn);
trans.begin();
Paper retPaper = (Paper) _conn.getObjectByIdentity(paperId);
assertEquals(1, retPaper.getQualifiers().size());
trans.commit();
;
}
finally
{
cod.setCascadeStore(autoUpdate);
}
}
// delete from intermediary table only when collection NOT removal aware
public void testDelete_NonRemovalAware() throws Exception
{
ClassDescriptor cld = _conn.getDescriptorFor(Paper.class);
CollectionDescriptor cod = cld.getCollectionDescriptorByName("qualifiers");
Class collectionClass = cod.getCollectionClass();
cod.setCollectionClass(ManageableArrayList.class);
try
{
Paper paper = createPaper();
Identity paperId = _conn.getIdentity(paper);
List qualifiers = paper.getQualifiers();
Qualifier qual1 = (Qualifier) qualifiers.get(0);
Qualifier qual2 = (Qualifier) qualifiers.get(1);
// remove first object
qualifiers.remove(0);
Transaction trans = _kit.getTransaction(_conn);
trans.begin();
_conn.makePersistent(paper);
trans.commit();
;
//broker.clearCache();
trans = _kit.getTransaction(_conn);
trans.begin();
Paper retPaper = (Paper) _conn.getObjectByIdentity(paperId);
assertEquals(1, retPaper.getQualifiers().size());
// target object qual1 should NOT be deleted
Qualifier retQual1 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual1));
Qualifier retQual2 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual2));
assertNotNull(retQual1);
assertNotNull(retQual2);
trans.commit();
;
}
finally
{
cod.setCollectionClass(collectionClass);
}
}
// delete from intermediary AND target-table when collection removal aware
public void testDelete_RemovalAware() throws Exception
{
ClassDescriptor cld = _conn.getDescriptorFor(Paper.class);
CollectionDescriptor cod = cld.getCollectionDescriptorByName("qualifiers");
Class collectionClass = cod.getCollectionClass();
cod.setCollectionClass(RemovalAwareCollection.class);
try
{
Paper paper = createPaper();
List qualifiers = paper.getQualifiers();
Qualifier qual1 = (Qualifier) qualifiers.get(0);
Qualifier qual2 = (Qualifier) qualifiers.get(1);
Identity paperId = _conn.getIdentity(paper);
// remove first object
qualifiers.remove(0);
Transaction trans = _kit.getTransaction(_conn);
trans.begin();
_conn.makePersistent(paper);
trans.commit();
;
// broker.clearCache();
trans = _kit.getTransaction(_conn);
trans.begin();
Paper retPaper = (Paper) _conn.getObjectByIdentity(paperId);
assertEquals(1, retPaper.getQualifiers().size());
// target object qual1 should be deleted
Qualifier retQual1 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual1));
Qualifier retQual2 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual2));
assertNull(retQual1);
assertNotNull(retQual2);
trans.commit();
;
}
finally
{
cod.setCollectionClass(collectionClass);
}
}
public void testDeletionFromIntermediaryTableWithNullList() throws Exception
{
Paper paper = createPaper();
Identity paperId = _conn.getIdentity(paper);
List qualifiers = paper.getQualifiers();
Qualifier qual1 = (Qualifier) qualifiers.get(0);
Qualifier qual2 = (Qualifier) qualifiers.get(1);
// now set collection to null and check if changes get persisted
paper.setQualifiers(null);
Transaction trans = _kit.getTransaction(_conn);
trans.begin();
_conn.makePersistent(paper);
trans.commit();
;
//broker.clearCache();
trans = _kit.getTransaction(_conn);
trans.begin();
Paper retPaper = (Paper) _conn.getObjectByIdentity(paperId);
assertEquals(0, retPaper.getQualifiers().size());
// target objects should NOT be deleted
Qualifier retQual1 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual1));
Qualifier retQual2 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual2));
assertNotNull(retQual1);
assertNotNull(retQual2);
trans.commit();
;
}
public void testDeletionWithClearedList() throws Exception
{
Paper paper = createPaper();
Identity paperId = _conn.getIdentity(paper);
List qualifiers = paper.getQualifiers();
Qualifier qual1 = (Qualifier) qualifiers.get(0);
Qualifier qual2 = (Qualifier) qualifiers.get(1);
// now clear collection
paper.getQualifiers().clear();
Transaction trans = _kit.getTransaction(_conn);
trans.begin();
_conn.makePersistent(paper);
trans.commit();
;
//broker.clearCache();
trans = _kit.getTransaction(_conn);
trans.begin();
Paper retPaper = (Paper) _conn.getObjectByIdentity(paperId);
assertEquals(0, retPaper.getQualifiers().size());
// target objects should be deleted
Qualifier retQual1 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual1));
Qualifier retQual2 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual2));
assertNull(retQual1);
assertNull(retQual2);
trans.commit();
;
}
public void testDeletionFromIntermediaryTableWithEmptyList() throws Exception
{
Paper paper = createPaper();
Identity paperId = _conn.getIdentity(paper);
List qualifiers = paper.getQualifiers();
Qualifier qual1 = (Qualifier) qualifiers.get(0);
Qualifier qual2 = (Qualifier) qualifiers.get(1);
// now empty collection and check if changes get persisted
paper.setQualifiers(new RemovalAwareCollection());
Transaction trans = _kit.getTransaction(_conn);
trans.begin();
_conn.makePersistent(paper);
trans.commit();
;
// broker.clearCache();
trans = _kit.getTransaction(_conn);
trans.begin();
Paper retPaper = (Paper) _conn.getObjectByIdentity(paperId);
assertEquals(0, retPaper.getQualifiers().size());
// target objects should NOT be deleted
Qualifier retQual1 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual1));
Qualifier retQual2 = (Qualifier) _conn.getObjectByIdentity(_conn.getIdentity(qual2));
assertNotNull(retQual1);
assertNotNull(retQual2);
trans.commit();
;
}
}