aboutsummaryrefslogtreecommitdiffstats
path: root/test
AgeCommit message (Collapse)Author
2024-04-05Add VU#421644 to the HTTP/2 CONTINUATION Flood testHEADmasterLoïc Hoguin
2024-03-26Initial HTTP/3 implementationhttp3Loïc Hoguin
This includes Websocket over HTTP/3. Since quicer, which provides the QUIC implementation, is a NIF, Cowboy cannot depend directly on it. In order to enable QUIC and HTTP/3, users have to set the COWBOY_QUICER environment variable: export COWBOY_QUICER=1 In order to run the test suites, the same must be done for Gun: export GUN_QUICER=1 HTTP/3 support is currently not available on Windows due to compilation issues of quicer which have yet to be looked at or resolved. HTTP/3 support is also unavailable on the upcoming OTP-27 due to compilation errors in quicer dependencies. Once resolved HTTP/3 should work on OTP-27. Because of how QUIC currently works, it's possible that streams that get reset after sending a response do not receive that response. The test suite was modified to accomodate for that. A future extension to QUIC will allow us to gracefully reset streams. This also updates Erlang.mk.
2024-03-14Add max_fragmented_header_block_size HTTP/2 optionLoïc Hoguin
2024-01-25Refresh copyright linesLoïc Hoguin
2024-01-23Fix match_qs with constraints when key is not presentgeeksilva97
Original fix by Ali Farhadi <[email protected]>.
2024-01-18Reduce sleep in chunked_one_byte_at_a_timeLoïc Hoguin
To avoid having the connection get closed due to us taking too long on unreliable environments like GitHub Actions.
2024-01-18Retry the read_urlencoded_body_too_large if timeout triggersLoïc Hoguin
This is caused by the timeout being 1s after the period. When the CI environment is overloaded, sometimes the timeout will trigger. We retry, knowing that the timetrap will catch us if we retry too much.
2024-01-17Improve reliability of a few testsLoïc Hoguin
GitHub Actions runners are not as good as self-hosted BuildKite so some adjustments need to be made to timeouts and such.
2024-01-16REST: Allow generate_etag to return undefinedLoïc Hoguin
This allows conditionally generating an etag.
2024-01-16Confirm Websocket pong frames are received by handlersLoïc Hoguin
2024-01-16Fix an intermittent test failureLoïc Hoguin
2024-01-15Reject responses with explicit set-cookie headergeeksilva97
LH: The tests received a lot of fixes and tweaking. I also reworded the error message to be more concise.
2024-01-15Fix wrong HTTP/1 timeout being used in some casesLoïc Hoguin
Added many tests to ensure the right timeout is picked in the appropriate situation. Should there be any issues remaining we can add more tests.
2024-01-09Better error message when trying to reply twiceLoïc Hoguin
Also crash if trying to push after a reply was sent.
2024-01-09Improve the error when trying to send a 204/304 with a bodyLoïc Hoguin
2024-01-08Document body reading in auto modeLoïc Hoguin
It is now tested both via cowboy_req:read_body and via cowboy_req:cast. Removes a bad example from the guide of body reading with period of infinity, which does not work.
2024-01-08Ensure HTTP/1.1 Websocket resets the trap_exit flagLoïc Hoguin
While we are identified as a supervisor in the tree, we no longer manage children processes at that point, so do not need to trap exit signals. Users can still enable trap_exit if they prefer to.
2024-01-08Always add vary: accept-encoding in cowboy_compress_hLoïc Hoguin
We must add it even if we don't end up compressing because it indicates that we might. This indication doesn't mean that the user agent's accept-encoding values will ever result in content encoding being applied.
2024-01-05Reject HTTP/1 requests with both content-length and transfer-encodingLoïc Hoguin
The previous behavior was to accept them and drop the content-length header as per the RFC recommendation. But since this behavior is not normal it is safer to just reject such requests than risk security issues.
2024-01-05Don't automatically compress when response has etagLoïc Hoguin
In the cowboy_compress_h stream handler. Otherwise this could cause issues with caching, with the etag being the same for compressed/uncompressed content. Users that wish to send etags AND compress will have to do it manually for the time being.
2024-01-05Add cowboy:get_env/2,3Loïc Hoguin
2024-01-04Rework and improve the decompress stream handlerLoïc Hoguin
The read buffer was changed into an iovec to avoid doing too many binary concatenations and allocations. Decompression happens transparently: when decoding gzip, the content-encoding header is removed (we only decode when "gzip" is the only encoding so nothing remains). We always add a content_decoded key to the Req object. This key contains a list of codings that were decoded, in the reverse order in which they were. Currently it can only be empty or contain <<"gzip">> but future improvements or user handlers may see it contain more values. The option to disable decompression was renamed to decompress_enabled and defaults to true. It is no longer possible to enable/disable decompression in the middle of reading the body: this ensures that the data we pass forward is always valid. Various smaller improvements were made to the code, tests and manual pages.
2023-12-21Add cowboy_decompress_h stream handlerjdamanalo
2023-12-21Exit gracefully on {error,closed} when reading the PROXY headerNelson Vides
LH: Simplified the test a little.
2023-12-21Optionally reset the idle timeout when sending dataRobert J. Macomber
A new option reset_idle_timeout_on_send has been added. When set to 'true', the idle timeout is reset not only when data is received, but also when data is sent. This allows sending large responses without having to worry about timeouts triggering. The default is currently unchanged but might change in a future release. LH: Greatly reworked the implementation so that the timeout gets reset on almost all socket writes. This essentially completely supersets the original work. Tests are mostly the same although I refactored a bit to avoid test code duplication. This commit also changes HTTP/2 behavior a little when data is received: Cowboy will not attempt to update the window before running stream handler commands to avoid sending WINDOW_UPDATE frames twice. Now it has some small heuristic to ensure they can only be sent once at most.
2023-12-19Shave off a few more seconds from rfc7540_SUITELoïc Hoguin
2023-12-18Explicitly close the socket in some tests for speed upsLoïc Hoguin
The socket staying open meant that the graceful shut down of the Cowboy listeners were waiting for the connections to be closed gracefully (or a timeout). Closing explicitly where it makes sense ensures we don't unnecessarily wait. This commit removes a full minute in the run time of all Cowboy test suites (minus examples).
2023-12-18Fix shutdown for HTTP/1.1 pipelineDmitri Vereshchagin
Sending extra response prevented by terminating all streams except the one currently executing. LH: Reworded some variables to make what happens more obvious.
2023-12-15Reject invalid Connection headerBoris Pozdnyakov
LH: Small tweaks and added an HTTP/1.0 test.
2023-12-15Increase loop_handler_timeout timeoutsLoïc Hoguin
It seems that macOS GH runners don't do timeouts well.
2023-12-15Add timeout to cowboy_loopjdamanalo
LH: I have added a test that does both hibernate and timeout and fixed a related issue. I also tweaked the docs and tests.
2023-12-15Fix static_handler suite code pathLoïc Hoguin
A future OTP release will use 'strict' code path by default. This change ensures it works both for old and new OTP.
2023-12-14Change send_timeout_close test to accomodate macOSLoïc Hoguin
2023-12-12Handle socket errors in HTTP/1.1 and HTTP/2Loïc Hoguin
Doing so will let us notice when the connection is gone instead of waiting for timeouts, at least in the cases where the remote socket was closed properly. Timeouts are still needed in case of TCP half-open problems. This change means that the order of stream handler commands is more important than before because socket errors may occur during the processing of commands.
2023-12-12Add test for send_timeout_closeSergei Shuvatov
LH: I reworked the test a little and added the same test for HTTP/2 so that both HTTP/1.1 and HTTP/2 get the issue fixed.
2023-12-07Note that we won't implement the HTTP/2 PRIORITY mechanismLoïc Hoguin
2023-12-07Add UTF-8 support to example file_serverlin
LH: I have fixed issues in the PR and incorporated changes from a sister PR by @djankovic (git author: Dom J). I also made sure the UTF-8 files were readable without Chinese fonts and added their downloading to the examples test suite.
2023-12-06Fix typos in documentationKian-Meng, Ang
2023-12-06Add 'max_cancel_stream_rate' config for the rapid reset attackViktor Söderqvist
Co-authored-by: Björn Svensson <[email protected]>
2023-12-01Use init_per_suite instead of all/0 for init in tracer_SUITELoïc Hoguin
2023-12-01Reduce CT logs size in a couple test casesLoïc Hoguin
2023-11-23Don't force verify client cert in testsLoïc Hoguin
This makes req_SUITE's cert_undefined test work again.
2023-03-30Fix tests with serialised mapsLoïc Hoguin
The key order of serialised maps changed in OTP-26.
2023-03-30Fix TLS tests for OTP-26+Loïc Hoguin
ct_helper now uses the test certificates generated by public_key. A few adjustments had to be made as a result.
2023-03-30Fix OTP-26+ warnings in test suitesLoïc Hoguin
2023-03-29Update Cowlib to 2.12.1Loïc Hoguin
2023-03-29Fix tests for OTP-25+Loïc Hoguin
2022-09-19Update Erlang.mkLoïc Hoguin
2020-11-27AcceptCallback may now return created/see_other tuples for POSTMartin Björklund
They replace and deprecate the {true,URI} return value.
2020-11-27Graceful shutdownViktor Söderqvist
Note: This commit makes cowboy depend on cowlib master. Graceful shutdown for HTTP/2: 1. A GOAWAY frame with the last stream id set to 2^31-1 is sent and a timer is started (goaway_initial_timeout, default 1000ms), to wait for any in-flight requests sent by the client, and the status is set to 'closing_initiated'. If the client responds with GOAWAY and closes the connection, we're done. 2. A second GOAWAY frame is sent with the actual last stream id and the status is set to 'closing'. If no streams exist, the connection terminates. Otherwise a second timer (goaway_complete_timeout, default 3000ms) is started, to wait for the streams to complete. New streams are not accepted when status is 'closing'. 3. If all streams haven't completed after the second timeout, the connection is forcefully terminated. Graceful shutdown for HTTP/1.x: 1. If a request is currently being handled, it is waited for and the response is sent back to the client with the header "Connection: close". Then, the connection is closed. 2. If the current request handler is not finished within the time configured in transport option 'shutdown' (default 5000ms), the connection process is killed by its supervisor (ranch). Implemented for HTTP/1.x and HTTP/2 in the following scenarios: * When receiving exit signal 'shutdown' from the supervisor (e.g. when cowboy:stop_listener/3 is called). * When a connection process is requested to terminate using sys:terminate/2,3. LH: Edited tests a bit and added todos for useful tests to add.