瀏覽代碼

HADOOP-14864. FSDataInputStream#unbuffer UOE should include stream class name. Contributed by Bharat Viswanadham.

John Zhuge 7 年之前
父節點
當前提交
7ee02d1065

+ 2 - 2
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FSDataInputStream.java

@@ -230,8 +230,8 @@ public class FSDataInputStream extends DataInputStream
     try {
       ((CanUnbuffer)in).unbuffer();
     } catch (ClassCastException e) {
-      throw new UnsupportedOperationException("this stream does not " +
-          "support unbuffering.");
+      throw new UnsupportedOperationException("this stream " +
+          in.getClass().getName() + " does not " + "support unbuffering.");
     }
   }
 

+ 21 - 0
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestUnbuffer.java

@@ -27,12 +27,18 @@ import org.apache.hadoop.hdfs.PeerCache;
 import org.apache.hadoop.hdfs.client.HdfsClientConfigKeys;
 import org.apache.hadoop.io.IOUtils;
 import org.junit.Assert;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.Mockito;
 
 public class TestUnbuffer {
   private static final Log LOG =
       LogFactory.getLog(TestUnbuffer.class.getName());
 
+  @Rule
+  public ExpectedException exception = ExpectedException.none();
+
   /**
    * Test that calling Unbuffer closes sockets.
    */
@@ -123,4 +129,19 @@ public class TestUnbuffer {
       }
     }
   }
+
+  /**
+   * Test unbuffer method which throws an Exception with class name included.
+   */
+  @Test
+  public void testUnbufferException() {
+    FSInputStream in = Mockito.mock(FSInputStream.class);
+    FSDataInputStream fs = new FSDataInputStream(in);
+
+    exception.expect(UnsupportedOperationException.class);
+    exception.expectMessage("this stream " + in.getClass().getName()
+        + " does not support unbuffering");
+
+    fs.unbuffer();
+  }
 }