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 2007/02/07 02:09:48 UTC

svn commit: r504400 - in /db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb: broker/InheritanceMultipleTableTest.java odmg/ObjectImageTest.java

Author: arminw
Date: Tue Feb  6 17:09:47 2007
New Revision: 504400

URL: http://svn.apache.org/viewvc?view=rev&rev=504400
Log:
add new tests

Modified:
    db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java
    db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/ObjectImageTest.java

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java?view=diff&rev=504400&r1=504399&r2=504400
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java Tue Feb  6 17:09:47 2007
@@ -33,6 +33,73 @@
         junit.textui.TestRunner.main(new String[]{InheritanceMultipleTableTest.class.getName()});
     }
 
+    public void testRefreshObject()
+    {
+        ClassDescriptor cld = broker.getClassDescriptor(FourthA.class);
+        boolean old = cld.isAlwaysRefresh();
+        try
+        {
+            cld.setAlwaysRefresh(true);
+
+            long timestamp = System.currentTimeMillis();
+            String name = "testRefreshObject_" + timestamp;
+            String t_name = "fourth_" + name;
+
+            FourthA fourth = new FourthA(t_name);
+            fourth.setFourth("fourth");
+            fourth.setThird("third");
+            fourth.setSecond("second");
+
+            broker.beginTransaction();
+            broker.store(fourth);
+            broker.commitTransaction();
+
+            Identity oid_3 = broker.serviceIdentity().buildIdentity(fourth);
+            // we expect a DB roundup, because we force refresh
+            FourthA newFourth = (FourthA) broker.getObjectByIdentity(oid_3);
+
+            assertNotNull(newFourth);
+            assertEquals(t_name, newFourth.getName());
+            assertEquals("fourth", fourth.getFourth());
+            assertEquals("third", fourth.getThird());
+            assertEquals("second", fourth.getSecond());
+
+            newFourth.setName(newFourth.getName() + "_updated");
+            newFourth.setFourth("fourth_updated");
+            newFourth.setThird("third_updated");
+            newFourth.setSecond("second_updated");
+
+            newFourth = (FourthA) SerializationUtils.clone(newFourth);
+
+            broker.beginTransaction();
+            broker.store(newFourth);
+            broker.commitTransaction();
+
+            // we expect a DB roundup, because we force refresh
+            newFourth = (FourthA) broker.getObjectByIdentity(oid_3);
+
+            assertNotNull(newFourth);
+            assertEquals(t_name + "_updated", newFourth.getName());
+            assertEquals("second_updated", newFourth.getSecond());
+            assertEquals("third_updated", newFourth.getThird());
+            assertEquals("fourth_updated", newFourth.getFourth());
+
+            newFourth = (FourthA) SerializationUtils.clone(newFourth);
+
+            broker.beginTransaction();
+            broker.delete(newFourth);
+            broker.commitTransaction();
+
+            newFourth = (FourthA) broker.getObjectByIdentity(oid_3);
+
+            assertNull(newFourth);
+        }
+        finally
+        {
+            cld.setAlwaysRefresh(old);
+        }
+    }
+
     /**
      * Bug:
      * this test show a problem when using table-per-subclass inheritance
@@ -66,6 +133,81 @@
         //System.out.println("Result: " + result);
         assertEquals(Executive.class.getName(), result.getClass().getName());
         assertEquals(executive, result);
+    }
+
+    public void testQueryByExample_1()
+    {
+        long timestamp = System.currentTimeMillis();
+        Long id_2 = new Long(timestamp);
+        String name = "testQueryByExample_1_" + timestamp;
+        Employee em1 = new Employee(id_2, "employee_" + name);
+        Executive ex1 = new Executive(id_2, "executive_" + name, "department_1", null);
+        Executive ex2 = new Executive(id_2, "executive_" + name, "department_2", null);
+        ArrayList list = new ArrayList();
+        list.add(ex1);
+        list.add(ex2);
+        Manager m1 = new Manager(id_2, "manager_" + name);
+        m1.setExecutives(list);
+
+        broker.beginTransaction();
+        broker.store(em1);
+        broker.store(m1);
+        broker.commitTransaction();
+
+        broker.clearCache();
+
+        Criteria crit = new Criteria()
+                .addLike("executives.name", "%" + name)
+                .addEqualTo("name", "manager_" + name)
+                .addIsNull("department")
+                .addIsNull("manager")
+                .addIsNull("address");
+        Query q = QueryFactory.newQuery(Manager.class, crit, true);
+        //System.out.println("crit: " + crit.toString());
+
+        Collection result = broker.getCollectionByQuery(q);
+        assertEquals(1, result.size());
+
+        Manager newM1 = (Manager) broker.getObjectByQuery(q);
+        assertNotNull(newM1);
+        assertEquals(2, newM1.getExecutives().size());
+        assertEquals(m1.getId(), newM1.getId());
+        assertEquals(m1.getId_2(), newM1.getId_2());
+    }
+
+    public void testQueryByExample_2()
+    {
+        long timestamp = System.currentTimeMillis();
+        Long id_2 = new Long(timestamp);
+        String name = "testQueryByExample_2_" + timestamp;
+        Employee em1 = new Employee(id_2, "employee_" + name);
+        Executive ex1 = new Executive(id_2, "executive_" + name, "department_1", null);
+        Executive ex2 = new Executive(id_2, "executive_" + name, "department_2", null);
+        ArrayList list = new ArrayList();
+        list.add(ex1);
+        list.add(ex2);
+        Manager m1 = new Manager(id_2, "manager_" + name);
+        m1.setExecutives(list);
+
+        broker.beginTransaction();
+        broker.store(em1);
+        broker.store(m1);
+        broker.commitTransaction();
+
+        broker.clearCache();
+
+        Manager tmp = new Manager();
+        tmp.setName("manager_" + name);
+
+        Query q = QueryFactory.newQueryByExample(tmp);
+        System.out.println("crit: " +q.toString());
+
+        Manager newM1 = (Manager) broker.getObjectByQuery(q);
+        assertNotNull(newM1);
+        assertEquals("manager_" + name, newM1.getName());
+        assertEquals(2, newM1.getExecutives().size());
+        assertEquals(m1.getId(), newM1.getId());
+        assertEquals(m1.getId_2(), newM1.getId_2());
     }
 
     public void testLookupByIdentity()

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/ObjectImageTest.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/ObjectImageTest.java?view=diff&rev=504400&r1=504399&r2=504400
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/ObjectImageTest.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/odmg/ObjectImageTest.java Tue Feb  6 17:09:47 2007
@@ -24,6 +24,7 @@
 
 import org.apache.commons.lang.SerializationUtils;
 import org.apache.commons.lang.SystemUtils;
+import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.ojb.broker.Identity;
 import org.apache.ojb.broker.query.Criteria;
@@ -36,6 +37,9 @@
 import org.apache.ojb.broker.core.proxy.MaterializationListener;
 import org.apache.ojb.broker.core.proxy.ProxyHelper;
 import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
+import org.apache.ojb.broker.metadata.MetadataManager;
+import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.DescriptorRepository;
 import org.apache.ojb.junit.ODMGTestCase;
 import org.odmg.OQLQuery;
 import org.odmg.Transaction;
@@ -50,7 +54,6 @@
  * Test cases for refactored odmg-api implementation. These tests asserts previously outstanding
  * ODMG-issues and proxy object handling in the ODMG API.
  *
- * @author <a href="mailto:arminw@apache.org">Armin Waibel</a>
  * @version $Id$
  */
 public class ObjectImageTest extends ODMGTestCase
