Mercurial > hg > nginx-tests
annotate proxy_cache_chunked.t @ 572:ca54b445d982
Tests: masked nginx bug in proxy next upstream.
When iterating through several next upstreams per a worker cycle,
a previously reported event about upstream connection error may
be improperly applied to the next upstream, thus leading to the
invalid connection error. E.g., in kqueue, where the problem is
visible, this is caused by "ev->instance" that does not tolerate
more than one next upstream at once, and kevents placed on the
kqueue separately for read and write events.
The change is to limit test case to the only one next upstream.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 14 May 2015 11:54:24 +0300 |
parents | 071e8941e3bf |
children | 2cd00179f4b2 |
rev | line source |
---|---|
239
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Test for proxy cache with Transfer-Encoding: chunked. |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 use IO::Select; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 use Socket qw/ CRLF /; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 use lib 'lib'; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 use Test::Nginx; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 ############################################################################### |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 select STDERR; $| = 1; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 select STDOUT; $| = 1; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 |
260
1c356f231c8f
Tests: skip proxy_cache_chunked.t on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
27 plan(skip_all => 'win32') if $^O eq 'MSWin32'; |
1c356f231c8f
Tests: skip proxy_cache_chunked.t on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
28 |
239
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 my $t = Test::Nginx->new()->has(qw/http proxy cache/)->plan(2); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 $t->write_file_expand('nginx.conf', <<'EOF'); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 %%TEST_GLOBALS%% |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 |
249
6a0d934950bc
Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents:
241
diff
changeset
|
35 daemon off; |
239
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 events { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 http { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 %%TEST_GLOBALS_HTTP%% |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 |
503
071e8941e3bf
Tests: reduce shared memory zone sizes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
295
diff
changeset
|
43 proxy_cache_path %%TESTDIR%%/cache keys_zone=NAME:1m; |
239
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 server { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 listen 127.0.0.1:8080; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 server_name localhost; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 location / { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 proxy_pass http://127.0.0.1:8081; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 proxy_http_version 1.1; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 proxy_cache NAME; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 proxy_cache_valid any 1m; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 add_header X-Status $upstream_cache_status; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 EOF |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 $t->run_daemon(\&http_chunked_daemon); |
295
6fe0459b6668
Tests: eliminate startup races in proxy and fastcgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
260
diff
changeset
|
62 $t->run()->waitforsocket('127.0.0.1:8081'); |
239
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 ############################################################################### |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 like(http_get("/"), qr/SEE-THIS/s, "chunked"); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 like(http_get("/"), qr/SEE-THIS.*HIT/s, "chunked cached"); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 ############################################################################### |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 sub http_chunked_daemon { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 my $server = IO::Socket::INET->new( |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 Proto => 'tcp', |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 LocalAddr => '127.0.0.1:8081', |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 Listen => 5, |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 Reuse => 1 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 ) |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 or die "Can't create listening socket: $!\n"; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 |
295
6fe0459b6668
Tests: eliminate startup races in proxy and fastcgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
260
diff
changeset
|
80 local $SIG{PIPE} = 'IGNORE'; |
6fe0459b6668
Tests: eliminate startup races in proxy and fastcgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
260
diff
changeset
|
81 |
239
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 while (my $client = $server->accept()) { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 $client->autoflush(1); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 while (<$client>) { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 last if (/^\x0d?\x0a?$/); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 print $client <<'EOF'; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 HTTP/1.1 200 OK |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 X-Test: SEE-THIS |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 Connection: close |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 Transfer-Encoding: chunked |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 EOF |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 print $client "85" . CRLF; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 select undef, undef, undef, 0.1; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 print $client "FOO" . ("0123456789abcdef" x 8) . CRLF . CRLF; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 print $client "0" . CRLF . CRLF; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 close $client; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 ############################################################################### |