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