Mercurial > hg > nginx-tests
diff http-error-page.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 | |
children | fd865ada95c8 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/http-error-page.t @@ -0,0 +1,137 @@ +#!/usr/bin/perl + +# (C) Maxim Dounin + +# Tests for error_page directive. + +############################################################################### + +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 rewrite/)->plan(7) + ->write_file_expand('nginx.conf', <<'EOF'); + +%%TEST_GLOBALS%% + +master_process off; +daemon off; + +events { +} + +http { + %%TEST_GLOBALS_HTTP%% + + server { + listen 127.0.0.1:8080; + server_name localhost; + + location /redirect200 { + error_page 404 =200 http://example.com/; + return 404; + } + + location /redirect497 { + # 497 implies implicit status code change + error_page 497 https://example.com/; + return 497; + } + + location /error302redirect { + error_page 302 http://example.com/; + return 302 "first"; + } + + location /error302return302text { + error_page 302 /return302text; + return 302 "first"; + } + + location /return302text { + return 302 "http://example.com/"; + } + + location /error302rewrite { + error_page 302 /rewrite; + return 302 "first"; + } + + location /rewrite { + rewrite ^ http://example.com/; + } + + location /error302directory { + error_page 302 /directory; + return 302 "first"; + } + + location /directory { + } + + location /error302auto { + error_page 302 /auto; + return 302 "first"; + } + + location /auto/ { + proxy_pass http://127.0.0.1:8081; + } + } +} + +EOF + +mkdir($t->testdir() . '/directory'); + +$t->run(); + +############################################################################### + +TODO: { +local $TODO = 'not yet'; + +# tests for error_page status code change for redirects. problems +# introduced in 0.8.53. + +like(http_get('/redirect200'), qr!HTTP!, 'redirect 200'); +like(http_get('/redirect497'), qr!HTTP/1.1 302!, 'redirect 497'); + +# various tests to see if old location cleared if we happen to redirect +# again in error_page 302 + +like(http_get('/error302redirect'), + qr{HTTP/1.1 302(?!.*Location: first).*Location: http://example.com/}ms, + 'error 302 redirect - old location cleared'); + +like(http_get('/error302return302text'), + qr{HTTP/1.1 302(?!.*Location: first).*Location: http://example.com/}ms, + 'error 302 return 302 text - old location cleared'); + +like(http_get('/error302rewrite'), + qr{HTTP/1.1 302(?!.*Location: first).*Location: http://example.com/}ms, + 'error 302 rewrite - old location cleared'); + +like(http_get('/error302directory'), + qr{HTTP/1.1 301(?!.*Location: first).*Location: http://}ms, + 'error 302 directory redirect - old location cleared'); + +like(http_get('/error302auto'), + qr{HTTP/1.1 301(?!.*Location: first).*Location: http://}ms, + 'error 302 auto redirect - old location cleared'); + +} + +###############################################################################