Mercurial > hg > nginx-tests
changeset 1143:b9d9c962255f
Tests: more large_client_header_buffers tests.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 01 Mar 2017 21:18:28 +0300 |
parents | baeebac35a2e |
children | 66c7dee0431c |
files | http_header_buffers.t |
diffstat | 1 files changed, 88 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/http_header_buffers.t Wed Mar 01 19:20:32 2017 +0300 +++ b/http_header_buffers.t Wed Mar 01 21:18:28 2017 +0300 @@ -24,7 +24,7 @@ select STDERR; $| = 1; select STDOUT; $| = 1; -my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(2) +my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(8) ->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% @@ -66,6 +66,17 @@ return 204; } + + server { + listen 127.0.0.1:8080; + server_name foo; + + large_client_header_buffers 5 256; + + add_header X-URI $uri; + add_header X-Foo $http_x_foo; + return 204; + } } EOF @@ -89,7 +100,8 @@ "X-Foo: " . ("1234567890" x 20) . CRLF . "X-Foo: " . ("1234567890" x 20) . CRLF . "X-Foo: " . ("1234567890" x 20) . CRLF . - "X-Foo: " . ("1234567890" x 20) . CRLF . CRLF + "X-Foo: " . ("1234567890" x 20) . CRLF . + CRLF ), qr/204|400/, 'additional buffers in virtual server'); # for pipelined requests large header buffers are saved to hc->free; @@ -104,12 +116,84 @@ "X-Foo: " . ("1234567890" x 20) . CRLF . "X-Foo: " . ("1234567890" x 20) . CRLF . "X-Foo: " . ("1234567890" x 20) . CRLF . - "Host: one" . CRLF . CRLF . + "Host: one" . CRLF . + CRLF . "GET / HTTP/1.1" . CRLF . "Host: one" . CRLF . - "Connection: close" . CRLF . CRLF + "Connection: close" . CRLF . + CRLF ), qr/204/, 'pipelined with too many buffers'); } +# check if long header and long request lines are correctly returned +# when nginx allocates a long header buffer + +like(http( + "GET / HTTP/1.0" . CRLF . + "Host: foo" . CRLF . + "X-Foo: foo" . ("1234567890" x 20) . "bar" . CRLF . + CRLF +), qr/X-Foo: foo(1234567890){20}bar/, 'long header'); + +like(http( + "GET /foo" . ("1234567890" x 20) . "bar HTTP/1.0" . CRLF . + "Host: foo" . CRLF . + CRLF +), qr!X-URI: /foo(1234567890){20}bar!, 'long request line'); + +# the same as the above, but with pipelining, so there is a buffer +# allocated in the previous request + +like(http( + "GET / HTTP/1.1" . CRLF . + "Host: foo" . CRLF . + "X-Foo: " . ("1234567890" x 20) . CRLF . + CRLF . + "GET / HTTP/1.1" . CRLF . + "Host: foo" . CRLF . + "Connection: close" . CRLF . + "X-Foo: foo" . ("1234567890" x 20) . "bar" . CRLF . + CRLF +), qr/X-Foo: foo(1234567890){20}bar/, 'long header after pipelining'); + +like(http( + "GET / HTTP/1.1" . CRLF . + "Host: foo" . CRLF . + "X-Foo: " . ("1234567890" x 20) . CRLF . + CRLF . + "GET /foo" . ("1234567890" x 20) . "bar HTTP/1.1" . CRLF . + "Host: foo" . CRLF . + "Connection: close" . CRLF . + CRLF +), qr!X-URI: /foo(1234567890){20}bar!, 'long request line after pipelining'); + +# the same as the above, but with keepalive; this ensures that previously +# allocated buffers are properly cleaned up when we set keepalive handler + +like(http( + "GET / HTTP/1.1" . CRLF . + "Host: foo" . CRLF . + "X-Foo: " . ("1234567890" x 20) . CRLF . + CRLF, +sleep => 0.1, body => + "GET / HTTP/1.1" . CRLF . + "Host: foo" . CRLF . + "Connection: close" . CRLF . + "X-Foo: foo" . ("1234567890" x 20) . "bar" . CRLF . + CRLF +), qr/X-Foo: foo(1234567890){20}bar/, 'long header after keepalive'); + +like(http( + "GET / HTTP/1.1" . CRLF . + "Host: foo" . CRLF . + "X-Foo: " . ("1234567890" x 20) . CRLF . + CRLF, +sleep => 0.1, body => + "GET /foo" . ("1234567890" x 20) . "bar HTTP/1.1" . CRLF . + "Host: foo" . CRLF . + "Connection: close" . CRLF . + CRLF +), qr!X-URI: /foo(1234567890){20}bar!, 'long request line after keepalive'); + ###############################################################################