Mercurial > hg > nginx-tests
annotate proxy_cache_chunked.t @ 251:df984d23f9d1
Tests: improve fastcgi keepalive tests.
On some platforms fastcgi_keepalive.t tests failed due to problems in
handling of data split into multiple packets. Harden tests to fail
on all platforms by adding more sleeps, and mark them as TODO till
underlying problems are fixed.
Additionally, add some padding testing.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 25 Jan 2013 20:53:53 +0400 |
parents | 6a0d934950bc |
children | 1c356f231c8f |
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 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 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
|
28 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 $t->write_file_expand('nginx.conf', <<'EOF'); |
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 %%TEST_GLOBALS%% |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 |
249
6a0d934950bc
Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents:
241
diff
changeset
|
33 daemon off; |
239
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 events { |
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 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 http { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 %%TEST_GLOBALS_HTTP%% |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 proxy_cache_path %%TESTDIR%%/cache keys_zone=NAME:10m; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 server { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 listen 127.0.0.1:8080; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 server_name localhost; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 location / { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 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
|
49 proxy_http_version 1.1; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 proxy_cache NAME; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 proxy_cache_valid any 1m; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 add_header X-Status $upstream_cache_status; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 } |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 } |
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 EOF |
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 $t->run_daemon(\&http_chunked_daemon); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 $t->run(); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 ############################################################################### |
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 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
|
65 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
|
66 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 ############################################################################### |
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 sub http_chunked_daemon { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 my $server = IO::Socket::INET->new( |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 Proto => 'tcp', |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 LocalAddr => '127.0.0.1:8081', |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 Listen => 5, |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 Reuse => 1 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 ) |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 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
|
77 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 while (my $client = $server->accept()) { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 $client->autoflush(1); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 while (<$client>) { |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 last if (/^\x0d?\x0a?$/); |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 } |
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 print $client <<'EOF'; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 HTTP/1.1 200 OK |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 X-Test: SEE-THIS |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 Connection: close |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 Transfer-Encoding: chunked |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 EOF |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 print $client "85" . CRLF; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 select undef, undef, undef, 0.1; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 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
|
95 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 print $client "0" . CRLF . CRLF; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 close $client; |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 } |
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 |
5d178e27037c
Tests: test for proxy_cache with chunked response.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 ############################################################################### |