You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gh...@apache.org on 2006/07/04 16:24:15 UTC

svn commit: r419017 - /incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/org/apache/harmony/tests/java/nio/channels/SourceChannelTest.java

Author: gharley
Date: Tue Jul  4 07:24:14 2006
New Revision: 419017

URL: http://svn.apache.org/viewvc?rev=419017&view=rev
Log:
HARMONY 738 : Refine two unstable tests in o.a.h.tests.java.nio.channels.SourceChannelTest

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/org/apache/harmony/tests/java/nio/channels/SourceChannelTest.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/org/apache/harmony/tests/java/nio/channels/SourceChannelTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/org/apache/harmony/tests/java/nio/channels/SourceChannelTest.java?rev=419017&r1=419016&r2=419017&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/org/apache/harmony/tests/java/nio/channels/SourceChannelTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/org/apache/harmony/tests/java/nio/channels/SourceChannelTest.java Tue Jul  4 07:24:14 2006
@@ -147,42 +147,55 @@
 	}
 
 	/**
-	 * @tests java.nio.channels.Pipe.SourceChannel#read(ByteBuffer[])
-	 */
-	public void test_read_$LByteBuffer() throws IOException {
-		ByteBuffer[] bufArray = { buffer, positionedBuffer };
-		boolean[] sinkBlockingMode = { true, true, false, false };
-		boolean[] sourceBlockingMode = { true, false, true, false };
-		for (int i = 0; i < sinkBlockingMode.length; ++i) {
-			sink.configureBlocking(sinkBlockingMode[i]);
-			source.configureBlocking(sourceBlockingMode[i]);
-
-			buffer.position(0);
-			positionedBuffer.position(BUFFER_SIZE);
-			long writeCount = sink.write(bufArray);
-			assertEquals(10, writeCount);
-			// if sink and source both are blocking mode, source only needs read
-			// once to get what sink write.
-			boolean isBlocking = sinkBlockingMode[i] && sourceBlockingMode[i];
-			ByteBuffer[] readBufArray = { ByteBuffer.allocate(BUFFER_SIZE),
-			        ByteBuffer.allocate(BUFFER_SIZE) };
-			long totalCount = 0;
-			do {
-				long count = source.read(readBufArray);
-				if (count < 0) {
-					break;
-				}
-				totalCount += count;
-			} while (totalCount != 10 && !isBlocking);
-
-			// assert read result
-			for (ByteBuffer readBuf : readBufArray) {
-				// RI may fail because of its bug implementation
-				assertEquals(BUFFER_SIZE, readBuf.position());
-				assertEquals("bytes", new String(readBuf.array(), ISO8859_1));
-			}
-		}
-	}
+     * @tests java.nio.channels.Pipe.SourceChannel#read(ByteBuffer[])
+     */
+    public void test_read_$LByteBuffer() throws IOException {
+        ByteBuffer[] bufArray = { buffer, positionedBuffer };
+        boolean[] sinkBlockingMode = { true, true, false, false };
+        boolean[] sourceBlockingMode = { true, false, true, false };
+        for (int i = 0; i < sinkBlockingMode.length; ++i) {
+            // open new pipe everytime, will be closed in finally block
+            pipe = Pipe.open();
+            sink = pipe.sink();
+            source = pipe.source();
+            sink.configureBlocking(sinkBlockingMode[i]);
+            source.configureBlocking(sourceBlockingMode[i]);
+            buffer.position(0);
+            positionedBuffer.position(BUFFER_SIZE);
+            try {
+                long writeCount = sink.write(bufArray);
+                assertEquals(10, writeCount);
+                // invoke close to ensure all data will be sent out
+                sink.close();
+                // read until EOF is meet or readBufArray is full.
+                ByteBuffer[] readBufArray = { ByteBuffer.allocate(BUFFER_SIZE),
+                        ByteBuffer.allocate(BUFFER_SIZE) };
+                long totalCount = 0;
+                do {
+                    long count = source.read(readBufArray);
+                    if (count < 0) {
+                        break;
+                    }
+                    if (0 == count && BUFFER_SIZE == readBufArray[1].position()) {
+                        // source.read returns 0 because readBufArray is full
+                        break;
+                    }
+                    totalCount += count;
+                } while (totalCount <= 10);
+                // assert read result
+                for (ByteBuffer readBuf : readBufArray) {
+                    // RI may fail because of its bug implementation
+                    assertEquals(BUFFER_SIZE, readBuf.position());
+                    assertEquals("bytes",
+                            new String(readBuf.array(), ISO8859_1));
+                }
+            } finally {
+                // close pipe everytime
+                sink.close();
+                source.close();
+            }
+        }
+    }
 	
 	/**
 	 * @tests java.nio.channels.Pipe.SourceChannel#read(ByteBuffer)
@@ -277,42 +290,55 @@
 	}
 
 	/**
-	 * @tests java.nio.channels.Pipe.SourceChannel#read(ByteBuffer[], int, int)
-	 */
-	public void test_read_$LByteBufferII() throws IOException {
-		ByteBuffer[] bufArray = { buffer, positionedBuffer };
-		boolean[] sinkBlockingMode = { true, true, false, false };
-		boolean[] sourceBlockingMode = { true, false, true, false };
-		for (int i = 0; i < sinkBlockingMode.length; ++i) {
-			sink.configureBlocking(sinkBlockingMode[i]);
-			source.configureBlocking(sourceBlockingMode[i]);
-
-			buffer.position(0);
-			positionedBuffer.position(BUFFER_SIZE);
-			sink.write(bufArray);
-			// begin to read
-			// if sink and source both are blocking mode, source only needs read
-			// once to get what sink write.
-			boolean isBlocking = sinkBlockingMode[i] && sourceBlockingMode[i];
-			ByteBuffer[] readBufArray = { ByteBuffer.allocate(BUFFER_SIZE),
-			        ByteBuffer.allocate(BUFFER_SIZE) };
-			long totalCount = 0;
-			do {
-				long count = source.read(readBufArray, 0, 2);
-				if (count < 0) {
-					break;
-				}
-				totalCount += count;
-			} while (totalCount != 10 && !isBlocking);
-
-			// assert read result
-			for (ByteBuffer readBuf : readBufArray) {
-				// RI may fail because of its bug implementation
-				assertEquals(BUFFER_SIZE, readBuf.position());
-				assertEquals("bytes", new String(readBuf.array(), ISO8859_1));
-			}
-		}
-	}
+     * @tests java.nio.channels.Pipe.SourceChannel#read(ByteBuffer[], int, int)
+     */
+    public void test_read_$LByteBufferII() throws IOException {
+        ByteBuffer[] bufArray = { buffer, positionedBuffer };
+        boolean[] sinkBlockingMode = { true, true, false, false };
+        boolean[] sourceBlockingMode = { true, false, true, false };
+        for (int i = 0; i < sinkBlockingMode.length; ++i) {
+            Pipe pipe = Pipe.open();
+            sink = pipe.sink();
+            source = pipe.source();
+
+            sink.configureBlocking(sinkBlockingMode[i]);
+            source.configureBlocking(sourceBlockingMode[i]);
+
+            buffer.position(0);
+            positionedBuffer.position(BUFFER_SIZE);
+            try {
+                sink.write(bufArray);
+                // invoke close to ensure all data will be sent out
+                sink.close();
+                // read until EOF is meet or readBufArray is full.
+                ByteBuffer[] readBufArray = { ByteBuffer.allocate(BUFFER_SIZE),
+                        ByteBuffer.allocate(BUFFER_SIZE) };
+                long totalCount = 0;
+                do {
+                    long count = source.read(readBufArray, 0, 2);
+                    if (count < 0) {
+                        break;
+                    }
+                    if (0 == count && BUFFER_SIZE == readBufArray[1].position()) {
+                        // source.read returns 0 because readBufArray is full
+                        break;
+                    }
+                    totalCount += count;
+                } while (totalCount != 10);
+
+                // assert read result
+                for (ByteBuffer readBuf : readBufArray) {
+                    // RI may fail because of its bug implementation
+                    assertEquals(BUFFER_SIZE, readBuf.position());
+                    assertEquals("bytes",
+                            new String(readBuf.array(), ISO8859_1));
+                }
+            } finally {
+                sink.close();
+                source.close();
+            }
+        }
+    }
 
 	/**
 	 * @tests java.nio.channels.Pipe.SourceChannel#read(ByteBuffer)