# HG changeset patch # User Sergey Kandaurov # Date 1622110066 -10800 # Node ID 0d8531f744bce8432d2b4fb07ba5df6fe9e385b6 # Parent 29f0e926c15f70ef13451ba1e34156ef7d2b2e30 Tests: added Location header escaping tests (ticket #882). diff --git a/dav.t b/dav.t --- a/dav.t +++ b/dav.t @@ -21,7 +21,7 @@ use Test::Nginx; select STDERR; $| = 1; select STDOUT; $| = 1; -my $t = Test::Nginx->new()->has(qw/http dav/)->plan(27); +my $t = Test::Nginx->new()->has(qw/http dav/)->plan(28); $t->write_file_expand('nginx.conf', <<'EOF'); @@ -108,6 +108,21 @@ like($r, qr/201 Created.*(Content-Length is(-s $t->testdir() . '/file', 10, 'put file extra data size'); +TODO: { +local $TODO = 'not yet' unless $t->has_version('1.21.0'); + +$r = http(<testdir() . '/dir'); +mkdir($t->testdir() . '/dir sp'); -$t->run()->plan(10); +$t->run()->plan(18); ############################################################################### @@ -91,17 +100,63 @@ my $p = port(8080); like(get('on', '/dir'), qr!Location: http://on:$p/dir/\x0d?$!m, 'directory'); like(get('on', '/i/dir'), qr!Location: http://on:$p/i/dir/\x0d?$!m, 'directory alias'); + +TODO: { +local $TODO = 'not yet' unless $t->has_version('1.21.0'); + +like(get('on', '/dir%20sp'), qr!Location: http://on:$p/dir%20sp/\x0d?$!m, + 'directory escaped'); +like(get('on', '/dir%20sp?a=b'), + qr!Location: http://on:$p/dir%20sp/\?a=b\x0d?$!m, + 'directory escaped args'); + +} + like(get('on', '/auto'), qr!Location: http://on:$p/auto/\x0d?$!m, 'auto'); like(get('on', '/auto?a=b'), qr!Location: http://on:$p/auto/\?a=b\x0d?$!m, 'auto args'); + +TODO: { +local $TODO = 'not yet' unless $t->has_version('1.21.0'); + +like(get('on', '/auto%20sp'), qr!Location: http://on:$p/auto%20sp/\x0d?$!m, + 'auto escaped'); +like(get('on', '/auto%20sp?a=b'), + qr!Location: http://on:$p/auto%20sp/\?a=b\x0d?$!m, + 'auto escaped args'); + +} + like(get('on', '/return301'), qr!Location: http://on:$p/redirect\x0d?$!m, 'return'); like(get('off', '/dir'), qr!Location: /dir/\x0d?$!m, 'off directory'); like(get('off', '/i/dir'), qr!Location: /i/dir/\x0d?$!m, 'off directory alias'); + +TODO: { +local $TODO = 'not yet' unless $t->has_version('1.21.0'); + +like(get('off', '/dir%20sp'), qr!Location: /dir%20sp/\x0d?$!m, + 'off directory escaped'); +like(get('off', '/dir%20sp?a=b'), qr!Location: /dir%20sp/\?a=b\x0d?$!m, + 'off directory escaped args'); + +} + like(get('off', '/auto'), qr!Location: /auto/\x0d?$!m, 'off auto'); like(get('off', '/auto?a=b'), qr!Location: /auto/\?a=b\x0d?$!m, 'off auto args'); + +TODO: { +local $TODO = 'not yet' unless $t->has_version('1.21.0'); + +like(get('off', '/auto%20sp'), qr!Location: /auto%20sp/\x0d?$!m, + 'auto escaped'); +like(get('off', '/auto%20sp?a=b'), qr!Location: /auto%20sp/\?a=b\x0d?$!m, + 'auto escaped args'); + +} + like(get('off', '/return301'), qr!Location: /redirect\x0d?$!m, 'off return'); ###############################################################################