annotate proxy_cache_chunked.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 071e8941e3bf
children 2cd00179f4b2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ###############################################################################