  3.5. HTTP/2 Connection Preface
      Sends invalid connection preface
    ✓ Sends invalid connection preface

  4.2. Frame Size
      Sends large size frame that exceeds the SETTINGS_MAX_FRAME_SIZE
    ✓ Sends large size frame that exceeds the SETTINGS_MAX_FRAME_SIZE

  4.3. Header Compression and Decompression
      Sends invalid header block fragment
    ✓ Sends invalid header block fragment
      Sends Dynamic Table Size Update (RFC 7541, 6.3)
    ✓ Sends Dynamic Table Size Update (RFC 7541, 6.3)
      Encodes Dynamic Table Size Update (RFC 7541, 6.3) after common header fields
    × Encodes Dynamic Table Size Update (RFC 7541, 6.3) after common header fields
      - The endpoint MUST terminate the connection with a connection error of type COMPRESSION_ERROR.
        Expected: GOAWAY frame (ErrorCode: COMPRESSION_ERROR)
                  Connection close
          Actual: DATA frame (Length: 22, Flags: 1)

  5.1. Stream States
      idle: Sends a DATA frame
    ✓ idle: Sends a DATA frame
      idle: Sends a RST_STREAM frame
    ✓ idle: Sends a RST_STREAM frame
      idle: Sends a WINDOW_UPDATE frame
    ✓ idle: Sends a WINDOW_UPDATE frame
      idle: Sends a CONTINUATION frame
    ✓ idle: Sends a CONTINUATION frame
      half closed (remote): Sends a DATA frame
    × half closed (remote): Sends a DATA frame
      - The endpoint MUST respond with a stream error (Section 5.4.2) of type STREAM_CLOSED.
        Expected: GOAWAY frame (ErrorCode: STREAM_CLOSED)
                  RST_STREAM frame (ErrorCode: STREAM_CLOSED)
                  Connection close
          Actual: WINDOW_UPDATE frame (Length: 4, Flags: 0)
      half closed (remote): Sends a HEADERS frame
    × half closed (remote): Sends a HEADERS frame
      - The endpoint MUST respond with a stream error (Section 5.4.2) of type STREAM_CLOSED.
        Expected: GOAWAY frame (ErrorCode: STREAM_CLOSED)
                  RST_STREAM frame (ErrorCode: STREAM_CLOSED)
                  Connection close
          Actual: DATA frame (Length: 22, Flags: 1)
      half closed (remote): Sends a CONTINUATION frame
    × half closed (remote): Sends a CONTINUATION frame
      - The endpoint MUST respond with a stream error (Section 5.4.2) of type STREAM_CLOSED.
        Expected: GOAWAY frame (ErrorCode: STREAM_CLOSED)
                  RST_STREAM frame (ErrorCode: STREAM_CLOSED)
                  GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: DATA frame (Length: 22, Flags: 1)
      closed: Sends a CONTINUATION frame
    × closed: Sends a CONTINUATION frame
      - The endpoint MUST treat this as a stream error (Section 5.4.2) of type STREAM_CLOSED.
        Expected: GOAWAY frame (ErrorCode: STREAM_CLOSED)
                  RST_STREAM frame (ErrorCode: STREAM_CLOSED)
                  GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: Test timeout

    5.1.1. Stream Identifiers
        Sends even-numbered stream identifier
      ✓ Sends even-numbered stream identifier

    5.1.2. Stream Concurrency
        Sends HEADERS frames that causes their advertised concurrent stream limit to be exceeded
      × Sends HEADERS frames that causes their advertised concurrent stream limit to be exceeded
        - The endpoint MUST treat this as a stream error (Section 5.4.2) of type PROTOCOL_ERROR or REFUSED_STREAM
          Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                    RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                    GOAWAY frame (ErrorCode: REFUSED_STREAM)
                    RST_STREAM frame (ErrorCode: REFUSED_STREAM)
                    Connection close
            Actual: HEADERS frame (Length: 3, Flags: 4)

  5.3. Stream Priority
    5.3.1. Stream Dependencies
        Sends HEADERS frame that depend on itself
      × Sends HEADERS frame that depend on itself
        - The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR
          Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                    RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                    Connection close
            Actual: DATA frame (Length: 22, Flags: 1)
        Sends PRIORITY frame that depend on itself
      × Sends PRIORITY frame that depend on itself
        - The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR
          Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                    RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                    Connection close
            Actual: Test timeout

  5.5. Extending HTTP/2
      Sends an unknown extension frame
    ✓ Sends an unknown extension frame
      Sends an unknown extension frame in the middle of a header block
    × 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 (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: Test timeout

  6.1. DATA
      Sends a DATA frame with 0x0 stream identifier
    ✓ Sends a DATA frame with 0x0 stream identifier
      Sends a DATA frame on the stream that is not in "open" or "half-closed (local)" state
    × 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 (Section 5.4.2) of type STREAM_CLOSED.
        Expected: GOAWAY frame (ErrorCode: STREAM_CLOSED)
                  RST_STREAM frame (ErrorCode: STREAM_CLOSED)
                  Connection close
          Actual: WINDOW_UPDATE frame (Length: 4, Flags: 0)
      Sends a DATA frame with invalid pad length
    ✓ Sends a DATA frame with invalid pad length

  6.2. HEADERS
      Sends a HEADERS frame followed by any frame other than CONTINUATION
    ✓ Sends a HEADERS frame followed by any frame other than CONTINUATION
      Sends a HEADERS frame followed by a frame on a different stream
    × Sends a HEADERS frame followed by a frame on a different stream
      - The endpoint MUST treat the receipt of a frame on a different stream as a connection error of type PROTOCOL_ERROR.
        Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: Test timeout
      Sends a HEADERS frame with 0x0 stream identifier
    ✓ Sends a HEADERS frame with 0x0 stream identifier
      Sends a HEADERS frame with invalid pad length
    ✓ Sends a HEADERS frame with invalid pad length

  6.3. PRIORITY
      Sends a PRIORITY frame with 0x0 stream identifier
    ✓ Sends a PRIORITY frame with 0x0 stream identifier
      Sends a PRIORITY frame with a length other than 5 octets
    × 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 (ErrorCode: FRAME_SIZE_ERROR)
                  RST_STREAM frame (ErrorCode: FRAME_SIZE_ERROR)
                  Connection close
          Actual: GOAWAY frame (Length: 8, Flags: 0, ErrorCode: PROTOCOL_ERROR)

  6.4. RST_STREAM
      Sends a RST_STREAM frame with 0x0 stream identifier
    ✓ Sends a RST_STREAM frame with 0x0 stream identifier
      Sends a RST_STREAM frame on a idle stream
    ✓ Sends a RST_STREAM frame on a idle stream
      Sends a RST_STREAM frame with a length other than 4 octets
    × 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 (ErrorCode: FRAME_SIZE_ERROR)
                  Connection close
          Actual: GOAWAY frame (Length: 8, Flags: 0, ErrorCode: PROTOCOL_ERROR)

  6.5. SETTINGS
      Sends a SETTINGS frame
    ✓ Sends a SETTINGS frame
      Sends a SETTINGS frame that is not a zero-length with ACK flag
    ✓ Sends a SETTINGS frame that is not a zero-length with ACK flag
      Sends a SETTINGS frame with the stream identifier that is not 0x0
    ✓ Sends a SETTINGS frame with the stream identifier that is not 0x0
      Sends a SETTINGS frame with a length other than a multiple of 6 octets
    ✓ Sends a SETTINGS frame with a length other than a multiple of 6 octets

    6.5.2. Defined SETTINGS Parameters
        SETTINGS_ENABLE_PUSH (0x2): Sends the value other than 0 or 1
      ✓ SETTINGS_ENABLE_PUSH (0x2): Sends the value other than 0 or 1
        SETTINGS_INITIAL_WINDOW_SIZE (0x4): Sends the value above the maximum flow control window size
      × SETTINGS_INITIAL_WINDOW_SIZE (0x4): Sends the value above the maximum flow control window size
        - The endpoint MUST respond with a connection error of type FLOW_CONTROL_ERROR.
          Expected: GOAWAY frame (ErrorCode: FLOW_CONTROL_ERROR)
                    Connection close
            Actual: GOAWAY frame (Length: 8, Flags: 0, ErrorCode: PROTOCOL_ERROR)
        SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value below the initial value
      ✓ SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value below the initial value
        SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value above the maximum allowed frame size
      ✓ SETTINGS_MAX_FRAME_SIZE (0x5): Sends the value above the maximum allowed frame size

  6.7. PING
      Sends a PING frame
    ✓ Sends a PING frame
      Sends a PING frame with the stream identifier that is not 0x0
    × Sends a PING frame with the stream identifier that is not 0x0
      - The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
        Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: PING frame (Length: 8, Flags: 1)
      Sends a PING frame with a length field value other than 8
    ✓ Sends a PING frame with a length field value other than 8

  6.8. GOAWAY
      Sends a GOAWAY frame with the stream identifier that is not 0x0
    × Sends a GOAWAY frame with the stream identifier that is not 0x0
      - The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
        Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: Test timeout

  6.9. WINDOW_UPDATE
      Sends a WINDOW_UPDATE frame
    × Sends a WINDOW_UPDATE frame
      - The endpoint is expected to send the DATA frame based on the window size.
        Expected: DATA frame
          Actual: Test timeout
      Sends a WINDOW_UPDATE frame with a flow control window increment of 0
    × Sends a WINDOW_UPDATE frame with a flow control window increment of 0
      - The endpoint MUST respond with a connection error of type PROTOCOL_ERROR.
        Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: Test timeout
      Sends a WINDOW_UPDATE frame with a flow control window increment of 0 on a stream
    × Sends a WINDOW_UPDATE frame with a flow control window increment of 0 on a stream
      - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
        Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: SETTINGS frame (Length: 0, Flags: 1)
      Sends a WINDOW_UPDATE frame with a length other than a multiple of 4 octets
    × Sends a WINDOW_UPDATE frame with a length other than a multiple of 4 octets
      - The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
        Expected: GOAWAY frame (ErrorCode: FRAME_SIZE_ERROR)
                  Connection close
          Actual: GOAWAY frame (Length: 8, Flags: 0, ErrorCode: PROTOCOL_ERROR)

    6.9.1. The Flow Control Window
        Sends multiple WINDOW_UPDATE frames on a connection increasing the flow control window to above 2^31-1
      × Sends multiple WINDOW_UPDATE frames on a connection 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 (ErrorCode: FLOW_CONTROL_ERROR)
            Actual: Test timeout
        Sends multiple WINDOW_UPDATE frames on a stream increasing the flow control window to above 2^31-1
      × Sends multiple WINDOW_UPDATE frames on a stream increasing the flow control window to above 2^31-1
        - The endpoint MUST send a RST_STREAM with the error code of FLOW_CONTROL_ERROR code.
          Expected: RST_STREAM frame (ErrorCode: FLOW_CONTROL_ERROR)
                    GOAWAY frame (ErrorCode: FLOW_CONTROL_ERROR)
            Actual: Test timeout

    6.9.2. Initial Flow Control Window Size
        Sends a SETTINGS_INITIAL_WINDOW_SIZE settings with an exceeded maximum window size value
      × Sends a SETTINGS_INITIAL_WINDOW_SIZE settings with an exceeded maximum window size value
        - The endpoint MUST respond with a connection error of type FLOW_CONTROL_ERROR.
          Expected: GOAWAY frame (ErrorCode: FLOW_CONTROL_ERROR)
                    Connection close
            Actual: GOAWAY frame (Length: 8, Flags: 0, ErrorCode: PROTOCOL_ERROR)

  6.10. CONTINUATION
      Sends a CONTINUATION frame
    ✓ Sends a CONTINUATION frame
      Sends multiple CONTINUATION frames
    ✓ Sends multiple CONTINUATION frames
      Sends a CONTINUATION frame followed by any frame other than CONTINUATION
    × Sends a CONTINUATION frame followed by any frame other than CONTINUATION
      - The endpoint MUST treat as a connection error of type PROTOCOL_ERROR.
        Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: Test timeout
      Sends a CONTINUATION frame followed by a frame on a different stream
    ✓ Sends a CONTINUATION frame followed by a frame on a different stream
      Sends a CONTINUATION frame with the stream identifier that is 0x0
    ✓ Sends a CONTINUATION frame with the stream identifier that is 0x0
      Sends a CONTINUATION frame after the frame other than HEADERS, PUSH_PROMISE or CONTINUATION
    × Sends a CONTINUATION frame after the frame other than HEADERS, PUSH_PROMISE or CONTINUATION
      - The endpoint MUST treat as a connection error of type PROTOCOL_ERROR.
        Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: WINDOW_UPDATE frame (Length: 4, Flags: 0)

  8.1. HTTP Request/Response Exchange
      Sends a HEADERS frame as HEAD request
    × Sends a HEADERS frame as HEAD request
      - The endpoint should respond with no DATA frame or empty DATA frame.
        Expected: HEADERS frame (Flags: 1)
                  DATA frame (Length: 0, Flags: 1)
          Actual: DATA frame (Length: 22, Flags: 1)
      Sends a HEADERS frame containing trailer part
    ✓ Sends a HEADERS frame containing trailer part
      Sends a second HEADERS frame without the END_STREAM flag
    × 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 (ErrorCode: PROTOCOL_ERROR)
                  RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                  Connection close
          Actual: WINDOW_UPDATE frame (Length: 4, Flags: 0)

    8.1.2. HTTP Header Fields
        Sends a HEADERS frame that contains the header field name in uppercase letters
      × 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 (ErrorCode: PROTOCOL_ERROR)
                    RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                    Connection close
            Actual: DATA frame (Length: 22, Flags: 1)

      8.1.2.1. Pseudo-Header Fields
          Sends a HEADERS frame that contains the pseudo-header field defined for response
        × 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 (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)
          Sends a HEADERS frame that contains the invalid pseudo-header field
        × Sends a HEADERS frame that contains the invalid pseudo-header field
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)
          Sends a HEADERS frame that contains a pseudo-header field that appears in a header block after a regular header field
        × 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 (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)

      8.1.2.2. Connection-Specific Header Fields
          Sends a HEADERS frame that contains the connection-specific header field
        × 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 (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)
          Sends a HEADERS frame that contains the TE header field that contain any value other than "trailers"
        × Sends a HEADERS frame that contains the TE header field that contain any value other than "trailers"
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)

      8.1.2.3. Request Pseudo-Header Fields
          Sends a HEADERS frame that omits mandatory pseudo-header fields
        × Sends a HEADERS frame that omits mandatory pseudo-header fields
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)
          Sends a HEADERS frame that omits just ':method' pseudo-header field.
        × Sends a HEADERS frame that omits just ':method' pseudo-header field.
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)
          Sends a HEADERS frame that omits just ':scheme' pseudo-header field.
        × Sends a HEADERS frame that omits just ':scheme' pseudo-header field.
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)
          Sends a HEADERS frame that omits just ':path' pseudo-header field.
        × Sends a HEADERS frame that omits just ':path' pseudo-header field.
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)
          Sends a HEADERS frame containing more than one pseudo-header fields with the same name
        × Sends a HEADERS frame containing more than one pseudo-header fields with the same name
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 22, Flags: 1)

      8.1.2.6. Malformed Requests and Responses
          Sends a HEADERS frame that contains the "content-length" header field which does not equal the sum of the DATA frame payload lengths
        × Sends a HEADERS frame that contains the "content-length" header field which does not equal the sum of the DATA frame payload lengths
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 29, Flags: 1)
          Sends a HEADERS frame that contains the "content-length" header field which does not equal the sum of the multiple DATA frame payload lengths
        × Sends a HEADERS frame that contains the "content-length" header field which does not equal the sum of the multiple DATA frame payload lengths
          - The endpoint MUST respond with a stream error of type PROTOCOL_ERROR.
            Expected: GOAWAY frame (ErrorCode: PROTOCOL_ERROR)
                      RST_STREAM frame (ErrorCode: PROTOCOL_ERROR)
                      Connection close
              Actual: DATA frame (Length: 33, Flags: 1)

  8.2. Server Push
      Sends a PUSH_PROMISE frame
    ✓ Sends a PUSH_PROMISE frame

73 tests, 33 passed, 0 skipped, 40 failed
