Browse Source

HADOOP-8982. TestSocketIOWithTimeout fails on Windows. Contributed by Chris Nauroth.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1490124 13f79535-47bb-0310-9956-ffa450edef68
Suresh Srinivas 12 years ago
parent
commit
ba6bd09811

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -749,6 +749,9 @@ Release 2.1.0-beta - UNRELEASED
     HADOOP-9526. TestShellCommandFencer and TestShell fail on Windows.
     (Arpit Agarwal via suresh)
 
+    HADOOP-8982. TestSocketIOWithTimeout fails on Windows.
+    (Chris Nauroth via suresh)
+
 Release 2.0.5-alpha - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 15 - 6
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestSocketIOWithTimeout.java

@@ -32,6 +32,7 @@ import org.apache.hadoop.test.MultithreadedTestUtil;
 import org.apache.hadoop.test.MultithreadedTestUtil.TestContext;
 import org.apache.hadoop.test.MultithreadedTestUtil.TestingThread;
 import org.apache.hadoop.util.Time;
+import org.apache.hadoop.util.Shell;
 
 import org.junit.Test;
 import static org.junit.Assert.*;
@@ -144,12 +145,20 @@ public class TestSocketIOWithTimeout {
       // Nevertheless, the output stream is closed, because
       // a partial write may have succeeded (see comment in
       // SocketOutputStream#write(byte[]), int, int)
-      try {
-        out.write(1);
-        fail("Did not throw");
-      } catch (IOException ioe) {
-        GenericTestUtils.assertExceptionContains(
-            "stream is closed", ioe);
+      // This portion of the test cannot pass on Windows due to differences in
+      // behavior of partial writes.  Windows appears to buffer large amounts of
+      // written data and send it all atomically, thus making it impossible to
+      // simulate a partial write scenario.  Attempts were made to switch the
+      // test from using a pipe to a network socket and also to use larger and
+      // larger buffers in doIO.  Nothing helped the situation though.
+      if (!Shell.WINDOWS) {
+        try {
+          out.write(1);
+          fail("Did not throw");
+        } catch (IOException ioe) {
+          GenericTestUtils.assertExceptionContains(
+              "stream is closed", ioe);
+        }
       }
       
       out.close();