[ 
https://issues.apache.org/jira/browse/HADOOP-19400?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17925679#comment-17925679
 ] 

ASF GitHub Bot commented on HADOOP-19400:
-----------------------------------------

cnauroth commented on code in PR #7367:
URL: https://github.com/apache/hadoop/pull/7367#discussion_r1949680833


##########
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/contract/AbstractContractOpenTest.java:
##########
@@ -408,4 +411,137 @@ public void testFloatingPointLength() throws Throwable {
         .isEqualTo(len);
   }
 
+  @Test
+  public void testInputStreamReadNullBuffer() throws Throwable {
+    // The JDK base InputStream (and by extension LocalFSFileInputStream) 
throws
+    // NullPointerException. Historically, DFSInputStream has thrown 
IllegalArgumentException
+    // instead. Allow either behavior.
+    describe("Attempting to read into a null buffer should throw 
IllegalArgumentException or " +
+        "NullPointerException");
+    Path path = methodPath();
+    FileSystem fs = getFileSystem();
+    int len = 4096;
+    createFile(fs, path, true,
+        dataset(len, 0x40, 0x80));
+    try (FSDataInputStream is = fs.openFile(path).build().get()) {
+      Assertions.assertThatThrownBy(() -> is.read(null, 0, 10))
+          .isInstanceOfAny(IllegalArgumentException.class, 
NullPointerException.class);

Review Comment:
   That's an interesting idea. I just tried going down the path of writing an 
`interceptAny` accepting a list of exception classes. The problem we run into 
though is that we want to parameterize on the exception type `E` and return the 
specific type. If the list can contain any exception type, then we can't put a 
meaningful bound on the returned `E`. It seems all we can do is devolve back to 
`Throwable`.
   
   I also don't currently have the use case (yet) of chaining additional 
analysis on that returned exception.
   
   I think I'll hold off on this.





> Expand specification and contract test coverage for InputStream reads.
> ----------------------------------------------------------------------
>
>                 Key: HADOOP-19400
>                 URL: https://issues.apache.org/jira/browse/HADOOP-19400
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: documentation, fs, test
>            Reporter: Chris Nauroth
>            Assignee: Chris Nauroth
>            Priority: Major
>              Labels: pull-request-available
>
> This issue is a spin-off from HADOOP-19389, specifically [this code review 
> discussion|https://github.com/apache/hadoop/pull/7291#discussion_r1920495312].
>  We can enhance the FS specification and contract tests to cover expected 
> semantics of the {{InputStream}} single-byte and multi-byte read methods:
> * Multi-byte read should validate the arguments passed to it, according to 
> the pattern established in the JDK base {{InputStream}} class.
> * You should get the same bytes whether going through single-byte or 
> multi-byte read.
> * It is legal to mix calls to single-byte and multi-byte read, and this 
> should also yield the same bytes.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to