| 29 | import org.apache.tomcat.util.res.StringManager; |
| 30 | |
| 31 | public class TestFlowControl extends Http2TestBase { |
| 32 | |
| 33 | private static final StringManager sm = StringManager.getManager(TestFlowControl.class); |
| 34 | |
| 35 | /* |
| 36 | * https://tomcat.markmail.org/thread/lijsebphms7hr3zj |
| 37 | */ |
| 38 | @Test |
| 39 | public void testNotFound() throws Exception { |
| 40 | |
| 41 | Logger.getLogger("org.apache.coyote.http2").setLevel(Level.ALL); |
| 42 | try { |
| 43 | http2Connect(); |
| 44 | |
| 45 | // Connection and per-stream flow control default to 64k-1 bytes |
| 46 | |
| 47 | // Set up a POST request to a non-existent end-point |
| 48 | // Generate headers |
| 49 | byte[] headersFrameHeader = new byte[9]; |
| 50 | ByteBuffer headersPayload = ByteBuffer.allocate(128); |
| 51 | |
| 52 | MimeHeaders headers = new MimeHeaders(); |
| 53 | headers.addValue(":method").setString(Method.POST); |
| 54 | headers.addValue(":scheme").setString("http"); |
| 55 | headers.addValue(":path").setString("/path-does-not-exist"); |
| 56 | headers.addValue(":authority").setString("localhost:" + getPort()); |
| 57 | headers.addValue("content-length").setLong(65536); |
| 58 | hpackEncoder.encode(headers, headersPayload); |
| 59 | |
| 60 | headersPayload.flip(); |
| 61 | |
| 62 | ByteUtil.setThreeBytes(headersFrameHeader, 0, headersPayload.limit()); |
| 63 | headersFrameHeader[3] = FrameType.HEADERS.getIdByte(); |
| 64 | // Flags. end of headers (0x04) |
| 65 | headersFrameHeader[4] = 0x04; |
| 66 | // Stream id |
| 67 | ByteUtil.set31Bits(headersFrameHeader, 5, 3); |
| 68 | |
| 69 | writeFrame(headersFrameHeader, headersPayload); |
| 70 | |
| 71 | // Generate body |
| 72 | // Max data payload is 16k |
| 73 | byte[] dataFrameHeader = new byte[9]; |
| 74 | ByteBuffer dataPayload = ByteBuffer.allocate(16 * 1024); |
| 75 | |
| 76 | while (dataPayload.hasRemaining()) { |
| 77 | dataPayload.put((byte) 'x'); |
| 78 | } |
| 79 | dataPayload.flip(); |
| 80 | |
| 81 | // Size |
| 82 | ByteUtil.setThreeBytes(dataFrameHeader, 0, dataPayload.limit()); |
| 83 | ByteUtil.set31Bits(dataFrameHeader, 5, 3); |
| 84 | |
| 85 | // Read the 404 error page |
| 86 | // headers |
| 87 | parser.readFrame(); |
| 88 | // body |
nothing calls this directly
no test coverage detected