Mercurial > hg > nginx-tests
annotate proxy-chunked.t @ 114:44b281ac4bc6
Tests: add server name tests, including fancy regex ones.
With test config nginx will fail to start as of 0.8.28 due to incorrect
conversion of regular expressions to lowercase. Patch was discussed on
mailing list and will be included in next release.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 30 Nov 2009 14:47:17 +0300 |
parents | 1c0ec30614c6 |
children | 8ac1faaddd2c |
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 |
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 ############################################################################### |