Hi,
I'm running the tests that comes with v8.5.24 on Linux on s390x and hit the
following failure:
Testcase: testHeaderLimits10x512k took 10.659 sec
Caused an ERROR
End of input stream
java.io.IOException: End of input stream
at org.apache.coyote.http2.Http2TestBase$TestInput.fill
(Http2TestBase.java:879)
at org.apache.coyote.http2.Http2TestBase$TestInput.fill
(Http2TestBase.java:858)
at org.apache.coyote.http2.Http2Parser.readFrame
(Http2Parser.java:76)
at org.apache.coyote.http2.Http2Parser.readFrame
(Http2Parser.java:69)
at org.apache.coyote.http2.TestHttp2Limits.doTestHeaderLimits
(TestHttp2Limits.java:258)
at org.apache.coyote.http2.TestHttp2Limits.doTestHeaderLimits
(TestHttp2Limits.java:171)
at org.apache.coyote.http2.TestHttp2Limits.doTestHeaderLimits
(TestHttp2Limits.java:165)
at org.apache.coyote.http2.TestHttp2Limits.doTestHeaderLimits
(TestHttp2Limits.java:159)
at org.apache.coyote.http2.TestHttp2Limits.testHeaderLimits10x512k
(TestHttp2Limits.java:153)
This test case was passing in v8.5.16. I notice there were changes in
doTestHeaderLimits() between these 2 versions:
8.5.16:
https://github.com/apache/tomcat85/blob/TOMCAT_8_5_16/test/org/apache/coyote/http2/TestHttp2Limits.java#L243
case 2: {
// Behaviour depends on timing. If reset is processed fast
enough,
// frames will be swallowed before the connection reset limit
is
// reached
if (e == null) {
parser.readFrame(true);
Assert.assertEquals("3-RST-[11]\n", output.getTrace());
Assert.assertNull(e);
}
// Else is non-null as expected for a connection reset
break;
}
8.5.24:
https://github.com/apache/tomcat85/blob/TOMCAT_8_5_24/test/org/apache/coyote/http2/TestHttp2Limits.java#L252
case CONNECTION_RESET: {
// Connection reset. Connection ID will vary so use a pattern
// On some platform / Connector combinations (e.g. Windows /
APR),
// the TCP connection close will be processed before the client
gets
// a chance to read the connection close frame
try {
parser.readFrame(true);
Assert.assertThat(output.getTrace(),
RegexMatcher.matchesRegex(
"0-Goaway-\\[1\\]-\\[11\\]-\\[Connection \\[\\d++
\\], Stream \\[3\\], .*"));
} catch (SocketException se) {
// Expected on Windows
}
break;
}
For my test run, 'e' is not null - does that mean there are no frames to
process and that's why the IOException is hit? If I put back the guard
around 'e' then the test case also pass for 8.5.24. Should the guard be
add back in?
Thanks for your help.
Regards,
Vivian Kong
Linux on z Systems Open Source Ecosystem
IBM Canada Toronto Lab