Mercurial > hg > nginx-tests
view stream_limit_conn.t @ 972:313e3f1905d4
Tests: set SO_REUSEADDR for parallel tests unless win32.
It was removed in 0641f83d5721 but it does work on other platforms as expected.
author | Andrey Zelenkov <zelenkov@nginx.com> |
---|---|
date | Mon, 11 Jul 2016 15:12:30 +0300 |
parents | e9064d691790 |
children | 882267679006 |
line wrap: on
line source
#!/usr/bin/perl # (C) Andrey Zelenkov # (C) Nginx, Inc. # Tests for stream limit_conn module. ############################################################################### use warnings; use strict; use Test::More; 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 stream stream_limit_conn shmem/) ->plan(8)->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% daemon off; events { } stream { limit_conn_zone $binary_remote_addr zone=zone:1m; limit_conn_zone $binary_remote_addr zone=zone2:1m; server { listen 127.0.0.1:%%PORT_0%%; proxy_pass 127.0.0.1:%%PORT_4%%; limit_conn zone 1; } server { listen 127.0.0.1:%%PORT_5%%; proxy_pass 127.0.0.1:%%PORT_4%%; limit_conn zone 5; } server { listen 127.0.0.1:%%PORT_1%%; proxy_pass 127.0.0.1:%%PORT_4%%; limit_conn zone2 1; } server { listen 127.0.0.1:%%PORT_2%%; proxy_pass 127.0.0.1:%%PORT_0%%; limit_conn zone2 1; } server { listen 127.0.0.1:%%PORT_3%%; proxy_pass 127.0.0.1:%%PORT_0%%; limit_conn zone 1; } } http { %%TEST_GLOBALS_HTTP%% server { listen 127.0.0.1:%%PORT_4%%; server_name localhost; location / { } } } EOF $t->write_file('index.html', ''); $t->run(); ############################################################################### like(get(), qr/200 OK/, 'passed'); # same and other zones my $s = http(<<EOF, start => 1, sleep => 0.2); GET / HTTP/1.0 EOF ok($s, 'long connection'); is(get(), undef, 'rejected same zone'); like(get('127.0.0.1:' . port(1)), qr/200 OK/, 'passed different zone'); like(get('127.0.0.1:' . port(5)), qr/200 OK/, 'passed same zone unlimited'); ok(http(<<EOF, socket => $s), 'long connection closed'); Host: localhost EOF # zones proxy chain like(get('127.0.0.1:' . port(2)), qr/200 OK/, 'passed proxy'); is(get('127.0.0.1:' . port(3)), undef, 'rejected proxy'); ############################################################################### sub get { my $peer = shift; my $r = http_get('/', socket => getconn($peer)); if (!$r) { $r = undef; } return $r; } sub getconn { my $peer = shift; my $s = IO::Socket::INET->new( Proto => 'tcp', PeerAddr => $peer || '127.0.0.1:' . port(0) ) or die "Can't connect to nginx: $!\n"; return $s; } ###############################################################################