Author: tfischer Date: Wed Oct 22 00:14:09 2014 New Revision: 1633493 URL: http://svn.apache.org/r1633493 Log: TORQUE-331 - test that it is not possible to insert illegal value (except for MySQL where evrything is possible:-) )
Modified: db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/datatypes/EnumTest.java Modified: db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/datatypes/EnumTest.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/datatypes/EnumTest.java?rev=1633493&r1=1633492&r2=1633493&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/datatypes/EnumTest.java (original) +++ db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/datatypes/EnumTest.java Wed Oct 22 00:14:09 2014 @@ -19,18 +19,28 @@ package org.apache.torque.datatypes; * under the License. */ +import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import org.apache.log4j.Logger; import org.apache.torque.BaseDatabaseTestCase; import org.apache.torque.TestEnum; import org.apache.torque.TorqueException; +import org.apache.torque.adapter.DerbyAdapter; +import org.apache.torque.adapter.HsqldbAdapter; +import org.apache.torque.adapter.MssqlAdapter; +import org.apache.torque.adapter.MysqlAdapter; +import org.apache.torque.adapter.OracleAdapter; +import org.apache.torque.adapter.PostgresAdapter; import org.apache.torque.criteria.Criteria; import org.apache.torque.test.dbobject.EnumTable; import org.apache.torque.test.dbobject.IntPrimitiveColumnEnum; import org.apache.torque.test.dbobject.MyIntColumnEnum; import org.apache.torque.test.dbobject.VarcharColumnEnum; import org.apache.torque.test.peer.EnumTablePeer; +import org.apache.torque.util.ColumnValues; +import org.apache.torque.util.JdbcTypedValue; /** * Tests the enum data types. @@ -38,6 +48,8 @@ import org.apache.torque.test.peer.EnumT */ public class EnumTest extends BaseDatabaseTestCase { + private static Logger logger = Logger.getLogger(EnumTest.class); + private List<EnumTable> databaseStateBeforeTest; @Override @@ -138,6 +150,76 @@ public class EnumTest extends BaseDataba } /** + * Checks whether we can select enum values by enum value and by wrapped value. + * + * @throws Exception if the test fails + */ + public void testInsertIllegalValue() throws Exception + { + // check that the normal doUpdate works + ColumnValues columnValues = new ColumnValues(); + columnValues.put( + EnumTablePeer.VARCHAR_COLUMN, + new JdbcTypedValue( + VarcharColumnEnum.X.getValue(), + 12)); + EnumTablePeer.doUpdate( + new Criteria().where(EnumTablePeer.ID, databaseStateBeforeTest.get(0).getId()), + columnValues); + + columnValues = new ColumnValues(); + columnValues.put( + EnumTablePeer.VARCHAR_COLUMN, + new JdbcTypedValue( + "A", + 12)); + try + { + EnumTablePeer.doUpdate( + new Criteria().where(EnumTablePeer.ID, databaseStateBeforeTest.get(0).getId()), + columnValues); + if (!(defaultAdapter instanceof MysqlAdapter)) + { + fail("Exception expected"); + } + } + catch (TorqueException e) + { + // assert that the error is really a check violation + // check different error codes which are employed by each database vendor. + SQLException cause = (SQLException) e.getCause(); + if (defaultAdapter instanceof MssqlAdapter) + { + assertEquals(547, cause.getErrorCode()); + assertEquals("23000", cause.getSQLState()); + } + else if (defaultAdapter instanceof OracleAdapter) + { + assertEquals(2290, cause.getErrorCode()); + assertEquals("23000", cause.getSQLState()); + } + else if (defaultAdapter instanceof PostgresAdapter) + { + assertEquals("23514", cause.getSQLState()); + } + else if (defaultAdapter instanceof DerbyAdapter) + { + assertEquals("23513", cause.getSQLState()); + } + else if (defaultAdapter instanceof HsqldbAdapter) + { + assertEquals("23513", cause.getSQLState()); + } + else + { + logger.warn("error code and SQL code not checked for unknown adapter " + defaultAdapter.getClass()); + } + + } + } + + + /** * Delete all previous data from the tested tables * and re-inserts test data. */ --------------------------------------------------------------------- To unsubscribe, e-mail: torque-dev-unsubscr...@db.apache.org For additional commands, e-mail: torque-dev-h...@db.apache.org