Author: nextgens
Date: 2008-08-17 18:18:33 +0000 (Sun, 17 Aug 2008)
New Revision: 21975

Modified:
   trunk/freenet/test/freenet/support/io/LineReadingInputStreamTest.java
Log:
bug #2501: maybe expose the real problem

Modified: trunk/freenet/test/freenet/support/io/LineReadingInputStreamTest.java
===================================================================
--- trunk/freenet/test/freenet/support/io/LineReadingInputStreamTest.java       
2008-08-17 17:44:13 UTC (rev 21974)
+++ trunk/freenet/test/freenet/support/io/LineReadingInputStreamTest.java       
2008-08-17 18:18:33 UTC (rev 21975)
@@ -21,12 +21,25 @@
        };

        public static final String STRESSED_LINE = "\n\u0114\n";
+       public static final String NULL_LINE = "a\u0000\u0000\u0000\u0000\n";
        public static final String LENGTH_CHECKING_LINE = "a\u0000a\n";
        public static final int LENGTH_CHECKING_LINE_LF = 3;

        public static final int MAX_LENGTH = 128;
        public static final int BUFFER_SIZE = 128;

+       public class MockInputStream extends InputStream {
+               public MockInputStream() {}
+
+               public int read() {
+                       return -1;
+               }
+               
+               public int read(byte[] data, int offset, int len) {
+                       return len;
+               }
+       }
+       
        public void testReadLineWithoutMarking() throws Exception {
                // try utf8
                InputStream is = new 
ByteArrayInputStream(STRESSED_LINE.getBytes("utf-8"));
@@ -44,9 +57,10 @@
                assertNull(instance.readLineWithoutMarking(MAX_LENGTH, 
BUFFER_SIZE, false));

                // is it returning null?
-               is = new NullInputStream();
+               is = new MockInputStream();
                instance = new LineReadingInputStream(is);
                assertNull(instance.readLineWithoutMarking(0, BUFFER_SIZE, 
false));
+               assertNull(instance.readLineWithoutMarking(0, 0, false));

                // is it throwing?
                is = new ByteArrayInputStream(LENGTH_CHECKING_LINE.getBytes());
@@ -60,6 +74,11 @@
                is = new ByteArrayInputStream(LENGTH_CHECKING_LINE.getBytes());
                instance = new LineReadingInputStream(is);
                assertEquals(LENGTH_CHECKING_LINE.substring(0, 
LENGTH_CHECKING_LINE_LF), 
instance.readLineWithoutMarking(LENGTH_CHECKING_LINE_LF, BUFFER_SIZE, true));
+               
+               // is it handling nulls properly? @see #2501
+               is = new ByteArrayInputStream(NULL_LINE.getBytes());
+               instance = new LineReadingInputStream(is);
+               assertEquals(NULL_LINE.substring(0, 5), 
instance.readLineWithoutMarking(BUFFER_SIZE, 1, true));
        }

        public void testReadLine() throws Exception {
@@ -78,10 +97,11 @@
                }
                assertNull(instance.readLine(MAX_LENGTH, BUFFER_SIZE, false));

-               // is it returning null?
-               is = new NullInputStream();
+               // is it returning null? and blocking when it should be?
+               is = new MockInputStream();
                instance = new LineReadingInputStream(is);
                assertNull(instance.readLine(0, BUFFER_SIZE, false));
+               assertNull(instance.readLine(0, 0, false));

                // is it throwing?
                is = new ByteArrayInputStream(LENGTH_CHECKING_LINE.getBytes());
@@ -95,6 +115,11 @@
                is = new ByteArrayInputStream(LENGTH_CHECKING_LINE.getBytes());
                instance = new LineReadingInputStream(is);
                assertEquals(LENGTH_CHECKING_LINE.substring(0, 
LENGTH_CHECKING_LINE_LF), instance.readLine(LENGTH_CHECKING_LINE_LF, 
BUFFER_SIZE, true));
+               
+               // is it handling nulls properly? @see #2501
+               is = new ByteArrayInputStream(NULL_LINE.getBytes());
+               instance = new LineReadingInputStream(is);
+               assertEquals(NULL_LINE.substring(0, 5), 
instance.readLine(BUFFER_SIZE, 1, true));
        }

        public void testBothImplementation() throws Exception {


Reply via email to