Mercurial > hg > nginx-tests
view proxy.t @ 1088:83b7b3f8b6c5
Tests: added HTTP/2 tests with auth_request (ticket #1143).
Previously, a request body bigger than "client_body_buffer_size"
might result in sending corrupted body or cause a segfault.
author | Andrey Zelenkov <zelenkov@nginx.com> |
---|---|
date | Tue, 06 Dec 2016 15:19:27 +0300 |
parents | cbc8641a204e |
children | 41690e007ad8 |
line wrap: on
line source
#!/usr/bin/perl # (C) Maxim Dounin # Tests for http proxy module. ############################################################################### use warnings; use strict; use Test::More; use Socket; BEGIN { use FindBin; chdir($FindBin::Bin); } use lib 'lib'; use Test::Nginx; ############################################################################### select STDERR; $| = 1; select STDOUT; $| = 1; my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(7); $t->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% daemon off; events { } http { %%TEST_GLOBALS_HTTP%% upstream u { server 127.0.0.1:8081; } server { listen 127.0.0.1:8080; server_name localhost; location / { proxy_pass http://127.0.0.1:8081; proxy_read_timeout 1s; proxy_connect_timeout 2s; } location /var { proxy_pass http://$arg_b; proxy_read_timeout 1s; proxy_connect_timeout 2s; } location /timeout { proxy_pass http://127.0.0.1:8081; proxy_connect_timeout 2s; } } } EOF $t->run_daemon(\&http_daemon); $t->run()->waitforsocket('127.0.0.1:' . port(8081)); ############################################################################### like(http_get('/'), qr/SEE-THIS/, 'proxy request'); like(http_get('/multi'), qr/AND-THIS/, 'proxy request with multiple packets'); unlike(http_head('/'), qr/SEE-THIS/, 'proxy head request'); like(http_get('/var?b=127.0.0.1:' . port(8081) . '/'), qr/SEE-THIS/, 'proxy with variables'); like(http_get('/var?b=u/'), qr/SEE-THIS/, 'proxy with variables to upstream'); SKIP: { skip 'no ipv6', 1 unless $t->has_module('ipv6') and socket(my $s, &AF_INET6, &SOCK_STREAM, 0); TODO: { todo_skip 'heap-buffer-overflow', 1 unless $ENV{TEST_NGINX_UNSAFE} or $t->has_version('1.11.0'); ok(http_get("/var?b=[::]"), 'proxy with variables - no ipv6 port'); } } like(http_get('/timeout'), qr/200 OK/, 'proxy connect timeout'); ############################################################################### sub http_daemon { my $server = IO::Socket::INET->new( Proto => 'tcp', LocalHost => '127.0.0.1:' . port(8081), Listen => 5, Reuse => 1 ) or die "Can't create listening socket: $!\n"; local $SIG{PIPE} = 'IGNORE'; while (my $client = $server->accept()) { $client->autoflush(1); my $headers = ''; my $uri = ''; while (<$client>) { $headers .= $_; last if (/^\x0d?\x0a?$/); } $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i; if ($uri eq '/') { print $client <<'EOF'; HTTP/1.1 200 OK Connection: close EOF print $client "TEST-OK-IF-YOU-SEE-THIS" unless $headers =~ /^HEAD/i; } elsif ($uri eq '/multi') { print $client <<"EOF"; HTTP/1.1 200 OK Connection: close TEST-OK-IF-YOU-SEE-THIS EOF select undef, undef, undef, 0.1; print $client 'AND-THIS'; } elsif ($uri eq '/timeout') { sleep 3; print $client <<"EOF"; HTTP/1.1 200 OK Connection: close EOF } else { print $client <<"EOF"; HTTP/1.1 404 Not Found Connection: close Oops, '$uri' not found EOF } close $client; } } ###############################################################################