Hi Mamta,
Attached is the patch thtat takes care of this. I wanted to change this as you said, but missed it, thanks for pointing this out.
~ Shreyas
Mamta Satoor wrote:
Hi Shreyas,
If the exception in testRelative is expected, then you don't want to print it as FAIL - expected exception.
For eg, in the test case below, I expect an error for deleteRow on a read only resultset and hence I put it in a try catch block and catch the exception and print it as expected exception. If the exception that you get in the testRelative is expected, then printing it with FAIL message is misleading. Hope this calrifies things.
System.out.println("Request a read only resultset and attempt deleteRow on it"); stmt = conn.createStatement();//the default is a read only forward only resultset rs = stmt.executeQuery("select * from t1"); rs.next(); try { rs.deleteRow(); System.out.println("FAIL!!! deleteRow should have failed on a read only resultset"); } catch (SQLException e) { System.out.println("SQL State : " + e.getSQLState()); System.out.println("Got expected exception " + e.getMessage()); }
On 4/17/05, Shreyas Kaushik <[EMAIL PROTECTED]> wrote:
Hi Kathey,
I have takne care of your concerns here. Please find the patch attached. If you need anything more let me know.
thanks Shreyas
Kathey Marsden wrote:
Shreyas Kaushik wrote:
Hi Kathey,
I ran this test with different profiles, that is on machines having different Operating Systems and also when the load on the systems were high. I did not notice this test failing even once.
The message in the master says Unexpected Exception, actaully a
SQLExcpetion is being caught and the message
from there displayed. I can change the message if you want, but I
don't see any other problem.
This is the canon that is checked in:
Test testRelative starting Value=work1 isFirst=false isLast=false isAfterLast=false Value=work3 Value=work1 isFirst=false isLast=false isAfterLast=true FAIL -- unexpected exception SQLSTATE(24000): SQL Exception: Invalid cursor state - no current row. SQL Exception: Invalid cursor state - no current row.
So my big question is, Is the exception expected or unexpected?
If it is expected, I suggest you change the test do something like: System.out.println(" EXPECTED EXCEPTION: SQLSTATE("+se.getSQLState()+"): "+se.getMessage()); and not print a stack trace. Looking at the test you would need a separate try/catch block for the case in which the exception is expected.
If it is indeed unexpected then the test is fine. Derby needs to be fixed to behave properly and the canon updated accordingly.
------------------------------------------------------------------------ Why the intermittent diff?
In the past I have seen cases where we get this type of diff when there is a sqle.printStackTrace() for an expected exception. The first line of the stack trace ends up in the .out file.
The timing issue, especially in sane builds is that printStackTrace() will print to System.err. The test harness redirects both System.err and System.out to the same file, so from time to time, the output of these two statements might show up in reverse order. System.out.println("SQLSTATE("+se.getSQLState()+"): "+se); se.printStackTrace();
------------------------------------------------------------------------------------------ To avoid the timing problem and confusion:
1) Always have your test print whether the exception is expected or unexpected. 2) Never print a stack trace for an expected exception. 3) Always print a stack trace for an unexpected exception.
And one supplemental tip:
4) For expected exceptions print se.getMessage() instead of just se. Then it will work for Network Server too.
Hope that clarifies things.
Kathey
Index: java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/testRelative.java =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/testRelative.java (revision 161449) +++ java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/testRelative.java (working copy) @@ -80,7 +80,6 @@
} catch(SQLException sqle) { dumpSQLExceptions(sqle); - sqle.printStackTrace(); } catch(Throwable e) { System.out.println("FAIL -- unexpected exception: "+e); e.printStackTrace(); @@ -89,10 +88,10 @@ }
static private void dumpSQLExceptions (SQLException se) { - System.out.println("FAIL -- unexpected exception"); + System.out.println("FAIL -- expected exception"); while (se != null) { System.out.println("SQLSTATE("+se.getSQLState()+"): "+se); se = se.getNextException(); } } -} \ No newline at end of file +} Index: java/testing/org/apache/derbyTesting/functionTests/master/testRelative.out =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/master/testRelative.out (revision 161449) +++ java/testing/org/apache/derbyTesting/functionTests/master/testRelative.out (working copy) @@ -4,6 +4,5 @@ Value=work3 Value=work1 isFirst=false isLast=false isAfterLast=true -FAIL -- unexpected exception +FAIL -- expected exception SQLSTATE(24000): SQL Exception: Invalid cursor state - no current row. -SQL Exception: Invalid cursor state - no current row.
Index: java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/testRelative.java =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/testRelative.java (revision 161449) +++ java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/testRelative.java (working copy) @@ -80,7 +80,6 @@ } catch(SQLException sqle) { dumpSQLExceptions(sqle); - sqle.printStackTrace(); } catch(Throwable e) { System.out.println("FAIL -- unexpected exception: "+e); e.printStackTrace(); @@ -89,10 +88,10 @@ } static private void dumpSQLExceptions (SQLException se) { - System.out.println("FAIL -- unexpected exception"); + System.out.println("PASS -- expected exception"); while (se != null) { System.out.println("SQLSTATE("+se.getSQLState()+"): "+se); se = se.getNextException(); } } -} \ No newline at end of file +} Index: java/testing/org/apache/derbyTesting/functionTests/master/testRelative.out =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/master/testRelative.out (revision 161449) +++ java/testing/org/apache/derbyTesting/functionTests/master/testRelative.out (working copy) @@ -4,6 +4,5 @@ Value=work3 Value=work1 isFirst=false isLast=false isAfterLast=true -FAIL -- unexpected exception +PASS -- expected exception SQLSTATE(24000): SQL Exception: Invalid cursor state - no current row. -SQL Exception: Invalid cursor state - no current row.