[ 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