Re: Junit Issues
Armin Waibel <[email protected]> Tue, 05 Feb 2008 01:33:40 +0100
| Newsgroups | gmane.comp.jakarta.ojb.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Carlos,
thanks for testing the RC using postgresql (I don't use this DB for
testing) and the detailed feedback.
The main test database is hsql and some tests use specific
syntax/keywords not supported by all databases.
My local test-suit results against different databases are:
database PB ODMG
----------------------
hsql 0 0
mysql 0 0
oracleXE 0/1 0
maxDB 5/3 0
oracle fail on a locking test because of a date/timestamp issue (oracle
specific date/timestamp precision).
maxDB fail/errors are caused by the jdbc-driver which show bad paging
support (seems that maxDB returns wrong results when using 'offset')
I don't want to fix these issues, because the tests will became too
complex if we always check for the current database.
Carlos Chávez wrote:
> Hello Armin,
> Hello All.
>
> I ran the junit test cases of OJB, i found some issues; my environment
> is: postgresql 8.2.6, java 1.5.0_14, ant 1.7.0, branch OJB_1_0_RELEASE
> revision 616989.
>
> 1. In the profile for postgresql (profile/postgresql.profile) the
> variables torque.database.createUrl and torque.database.buildUrl have the
> wrong values.
>
> the value of torque.database.createUrl is
> ${urlProtocol}:${urlSubprotocol}://${torque.database.host}/template1, but
> it shoul be
> ${urlProtocol}:${urlSubprotocol}://${torque.database.host}/${urlDbalias}.
>
> the value of torque.database.buildUrl is
> ${urlProtocol}:${urlSubprotocol}://${torque.database.host}/${urlDbalias},
> but it should be
> ${urlProtocol}:${urlSubprotocol}://${torque.database.host}/template1
>
> Basically the torque.database.createUrl is used to indicate the database
> test to create and torque.database.buildUrl looks like we need to
> indicate some other database via ODBC in order to create a database as
> far i understand, so the test try to create the database template1, but
> this is wrong because that database already exists and is created by
> postgresql.
Did you run the OJB test suite with default call
'ant junit'?
In this case ddlutils is used to setup the database.
Only if you call
'ant -Duse-torque=y junit'
torque is used.
The ddlutils task only use the torque.database.createUrl property. I
don't know why we need both properties (buildUrl/createUrl), seems that
except of postgresql they are always the same.
>
> 2. The other issue is related to the table/field name quoted, in the file
> src/test/org/apache/ojb/repository_junit.xml, we are quoting the table
> name QUOTED_ARTICLE, in posrtgresql when we quote a identifier this become
> case sensitive, so if we have the table quoted_article and we try for
> example select * from "QUOTED_ARTICLE", the identifier is not the same
> because the quote, without the quote QUOTED_ARTICLE and quoted_article are
> the same, but they are not the same if we use the quote. so the test cases
> fail because the table "QUOTED_ARTICLE" does not exists. we are quoting
> the fields ARTICLE_ID, ARTICLE_NAME and UNIT in the same descriptor.
This sounds strange. In file src/schema/ojbtest-schema.xml (this file
contains the sql metadata to create the test database tables) all names
are in upper case:
<table name="QUOTED_ARTICLE">
<column name="ARTICLE_ID" required="true" primaryKey="true"
type="INTEGER"/>
<column name="ARTICLE_NAME" type="VARCHAR" size="150"/>
<column name="GROUP_ID" type="INTEGER"/>
<column name="UNIT" type="VARCHAR" size="150"/>
<column name="PRICE" type="FLOAT"/>
<column name="STOCK" type="INTEGER"/>
<foreign-key foreignTable="Kategorien">
<reference local="GROUP_ID" foreign="Kategorie_Nr"/>
</foreign-key>
</table>
and in the repository file the quoted name is in upper case too:
<class-descriptor
class="org.apache.ojb.broker.QuotedTest$QuotedArticle"
proxy="dynamic"
table="'QUOTED_ARTICLE'"
>
Does ddlutils/torque create the table QUOTED_ARTICLE in upper case or is
the upper case ignored?
>
>
> 3. The following test case fail because the function curdate() does not
> exists in postgresql, the correct function is CURRENT_DATE.
The test pass with the function CURRENT_DATE? As said above I don't want
to write database tests for all databases.
>
> 4. The following test case fail because the argument for the abs()
> function is a string variable:
>
> testQuery Error * SQLException during execution of sql-statement: * sql
> statement: SELECT
> A0.IDENTITY_,A0.MOD_,A0.MAX_,A0.AVG_,A0.DISTINCT_,A0.HOUR_,A0.AS_,A0.NAME_,A0.FK_ONE_
> FROM FUNCTION_TEST_KEY A0 INNER JOIN (FUNCTION_TEST_ONE A1 INNER JOIN
> FUNCTION_TEST_MANY A2 ON A1.ABS_=A2.FK_ONE_) ON A0.FK_ONE_=A1.ABS_ WHERE
> ((A2.SUM_ = ?) AND mod(A0.MAX_, A0.MOD_) < ?) AND abs(A0.AS_) > ? *
> Exception message: ERROR: no existe la función abs(character varying) *
> Vendor error code: 0 * SQL state code: 42883 **
This seems to be a bug in the test. Querying for the absolute value of a
string is absolute nonsense (written by myself ;-)). I will fix this ASAP!
> 5. some other test that is failing:
>
> at
> org.apache.ojb.broker.accesslayer.ReportQueryRsIterator.getObjectFromResultSet(ReportQueryRsIterator.java:89)
> at org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:282)
> at org.apache.ojb.broker.lob.LOBTest.testReportQuery(LOBTest.java:120)
> Caused by: org.postgresql.util.PSQLException: Bad value for type long :
All other failures are Blob/Clob and Java_Object type related failures.
Seems that the postgresql Platform implementation class doesn't proper
support these types.
I will start working on this ASAP - help is welcome.
regards,
Armin