annotate proxy-chunked.t @ 128:25047dc6ae9b

Tests: add test for memcached parsing problem as fixed in 0.6.14.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 19 Feb 2010 22:26:38 +0300
parents 8ac1faaddd2c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
85
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Test for http backend returning response with Transfer-Encoding: chunked.
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 # Since nginx uses HTTP/1.0 in requests to backend it's backend bug, but we
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8 # want to handle this gracefully. And anyway chunked support will be required
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 # for HTTP/1.1 backend connections.
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11 ###############################################################################
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use warnings;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 use strict;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 107
diff changeset
16 use Test::More;
85
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use IO::Select;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 BEGIN { use FindBin; chdir($FindBin::Bin); }
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 use lib 'lib';
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 use Test::Nginx;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 ###############################################################################
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 select STDERR; $| = 1;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 select STDOUT; $| = 1;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 107
diff changeset
30 my $t = Test::Nginx->new()->has(qw/http proxy ssi/)->plan(3);
85
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 $t->write_file_expand('nginx.conf', <<'EOF');
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 94
diff changeset
34 %%TEST_GLOBALS%%
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 94
diff changeset
35
85
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 master_process off;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 daemon off;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 events {
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 }
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 http {
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 94
diff changeset
43 %%TEST_GLOBALS_HTTP%%
85
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 server {
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 listen 127.0.0.1:8080;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 server_name localhost;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 location / {
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 proxy_pass http://127.0.0.1:8081;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 proxy_read_timeout 1s;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 }
94
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
53 location /nobuffering {
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
54 proxy_pass http://127.0.0.1:8081;
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
55 proxy_read_timeout 1s;
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
56 proxy_buffering off;
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
57 }
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
58 location /inmemory.html {
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
59 ssi on;
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
60 }
85
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 }
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 EOF
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65
94
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
66 $t->write_file('inmemory.html',
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
67 '<!--#include virtual="/" set="one" --><!--#echo var="one" -->');
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
68
85
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 $t->run_daemon(\&http_chunked_daemon);
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 $t->run();
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 ###############################################################################
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 {
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 local $TODO = 'not yet';
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 like(http_get('/'), qr/\x0d\x0aSEE-THIS$/s, 'chunked');
94
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
78 like(http_get('/nobuffering'), qr/\x0d\x0aSEE-THIS$/s, 'chunked nobuffering');
9ab3762332b9 Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 85
diff changeset
79 like(http_get('/inmemory.html'), qr/\x0d\x0aSEE-THIS$/s, 'chunked inmemory');
85
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 }
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 ###############################################################################
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 sub http_chunked_daemon {
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 my $server = IO::Socket::INET->new(
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 Proto => 'tcp',
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 LocalAddr => '127.0.0.1:8081',
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 Listen => 5,
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 Reuse => 1
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 )
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 or die "Can't create listening socket: $!\n";
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 while (my $client = $server->accept()) {
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 $client->autoflush(1);
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 while (<$client>) {
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 last if (/^\x0d?\x0a?$/);
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 }
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 print $client <<'EOF';
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 HTTP/1.1 200 OK
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 Connection: close
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 Transfer-Encoding: chunked
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 9
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 SEE-THIS
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 0
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 EOF
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 close $client;
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 }
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 }
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115
1bf5eca1c4a9 Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 ###############################################################################