@@ -63,6 +66,200 @@
     public static void main(String[] args)
     {
         junit.textui.TestRunner.main(new String[]{ObjectImageTest.class.getName()});
+    }
+
+    MetadataManager getMetadataManager()
+    {
+        return MetadataManager.getInstance();
+    }
+
+    /**
+     * if the state detection is disabled, we don't expect any object changes
+     */
+    public void testStateDetection_1() throws Exception
+    {
+        String name = "testStateDetection_1_" + System.currentTimeMillis();
+        MetadataManager mm = getMetadataManager();
+        DescriptorRepository repository = mm.getRepository();
+        boolean oldState = repository.isStateDetection();
+        // disable object state detection
+        repository.setStateDetection(false);
+
+        try
+        {
+            disabledStateDetection(name);
+        }
+        finally
+        {
+            // restore old state
+            repository = mm.getRepository();
+            repository.setStateDetection(oldState);
+        }
+    }
+
+    /**
+     * if the state detection is disabled, we don't expect any object changes
+     */
+    public void testStateDetection_2() throws Exception
+    {
+        String name = "testStateDetection_2_" + System.currentTimeMillis();
+        MetadataManager mm = getMetadataManager();
+        ClassDescriptor cld = mm.getRepository().getDescriptorFor(Book.class);
+        boolean oldState = cld.isStateDetection();
+        // disable object state detection
+        cld.setStateDetection(false);
+
+        try
+        {
+            disabledStateDetection(name);
+        }
+        finally
+        {
+            // restore old state
+            cld = mm.getRepository().getDescriptorFor(Book.class);
+            cld.setStateDetection(oldState);
+        }
+    }
+
+    /**
+     * if the state detection is disabled, we don't expect any object changes
+     */
+    private void disabledStateDetection(String name) throws Exception
+    {
+        Date date = new Date();
+        byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
+        Book book = new Book(name, date, cover);
+
+        TransactionExt tx = (TransactionExt) odmg.newTransaction();
+        tx.begin();
+        database.makePersistent(book);
+        tx.commit();
+
+        Integer version = book.getVersion();
+        assertTrue(book.getVersion().intValue() > 0);
+
+        tx.begin();
+        tx.getBroker().clearCache();
+        OQLQuery query = odmg.newOQLQuery();
+        query.create("select books from " + Book.class.getName() + " where title like $1");
+        query.bind(name);
+        Collection result = (Collection) query.execute();
+        assertEquals(1, result.size());
+        Book b = (Book) result.iterator().next();
+        assertEquals(version, b.getVersion());
+        tx.commit();
+
+        tx.begin();
+        tx.lock(b, Transaction.WRITE);
+        b.setCover(new byte[]{2,3,4,5,6,7,8,8});
+        b.setPublicationDate(new Date(1));
+        tx.commit();
+
+        assertEquals(version, book.getVersion());
+        tx.begin();
+        tx.getBroker().clearCache();
+        query = odmg.newOQLQuery();
+        query.create("select books from " + Book.class.getName() + " where title like $1");
+        query.bind(name);
+        result = (Collection) query.execute();
+        assertEquals(version, b.getVersion());
+        b = (Book) result.iterator().next();
+        assertEquals(version, b.getVersion());
+        tx.commit();
+
+        // System.err.println("### 4. commit, changed date");
+        assertEquals(version, b.getVersion());
+        assertEquals(date, b.getPublicationDate());
+        assertTrue(ArrayUtils.isEquals(cover, b.getCover()));
+    }
+
+    /**
+     * if the state detection of a field is disabled, we don't expect any
+     * automatic object changes if this field change
+     */
+    public void testStateDetection_3() throws Exception
+    {
+        MetadataManager mm = getMetadataManager();
+        ClassDescriptor cld = mm.getRepository().getDescriptorFor(Book.class);
+        boolean oldState = cld.getFieldDescriptorByName("title").isStateDetection();
+        // disable field state detection
+        cld.getFieldDescriptorByName("title").setStateDetection(false);
+
+        try
+        {
+            String name = "testStateDetection_3_" + System.currentTimeMillis();
+            Date date = new Date();
+            byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
+            Book book = new Book(name, date, cover);
+
+            TransactionExt tx = (TransactionExt) odmg.newTransaction();
+            tx.begin();
+            database.makePersistent(book);
+            tx.commit();
+
+            Integer version = book.getVersion();
+            assertTrue(book.getVersion().intValue() > 0);
+
+            tx.begin();
+            tx.getBroker().clearCache();
+            OQLQuery query = odmg.newOQLQuery();
+            query.create("select books from " + Book.class.getName() + " where title like $1");
+            query.bind(name);
+            Collection result = (Collection) query.execute();
+            assertEquals(1, result.size());
+            Book b = (Book) result.iterator().next();
+            assertEquals(version, b.getVersion());
+            tx.commit();
+
+            tx.begin();
+            tx.lock(b, Transaction.WRITE);
+            b.setTitle(b.getTitle() + "_updated");
+            tx.commit();
+
+            // field 'title' has disabled state detection, so nothing should happen
+            assertEquals(version, book.getVersion());
+            tx.begin();
+            tx.getBroker().clearCache();
+            query = odmg.newOQLQuery();
+            query.create("select books from " + Book.class.getName() + " where title like $1");
+            query.bind(name);
+            result = (Collection) query.execute();
+            assertEquals(version, b.getVersion());
+            b = (Book) result.iterator().next();
+            assertEquals(version, b.getVersion());
+            tx.commit();
+
+            // System.err.println("### 4. commit, changed date");
+            assertEquals(version, b.getVersion());
+            assertEquals(date, b.getPublicationDate());
+            assertTrue(ArrayUtils.isEquals(cover, b.getCover()));
+
+            tx.begin();
+            tx.lock(b, Transaction.WRITE);
+            b.setCover(new byte[]{2,3,4,5,6,7,8,8});
+            b.setPublicationDate(new Date(1));
+            tx.commit();
+
+            // other fields have state detection enabled, so we expect
+            // automatic object update
+            assertEquals(version.intValue() + 1, b.getVersion().intValue());
+            tx.begin();
+            tx.getBroker().clearCache();
+            query = odmg.newOQLQuery();
+            query.create("select books from " + Book.class.getName() + " where title like $1");
+            query.bind(name);
+            result = (Collection) query.execute();
+            assertFalse(version.equals(b.getVersion()));
+            b = (Book) result.iterator().next();
+            assertEquals(version.intValue() + 1, b.getVersion().intValue());
+            tx.commit();
+        }
+        finally
+        {
+            // restore old state
+            cld = mm.getRepository().getDescriptorFor(Book.class);
+            cld.getFieldDescriptorByName("title").setStateDetection(oldState);
+        }
     }
 
     public void testReplaceOneToOneReference() throws Exception



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org