Mercurial > hg > nginx-tests
changeset 1954:5cf0e07d63a1
Tests: tests for request body chunked extensions and trailers.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sat, 30 Mar 2024 07:48:42 +0300 |
parents | 33b54de4ee23 |
children | 0b1a671c20c1 |
files | body_chunked.t |
diffstat | 1 files changed, 64 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/body_chunked.t +++ b/body_chunked.t @@ -22,7 +22,7 @@ use Test::Nginx; select STDERR; $| = 1; select STDOUT; $| = 1; -my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(18); +my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(24); $t->write_file_expand('nginx.conf', <<'EOF'); @@ -68,6 +68,7 @@ http { } location /large { client_max_body_size 1k; + client_body_buffer_size 2k; proxy_pass http://127.0.0.1:8081; } location /discard { @@ -119,6 +120,8 @@ like(http_get_body('/single', '012345678 qr/X-Body: (0123456789){128}\x0d?$/ms, 'body in single buffer'); like(http_get_body('/large', '0123456789' x 128), qr/ 413 /, 'body too large'); +like(http_get_body('/large', 'X' x 1024), qr/ 200 /, 'body exact limit'); +like(http_get_body('/large', 'X' x 1025), qr/ 413 /, 'body just above limit'); # pipelined requests @@ -162,6 +165,66 @@ like( qr/400 Bad/, 'runaway chunk discard' ); +# chunk extensions and trailers + +like( + http( + 'GET /large HTTP/1.1' . CRLF + . 'Host: localhost' . CRLF + . 'Connection: close' . CRLF + . 'Transfer-Encoding: chunked' . CRLF . CRLF + . ('1; foo' . CRLF . 'X' . CRLF) x 16 + . '0' . CRLF . CRLF + ), + qr/ 200 /, 'chunk extensions' +); + +TODO: { +local $TODO = 'not yet' unless $t->has_version('1.25.5'); + +like( + http( + 'GET /large HTTP/1.1' . CRLF + . 'Host: localhost' . CRLF + . 'Connection: close' . CRLF + . 'Transfer-Encoding: chunked' . CRLF . CRLF + . ('1; foo' . CRLF . 'X' . CRLF) x 512 + . '0' . CRLF . CRLF + ), + qr/ 413 /, 'too many chunk extensions' +); + +} + +like( + http( + 'GET /large HTTP/1.1' . CRLF + . 'Host: localhost' . CRLF + . 'Connection: close' . CRLF + . 'Transfer-Encoding: chunked' . CRLF . CRLF + . '1' . CRLF . 'X' . CRLF + . '0' . CRLF . ('X-Trailer: foo' . CRLF) x 16 . CRLF + ), + qr/ 200 /, 'trailers' +); + +TODO: { +local $TODO = 'not yet' unless $t->has_version('1.25.5'); + +like( + http( + 'GET /large HTTP/1.1' . CRLF + . 'Host: localhost' . CRLF + . 'Connection: close' . CRLF + . 'Transfer-Encoding: chunked' . CRLF . CRLF + . '1' . CRLF . 'X' . CRLF + . '0' . CRLF . ('X-Trailer: foo' . CRLF) x 512 . CRLF + ), + qr/ 413 /, 'too many trailers' +); + +} + # proxy_next_upstream like(http_get_body('/next', '0123456789'),