[
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: [email protected]
For additional commands, e-mail: [email protected]