view headers.t @ 1701:408fe0dd3fed

Tests: fixed mail_imap_ssl.t too long shutdown. Prior to literals support in IMAP test backend (e7f0b4ca0a1a), early backend response was treated as invalid, with subsequent proxy connection close. Now that the connection continues successfully, this requires connection close before nginx shutdown. Otherwise, it would wait for proxy_timeout.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 17 Jun 2021 19:52:36 +0300
parents 97c8280de681
children
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

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');

###############################################################################