| #!/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 |
| |
| 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'); |
| |
| ############################################################################### |