annotate proxy_cache_lock_ssi.t @ 540:481d705b8610

Tests: SSL support in mail backends. Socket is now embedded into every mail module. Socket methods are wrapped where appropriate. The new "SSL" extra flag specifies to accept connection over SSL.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 03 Apr 2015 00:11:38 +0300
parents 5baf4b01cae4
children 714668aea2b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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;
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 }
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 location = /ssi.html {
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 ssi on;
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 }
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 }
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 server {
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 listen 127.0.0.1:8081;
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 server_name localhost;
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 limit_req zone=one burst=5;
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 }
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
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 EOF
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 $t->write_file('ssi.html',
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 '<!--#include virtual="/active" -->' .
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 '<!--#include virtual="/locked" -->' .
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 'end'
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 );
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 $t->write_file('active', 'active');
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 $t->write_file('locked', 'locked');
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 $t->run();
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 ###############################################################################
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 # 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
87 # 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
88 # further work
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 # main request -> subrequest /active (waiting for a backend),
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 # -> subrequest /locked (locked by another request)
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 # 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
94 # 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
95 # but this is suboptimal behaviour
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 my $start = time();
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');
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 http_end($s);
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 TODO: {
506
5baf4b01cae4 Tests: adjusted TODOs.
Maxim Dounin <mdounin@mdounin.ru>
parents: 504
diff changeset
104 local $TODO = 'not yet' unless $t->has_version('1.7.8');
504
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 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
107
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 }
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109
318f305a2014 Tests: proxy_cache_lock with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 ###############################################################################