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.

Reply via email to