Mercurial > hg > nginx-tests
diff rewrite.t @ 141:1e1975cd25ef
Tests: error_page and return related tests, dav tests.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 02 Nov 2010 06:49:42 +0300 |
parents | 8ac1faaddd2c |
children | d732aaa5f370 |
line wrap: on
line diff
--- a/rewrite.t +++ b/rewrite.t @@ -21,7 +21,7 @@ use Test::Nginx; select STDERR; $| = 1; select STDOUT; $| = 1; -my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(5) +my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(17) ->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% @@ -50,11 +50,74 @@ http { location /no { rewrite ^ http://example.com/?c=d? redirect; } + + location /return204 { + return 204; + } + + location /return200 { + return 200; + } + + location /error405return204 { + error_page 405 /return204; + return 405; + } + + location /error405return200 { + error_page 405 /return200; + return 405; + } + + location /file.html { + } + + location /return200text { + return 200 "text"; + } + + location /return404text { + return 404 "text"; + } + + location /return302text { + return 302 "text"; + } + + location /error405return200text { + error_page 405 /return200text; + return 405; + } + + location /error302return200text { + error_page 302 /return200text; + return 302 "text"; + } + + location /error405return302text { + error_page 405 /return302text; + return 405; + } + + location /error405rewrite { + error_page 405 /; + return 405; + } + + location /error405directory { + error_page 405 /directory; + return 405; + } + + location /directory { + } } } EOF +mkdir($t->testdir() . '/directory'); + $t->run(); ############################################################################### @@ -71,4 +134,84 @@ like(http_get('/add?a=b'), qr!^Location: like(http_get('/no?a=b'), qr!^Location: http://example.com/\?c=d\x0d?$!ms, 'no args with args'); +like(http_get('/return204'), qr!204 No Content!, 'return 204'); +like(http_get('/return200'), qr!200 OK!, 'return 200'); + +TODO: { +local $TODO = 'not yet'; + +# status code should be 405, and entity body is expected (vs. normal 204 +# replies which doesn't expect to have body); use HTTP/1.1 for test +# to make problem clear + +my $r = http(<<EOF); +GET /error405return204 HTTP/1.1 +Host: localhost +Connection: close + +EOF + +like($r, qr/HTTP\/1.1 405.*(Content-Length|\x0d\0a0\x0d\x0a)/ms, + 'error 405 return 204'); + +# the same test, but with return 200. this doesn't have special +# handling and returns builtin error page body (the same problem as +# in /error405return200text below) + +like(http_get('/error405return200'), qr/HTTP\/1.1 405(?!.*body)/ms, + 'error 405 return 200'); + +} + +# tests involving return with two arguments, as introduced in +# 0.8.42 + +like(http_get('/return200text'), qr!text\z!, 'return 200 text'); +like(http_get('/return404text'), qr!text\z!, 'return 404 text'); + +TODO: { +local $TODO = 'not yet'; + +like(http_get('/error405return200text'), qr!HTTP/1.1 405.*text\z!ms, + 'error 405 to return 200 text'); + +} + +# return 302 is somewhat special: it adds Location header instead of +# body text. additionally it doesn't sent reply directly (as it's done for +# other returns since 0.8.42) but instead returns NGX_HTTP_* code + +like(http_get('/return302text'), qr!HTTP/1.1 302.*Location: text!ms, + 'return 302 text'); + +TODO: { +local $TODO = 'not yet'; + +like(http_get('/error302return200text'), + qr!HTTP/1.1 302.*Location: text.*text\z!ms, + 'error 302 return 200 text'); + +} + +TODO: { +local $TODO = 'not yet'; + +# in contrast to other return's this shouldn't preserve original status code +# from error, and the same applies to "rewrite ... redirect" as an error +# handler; both should in line with e.g. directory redirect as well + +like(http_get('/error405return302text'), + qr!HTTP/1.1 302.*Location: text!ms, + 'error 405 return 302 text'); + +like(http_get('/error405rewrite'), + qr!HTTP/1.1 302.*Location: http://example.com/!ms, + 'error 405 rewrite redirect'); + +} + +like(http_get('/error405directory'), + qr!HTTP/1.1 301.*Location: http://!ms, + 'error 405 directory redirect'); + ###############################################################################