view sub_filter.t @ 391:915ef26ac6eb

Tests: fix proxy_unfinished.t failures with big buffers. With newer systems it becomes common to use huge socket buffers, and the "no proxy temp" test may unexpectedly fail because disk buffering will not be used. To reduce this possibility, the "listen ... sndbuf=32k" was added. Additionally, regular expression was changed to silently allow full responses.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 15 Apr 2014 22:04:08 +0400
parents e9de4da234c0
children 847ea345becb
line wrap: on
line source

#!/usr/bin/perl

# (C) Maxim Dounin

# Tests for sub filter.

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

use warnings;
use strict;

use Test::More;

use Socket qw/ CRLF /;

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 rewrite sub/)->plan(14)
	->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;

        sub_filter_types *;
        sub_filter foo bar;

        location / {
        }

        location /once {
            return 200 $arg_b;
        }

        location /many {
            sub_filter_once off;
            return 200 $arg_b;
        }

        location /complex {
            sub_filter abac _replaced;
            return 200 $arg_b;
        }

        location /complex2 {
            sub_filter ababX _replaced;
            return 200 $arg_b;
        }

        location /complex3 {
            sub_filter aab _replaced;
            return 200 $arg_b;
        }
    }
}

EOF

$t->write_file('foo.html', 'foo');
$t->write_file('foofoo.html', 'foofoo');
$t->run();

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

like(http_get('/foo.html'), qr/bar/, 'sub_filter');
like(http_get('/foofoo.html'), qr/barfoo/, 'once default');

like(http_get('/once?b=foofoo'), qr/barfoo/, 'once');
like(http_get('/many?b=foofoo'), qr/barbar/, 'many');

TODO: {
local $TODO = 'not yet' unless $t->has_version('1.5.3');

like(http_get('/many?b=fo'), qr/fo/, 'incomplete');
like(http_get('/many?b=foofo'), qr/barfo/, 'incomplete long');

}

like(http_get('/complex?b=abac'), qr/_replaced/, 'complex');
like(http_get('/complex?b=abaabac'), qr/aba_replaced/, 'complex 1st char');

TODO: {
local $TODO = 'not yet' unless $t->has_version('1.5.3');

like(http_get('/complex?b=ababac'), qr/replaced/, 'complex 2nd char');

}

like(http_get('/complex2?b=ababX'), qr/_replaced/, 'complex2');

TODO: {
local $TODO = 'not yet' unless $t->has_version('1.5.3');

like(http_get('/complex2?b=abababX'), qr/ab_replaced/, 'complex2 long');

}

like(http_get('/complex3?b=aab'), qr/_replaced/, 'complex3 aab in aab');

TODO: {
local $TODO = 'not yet' unless $t->has_version('1.5.3');

like(http_get('/complex3?b=aaab'), qr/a_replaced/, 'complex3 aab in aaab');

}

like(http_get('/complex3?b=aaaab'), qr/aa_replaced/, 'complex3 aab in aaaab');

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