You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2007/05/29 11:41:26 UTC

svn commit: r542473 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/io/ engine/org/apache/derby/impl/jdbc/ testing/org/apache/derbyTesting/functionTests/tests/jdbc4/

Author: kahatlen
Date: Tue May 29 02:41:25 2007
New Revision: 542473

URL: http://svn.apache.org/viewvc?view=rev&rev=542473
Log:
DERBY-2247: provide set methods for blob in embeded driver

Addressing follow-up comments. Contributed by Anurag Shekhar.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/io/BaseStorageFactory.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/BlobSetMethodsTest.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/LobStreamTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/io/BaseStorageFactory.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/io/BaseStorageFactory.java?view=diff&rev=542473&r1=542472&r2=542473
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/io/BaseStorageFactory.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/io/BaseStorageFactory.java Tue May 29 02:41:25 2007
@@ -45,7 +45,6 @@
     protected String uniqueName;
     protected String canonicalName;
     private static final String TEMP_DIR_PREFIX = "derbytmp_";
-    private int counter = 0;
 
     /**
      * Most of the initialization is done in the init method.
@@ -278,27 +277,14 @@
 
     /**
      * Create and returns a temporary file in temporary file system of database.
-     * @param prefix String to prefix the random name generator. It can be null
-     * @param suffix String to suffix the random name generator. ".tmp" will be
-     *               used if null.
+     * @param prefix String to prefix the random name generator.
+     * @param suffix String to suffix the random name generator.
      * @return StorageFile
      */
     public StorageFile createTemporaryFile (String prefix, String suffix)
                                                             throws IOException {
-        StorageFile tmpDir = getTempDir();
-        if (prefix == null)
-            prefix = "tmp";
-        if (suffix == null)
-            suffix = ".tmp";
-        StorageFile tmpFile = null;
-        synchronized (tmpDir) {
-            do {
-                String fileName = prefix + Integer.toString (counter++)
-                            + suffix;
-                tmpFile = newStorageFile (tmpDir, fileName);
-            } while (tmpFile.exists());
-            tmpFile.createNewFile();
-        }
-        return tmpFile;
+        File tmpFile = File.createTempFile (prefix, suffix,
+                new File (getTempDir().getPath()));
+        return newStorageFile (getTempDir(), tmpFile.getName());
     }
 }

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java?view=diff&rev=542473&r1=542472&r2=542473
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java Tue May 29 02:41:25 2007
@@ -360,6 +360,8 @@
             if (materialized) {
                  result = new byte [length];
                  int sz = control.read (result, 0, result.length, startPos - 1);
+                 if (sz == -1)
+                     return new byte [0];
                  if (sz < length) {
                      byte [] tmparray = new byte [sz];
                      System.arraycopy (result, 0, tmparray, 0, sz);

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java?view=diff&rev=542473&r1=542472&r2=542473
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java Tue May 29 02:41:25 2007
@@ -39,7 +39,7 @@
 public class LOBInputStream extends InputStream {
 
     private boolean closed;
-    private LOBStreamControl control;
+    private final LOBStreamControl control;
     private long pos;
     private long updateCount;
 
@@ -118,7 +118,7 @@
                    MessageService.getTextMessage(SQLState.LANG_STREAM_CLOSED));
         try {
             int ret = control.read(b, off, len, pos);
-            if (ret > 0) {
+            if (ret != -1) {
                 pos += ret;
                 return ret;
             }

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java?view=diff&rev=542473&r1=542472&r2=542473
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java Tue May 29 02:41:25 2007
@@ -38,7 +38,7 @@
 
 public class LOBOutputStream extends OutputStream {
     private boolean closed;
-    private LOBStreamControl control;
+    private final LOBStreamControl control;
     private long pos;
 
     LOBOutputStream(LOBStreamControl control, long position) {

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java?view=diff&rev=542473&r1=542472&r2=542473
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java Tue May 29 02:41:25 2007
@@ -99,6 +99,9 @@
                 throw (IOException) e;
             if (e instanceof RuntimeException)
                 throw (RuntimeException) e;
+            IOException ioe = new IOException (e.getMessage());
+            ioe.initCause (e);
+            throw ioe;
         }
         isBytes = false;
         //now this call will write into the file
@@ -183,7 +186,7 @@
         isValidPostion(pos);
         updateCount++;
         if (isBytes) {
-            if (pos + 1 < MAX_BUF_SIZE) {
+            if (pos < MAX_BUF_SIZE) {
                 byte [] bytes = {(byte) b};
                 updateData(bytes, 0, 1, pos);
                 return pos + 1;
@@ -216,10 +219,11 @@
                     ExceptionUtil.getSQLStateFromIdentifier(
                                   SQLState.BLOB_INVALID_OFFSET)))
                     throw new ArrayIndexOutOfBoundsException (e.getMessage());
+            throw e;
         }
         updateCount++;
         if (isBytes) {
-            if (pos + b.length < MAX_BUF_SIZE)
+            if (pos + len <= MAX_BUF_SIZE)
                 return updateData(b, off, len, pos);
             else {
                 init(dataBytes, pos);
@@ -255,6 +259,8 @@
     }
 
     private int readBytes(byte [] b, int off, int len, long pos) {
+        if (pos >= dataBytes.length)
+            return -1;
         int lengthFromPos = dataBytes.length - (int) pos;
         int actualLength = len > lengthFromPos ? lengthFromPos : len;
         byte [] result = new byte[actualLength];
@@ -325,7 +331,7 @@
             System.arraycopy(dataBytes, 0, tmpByte, 0, (int) size);
             dataBytes = tmpByte;
         } else {
-            if (size < Integer.MAX_VALUE && size < MAX_BUF_SIZE) {
+            if (size < MAX_BUF_SIZE) {
                 dataBytes = new byte [(int) size];
                 read(dataBytes, 0, dataBytes.length, 0);
                 isBytes = true;
@@ -387,6 +393,9 @@
                     throw (IOException) e;
                 if (e instanceof RuntimeException)
                     throw (RuntimeException) e;
+                IOException ioe = new IOException (e.getMessage());
+                ioe.initCause (e);
+                throw ioe;
             }
         }
     }

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/BlobSetMethodsTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/BlobSetMethodsTest.java?view=diff&rev=542473&r1=542472&r2=542473
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/BlobSetMethodsTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/BlobSetMethodsTest.java Tue May 29 02:41:25 2007
@@ -29,10 +29,6 @@
 import java.sql.SQLException;
 import java.sql.Statement;
 import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-import org.apache.derbyTesting.functionTests.harness.RunSuite;
-import org.apache.derbyTesting.functionTests.harness.RunTest;
 import org.apache.derbyTesting.junit.BaseJDBCTestCase;
 import org.apache.derbyTesting.junit.TestConfiguration;
 
@@ -59,117 +55,139 @@
      * Create test suite.
      */
     public static Test suite() {
-        return TestConfiguration.embeddedSuite(BlobSetMethodsTest.class);
+        return TestConfiguration.defaultSuite (BlobSetMethodsTest.class);
     }
 
     /**
-     * tests set bytes method of blob.
+     * Tests large blob (more than 4k) to ensure LOBStreamControl uses file.
      */
-    public void testSetBytes () throws SQLException {
+    public void testSetBytesLargeBlob () throws SQLException {
         Connection con = getConnection();
-        try {
-            con.setAutoCommit (false);
-            PreparedStatement pstmt = con.prepareStatement("insert into " +
-                    "blobtest (id, data) values (?,?)");
-            pstmt.setInt (1,1);
-            Blob blob = con.createBlob();
-            //add 1024 bytes
-            byte [] data = new byte [BUFFER_SIZE];
-            for (int i = 0; i < BUFFER_SIZE; i++) {
-                data [i] = (byte) (i % 255);
-            }
-            blob.setBytes (1, data);
-            assertEquals (BUFFER_SIZE, blob.length());
-            pstmt.setBlob (2, blob);
-            pstmt.executeUpdate();
-            Statement stmt = con.createStatement();
-            ResultSet rs = stmt.executeQuery(
-                    "select data from blobtest where id = 1");
-            assertEquals(true, rs.next());
-            blob = rs.getBlob (1);
-            assertEquals (BUFFER_SIZE, blob.length());
-            //update blob in the middle
-            byte [] data1 = new byte [UPDATE_SIZE];
-            for (int i = 0; i < UPDATE_SIZE; i++)
-                data1 [i] = 120;//just any value
-            blob.setBytes (UPDATE_SIZE, data1);
-            byte [] data2 = blob.getBytes (100, UPDATE_SIZE);
-            for (int i = 0; i < UPDATE_SIZE; i++)
-                assertEquals (data1 [i], data2 [i]);
-            //update it at the end
-            blob.setBytes (BUFFER_SIZE + 1, data1);
-            assertEquals (BUFFER_SIZE + UPDATE_SIZE, blob.length());
-            data2 = blob.getBytes (BUFFER_SIZE + 1, UPDATE_SIZE);
-            for (int i = 0; i < UPDATE_SIZE; i++)
-                assertEquals (data1 [i], data2 [i]);
-            //insert the blob and test again
-            pstmt.setInt (1, 2);
-            pstmt.setBlob (2, blob);
-            pstmt.executeUpdate();
-            rs = stmt.executeQuery("select data from blobtest where " +
-                    "id = 2");
-            assertEquals(true, rs.next());
-            blob = rs.getBlob (1);
-            assertEquals (BUFFER_SIZE + UPDATE_SIZE, blob.length());
-            data2 = blob.getBytes (100, UPDATE_SIZE);
-            for (int i = 0; i < UPDATE_SIZE; i++)
-                assertEquals (data1 [i], data2 [i]);
-            data2 = blob.getBytes (BUFFER_SIZE + 1, UPDATE_SIZE);
-            for (int i = 0; i < UPDATE_SIZE; i++)
-                assertEquals (data1 [i], data2 [i]);
-
-            //now add more than 4k so file get in use
-            for (int i = 0; i < 5; i++)
-                blob.setBytes (i * BUFFER_SIZE + 1, data);
-            assertEquals (BUFFER_SIZE * 5 , blob.length());
-            blob.setBytes (BUFFER_SIZE + 1, data1);
-            blob.setBytes (BUFFER_SIZE * 5 + 1, data1);
-            assertEquals (5 * BUFFER_SIZE + UPDATE_SIZE, blob.length());
-            //insert it into table
-            pstmt.setInt (1, 3);
-            pstmt.setBlob (2, blob);
-            pstmt.executeUpdate ();
-            rs = stmt.executeQuery("select data from blobtest where " +
-                                    "id = 3");
-            assertEquals(true, rs.next());
-            blob = rs.getBlob (1);
-            data2 = blob.getBytes (BUFFER_SIZE + 1, UPDATE_SIZE);
-            assertEquals (5 * BUFFER_SIZE + UPDATE_SIZE, blob.length());
-            for (int i = 0; i < UPDATE_SIZE; i++)
-                assertEquals (data1 [i], data2 [i]);
-            data2 = blob.getBytes (5 * BUFFER_SIZE + 1, UPDATE_SIZE);
-            for (int i = 0; i < UPDATE_SIZE; i++)
-                assertEquals (data1 [i], data2 [i]);
-            //test truncate
-            blob.truncate (BUFFER_SIZE);
-            assertEquals (BUFFER_SIZE, blob.length());
-            //test truncate on small size blob
-            blob = con.createBlob();
-            data = new byte [100];
-            for (int i = 0; i < 100; i++) {
-                data [i] = (byte) i;
-            }
-            blob.setBytes (1, data);
-            assertEquals (blob.length(), 100);
-            blob.truncate (50);
-            assertEquals (blob.length(), 50);
-            con.commit();
-            stmt.close();
-            pstmt.close();
+        con.setAutoCommit (false);
+        PreparedStatement pstmt = con.prepareStatement("insert into " +
+                "blobtest (id, data) values (?,?)");
+        Blob blob = con.createBlob();
+        byte [] data = new byte [BUFFER_SIZE];
+        for (int i = 0; i < BUFFER_SIZE; i++) {
+            data [i] = (byte) (i % 255);
         }
-        finally {
-            if (con != null) {
-                con.commit();
-                con.close();
-            }
+     //now add more than 4k so file get in use
+        for (int i = 0; i < 5; i++)
+            blob.setBytes (i * BUFFER_SIZE + 1, data);
+        assertEquals (BUFFER_SIZE * 5 , blob.length());
+                    //update blob in the middle
+        byte [] data1 = new byte [UPDATE_SIZE];
+        for (int i = 0; i < UPDATE_SIZE; i++)
+            data1 [i] = 120;//just any value
+        blob.setBytes (BUFFER_SIZE + 1, data1);
+        blob.setBytes (BUFFER_SIZE * 5 + 1, data1);
+        assertEquals (5 * BUFFER_SIZE + UPDATE_SIZE, blob.length());
+        //insert it into table
+        pstmt.setInt (1, 3);
+        pstmt.setBlob (2, blob);
+        pstmt.executeUpdate ();
+        Statement stmt = con.createStatement();
+        ResultSet rs = stmt.executeQuery("select data from blobtest where " +
+                                "id = 3");
+        assertEquals(true, rs.next());
+        blob = rs.getBlob (1);
+        byte [] data2 = blob.getBytes (BUFFER_SIZE + 1, UPDATE_SIZE);
+        assertEquals (5 * BUFFER_SIZE + UPDATE_SIZE, blob.length());
+        for (int i = 0; i < UPDATE_SIZE; i++)
+            assertEquals (data1 [i], data2 [i]);
+        data2 = blob.getBytes (5 * BUFFER_SIZE + 1, UPDATE_SIZE);
+        for (int i = 0; i < UPDATE_SIZE; i++)
+            assertEquals (data1 [i], data2 [i]);
+        //test truncate
+        blob.truncate (BUFFER_SIZE);
+        assertEquals ("truncate failed", BUFFER_SIZE, blob.length());
+        rs.close();
+        con.commit();
+        stmt.close();
+        pstmt.close();
+    }
+
+    /**
+     * tests set bytes method of blob in memory only mode (less than 4k)
+     */
+    public void testSetBytesSmallBlob () throws SQLException {
+        Connection con = getConnection();
+        con.setAutoCommit (false);
+        PreparedStatement pstmt = con.prepareStatement("insert into " +
+                "blobtest (id, data) values (?,?)");
+        pstmt.setInt (1,1);
+        Blob blob = con.createBlob();
+        //add 1024 bytes
+        byte [] data = new byte [BUFFER_SIZE];
+        for (int i = 0; i < BUFFER_SIZE; i++) {
+            data [i] = (byte) (i % 255);
+        }
+        blob.setBytes (1, data);
+        assertEquals (BUFFER_SIZE, blob.length());
+        pstmt.setBlob (2, blob);
+        pstmt.executeUpdate();
+        Statement stmt = con.createStatement();
+        ResultSet rs = stmt.executeQuery(
+                "select data from blobtest where id = 1");
+        assertEquals(true, rs.next());
+        blob = rs.getBlob (1);
+        assertEquals (BUFFER_SIZE, blob.length());
+        //update blob in the middle
+        byte [] data1 = new byte [UPDATE_SIZE];
+        for (int i = 0; i < UPDATE_SIZE; i++)
+            data1 [i] = 120;//just any value
+        blob.setBytes (UPDATE_SIZE, data1);
+        byte [] data2 = blob.getBytes (100, UPDATE_SIZE);
+        for (int i = 0; i < UPDATE_SIZE; i++)
+            assertEquals (data1 [i], data2 [i]);
+        //update it at the end
+        blob.setBytes (BUFFER_SIZE + 1, data1);
+        assertEquals (BUFFER_SIZE + UPDATE_SIZE, blob.length());
+        data2 = blob.getBytes (BUFFER_SIZE + 1, UPDATE_SIZE);
+        for (int i = 0; i < UPDATE_SIZE; i++)
+            assertEquals (data1 [i], data2 [i]);
+        //insert the blob and test again
+        pstmt.setInt (1, 2);
+        pstmt.setBlob (2, blob);
+        pstmt.executeUpdate();
+        rs = stmt.executeQuery("select data from blobtest where " +
+                "id = 2");
+        assertEquals(true, rs.next());
+        blob = rs.getBlob (1);
+        assertEquals (BUFFER_SIZE + UPDATE_SIZE, blob.length());
+        data2 = blob.getBytes (100, UPDATE_SIZE);
+        for (int i = 0; i < UPDATE_SIZE; i++)
+            assertEquals (data1 [i], data2 [i]);
+        data2 = blob.getBytes (BUFFER_SIZE + 1, UPDATE_SIZE);
+        for (int i = 0; i < UPDATE_SIZE; i++)
+            assertEquals (data1 [i], data2 [i]);
+
+        //test truncate on small size blob
+        blob = con.createBlob();
+        data = new byte [100];
+        for (int i = 0; i < 100; i++) {
+            data [i] = (byte) i;
         }
+        blob.setBytes (1, data);
+        assertEquals (blob.length(), 100);
+        blob.truncate (50);
+        assertEquals (blob.length(), 50);
+        blob.setBytes (1, data);
+        assertEquals ("set failed", blob.length(), 100);
+        blob.truncate (50);
+        assertEquals ("truncation failed", blob.length(), 50);
+        rs.close();
+        con.commit();
+        stmt.close();
+        pstmt.close();
     }
 
-    protected void tearDown() throws SQLException {
+    protected void tearDown() throws Exception {
         Connection con = getConnection();
+        con.setAutoCommit (true);
         Statement stmt = con.createStatement();
         stmt.execute ("drop table blobtest");
         stmt.close();
-        con.close();
+        super.tearDown();
     }
 }

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/LobStreamTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/LobStreamTest.java?view=diff&rev=542473&r1=542472&r2=542473
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/LobStreamTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/LobStreamTest.java Tue May 29 02:41:25 2007
@@ -38,11 +38,6 @@
 
 public class LobStreamTest extends BaseJDBCTestCase {
 
-    private static final String dbName = "LobStreamTest";
-    private static final boolean useLOBStreamControl = true;
-
-    private Connection conn = null;
-    File f = null;
     private InputStream in = null;
     private OutputStream out = null;
     private Blob blob;
@@ -52,7 +47,7 @@
     }
 
     protected void setUp() throws Exception {
-        conn = getConnection();
+        Connection conn = getConnection();
         blob = conn.createBlob();
         in = blob.getBinaryStream();
         out = blob.setBinaryStream (1);
@@ -60,8 +55,8 @@
 
     protected void tearDown() throws Exception {
         blob.free();
-        conn.rollback();
-        conn.close();
+        blob = null;
+        super.tearDown();
     }
 
     /**
@@ -69,7 +64,7 @@
      */
 
     /**
-     * Test read and write methods with one parameter.
+     * Test read and write methods with no parameter.
      */
     public void testReadWriteNoParameters() throws IOException {
 
@@ -79,7 +74,7 @@
 
         for (int i=0; i<8000; i++) {
             int value = in.read();
-            assertEquals("Read value is equal to i", i%255, value);
+            assertEquals("Output does not match input", i%255, value);
         }
 
         in.close();
@@ -102,7 +97,7 @@
 
         for (int i=0; i<8000; i++) {
             int value = in.read();
-            assertEquals("Read value is equal to i", i%255, value);
+            assertEquals("Output does not match input", i%255, value);
         }
 
         in.close();
@@ -128,7 +123,7 @@
             int count = in.read(b);
             for (int j=0; j<count; j++) {
                 int value = b[j] & 0xFF;
-                assertEquals("Read value is equal to i",
+                assertEquals("Output does not match input",
                                         (((i * 100) + j) % 255), value);
             }
         }
@@ -159,7 +154,7 @@
             int count = in.read(b, offset, 100);
             for (int j=0; j<count; j++) {
                 int value = b[j + offset] & 0xFF;
-                assertEquals("Read value is equal to i",
+                assertEquals("Output does not match input",
                                         (((i * 100) + j) % 255), value);
             }
             offset += 1;
@@ -260,7 +255,7 @@
         while (i < 8000) {
             if ((i%255) < 100) {
                 int value = in.read();
-                assertEquals("Read value is equal to i", i%255, value);
+                assertEquals("Output does not match input", i%255, value);
                 i++;
             } else {
                 long count = in.skip(155);
@@ -287,7 +282,7 @@
         byte[] b = null;
         try {
             out.write(b, 100, 20);
-            assertTrue("byte[] = null should cause exception", false);
+            fail("byte[] = null should cause exception");
         } catch (Exception e) {
             assertTrue("Expected NullPointerException",
                     e instanceof NullPointerException);
@@ -296,7 +291,7 @@
         b = new byte[100];
         try {
             out.write(b, 0, 200);
-            assertTrue("length > b.length should cause exception", false);
+            fail("length > b.length should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                     e instanceof IndexOutOfBoundsException);
@@ -305,7 +300,7 @@
         // offset > b.length
         try {
             out.write(b, 150, 0);
-            assertTrue("offset > b.length should cause exception", false);
+            fail("offset > b.length should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                     e instanceof IndexOutOfBoundsException);
@@ -314,8 +309,7 @@
         // offset + length > b.length
         try {
             out.write(b, 50, 100);
-            assertTrue("length + offset > b.length should cause exception",
-                    false);
+            fail("length + offset > b.length should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                     e instanceof IndexOutOfBoundsException);
@@ -324,7 +318,7 @@
         // offset is negative
         try {
             out.write(b, -50, 100);
-            assertTrue("negative offset should cause exception", false);
+            fail("negative offset should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                         e instanceof IndexOutOfBoundsException);
@@ -333,7 +327,7 @@
         //length is negative
         try {
             out.write(b, 0, -100);
-            assertTrue("negative length should cause exception", false);
+            fail("negative length should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                 e instanceof IndexOutOfBoundsException);
@@ -343,7 +337,7 @@
         out.close();
         try {
             out.write(b, 0, 100);
-            assertTrue("Stream should be closed", false);
+            fail("Stream should be closed");
         } catch (Exception e) {
             assertTrue("Expected IOException", e instanceof IOException);
         }
@@ -369,7 +363,7 @@
         byte[] b = null;
         try {
             in.read(b, 100, 20);
-            assertTrue("byte[] = null should cause exception", false);
+            fail("byte[] = null should cause exception");
         } catch (Exception e) {
             assertTrue("Expected NullPointerException",
                                         e instanceof NullPointerException);
@@ -379,7 +373,7 @@
         b = new byte[100];
         try {
             int count = in.read(b, 0, 200);
-            assertTrue("length > b.length should cause exception", false);
+            fail("length > b.length should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                     e instanceof IndexOutOfBoundsException);
@@ -388,7 +382,7 @@
         // offset > b.length
         try {
             in.read(b, 150, 0);
-            assertTrue("offset > b.length should cause exception", false);
+            fail("offset > b.length should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                         e instanceof IndexOutOfBoundsException);
@@ -397,8 +391,7 @@
         // offset + length > b.length
         try {
             int count = in.read(b, 50, 100);
-            assertTrue("offset + length > b.length should cause exception",
-                                                                        false);
+            fail("offset + length > b.length should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                     e instanceof IndexOutOfBoundsException);
@@ -407,7 +400,7 @@
         // offset is negative
         try {
             in.read(b, -50, 100);
-            assertTrue("negative offset should cause exception", false);
+            fail("negative offset should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                         e instanceof IndexOutOfBoundsException);
@@ -416,7 +409,7 @@
         //length is negative
         try {
             in.read(b, 0, -100);
-            assertTrue("negative length should cause exception", false);
+            fail("negative length should cause exception");
         } catch (Exception e) {
             assertTrue("Expected IndexOutOfBoundException",
                                     e instanceof IndexOutOfBoundsException);
@@ -426,7 +419,7 @@
         in.close();
         try {
             in.read(b, 0, 100);
-            assertTrue("Stream should be closed", false);
+            fail("Stream should be closed");
         } catch (Exception e) {
             assertTrue("Expected IOException", e instanceof IOException);
         }
@@ -438,6 +431,8 @@
      * Suite method automatically generated by JUnit module.
      */
     public static Test suite() {
+        //testing only embedded driver generic test suite testing both
+        //client and ebedded is present in jdbcapi/LobStreamsTest
         TestSuite ts  = new TestSuite ("LobStreamTest");
         ts.addTest(TestConfiguration.embeddedSuite(LobStreamTest.class));
         TestSuite encSuite = new TestSuite ("LobStreamsTest:encrypted");