summerwind/h2spec

Skipping harmless frames

kazu-yamamoto opened this issue · 3 comments

Some test cases expect FRAME A but receive harmless frames such as WINDOW_UPDATE or PUSH_PROMISE, they fail:

  6. Frame Definitions
    6.1. DATA
      × 3: Sends a DATA frame with invalid pad length
        -> The endpoint MUST treat this as a connection error of type PROTOCOL_ERROR.
           Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR)
                     Connection closed
             Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0)

Thank you for the report!

In this case, h2spec expects a GOAWAY frame to be received or the connection to be terminated, but your implementation does not seem to have sent a GOAWAY frame or terminated the connection. WINDOW_UPDATE Frame indicates the last frame sent.

Could you please make sure that your implementation is as intended?
If your implementation is reasonable, please give me the results with the -v option.

I will double-check. But this test case sometime passes. So, a race exists. I guess that h2spec does not ignore WINDOWS_UPDATE and not wait for GOAWAY after that.

I guess that h2spec does not ignore WINDOWS_UPDATE and not wait for GOAWAY after that.

I know that if h2spec receives nothing, it will timeout, and IIUC, what @summerwind is saying here is that h2spec does wait after the WINDOW_UPDATE was received, but timed out before seeing a GOAWAY or RST_STREAM.

And in that case, it reports the last frame type received, which is a bit misleading in this particular case.