Skip to content

Instantly share code, notes, and snippets.

@AMekss
Created February 18, 2021 18:04
Show Gist options
  • Save AMekss/6276516343e8e5b9d18d96e7e96d7a96 to your computer and use it in GitHub Desktop.
Save AMekss/6276516343e8e5b9d18d96e7e96d7a96 to your computer and use it in GitHub Desktop.
Generic tests for HTTP/2 server
1. Starting HTTP/2
✔ 1: Sends a client connection preface
2. Streams and Multiplexing
using source address 127.0.0.1:59703stream
× 1: Sends a PRIORITY frame on idle stream
-> The endpoint MUST accept PRIORITY frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
✔ 2: Sends a WINDOW_UPDATE frame on half-closed (remote) stream
✔ 3: Sends a PRIORITY frame on half-closed (remote) stream
using source address 127.0.0.1:59709f-closed (remote) stream
× 4: Sends a RST_STREAM frame on half-closed (remote) stream
-> The endpoint MUST accept RST_STREAM frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59711d stream
× 5: Sends a PRIORITY frame on closed stream
-> The endpoint MUST accept PRIORITY frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
3. Frame Definitions
3.1. DATA
✔ 1: Sends a DATA frame
✔ 2: Sends multiple DATA frames
✔ 3: Sends a DATA frame with padding
3.2. HEADERS
✔ 1: Sends a HEADERS frame
✔ 2: Sends a HEADERS frame with padding
✔ 3: Sends a HEADERS frame with priority
3.3. PRIORITY
✔ 1: Sends a PRIORITY frame with priority 1
✔ 2: Sends a PRIORITY frame with priority 256
✔ 3: Sends a PRIORITY frame with stream dependency
✔ 4: Sends a PRIORITY frame with exclusive
✔ 5: Sends a PRIORITY frame for an idle stream, then send a HEADER frame for a lower stream ID
3.4. RST_STREAM
using source address 127.0.0.1:59735
× 1: Sends a RST_STREAM frame
-> The endpoint MUST accept RST_STREAM frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
3.5. SETTINGS
✔ 1: Sends a SETTINGS frame
3.7. PING
using source address 127.0.0.1:59739
× 1: Sends a PING frame
-> The endpoint MUST accept PING frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
3.8. GOAWAY
using source address 127.0.0.1:59742
× 1: Sends a GOAWAY frame
-> The endpoint MUST accept GOAWAY frame.
Expected: Connection closed
PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
3.9. WINDOW_UPDATE
using source address 127.0.0.1:59744h stream ID 0
× 1: Sends a WINDOW_UPDATE frame with stream ID 0
-> The endpoint MUST accept WINDOW_UPDATE frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
✔ 2: Sends a WINDOW_UPDATE frame with stream ID 1
3.10. CONTINUATION
using source address 127.0.0.1:59748
× 1: Sends a CONTINUATION frame
-> The endpoint MUST accept CONTINUATION frame.
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
using source address 127.0.0.1:59750mes
× 2: Sends multiple CONTINUATION frames
-> The endpoint MUST accept multiple CONTINUATION frames.
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
4. HTTP Message Exchanges
✔ 1: Sends a GET request
✔ 2: Sends a HEAD request
✔ 3: Sends a POST request
✔ 4: Sends a POST request with trailers
5. HPACK
✔ 1: Sends a indexed header field representation
✔ 2: Sends a literal header field with incremental indexing - indexed name
✔ 3: Sends a literal header field with incremental indexing - indexed name (with Huffman coding)
✔ 4: Sends a literal header field with incremental indexing - new name
✔ 5: Sends a literal header field with incremental indexing - new name (with Huffman coding)
✔ 6: Sends a literal header field without indexing - indexed name
✔ 7: Sends a literal header field without indexing - indexed name (with Huffman coding)
✔ 8: Sends a literal header field without indexing - new name
✔ 9: Sends a literal header field without indexing - new name (huffman encoded)
using source address 127.0.0.1:59782ever indexed - indexed name
× 10: Sends a literal header field never indexed - indexed name
-> The endpoint MUST accept literal header field never indexed
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
using source address 127.0.0.1:59784ever indexed - indexed name (huffman encoded)
× 11: Sends a literal header field never indexed - indexed name (huffman encoded)
-> The endpoint MUST accept literal header field never indexed
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
using source address 127.0.0.1:59786ever indexed - new name
× 12: Sends a literal header field never indexed - new name
-> The endpoint MUST accept literal header field never indexed
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
using source address 127.0.0.1:59788ever indexed - new name (huffman encoded)
× 13: Sends a literal header field never indexed - new name (huffman encoded)
-> The endpoint MUST accept literal header field never indexed
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
✔ 14: Sends a dynamic table size update
✔ 15: Sends multiple dynamic table size update
Hypertext Transfer Protocol Version 2 (HTTP/2)
3. Starting HTTP/2
3.5. HTTP/2 Connection Preface
✔ 1: Sends client connection preface
✔ 2: Sends invalid connection preface
4. HTTP Frames
4.1. Frame Format
using source address 127.0.0.1:59798
× 1: Sends a frame with unknown type
-> The endpoint MUST ignore and discard any frame that has a type that is unknown.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
using source address 127.0.0.1:59800ag
× 2: Sends a frame with undefined flag
-> The endpoint MUST ignore any flags that is undefined.
Expected: PING frame
Actual: Timeout
using source address 127.0.0.1:59802ld bit
× 3: Sends a frame with reserved field bit
-> The endpoint MUST ignore the value of reserved field.
Expected: PING frame
Actual: Timeout
4.2. Frame Size
✔ 1: Sends a DATA frame with 2^14 octets in length
using source address 127.0.0.1:59806hat exceeds the SETTINGS_MAX_FRAME_SIZE
× 2: Sends a large size DATA frame that exceeds the SETTINGS_MAX_FRAME_SIZE
-> The endpoint MUST send an error code of FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: DATA Frame (length:4088, flags:0x01, stream_id:1)
✔ 3: Sends a large size HEADERS frame that exceeds the SETTINGS_MAX_FRAME_SIZE
4.3. Header Compression and Decompression
✔ 1: Sends invalid header block fragment
using source address 127.0.0.1:59812nding the header blocks
× 2: Sends a PRIORITY frame while sending the header blocks
-> The endpoint MUST terminate the connection with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59815r stream while sending the header blocks
× 3: Sends a HEADERS frame to another stream while sending the header blocks
-> The endpoint MUST terminate the connection with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:3)
5. Streams and Multiplexing
5.1. Stream States
using source address 127.0.0.1:59817
× 1: idle: Sends a DATA frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59819
× 2: idle: Sends a RST_STREAM frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59821me
× 3: idle: Sends a WINDOW_UPDATE frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
✔ 4: idle: Sends a CONTINUATION frame
using source address 127.0.0.1:59825ATA frame
× 5: half closed (remote): Sends a DATA frame
-> The endpoint MUST respond with a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59827EADERS frame
× 6: half closed (remote): Sends a HEADERS frame
-> The endpoint MUST respond with a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59829ONTINUATION frame
× 7: half closed (remote): Sends a CONTINUATION frame
-> The endpoint MUST respond with a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59832r sending RST_STREAM frame
× 8: closed: Sends a DATA frame after sending RST_STREAM frame
-> The endpoint MUST treat this as a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59834fter sending RST_STREAM frame
× 9: closed: Sends a HEADERS frame after sending RST_STREAM frame
-> The endpoint MUST treat this as a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59836rame after sending RST_STREAM frame
× 10: closed: Sends a CONTINUATION frame after sending RST_STREAM frame
-> The endpoint MUST treat this as a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59838
× 11: closed: Sends a DATA frame
-> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59840
× 12: closed: Sends a HEADERS frame
-> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59842rame
× 13: closed: Sends a CONTINUATION frame
-> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
5.1.1. Stream Identifiers
using source address 127.0.0.1:59844tifier
× 1: Sends even-numbered stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:2)
using source address 127.0.0.1:59846 numerically smaller than previous
× 2: Sends stream identifier that is numerically smaller than previous
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:3)
5.1.2. Stream Concurrency
using source address 127.0.0.1:59849s their advertised concurrent stream limit to be exceeded
× 1: Sends HEADERS frames that causes their advertised concurrent stream limit to be exceeded
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR or REFUSED_STREAM.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
GOAWAY Frame (Error Code: REFUSED_STREAM)
RST_STREAM Frame (Error Code: REFUSED_STREAM)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:201)
5.3. Stream Priority
5.3.1. Stream Dependencies
using source address 127.0.0.1:59851s on itself
× 1: Sends HEADERS frame that depends on itself
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59853d on itself
× 2: Sends PRIORITY frame that depend on itself
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
5.4. Error Handling
5.4.1. Connection Error Handling
using source address 127.0.0.1:59855 connection close
× 1: Sends an invalid PING frame for connection close
-> The endpoint MUST close the TCP connection
Expected: Connection closed
Actual: Timeout
5.5. Extending HTTP/2
using source address 127.0.0.1:59857e
× 1: Sends an unknown extension frame
-> The endpoint MUST ignore unknown or unsupported values in all extensible protocol elements.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
using source address 127.0.0.1:59859e in the middle of a header block
× 2: Sends an unknown extension frame in the middle of a header block
-> The endpoint MUST treat as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6. Frame Definitions
6.1. DATA
using source address 127.0.0.1:59861eam identifier
× 1: Sends a DATA frame with 0x0 stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Error: connection error: PROTOCOL_ERROR
using source address 127.0.0.1:59863m that is not in "open" or "half-closed (local)" state
× 2: Sends a DATA frame on the stream that is not in "open" or "half-closed (local)" state
-> The endpoint MUST respond with a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
✔ 3: Sends a DATA frame with invalid pad length
6.2. HEADERS
using source address 127.0.0.1:59868he END_HEADERS flag, and a PRIORITY frame
× 1: Sends a HEADERS frame without the END_HEADERS flag, and a PRIORITY frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59870r stream while sending a HEADERS frame
× 2: Sends a HEADERS frame to another stream while sending a HEADERS frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:3)
using source address 127.0.0.1:59872stream identifier
× 3: Sends a HEADERS frame with 0x0 stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Error: connection error: PROTOCOL_ERROR
✔ 4: Sends a HEADERS frame with invalid pad length
6.3. PRIORITY
using source address 127.0.0.1:59876 stream identifier
× 1: Sends a PRIORITY frame with 0x0 stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59878ength other than 5 octets
× 2: Sends a PRIORITY frame with a length other than 5 octets
-> The endpoint MUST respond with a stream error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6.4. RST_STREAM
using source address 127.0.0.1:59880x0 stream identifier
× 1: Sends a RST_STREAM frame with 0x0 stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59882dle stream
× 2: Sends a RST_STREAM frame on a idle stream
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59884 length other than 4 octets
× 3: Sends a RST_STREAM frame with a length other than 4 octets
-> The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6.5. SETTINGS
using source address 127.0.0.1:59886 flag and payload
× 1: Sends a SETTINGS frame with ACK flag and payload
-> The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59889tream identifier other than 0x0
× 2: Sends a SETTINGS frame with a stream identifier other than 0x0
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59891ength other than a multiple of 6 octets
× 3: Sends a SETTINGS frame with a length other than a multiple of 6 octets
-> The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
6.5.2. Defined SETTINGS Parameters
using source address 127.0.0.1:59893ds the value other than 0 or 1
× 1: SETTINGS_ENABLE_PUSH (0x2): Sends the value other than 0 or 1
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59895x4): Sends the value above the maximum flow control window size
× 2: SETTINGS_INITIAL_WINDOW_SIZE (0x4): Sends the value above the maximum flow control window size
-> The endpoint MUST treat this as a connection error of type FLOW_CONTROL_ERROR.
Expected: GOAWAY Frame (Error Code: FLOW_CONTROL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59897Sends the value below the initial value
× 3: SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value below the initial value
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59899Sends the value above the maximum allowed frame size
× 4: SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value above the maximum allowed frame size
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59901nown identifier
× 5: Sends a SETTINGS frame with unknown identifier
-> The endpoint MUST ignore that setting.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
6.5.3. Settings Synchronization
using source address 127.0.0.1:59904GS_INITIAL_WINDOW_SIZE
× 1: Sends multiple values of SETTINGS_INITIAL_WINDOW_SIZE
-> The endpoint MUST process the values in the settings in the order they apper.
Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
✔ 2: Sends a SETTINGS frame without ACK flag
6.7. PING
using source address 127.0.0.1:59910
× 1: Sends a PING frame
-> The endpoint MUST sends a PING frame with ACK, with an identical payload.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
using source address 127.0.0.1:59912
× 2: Sends a PING frame with ACK
-> The endpoint MUST NOT respond to PING frames with ACK.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
using source address 127.0.0.1:59914m identifier field value other than 0x0
× 3: Sends a PING frame with a stream identifier field value other than 0x0
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59916h field value other than 8
× 4: Sends a PING frame with a length field value other than 8
-> The endpoint MUST treat this as a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: Timeout
6.8. GOAWAY
using source address 127.0.0.1:59918eam identifier other than 0x0
× 1: Sends a GOAWAY frame with a stream identifier other than 0x0
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
6.9. WINDOW_UPDATE
using source address 127.0.0.1:59920h a flow control window increment of 0
× 1: Sends a WINDOW_UPDATE frame with a flow control window increment of 0
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59922h a flow control window increment of 0 on a stream
× 2: Sends a WINDOW_UPDATE frame with a flow control window increment of 0 on a stream
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59924h a length other than 4 octets
× 3: Sends a WINDOW_UPDATE frame with a length other than 4 octets
-> The endpoint MUST treat this as a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: Timeout
6.9.1. The Flow-Control Window
using source address 127.0.0.1:59927 initial window size to 1 and sends HEADERS frame
× 1: Sends SETTINGS frame to set the initial window size to 1 and sends HEADERS frame
-> The endpoint MUST NOT send a flow-controlled frame with a length that exceeds the space available.
Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59931ames increasing the flow control window to above 2^31-1
× 2: Sends multiple WINDOW_UPDATE frames increasing the flow control window to above 2^31-1
-> The endpoint MUST sends a GOAWAY frame with a FLOW_CONTROL_ERROR code.
Expected: GOAWAY Frame (Error Code: FLOW_CONTROL_ERROR)
Actual: Timeout
using source address 127.0.0.1:59933ames increasing the flow control window to above 2^31-1 on a stream
× 3: Sends multiple WINDOW_UPDATE frames increasing the flow control window to above 2^31-1 on a stream
-> The endpoint MUST sends a RST_STREAM frame with a FLOW_CONTROL_ERROR code.
Expected: RST_STREAM Frame (Error Code: FLOW_CONTROL_ERROR)
Actual: Timeout
6.9.2. Initial Flow-Control Window Size
using source address 127.0.0.1:59935_SIZE after sending HEADERS frame
× 1: Changes SETTINGS_INITIAL_WINDOW_SIZE after sending HEADERS frame
-> The endpoint MUST adjust the size of all stream flow-control windows.
Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59939ow size to be negative
× 2: Sends a SETTINGS frame for window size to be negative
-> The endpoint MUST track the negative flow-control window.
Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
Actual: Timeout
using source address 127.0.0.1:59943_SIZE settings with an exceeded maximum window size value
× 3: Sends a SETTINGS_INITIAL_WINDOW_SIZE settings with an exceeded maximum window size value
-> The endpoint MUST treat this as a connection error of type FLOW_CONTROL_ERROR.
Expected: GOAWAY Frame (Error Code: FLOW_CONTROL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
6.10. CONTINUATION
✔ 1: Sends multiple CONTINUATION frames preceded by a HEADERS frame
using source address 127.0.0.1:59947owed by any frame other than CONTINUATION
× 2: Sends a CONTINUATION frame followed by any frame other than CONTINUATION
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:5, flags:0x01, stream_id:1)
✔ 3: Sends a CONTINUATION frame with 0x0 stream identifier
using source address 127.0.0.1:59951eded by a HEADERS frame with END_HEADERS flag
× 4: Sends a CONTINUATION frame preceded by a HEADERS frame with END_HEADERS flag
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59953eded by a CONTINUATION frame with END_HEADERS flag
× 5: Sends a CONTINUATION frame preceded by a CONTINUATION frame with END_HEADERS flag
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
✔ 6: Sends a CONTINUATION frame preceded by a DATA frame
7. Error Codes
using source address 127.0.0.1:59958wn error code
× 1: Sends a GOAWAY frame with unknown error code
-> The endpoint MUST NOT trigger any special behavior.
Expected: Connection closed
PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
using source address 127.0.0.1:59960nknown error code
× 2: Sends a RST_STREAM frame with unknown error code
-> The endpoint MUST NOT trigger any special behavior.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
8. HTTP Message Exchanges
8.1. HTTP Request/Response Exchange
using source address 127.0.0.1:59962thout the END_STREAM flag
× 1: Sends a second HEADERS frame without the END_STREAM flag
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:5, flags:0x01, stream_id:1)
8.1.2. HTTP Header Fields
using source address 127.0.0.1:59964ains the header field name in uppercase letters
× 1: Sends a HEADERS frame that contains the header field name in uppercase letters
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
8.1.2.1. Pseudo-Header Fields
using source address 127.0.0.1:59966ains a unknown pseudo-header field
× 1: Sends a HEADERS frame that contains a unknown pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59968ains the pseudo-header field defined for response
× 2: Sends a HEADERS frame that contains the pseudo-header field defined for response
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59970ains a pseudo-header field as trailers
× 3: Sends a HEADERS frame that contains a pseudo-header field as trailers
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:5, flags:0x01, stream_id:1)
using source address 127.0.0.1:59972ains a pseudo-header field that appears in a header block after a regular header field
× 4: Sends a HEADERS frame that contains a pseudo-header field that appears in a header block after a regular header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
8.1.2.2. Connection-Specific Header Fields
using source address 127.0.0.1:59975ains the connection-specific header field
× 1: Sends a HEADERS frame that contains the connection-specific header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59977ains the TE header field with any value other than "trailers"
× 2: Sends a HEADERS frame that contains the TE header field with any value other than "trailers"
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
8.1.2.3. Request Pseudo-Header Fields
using source address 127.0.0.1:59979y ":path" pseudo-header field
× 1: Sends a HEADERS frame with empty ":path" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59982s ":method" pseudo-header field
× 2: Sends a HEADERS frame that omits ":method" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59984s ":scheme" pseudo-header field
× 3: Sends a HEADERS frame that omits ":scheme" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59986s ":path" pseudo-header field
× 4: Sends a HEADERS frame that omits ":path" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59988icated ":method" pseudo-header field
× 5: Sends a HEADERS frame with duplicated ":method" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59991icated ":scheme" pseudo-header field
× 6: Sends a HEADERS frame with duplicated ":scheme" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59993icated ":path" pseudo-header field
× 7: Sends a HEADERS frame with duplicated ":path" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
8.1.2.6. Malformed Requests and Responses
using source address 127.0.0.1:59995"content-length" header field which does not equal the DATA frame payload length
× 1: Sends a HEADERS frame with the "content-length" header field which does not equal the DATA frame payload length
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:5, flags:0x01, stream_id:1)
using source address 127.0.0.1:59998"content-length" header field which does not equal the sum of the multiple DATA frames payload length
× 2: Sends a HEADERS frame with the "content-length" header field which does not equal the sum of the multiple DATA frames payload length
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:10, flags:0x01, stream_id:1)
8.2. Server Push
using source address 127.0.0.1:60000
× 1: Sends a PUSH_PROMISE frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
HPACK: Header Compression for HTTP/2
2. Compression Process Overview
2.3. Indexing Tables
2.3.3. Index Address Space
using source address 127.0.0.1:60002presentation with invalid index
× 1: Sends a indexed header field representation with invalid index
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
✔ 2: Sends a literal header field representation with invalid index
4. Dynamic Table Management
4.2. Maximum Table Size
using source address 127.0.0.1:60006te at the end of header block
× 1: Sends a dynamic table size update at the end of header block
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
5. Primitive Type Representations
5.2. String Literal Representation
using source address 127.0.0.1:60008literal representation with padding longer than 7 bits
× 1: Sends a Huffman-encoded string literal representation with padding longer than 7 bits
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:60011literal representation padded by zero
× 2: Sends a Huffman-encoded string literal representation padded by zero
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:60013literal representation containing the EOS symbol
× 3: Sends a Huffman-encoded string literal representation containing the EOS symbol
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6. Binary Format
6.1. Indexed Header Field Representation
✔ 1: Sends a indexed header field representation with index 0
6.3. Dynamic Table Size Update
using source address 127.0.0.1:60019te larger than the value of SETTINGS_HEADER_TABLE_SIZE
× 1: Sends a dynamic table size update larger than the value of SETTINGS_HEADER_TABLE_SIZE
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
Failures:
Generic tests for HTTP/2 server
2. Streams and Multiplexing
using source address 127.0.0.1:59703
× 1: Sends a PRIORITY frame on idle stream
-> The endpoint MUST accept PRIORITY frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
using source address 127.0.0.1:59709
× 4: Sends a RST_STREAM frame on half-closed (remote) stream
-> The endpoint MUST accept RST_STREAM frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59711
× 5: Sends a PRIORITY frame on closed stream
-> The endpoint MUST accept PRIORITY frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
3. Frame Definitions
3.4. RST_STREAM
using source address 127.0.0.1:59735
× 1: Sends a RST_STREAM frame
-> The endpoint MUST accept RST_STREAM frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
3.7. PING
using source address 127.0.0.1:59739
× 1: Sends a PING frame
-> The endpoint MUST accept PING frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
3.8. GOAWAY
using source address 127.0.0.1:59742
× 1: Sends a GOAWAY frame
-> The endpoint MUST accept GOAWAY frame.
Expected: Connection closed
PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
3.9. WINDOW_UPDATE
using source address 127.0.0.1:59744
× 1: Sends a WINDOW_UPDATE frame with stream ID 0
-> The endpoint MUST accept WINDOW_UPDATE frame.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
3.10. CONTINUATION
using source address 127.0.0.1:59748
× 1: Sends a CONTINUATION frame
-> The endpoint MUST accept CONTINUATION frame.
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
using source address 127.0.0.1:59750
× 2: Sends multiple CONTINUATION frames
-> The endpoint MUST accept multiple CONTINUATION frames.
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
5. HPACK
using source address 127.0.0.1:59782
× 10: Sends a literal header field never indexed - indexed name
-> The endpoint MUST accept literal header field never indexed
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
using source address 127.0.0.1:59784
× 11: Sends a literal header field never indexed - indexed name (huffman encoded)
-> The endpoint MUST accept literal header field never indexed
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
using source address 127.0.0.1:59786
× 12: Sends a literal header field never indexed - new name
-> The endpoint MUST accept literal header field never indexed
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
using source address 127.0.0.1:59788
× 13: Sends a literal header field never indexed - new name (huffman encoded)
-> The endpoint MUST accept literal header field never indexed
Expected: HEADERS Frame (stream_id:1)
Actual: Connection closed
Hypertext Transfer Protocol Version 2 (HTTP/2)
4. HTTP Frames
4.1. Frame Format
using source address 127.0.0.1:59798
× 1: Sends a frame with unknown type
-> The endpoint MUST ignore and discard any frame that has a type that is unknown.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
using source address 127.0.0.1:59800
× 2: Sends a frame with undefined flag
-> The endpoint MUST ignore any flags that is undefined.
Expected: PING frame
Actual: Timeout
using source address 127.0.0.1:59802
× 3: Sends a frame with reserved field bit
-> The endpoint MUST ignore the value of reserved field.
Expected: PING frame
Actual: Timeout
4.2. Frame Size
using source address 127.0.0.1:59806
× 2: Sends a large size DATA frame that exceeds the SETTINGS_MAX_FRAME_SIZE
-> The endpoint MUST send an error code of FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: DATA Frame (length:4088, flags:0x01, stream_id:1)
4.3. Header Compression and Decompression
using source address 127.0.0.1:59812
× 2: Sends a PRIORITY frame while sending the header blocks
-> The endpoint MUST terminate the connection with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59815
× 3: Sends a HEADERS frame to another stream while sending the header blocks
-> The endpoint MUST terminate the connection with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:3)
5. Streams and Multiplexing
5.1. Stream States
using source address 127.0.0.1:59817
× 1: idle: Sends a DATA frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59819
× 2: idle: Sends a RST_STREAM frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59821
× 3: idle: Sends a WINDOW_UPDATE frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59825
× 5: half closed (remote): Sends a DATA frame
-> The endpoint MUST respond with a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59827
× 6: half closed (remote): Sends a HEADERS frame
-> The endpoint MUST respond with a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59829
× 7: half closed (remote): Sends a CONTINUATION frame
-> The endpoint MUST respond with a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59832
× 8: closed: Sends a DATA frame after sending RST_STREAM frame
-> The endpoint MUST treat this as a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59834
× 9: closed: Sends a HEADERS frame after sending RST_STREAM frame
-> The endpoint MUST treat this as a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59836
× 10: closed: Sends a CONTINUATION frame after sending RST_STREAM frame
-> The endpoint MUST treat this as a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59838
× 11: closed: Sends a DATA frame
-> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59840
× 12: closed: Sends a HEADERS frame
-> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59842
× 13: closed: Sends a CONTINUATION frame
-> The endpoint MUST treat this as a connection error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
5.1.1. Stream Identifiers
using source address 127.0.0.1:59844
× 1: Sends even-numbered stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:2)
using source address 127.0.0.1:59846
× 2: Sends stream identifier that is numerically smaller than previous
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:3)
5.1.2. Stream Concurrency
using source address 127.0.0.1:59849
× 1: Sends HEADERS frames that causes their advertised concurrent stream limit to be exceeded
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR or REFUSED_STREAM.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
GOAWAY Frame (Error Code: REFUSED_STREAM)
RST_STREAM Frame (Error Code: REFUSED_STREAM)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:201)
5.3. Stream Priority
5.3.1. Stream Dependencies
using source address 127.0.0.1:59851
× 1: Sends HEADERS frame that depends on itself
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59853
× 2: Sends PRIORITY frame that depend on itself
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
5.4. Error Handling
5.4.1. Connection Error Handling
using source address 127.0.0.1:59855
× 1: Sends an invalid PING frame for connection close
-> The endpoint MUST close the TCP connection
Expected: Connection closed
Actual: Timeout
5.5. Extending HTTP/2
using source address 127.0.0.1:59857
× 1: Sends an unknown extension frame
-> The endpoint MUST ignore unknown or unsupported values in all extensible protocol elements.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
using source address 127.0.0.1:59859
× 2: Sends an unknown extension frame in the middle of a header block
-> The endpoint MUST treat as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6. Frame Definitions
6.1. DATA
using source address 127.0.0.1:59861
× 1: Sends a DATA frame with 0x0 stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Error: connection error: PROTOCOL_ERROR
using source address 127.0.0.1:59863
× 2: Sends a DATA frame on the stream that is not in "open" or "half-closed (local)" state
-> The endpoint MUST respond with a stream error of type STREAM_CLOSED.
Expected: GOAWAY Frame (Error Code: STREAM_CLOSED)
RST_STREAM Frame (Error Code: STREAM_CLOSED)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6.2. HEADERS
using source address 127.0.0.1:59868
× 1: Sends a HEADERS frame without the END_HEADERS flag, and a PRIORITY frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59870
× 2: Sends a HEADERS frame to another stream while sending a HEADERS frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:3)
using source address 127.0.0.1:59872
× 3: Sends a HEADERS frame with 0x0 stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Error: connection error: PROTOCOL_ERROR
6.3. PRIORITY
using source address 127.0.0.1:59876
× 1: Sends a PRIORITY frame with 0x0 stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59878
× 2: Sends a PRIORITY frame with a length other than 5 octets
-> The endpoint MUST respond with a stream error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6.4. RST_STREAM
using source address 127.0.0.1:59880
× 1: Sends a RST_STREAM frame with 0x0 stream identifier
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59882
× 2: Sends a RST_STREAM frame on a idle stream
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59884
× 3: Sends a RST_STREAM frame with a length other than 4 octets
-> The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6.5. SETTINGS
using source address 127.0.0.1:59886
× 1: Sends a SETTINGS frame with ACK flag and payload
-> The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59889
× 2: Sends a SETTINGS frame with a stream identifier other than 0x0
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59891
× 3: Sends a SETTINGS frame with a length other than a multiple of 6 octets
-> The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
6.5.2. Defined SETTINGS Parameters
using source address 127.0.0.1:59893
× 1: SETTINGS_ENABLE_PUSH (0x2): Sends the value other than 0 or 1
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59895
× 2: SETTINGS_INITIAL_WINDOW_SIZE (0x4): Sends the value above the maximum flow control window size
-> The endpoint MUST treat this as a connection error of type FLOW_CONTROL_ERROR.
Expected: GOAWAY Frame (Error Code: FLOW_CONTROL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59897
× 3: SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value below the initial value
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59899
× 4: SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value above the maximum allowed frame size
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
using source address 127.0.0.1:59901
× 5: Sends a SETTINGS frame with unknown identifier
-> The endpoint MUST ignore that setting.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
6.5.3. Settings Synchronization
using source address 127.0.0.1:59904
× 1: Sends multiple values of SETTINGS_INITIAL_WINDOW_SIZE
-> The endpoint MUST process the values in the settings in the order they apper.
Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6.7. PING
using source address 127.0.0.1:59910
× 1: Sends a PING frame
-> The endpoint MUST sends a PING frame with ACK, with an identical payload.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
using source address 127.0.0.1:59912
× 2: Sends a PING frame with ACK
-> The endpoint MUST NOT respond to PING frames with ACK.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
using source address 127.0.0.1:59914
× 3: Sends a PING frame with a stream identifier field value other than 0x0
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59916
× 4: Sends a PING frame with a length field value other than 8
-> The endpoint MUST treat this as a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: Timeout
6.8. GOAWAY
using source address 127.0.0.1:59918
× 1: Sends a GOAWAY frame with a stream identifier other than 0x0
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
6.9. WINDOW_UPDATE
using source address 127.0.0.1:59920
× 1: Sends a WINDOW_UPDATE frame with a flow control window increment of 0
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59922
× 2: Sends a WINDOW_UPDATE frame with a flow control window increment of 0 on a stream
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
using source address 127.0.0.1:59924
× 3: Sends a WINDOW_UPDATE frame with a length other than 4 octets
-> The endpoint MUST treat this as a connection error of type FRAME_SIZE_ERROR.
Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
Connection closed
Actual: Timeout
6.9.1. The Flow-Control Window
using source address 127.0.0.1:59927
× 1: Sends SETTINGS frame to set the initial window size to 1 and sends HEADERS frame
-> The endpoint MUST NOT send a flow-controlled frame with a length that exceeds the space available.
Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59931
× 2: Sends multiple WINDOW_UPDATE frames increasing the flow control window to above 2^31-1
-> The endpoint MUST sends a GOAWAY frame with a FLOW_CONTROL_ERROR code.
Expected: GOAWAY Frame (Error Code: FLOW_CONTROL_ERROR)
Actual: Timeout
using source address 127.0.0.1:59933
× 3: Sends multiple WINDOW_UPDATE frames increasing the flow control window to above 2^31-1 on a stream
-> The endpoint MUST sends a RST_STREAM frame with a FLOW_CONTROL_ERROR code.
Expected: RST_STREAM Frame (Error Code: FLOW_CONTROL_ERROR)
Actual: Timeout
6.9.2. Initial Flow-Control Window Size
using source address 127.0.0.1:59935
× 1: Changes SETTINGS_INITIAL_WINDOW_SIZE after sending HEADERS frame
-> The endpoint MUST adjust the size of all stream flow-control windows.
Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59939
× 2: Sends a SETTINGS frame for window size to be negative
-> The endpoint MUST track the negative flow-control window.
Expected: DATA Frame (length:1, flags:0x00, stream_id:1)
Actual: Timeout
using source address 127.0.0.1:59943
× 3: Sends a SETTINGS_INITIAL_WINDOW_SIZE settings with an exceeded maximum window size value
-> The endpoint MUST treat this as a connection error of type FLOW_CONTROL_ERROR.
Expected: GOAWAY Frame (Error Code: FLOW_CONTROL_ERROR)
Connection closed
Actual: SETTINGS Frame (length:0, flags:0x01, stream_id:0)
6.10. CONTINUATION
using source address 127.0.0.1:59947
× 2: Sends a CONTINUATION frame followed by any frame other than CONTINUATION
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:5, flags:0x01, stream_id:1)
using source address 127.0.0.1:59951
× 4: Sends a CONTINUATION frame preceded by a HEADERS frame with END_HEADERS flag
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59953
× 5: Sends a CONTINUATION frame preceded by a CONTINUATION frame with END_HEADERS flag
-> The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
7. Error Codes
using source address 127.0.0.1:59958
× 1: Sends a GOAWAY frame with unknown error code
-> The endpoint MUST NOT trigger any special behavior.
Expected: Connection closed
PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:h2spec)
Actual: Timeout
using source address 127.0.0.1:59960
× 2: Sends a RST_STREAM frame with unknown error code
-> The endpoint MUST NOT trigger any special behavior.
Expected: PING Frame (length:8, flags:0x01, stream_id:0, opaque_data:)
Actual: Timeout
8. HTTP Message Exchanges
8.1. HTTP Request/Response Exchange
using source address 127.0.0.1:59962
× 1: Sends a second HEADERS frame without the END_STREAM flag
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:5, flags:0x01, stream_id:1)
8.1.2. HTTP Header Fields
using source address 127.0.0.1:59964
× 1: Sends a HEADERS frame that contains the header field name in uppercase letters
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
8.1.2.1. Pseudo-Header Fields
using source address 127.0.0.1:59966
× 1: Sends a HEADERS frame that contains a unknown pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59968
× 2: Sends a HEADERS frame that contains the pseudo-header field defined for response
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59970
× 3: Sends a HEADERS frame that contains a pseudo-header field as trailers
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:5, flags:0x01, stream_id:1)
using source address 127.0.0.1:59972
× 4: Sends a HEADERS frame that contains a pseudo-header field that appears in a header block after a regular header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
8.1.2.2. Connection-Specific Header Fields
using source address 127.0.0.1:59975
× 1: Sends a HEADERS frame that contains the connection-specific header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59977
× 2: Sends a HEADERS frame that contains the TE header field with any value other than "trailers"
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
8.1.2.3. Request Pseudo-Header Fields
using source address 127.0.0.1:59979
× 1: Sends a HEADERS frame with empty ":path" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59982
× 2: Sends a HEADERS frame that omits ":method" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59984
× 3: Sends a HEADERS frame that omits ":scheme" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59986
× 4: Sends a HEADERS frame that omits ":path" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59988
× 5: Sends a HEADERS frame with duplicated ":method" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59991
× 6: Sends a HEADERS frame with duplicated ":scheme" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:59993
× 7: Sends a HEADERS frame with duplicated ":path" pseudo-header field
-> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
8.1.2.6. Malformed Requests and Responses
using source address 127.0.0.1:59995
× 1: Sends a HEADERS frame with the "content-length" header field which does not equal the DATA frame payload length
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:5, flags:0x01, stream_id:1)
using source address 127.0.0.1:59998
× 2: Sends a HEADERS frame with the "content-length" header field which does not equal the sum of the multiple DATA frames payload length
-> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
RST_STREAM Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: DATA Frame (length:10, flags:0x01, stream_id:1)
8.2. Server Push
using source address 127.0.0.1:60000
× 1: Sends a PUSH_PROMISE frame
-> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
Connection closed
Actual: Timeout
HPACK: Header Compression for HTTP/2
2. Compression Process Overview
2.3. Indexing Tables
2.3.3. Index Address Space
using source address 127.0.0.1:60002
× 1: Sends a indexed header field representation with invalid index
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
4. Dynamic Table Management
4.2. Maximum Table Size
using source address 127.0.0.1:60006
× 1: Sends a dynamic table size update at the end of header block
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
5. Primitive Type Representations
5.2. String Literal Representation
using source address 127.0.0.1:60008
× 1: Sends a Huffman-encoded string literal representation with padding longer than 7 bits
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:60011
× 2: Sends a Huffman-encoded string literal representation padded by zero
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
using source address 127.0.0.1:60013
× 3: Sends a Huffman-encoded string literal representation containing the EOS symbol
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
6. Binary Format
6.3. Dynamic Table Size Update
using source address 127.0.0.1:60019
× 1: Sends a dynamic table size update larger than the value of SETTINGS_HEADER_TABLE_SIZE
-> The endpoint MUST treat this as a decoding error.
Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR)
Connection closed
Actual: DATA Frame (length:20, flags:0x01, stream_id:1)
Finished in 181.0516 seconds
146 tests, 45 passed, 0 skipped, 101 failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment