Mercurial > hg > nginx-tests
view headers.t @ 1236:93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Previously, when checking ports availability, a UDP socket was always created
first, then a TCP socket was created. On success, one of UDP and TCP sockets
was closed (depending on the "udp" option) and the second one was used to busy
this port in other scripts. This lead to the following problem: in an attempt
to reopen a UDP socket used in a given testing script it could be stolen by
another script as part of checking ports availability.
To solve this problem, UDP and TCP ports were split into two non-overlapping
ranges: TCP ports are only used in the range 8000-8499, and UDP ports - in
the range 8500-8999. In addition, the order of creating sockets in UDP tests
has been reversed: now a TCP socket used as a lock precedes a UDP socket.
author | Andrey Zelenkov <zelenkov@nginx.com> |
---|---|
date | Thu, 26 Oct 2017 18:00:21 +0300 |
parents | 0469ef3fcd34 |
children | 97c8280de681 |
line wrap: on
line source
#!/usr/bin/perl # (C) Sergey Kandaurov # (C) Maxim Dounin # (C) Nginx, Inc. # Tests for headers 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 proxy/)->plan(28) ->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% daemon off; events { } http { %%TEST_GLOBALS_HTTP%% server { listen 127.0.0.1:8080; server_name localhost; add_header X-URI $uri; add_header X-Always $uri always; add_header ETag foo always; add_header ETag '' always; expires epoch; location /t1 { } location /nx { } location /epoch { expires epoch; } location /max { expires max; } location /off { expires off; } location /access { expires 2048; location /access_inner { # inherited from outer } } location /negative { expires -2048; } location /daily { expires @15h30m33s; } location /modified { expires modified 2048; location /modified/proxy { proxy_pass http://127.0.0.1:8081/modified; } } location /var { expires $arg_e; location /var_inner { # inherited from outer } location /var_modified { expires modified $arg_e; } } } server { listen 127.0.0.1:8081; server_name localhost; add_header Last-Modified "Mon, 28 Sep 1970 06:00:00 GMT"; } } EOF $t->write_file('t1', ''); $t->write_file('epoch', ''); $t->write_file('max', ''); $t->write_file('off', ''); $t->write_file('access', ''); $t->write_file('access_inner', ''); $t->write_file('negative', ''); $t->write_file('daily', ''); $t->write_file('modified', ''); $t->write_file('var', ''); $t->write_file('var_inner', ''); $t->write_file('var_modified', ''); $t->run(); ############################################################################### my $r; # test for header field presence $r = http_get('/t1'); like($r, qr/Cache-Control/, 'good expires'); like($r, qr/X-URI/, 'good add_header'); like($r, qr/X-Always/, 'good add_header always'); unlike($r, qr/ETag/, 'good add_header always empty'); $r = http_get('/nx'); unlike($r, qr/Cache-Control/, 'bad expires'); unlike($r, qr/X-URI/, 'bad add_header'); like($r, qr/X-Always/, 'bad add_header always'); unlike($r, qr/ETag/, 'bad add_header always empty'); # various expires variants like(http_get('/epoch'), qr/Expires:.*1970/, 'expires epoch'); like(http_get('/max'), qr/Expires:.*2037/, 'expires max'); unlike(http_get('/off'), qr/Expires:/, 'expires off'); like(http_get('/access'), qr/max-age=2048/, 'expires access'); like(http_get('/access_inner'), qr/max-age=2048/, 'expires inner'); like(http_get('/negative'), qr/no-cache/, 'expires negative'); like(http_get('/daily'), qr/Expires:.*:33 GMT/, 'expires daily'); like(http_get('/modified'), qr/max-age=204./, 'expires modified'); # "expires modified" with proxy TODO: { local $TODO = 'not yet' unless $t->has_version('1.13.5'); like(http_get('/modified/proxy'), qr/Expires: Mon, 28 Sep 1970 06:34:08 GMT/, 'expires modified proxy'); } # expires with variables like(http_get('/var?e=epoch'), qr/Expires:.*1970/, 'expires var epoch'); like(http_get('/var?e=max'), qr/Expires:.*2037/, 'expires var max'); unlike(http_get('/var?e=off'), qr/Expires:/, 'expires var off'); like(http_get('/var?e=2048'), qr/max-age=2048/, 'expires var access'); like(http_get('/var_inner?e=2048'), qr/max-age=2048/, 'expires var inner'); like(http_get('/var?e=-2048'), qr/no-cache/, 'expires var negative'); like(http_get('/var?e=@33s'), qr/Expires:.*:33 GMT/, 'expires var daily'); like(http_get('/var_modified?e=2048'), qr/max-age=204./, 'expires var modified'); # some invalid cases unlike(http_get('/var'), qr/Expires/, 'expires var empty'); unlike(http_get('/var?e=bad'), qr/Expires/, 'expires var bad'); unlike(http_get('/var_modified?e=epoch'), qr/Expires/, 'expires var modified epoch'); ###############################################################################