annotate proxy_cache_lock_ssi.t @ 508:4ac60aad723e

Tests: test for auth request with proxy cache.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 04 Dec 2014 19:18:45 +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 ###############################################################################