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/02/28 18:05:42 UTC

cvs commit: db-ojb/src/test/org/apache/ojb/broker FieldConversionTest_2.java FieldConversionTest_3.java AllTests.java

arminw      2003/02/28 09:05:41

  Modified:    src/test/org/apache/ojb/broker AllTests.java
  Added:       src/test/org/apache/ojb/broker FieldConversionTest_2.java
                        FieldConversionTest_3.java
  Log:
  rename tests, update AllTests
  
  Revision  Changes    Path
  1.19      +3 -2      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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- AllTests.java	16 Feb 2003 17:32:05 -0000	1.18
  +++ AllTests.java	28 Feb 2003 17:05:41 -0000	1.19
  @@ -57,7 +57,6 @@
           suite.addTest(new TestSuite(RepositoryPersistorTest.class));
           suite.addTest(new TestSuite(CustomAttributesTest.class));
           suite.addTest(new TestSuite(SequenceManagerTest.class));
  -        suite.addTest(new TestSuite(ConvertedKeyReferenceTest.class));
           suite.addTest(new TestSuite(KeyConstraintViolationTest.class));
           suite.addTest(new TestSuite(RsIteratorTest.class));
           //suite.addTest(new TestSuite(BlobTest.class)); /* doesn't work for hsqldb */
  @@ -66,7 +65,9 @@
           suite.addTest(new TestSuite(OneToOneTest.class));
           suite.addTest(new TestSuite(MetaDataSerializationTest.class));
           suite.addTest(new TestSuite(MetadataTest.class));
  -        suite.addTest(new TestSuite(FieldConversionForeigenKeyTest.class));
  +        suite.addTest(new TestSuite(FieldConversionTest.class));
  +        suite.addTest(new TestSuite(FieldConversionTest_2.class));
  +        suite.addTest(new TestSuite(FieldConversionTest_3.class));
           suite.addTest(new TestSuite(BatchModeTest.class));
           return suite;
       }
  
  
  
  1.1                  db-ojb/src/test/org/apache/ojb/broker/FieldConversionTest_2.java
  
  Index: FieldConversionTest_2.java
  ===================================================================
  package org.apache.ojb.broker;
  
  import junit.framework.TestCase;
  import org.apache.commons.lang.builder.ToStringBuilder;
  import org.apache.commons.lang.builder.ToStringStyle;
  import org.apache.ojb.broker.accesslayer.conversions.ConversionException;
  import org.apache.ojb.broker.accesslayer.conversions.FieldConversion;
  import org.apache.ojb.broker.query.Criteria;
  import org.apache.ojb.broker.query.Query;
  import org.apache.ojb.broker.query.QueryFactory;
  import org.apache.ojb.broker.util.logging.LoggerFactory;
  
  import java.util.Collection;
  import java.util.Iterator;
  
  /**
   *
   * @author J. Russell Smyth
   * @version $Id: FieldConversionTest_2.java,v 1.1 2003/02/28 17:05:41 arminw Exp $
   */
  public class FieldConversionTest_2 extends TestCase
  {
      private PersistenceBroker broker;
  
      public FieldConversionTest_2(String testName)
      {
          super(testName);
      }
  
      public static void main(String[] args)
      {
          String[] arr = {FieldConversionTest_2.class.getName()};
          junit.textui.TestRunner.main(arr);
      }
  
      public void setUp()
      {
          try
          {
              broker = PersistenceBrokerFactory.defaultPersistenceBroker();
          }
          catch (Exception e)
          {
              LoggerFactory.getBootLogger().error("error getting broker", e);
          }
      }
  
      protected void tearDown() throws Exception
      {
          super.tearDown();
          if (broker != null) broker.close();
      }
  
      public void testConvertedReferenceLookup()
      {
          Collection coll = null;
          Criteria c = null;
          Query q = QueryFactory.newQuery(ConversionReferrer.class, c);
          coll = broker.getCollectionByQuery(q);
          assertTrue("There should be more than 0 matching items", coll.size() > 0);
  
          Iterator i = coll.iterator();
          while (i.hasNext())
          {
              ConversionReferrer cref = (ConversionReferrer) i.next();
              assertTrue("PK value should not be converted, id should be < 1000, found " + cref, cref.getPk1() < 1000);
              assertTrue("Reference id should be > 1000, found " + cref, cref.getRef1() > 1000);
              assertTrue("Reference should be non-null, found " + cref, cref.getReferred() != null);
              assertEquals("Reference does not select correct item", cref.getRef1(), cref.getReferred().getPk1());
          }
      }
  
      public void testMultipleConverted()
      {
          String error = "Indicate that the field conversion was not/or multiple times called for a value, expected > 100 - found ";
          Collection coll = null;
          Criteria c = null;
          Query q = QueryFactory.newQuery(ConversionReferrer.class, c);
          coll = broker.getCollectionByQuery(q);
          assertTrue("There should be more than 0 matching items", coll.size() > 0);
  
          Iterator i = coll.iterator();
          while (i.hasNext())
          {
              ConversionReferrer cref = (ConversionReferrer) i.next();
              assertTrue("PK value should not be converted, id should be < 1000, found " + cref, cref.getPk1() < 1000);
              assertTrue("Reference should be non-null, found " + cref, cref.getReferred() != null);
              assertEquals("Reference selected incorrect item", cref.getRef1(), cref.getReferred().getPk1());
  
              /*
              The used conversion does the following
              val = Integer.MAX_VALUE - val;
              for both conversion directions.
              The result was e.g.
              sqlToJava: 10 --> 2147483637
              javaToSql: 2147483637 --> 10
  
              */
  
              int value = 0;
              value = cref.getRef1();
              assertTrue(error + cref, value > 1000);
  
              value = cref.getTestId();
              assertTrue(error + cref, value > 1000);
  
              value = cref.getReferred().getPk1();
              assertTrue(error + cref, value > 1000);
  
              value = cref.getReferred().getTestId();
              assertTrue(error + cref, value > 1000);
          }
      }
  
      public void testConvertedReferenceInsert()
      {
          String error = "Maybe field conversion was not called or multiple times";
          int no = 110;
          int noRef = Integer.MAX_VALUE - 109;
          int noTest = Integer.MAX_VALUE - 108;
          int noTestRef = Integer.MAX_VALUE - 107;
  
          ConversionReferrer cref = new ConversionReferrer();
          cref.setPk1(no);
          cref.setTestId(noTest);
  
          ConversionReferred crefed = new ConversionReferred();
          crefed.setPk1(noRef);
          crefed.setTestId(noTestRef);
          // set reference
          cref.setReferred(crefed);
  
          broker.store(crefed);
          broker.store(cref);
  
          broker.clearCache();
  
          // save id for recapturing object
          Identity id = new Identity(cref, broker);
          broker.clearCache();
  
          ConversionReferrer referrer = (ConversionReferrer) broker.getObjectByIdentity(id);
          assertNotNull(cref.getReferred());
          assertNotNull("We should found a reference, found " + referrer, referrer.getReferred());
          assertEquals("Stored reference ID should match refed object pk", referrer.getRef1(), crefed.getPk1());
          assertEquals(error, cref.getPk1(), referrer.getPk1());
          assertEquals(error, cref.getTestId(), referrer.getTestId());
          assertEquals(error, cref.getReferred().getPk1(), referrer.getReferred().getPk1());
  
          assertEquals(error, cref.getReferred().getTestId(), referrer.getReferred().getTestId());
  
          // delete objects
          broker.delete(crefed);
          broker.delete(cref);
      }
  
  
      //****************************************************************************
      // inner class
      //****************************************************************************
      /**
       * A conversion class for unit testing. The conversion is nonsensical - java
       * field is difference of Integer.MAX_VALUE and db value.
       * @author  drfish
       */
      public static class TestInt2IntConverter implements FieldConversion
      {
  
          /** Creates a new instance of FromMaxInt2IntConversion */
          public TestInt2IntConverter()
          {
          }
  
          /** convert a Java object to its SQL pendant, used for insert & update */
          public Object javaToSql(Object source) throws ConversionException
          {
  
              int val = ((Integer) source).intValue();
              val = Integer.MAX_VALUE - val;
              return new Integer(val);
          }
  
          /** convert a SQL value to a Java Object, used for SELECT */
          public Object sqlToJava(Object source) throws ConversionException
          {
              int val = ((Integer) source).intValue();
              val = Integer.MAX_VALUE - val;
              return new Integer(val);
          }
      }
  
  
      //****************************************************************************
      // inner class
      //****************************************************************************
      public static class ConversionReferrer
      {
  
          private int pk1;
          private int testId;
          private int ref1;
          private ConversionReferred referred;
  
          /** Creates a new instance of ConversionParent */
          public ConversionReferrer()
          {
          }
  
          public String toString()
          {
              ToStringBuilder buf = new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE);
              buf.append("pk1", pk1);
              buf.append("ref1", ref1);
              buf.append("testId", testId);
              buf.append("referred", referred);
              return buf.toString();
          }
  
          public int getTestId()
          {
              return testId;
          }
  
          public void setTestId(int testId)
          {
              this.testId = testId;
          }
  
          /** Getter for property pk1.
           * @return Value of property pk1.
           *
           */
          public int getPk1()
          {
              return pk1;
          }
  
          /** Setter for property pk1.
           * @param pk1 New value of property pk1.
           *
           */
          public void setPk1(int pk1)
          {
              this.pk1 = pk1;
          }
  
          /** Getter for property ref1.
           * @return Value of property ref1.
           *
           */
          public int getRef1()
          {
              return ref1;
          }
  
          /** Setter for property ref1.
           * @param ref1 New value of property ref1.
           *
           */
          public void setRef1(int ref1)
          {
              this.ref1 = ref1;
          }
  
          /** Getter for property referred.
           * @return Value of property referred.
           *
           */
          public ConversionReferred getReferred()
          {
              return referred;
          }
  
          /** Setter for property referred.
           * @param referred New value of property referred.
           *
           */
          public void setReferred(ConversionReferred referred)
          {
              this.referred = referred;
          }
      }
  
      //****************************************************************************
      // inner class
      //****************************************************************************
      public static class ConversionReferred
      {
  
          private int pk1;
          private int testId;
  
          /** Creates a new instance of ConversionReferred */
          public ConversionReferred()
          {
          }
  
          public String toString()
          {
              ToStringBuilder buf = new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE);
              buf.append("pk1", pk1);
              buf.append("testId", testId);
              return buf.toString();
          }
  
          public int getTestId()
          {
              return testId;
          }
  
          public void setTestId(int testId)
          {
              this.testId = testId;
          }
  
          /** Getter for property pk1.
           * @return Value of property pk1.
           *
           */
          public int getPk1()
          {
              return pk1;
          }
  
          /** Setter for property pk1.
           * @param pk1 New value of property pk1.
           *
           */
          public void setPk1(int pk1)
          {
              this.pk1 = pk1;
          }
      }
  }
  
  
  
  1.1                  db-ojb/src/test/org/apache/ojb/broker/FieldConversionTest_3.java
  
  Index: FieldConversionTest_3.java
  ===================================================================
  package org.apache.ojb.broker;
  
  import junit.framework.TestCase;
  import org.apache.ojb.broker.accesslayer.conversions.ConversionException;
  import org.apache.ojb.broker.accesslayer.conversions.FieldConversion;
  import org.apache.ojb.broker.query.Criteria;
  import org.apache.ojb.broker.query.QueryFactory;
  
  import java.math.BigDecimal;
  
  /**
   * Test using field conversions for PK values.
   *
   * @author <a href="mailto:om@ppi.de">Oliver Matz</a>
   * @version $Id: FieldConversionTest_3.java,v 1.1 2003/02/28 17:05:41 arminw Exp $
   */
  public class FieldConversionTest_3 extends TestCase
  {
      private PersistenceBroker broker;
  
      public static void main(String[] args)
      {
          String[] arr = {FieldConversionTest_3.class.getName()};
          junit.textui.TestRunner.main(arr);
      }
  
      public void setUp() throws PBFactoryException
      {
          broker = PersistenceBrokerFactory.defaultPersistenceBroker();
      }
  
      public void tearDown()
      {
          try
          {
              broker.clearCache();
              broker.close();
          }
          catch (PersistenceBrokerException e)
          {
          }
      }
  
      /**
       * store nested classes needed field conversion of a primary key field.
       */
      public void testStoreNestedNodes() throws Exception
      {
          //String strQuery = "select allNodes from " + Node.class.getName();
          long id = System.currentTimeMillis();
          Node node = new Node(id, null, true);
          Node child = new Node(id + 1, node, false);
  
          int before;
  
          broker.beginTransaction();
          before = broker.getCount(QueryFactory.newQuery(Node.class, (Criteria) null));
  
          broker.store(child);
  
          broker.commitTransaction();
  
          broker.beginTransaction();
          int after = broker.getCount(QueryFactory.newQuery(Node.class, (Criteria) null));
          broker.commitTransaction();
  
          assertFalse(after == 0);
          assertEquals(before + 2, after);
      }
  
      /**
       * store class needed field conversion of a primary key field.
       */
      public void testStoreNode() throws Exception
      {
          //String strQuery = "select allNodes from " + Node.class.getName();
          long id = System.currentTimeMillis();
          Node node = new Node(id, null, false);
  
          int before;
  
          broker.beginTransaction();
          before = broker.getCount(QueryFactory.newQuery(Node.class, (Criteria) null));
  
          broker.store(node);
  
          broker.commitTransaction();
  
          broker.beginTransaction();
          int after = broker.getCount(QueryFactory.newQuery(Node.class, (Criteria) null));
          broker.commitTransaction();
  
          assertFalse(after == 0);
          assertEquals(before + 1, after);
      }
  
  
      //****************************************************************************
      // inner class
      //****************************************************************************
      public static class LongToBigDecimalConversion implements FieldConversion
      {
          public LongToBigDecimalConversion()
          {
          }
  
          public Object javaToSql(Object source) throws ConversionException
          {
              Object ret;
              if (source instanceof Long)
              {
                  ret = new BigDecimal(((Long) source).doubleValue());
              }
              else
              {
                  throw new ConversionException(
                          "java-->sql, expected type was"+Long.class.getClass()+
                          ", found type "+source.getClass());
              }
              return ret;
          }
  
          public Object sqlToJava(Object source) throws ConversionException
          {
              Object ret;
              if (source instanceof BigDecimal)
              {
                  ret = new Long(((BigDecimal) source).longValue());
              }
              else
              {
                  throw new ConversionException(
                          "sql-->java, expected type was"+BigDecimal.class.getClass()+
                          ", found type "+source.getClass());
              }
              return ret;
          }
      }
  
  
      //****************************************************************************
      // inner class
      //****************************************************************************
      public class Node
      {
          private long uid;  // primary key
          private long refId;
          private boolean nodeState;
          Node parent;
  
          public Node()
          {
          }
  
          public Node(long uid, Node parent, boolean nodeState)
          {
              this.uid = uid;
              this.parent = parent;
              this.nodeState = nodeState;
          }
  
          public long getUid()
          {
              return uid;
          }
  
          public void setUid(long uid)
          {
              this.uid = uid;
          }
  
          public boolean isState()
          {
              return nodeState;
          }
  
          public void setState(boolean state)
          {
              this.nodeState = state;
          }
  
          public long getRefId()
          {
              return refId;
          }
  
          public void setRefId(long refId)
          {
              this.refId = refId;
          }
  
          public Node getParent()
          {
              return parent;
          }
  
          public void setParent(Node parent)
          {
              this.parent = parent;
          }
      }
  }