Mercurial > hg > nginx-tests
view proxy_cache_lock_ssi.t @ 607:97e88eff1433
Tests: proxy cache lock tests adjusted similar to 28a8248740ca.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 16 Jun 2015 12:58:54 +0300 |
parents | e36b267021e3 |
children | 1d1eaf5ce064 |
line wrap: on
line source
#!/usr/bin/perl # (C) Maxim Dounin # Tests for http proxy cache lock with subrequests. ############################################################################### use warnings; use strict; use Test::More; BEGIN { use FindBin; chdir($FindBin::Bin); } use lib 'lib'; use Test::Nginx qw/ :DEFAULT http_end /; ############################################################################### select STDERR; $| = 1; select STDOUT; $| = 1; my $t = Test::Nginx->new()->has(qw/http proxy cache ssi shmem/) ->write_file_expand('nginx.conf', <<'EOF')->plan(2); %%TEST_GLOBALS%% daemon off; events { } http { %%TEST_GLOBALS_HTTP%% proxy_cache_path %%TESTDIR%%/cache levels=1:2 keys_zone=NAME:1m; limit_req_zone $binary_remote_addr zone=one:1m rate=1r/m; server { listen 127.0.0.1:8080; server_name localhost; location / { proxy_pass http://127.0.0.1:8081; proxy_cache NAME; proxy_cache_lock on; proxy_cache_lock_timeout 100ms; proxy_read_timeout 2s; add_header X-Msec $msec; } location = /ssi.html { ssi on; } } server { listen 127.0.0.1:8081; server_name localhost; limit_req zone=one burst=5; } } EOF $t->write_file('ssi.html', '<!--#include virtual="/active" -->' . '<!--#include virtual="/locked" -->' . 'end' ); $t->write_file('active', 'active'); $t->write_file('locked', 'locked'); $t->run(); ############################################################################### # problem: if proxy cache lock wakeup happens in a an inactive # subrequest, just a connection write event may not trigger any # further work # main request -> subrequest /active (waiting for a backend), # -> subrequest /locked (locked by another request) # this doesn't result in an infinite timeout as second subrequest # is woken up by the postpone filter once first subrequest completes, # but this is suboptimal behaviour my $s = http_get('/locked', start => 1); like(http_get('/ssi.html'), qr/end/, 'cache lock ssi'); my ($start) = http_end($s) =~ /X-Msec: (\d+)/; cmp_ok(time() - $start, '<=', 3, 'parallel execution after lock timeout'); ###############################################################################