aboutsummaryrefslogtreecommitdiffstats
path: root/test/rfc7540_SUITE.erl
AgeCommit message (Collapse)Author
2020-11-06Fix IsFin mismatch in HTTP/2 CONNECT responseLoïc Hoguin
The response ends when the tunnel is established, even if the stream itself does not. The data coming in on the stream after is not part of the response. This makes both HTTP/1.1 and HTTP/2 send 'fin' to successful CONNECT responses.
2020-10-16Add or fix events inside or related to CONNECT tunnelsLoïc Hoguin
2020-10-07Propagate timeouts to the right layer in HTTP/2 tunnelsLoïc Hoguin
This temporarily depends on Cowlib master.
2020-10-03Add tunnel_SUITE testing all 3-layer combinationsLoïc Hoguin
The test suite is 216 tests with a tunnel created via two proxies leading to one origin server. The tests are for example socks5_h2_https where socks5 identifies the first SOCKS5 proxy, h2 the second HTTP/2 CONNECT proxy and https the secure HTTP/1.1 origin server. The test not only sets up the tunnel and does a request (or sends/receives data in the case of raw origin servers) but also confirms that the stream_info and info data is correct.
2020-09-21Initial success for h2 CONNECT -> https CONNECT -> httpsLoïc Hoguin
2020-09-21Add test HTTP/2 CONNECT -> HTTP/1.1 CONNECT -> originLoïc Hoguin
Implements gun:connect with a tunnel.
2020-09-21Add more HTTP/2 CONNECT testsLoïc Hoguin
2020-09-21Few more tests and fixesLoïc Hoguin
2020-09-21Add gun_tunnel_up message to HTTP/2 CONNECTLoïc Hoguin
2020-09-21First working HTTPS over secure HTTP/2Loïc Hoguin
Has a timer:sleep/1 though because there is currently no way to wait for the TLS handshake to complete.
2020-09-21Make HTTP/2 CONNECT to a SOCKS server workLoïc Hoguin
2020-09-21Add HTTP/2 CONNECT tests with Cowboy as originLoïc Hoguin
2020-09-21Add the base_stream_ref to gun_http/gun_http2Loïc Hoguin
2020-09-21HTTP/2 over HTTP/2 CONNECTLoïc Hoguin
2020-09-21Make gun:stream_info/2 return intermediaries for HTTP/2 CONNECTLoïc Hoguin
2020-09-21Initial HTTP/2 CONNECT implementationLoïc Hoguin
2020-03-26Fix IPv6 related changes to testsLoïc Hoguin
Turns out we can't rely on IPv4 being available if we set the socket in IPv6 mode. Instead the origin is modified to either setup IPv4 or IPv6 depending on the test's needs.
2020-03-25Fix host/:authority header when connecting to an IPv6 addressLoïc Hoguin
2020-02-27Use specific error when HTTP/2 receives HTTP/1 responseLoïc Hoguin
2020-02-27Add a test getting preface errors in the 'DOWN' reasonLoïc Hoguin
2020-02-27Detect invalid HTTP/2 preface errorsLoïc Hoguin
And make sure all HTTP/2 connection_error(s) result in a gun_down message containing the error. In the preface case we do not send a gun_error message (because there's no stream open yet) and gun_down was always saying normal. Also make sure the human readable reason is included in the gun_error message, if any.
2020-02-10Handle cow_http2_machine timeoutsLoïc Hoguin
2019-09-22Add Socks5->HTTP/2 testsLoïc Hoguin
Also consolidate the ALPN code in the tls_handshake state rather than doing it in CONNECT/Socks separately. Also improves the origin tests by sending a message once the handshake is completed instead of having timeouts.
2019-09-13Use cow_http2_machine:ensure_windowLoïc Hoguin
Gun was very inefficient at receiving HTTP/2 bodies. Switching to ensure_window and increasing the default window sizes brings the response body reading performance at least on par with the one for HTTP/1.1. This has a small negative impact on message flow control because we stop updating the window later than we did before, increasing the number of extra messages we may send. The exact amount depends on configuration and the exact moment flow control kicks in.
2019-09-06Fix failing tests caused by DATA no longer being sentLoïc Hoguin
2019-09-05Implement graceful shutdownLoïc Hoguin
The graceful shutdown is implemented through a new 'closing' state. This state is entered under different circumstances depending on the protocol. The gun:shutdown/1 function is now implemented and documented. It allows shutting down the connection gracefully regardless of the current state of the connection and for all protocols. The behavior is entirely dependent on the protocol. For HTTP/1.1 the connection stays up only until after the current stream is complete; other streams are immediately canceled. For HTTP/2 a GOAWAY frame is sent and existing streams continue to be processed. The connection is closed after all streams are processed and the server's GOAWAY frame is received. For Websocket a close frame is sent. The connection is closed when receiving the server's close frame. In all cases the closing_timeout option defines how long we wait, as a maximum, before closing the connection after the graceful shutdown was started. The graceful shutdown is also initiated when the owner process goes away; when sending an HTTP/1.1 request with the connection: close header; when receiving an HTTP/1.1 response with the connection: close header; when receiving an HTTP/1.0 response without a connection header; when the server sends a GOAWAY HTTP/2 frame; or when we send or receive a Websocket close frame. Along with these changes, the gun:ws_send/2 function now accepts a list of frames as argument. Those frames may include a close frame that initiates the graceful shutdown.
2019-07-26Data received after RST_STREAM counts toward windowTony Han
2019-04-22Fix two tests that write to the Gun state directlyLoïc Hoguin
2019-01-03Update copyright yearsLoïc Hoguin
2019-01-03Consolidate origin server test helpersLoïc Hoguin
Also fixes an issue with switch_transport introduced when converting the Gun process to gen_statem.
2019-01-02Don't send the default port in the host header for HTTP/2Loïc Hoguin
2018-09-26Add a timer:sleep to make a test pass reliablyLoïc Hoguin
2018-09-26Don't crash on HEADERS frames with PRIORITY flag setLoïc Hoguin