Mercurial > hg > nginx-tests
annotate proxy.t @ 123:8aa0dd396a83
Tests: add more autoindex tests.
This includes todo tests for bugs with utf-8 handling and html escaping in
file names.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 31 Dec 2009 17:23:06 +0300 |
parents | 8ac1faaddd2c |
children | c0ae29632905 |
rev | line source |
---|---|
42 | 1 #!/usr/bin/perl |
2 | |
3 # (C) Maxim Dounin | |
4 | |
5 # Tests for http proxy module. | |
6 | |
7 ############################################################################### | |
8 | |
9 use warnings; | |
10 use strict; | |
11 | |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
107
diff
changeset
|
12 use Test::More; |
42 | 13 |
14 BEGIN { use FindBin; chdir($FindBin::Bin); } | |
15 | |
16 use lib 'lib'; | |
17 use Test::Nginx; | |
18 | |
19 ############################################################################### | |
20 | |
21 select STDERR; $| = 1; | |
22 select STDOUT; $| = 1; | |
23 | |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
107
diff
changeset
|
24 my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(3); |
42 | 25 |
26 $t->write_file_expand('nginx.conf', <<'EOF'); | |
27 | |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
83
diff
changeset
|
28 %%TEST_GLOBALS%% |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
83
diff
changeset
|
29 |
42 | 30 master_process off; |
31 daemon off; | |
32 | |
33 events { | |
34 } | |
35 | |
36 http { | |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
83
diff
changeset
|
37 %%TEST_GLOBALS_HTTP%% |
42 | 38 |
39 server { | |
45
d68b85def521
Tests: use 127.0.0.1 instead of localhost.
Maxim Dounin <mdounin@mdounin.ru>
parents:
43
diff
changeset
|
40 listen 127.0.0.1:8080; |
42 | 41 server_name localhost; |
42 | |
43 location / { | |
45
d68b85def521
Tests: use 127.0.0.1 instead of localhost.
Maxim Dounin <mdounin@mdounin.ru>
parents:
43
diff
changeset
|
44 proxy_pass http://127.0.0.1:8081; |
42 | 45 proxy_read_timeout 1s; |
46 } | |
47 } | |
48 } | |
49 | |
50 EOF | |
51 | |
52 $t->run_daemon(\&http_daemon); | |
53 $t->run(); | |
54 | |
55 ############################################################################### | |
56 | |
57 like(http_get('/'), qr/SEE-THIS/, 'proxy request'); | |
58 like(http_get('/multi'), qr/AND-THIS/, 'proxy request with multiple packets'); | |
59 | |
60 unlike(http_head('/'), qr/SEE-THIS/, 'proxy head request'); | |
61 | |
62 ############################################################################### | |
63 | |
64 sub http_daemon { | |
65 my $server = IO::Socket::INET->new( | |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
66 Proto => 'tcp', |
42 | 67 LocalHost => '127.0.0.1:8081', |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
68 Listen => 5, |
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
69 Reuse => 1 |
42 | 70 ) |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
71 or die "Can't create listening socket: $!\n"; |
42 | 72 |
73 while (my $client = $server->accept()) { | |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
74 $client->autoflush(1); |
42 | 75 |
76 my $headers = ''; | |
77 my $uri = ''; | |
78 | |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
79 while (<$client>) { |
42 | 80 $headers .= $_; |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
81 last if (/^\x0d?\x0a?$/); |
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
82 } |
42 | 83 |
84 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i; | |
85 | |
86 if ($uri eq '/') { | |
87 print $client <<'EOF'; | |
88 HTTP/1.1 200 OK | |
89 Connection: close | |
90 | |
91 EOF | |
92 print $client "TEST-OK-IF-YOU-SEE-THIS" | |
93 unless $headers =~ /^HEAD/i; | |
94 | |
95 } elsif ($uri eq '/multi') { | |
96 | |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
97 print $client <<"EOF"; |
42 | 98 HTTP/1.1 200 OK |
99 Connection: close | |
100 | |
101 TEST-OK-IF-YOU-SEE-THIS | |
102 EOF | |
103 | |
104 select undef, undef, undef, 0.1; | |
105 print $client 'AND-THIS'; | |
106 | |
107 } else { | |
108 | |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
109 print $client <<"EOF"; |
42 | 110 HTTP/1.1 404 Not Found |
111 Connection: close | |
112 | |
113 Oops, '$uri' not found | |
114 EOF | |
115 } | |
116 | |
83
6e5884419e4a
Tests: whitespace cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
117 close $client; |
42 | 118 } |
119 } | |
120 | |
121 ############################################################################### |