Mercurial > hg > nginx-tests
annotate proxy_cache_lock_ssi.t @ 570:f7bc1f74970a
Tests: avoid send errors in syslog tests with mail error_log.
Use a separate mail server block for syslog parsing tests to make sure
that syslog messages are always read by the receiver on the remote side.
Otherwise, syslog message might not be sent due to a pending socket error.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 07 May 2015 14:28:44 +0300 |
parents | 907e89fba9c3 |
children | 2cd00179f4b2 |
rev | line source |
---|---|
504
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Tests for http proxy cache lock with subrequests. |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 BEGIN { use FindBin; chdir($FindBin::Bin); } |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 use lib 'lib'; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 use Test::Nginx qw/ :DEFAULT http_end /; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 ############################################################################### |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 select STDERR; $| = 1; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 select STDOUT; $| = 1; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 plan(skip_all => 'win32') if $^O eq 'MSWin32'; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http proxy cache ssi/) |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 ->write_file_expand('nginx.conf', <<'EOF')->plan(2); |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 %%TEST_GLOBALS%% |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 daemon off; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 events { |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 } |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 http { |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 %%TEST_GLOBALS_HTTP%% |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 proxy_cache_path %%TESTDIR%%/cache levels=1:2 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 keys_zone=NAME:1m; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 limit_req_zone $binary_remote_addr zone=one:1m rate=1r/m; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 server { |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 listen 127.0.0.1:8080; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 server_name localhost; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 location / { |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 proxy_pass http://127.0.0.1:8081; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 proxy_cache NAME; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 proxy_cache_lock on; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 proxy_cache_lock_timeout 100ms; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 proxy_read_timeout 2s; |
547
714668aea2b0
Tests: adjusted proxy_cache_lock tests with subrequests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
506
diff
changeset
|
56 |
714668aea2b0
Tests: adjusted proxy_cache_lock tests with subrequests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
506
diff
changeset
|
57 add_header X-Msec $msec; |
504
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 } |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 location = /ssi.html { |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 ssi on; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 } |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 } |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 server { |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 listen 127.0.0.1:8081; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 server_name localhost; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 limit_req zone=one burst=5; |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 } |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 } |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 EOF |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 $t->write_file('ssi.html', |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 '<!--#include virtual="/active" -->' . |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 '<!--#include virtual="/locked" -->' . |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 'end' |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 ); |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 $t->write_file('active', 'active'); |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 $t->write_file('locked', 'locked'); |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 $t->run(); |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 ############################################################################### |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 # problem: if proxy cache lock wakeup happens in a an inactive |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 # subrequest, just a connection write event may not trigger any |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 # further work |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 # main request -> subrequest /active (waiting for a backend), |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 # -> subrequest /locked (locked by another request) |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 # this doesn't result in an infinite timeout as second subrequest |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 # is woken up by the postpone filter once first subrequest completes, |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 # but this is suboptimal behaviour |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 my $s = http_get('/locked', start => 1); |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 like(http_get('/ssi.html'), qr/end/, 'cache lock ssi'); |
547
714668aea2b0
Tests: adjusted proxy_cache_lock tests with subrequests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
506
diff
changeset
|
101 my ($start) = http_end($s) =~ /X-Msec: (\d+)/; |
504
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 cmp_ok(time() - $start, '<=', 3, 'parallel execution after lock timeout'); |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 |
318f305a2014
Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 ############################################################################### |