Mercurial > hg > nginx-tests
annotate proxy-chunked.t @ 94:9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Note that while these two modes currently use the same filter function
they are quite different. Only one continuous buffer (u->buffer) used for
subrequest_in_memory and this means that chunk-data should be concatenated
somehow (memmove?).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sun, 10 May 2009 03:53:20 +0400 |
parents | 1bf5eca1c4a9 |
children | 1c0ec30614c6 |
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 |
94
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
16 use Test::More tests => 3; |
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 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 my $t = Test::Nginx->new(); |
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 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 master_process off; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 daemon off; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 events { |
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 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 http { |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 access_log off; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 root %%TESTDIR%%; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 client_body_temp_path %%TESTDIR%%/client_body_temp; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 fastcgi_temp_path %%TESTDIR%%/fastcgi_temp; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 proxy_temp_path %%TESTDIR%%/proxy_temp; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 server { |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 listen 127.0.0.1:8080; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 server_name localhost; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 location / { |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 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
|
54 proxy_read_timeout 1s; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 } |
94
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
56 location /nobuffering { |
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
57 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
|
58 proxy_read_timeout 1s; |
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
59 proxy_buffering off; |
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
60 } |
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
61 location /inmemory.html { |
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
62 ssi on; |
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
63 } |
85
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 } |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 } |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 EOF |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 |
94
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
69 $t->write_file('inmemory.html', |
9ab3762332b9
Tests: chunked tests for unbuffered and inmemory proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents:
85
diff
changeset
|
70 '<!--#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
|
71 |
85
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 $t->run_daemon(\&http_chunked_daemon); |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 $t->run(); |
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 ############################################################################### |
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 { |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 local $TODO = 'not yet'; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 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
|
81 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
|
82 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
|
83 } |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 ############################################################################### |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 sub http_chunked_daemon { |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 my $server = IO::Socket::INET->new( |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 Proto => 'tcp', |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 LocalAddr => '127.0.0.1:8081', |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 Listen => 5, |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 Reuse => 1 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 ) |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 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
|
95 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 while (my $client = $server->accept()) { |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 $client->autoflush(1); |
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 while (<$client>) { |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 last if (/^\x0d?\x0a?$/); |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 } |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 print $client <<'EOF'; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 HTTP/1.1 200 OK |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 Connection: close |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 Transfer-Encoding: chunked |
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 9 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 SEE-THIS |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 0 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 EOF |
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 close $client; |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 } |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 } |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 |
1bf5eca1c4a9
Tests: add test for chunked transfer-coding from backend.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 ############################################################################### |