On Tue, 21 Jan 2025 15:15:06 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:
>>> Perhaps we should also add a test which verifies that the returned >>> InputStream reaches EOF (and the is.read() calls complete with -1 >>> eventually) when wrapped with a limiting BodyHandler with insufficient >>> capacity. >> >> Looking at the implementation of `BodyHandlers.ofInputStream()` it appears >> that such cases will result in an IOException being thrown from `read(...)` >> calls and not `-1`. So I stand corrected - the new test that we add should >> assert that the `IOException` gets thrown from `is.read(...)`. > > Yes - IOException should be thrown since the limiting subscriber will call > onError() with an IOExeception. Added tests against `ofInputStream()` in 70387718fabbd63ec94bb2b538e29931dce1fea2 for both happy and unhappy paths. The latter is interesting. The `HttpResponseInputStream::current` method (used by `read()`) starts as follows: if (closed || failed != null) { throw new IOException("closed", failed); } That is, I cannot verify the failure using assertEquals(exception.getMessage(), "body exceeds capacity: " + insufficientCapacity) anymore. Instead, I need to verify against _the cause_: assertNotNull(exception.getCause()); assertEquals(exception.getCause().getMessage(), "body exceeds capacity: " + insufficientCapacity); This made me think, maybe `HttpResponseInputStream::current` should have started as follows: if (failed) throw new IOException(failed); if (closed) throw new IOException("closed"); So that the exception message of `failed` will be preserved. @jaikiran, if the current resolution (i.e., 70387718fabbd63ec94bb2b538e29931dce1fea2) addresses your concern, would you mind resolving this conversation, please? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/23096#discussion_r1924940045