Mercurial > hg > nginx-tests
changeset 525:13eafeb7d9cb
Tests: some filter_finalize tests.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 24 Feb 2015 18:11:42 +0300 |
parents | 084f8c8cb648 |
children | e6817a00ba00 |
files | image_filter_finalize.t |
diffstat | 1 files changed, 154 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/image_filter_finalize.t Tue Feb 24 18:11:42 2015 +0300 @@ -0,0 +1,154 @@ +#!/usr/bin/perl + +# (C) Maxim Dounin + +# Tests for http filter finalize code. + +############################################################################### + +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; + +plan(skip_all => 'win32') if $^O eq 'MSWin32'; + +my $t = Test::Nginx->new() + ->has(qw/http proxy cache image_filter limit_req rewrite/)->plan(4) + ->write_file_expand('nginx.conf', <<'EOF'); + +%%TEST_GLOBALS%% + +daemon off; + +events { +} + +http { + %%TEST_GLOBALS_HTTP%% + + proxy_cache_path %%TESTDIR%%/cache keys_zone=cache:1m; + + limit_req_zone $binary_remote_addr zone=limit:1m rate=50r/m; + + log_format time "$request_uri:$status:$upstream_response_time"; + access_log time.log time; + + upstream u { + server 127.0.0.1:8081; + server 127.0.0.1:8081; + server 127.0.0.1:8081; + server 127.0.0.1:8081; + server 127.0.0.1:8080; + } + + server { + listen 127.0.0.1:8080; + server_name localhost; + + # this used to cause a segmentation fault before 07f028df3879 (1.3.1) + # http://nginx.org/pipermail/nginx/2011-January/024703.html + + location /t1 { + proxy_pass http://127.0.0.1:8080/bad; + proxy_cache cache; + proxy_cache_valid any 1h; + + image_filter resize 150 100; + error_page 415 = /empty; + } + + location /empty { + return 204; + } + + location /bad { + return 404; + } + + # another segfault, introduced in 204b780a89de (1.3.0), + # fixed in 07f028df3879 (1.3.1) + + location /t2 { + proxy_pass http://127.0.0.1:8080/big; + proxy_store on; + + image_filter_buffer 10m; + image_filter resize 150 100; + error_page 415 = /empty; + } + + location /big { + # big enough static file + } + + # filter finalization may cause duplicate upstream finalization, + # resulting in wrong $upstream_response time, + # http://nginx.org/pipermail/nginx-devel/2015-February/006539.html + + # note that we'll need upstream response time to be at least 1 second, + # and at least 4 failed requests to make sure r->upstream_states will + # not be reallocated + + location /t3 { + proxy_pass http://u/slow; + proxy_buffering off; + + image_filter resize 150 100; + error_page 415 = /upstream; + } + + location /slow { + limit_req zone=limit burst=5; + } + + location /upstream { + proxy_pass http://127.0.0.1:8080/empty; + } + + location /time.log { + # access to log + } + } + + server { + listen 127.0.0.1:8081; + server_name localhost; + return 444; + } +} + +EOF + +$t->write_file('big', "x" x 10240000); +$t->write_file('slow', "x"); + +$t->run(); + +############################################################################### + +like(http_get('/t1'), qr/HTTP/, 'image filter and cache'); +like(http_get('/t2'), qr/HTTP/, 'image filter and store'); + +TODO: { +local $TODO = 'not yet'; + +http_get('/slow'); +http_get('/t3'); +like(http_get('/time.log'), qr!/t3:.*, 1\.!, 'upstream response time'); + +} + +like(`grep -F '[alert]' ${\($t->testdir())}/error.log`, qr/^$/s, 'no alerts'); + +###############################################################################