annotate http_host.t @ 1021:ebdf239722b9

Tests: relaxed proxy_cache_lock.t nolock tests to fix on Solaris. Assumed that the order of responses being arrived in nolock case may be ignored. An important part of such case is that the only last response should be cached.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 02 Sep 2016 12:17:35 +0300
parents 882267679006
children 9d579fc770a6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
1 #!/usr/bin/perl
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
2
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
4 # (C) Valentin Bartenev
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
5
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
6 # Tests for host parsing in requests.
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
7
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
8 ###############################################################################
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
9
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
10 use warnings;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
11 use strict;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
12
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
13 use Test::More;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
14
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
16
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
17 use lib 'lib';
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
18 use Test::Nginx;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
19
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
20 ###############################################################################
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
21
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
22 select STDERR; $| = 1;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
23 select STDOUT; $| = 1;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
24
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(35);
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
26
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
27 $t->write_file_expand('nginx.conf', <<'EOF');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
28
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
29 %%TEST_GLOBALS%%
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
30
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
31 daemon off;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
32
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
33 events {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
34 }
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
35
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
36 http {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
38
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
39 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
40 listen 127.0.0.1:8080;
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
41 server_name localhost;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
42
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
43 location / {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
44 return 200 $host;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
45 }
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
46 }
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
47 }
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
48
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
49 EOF
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
50
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
51 $t->run();
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
52
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
53 ###############################################################################
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
54
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
55
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
56 is(http_host_header('www.abcd-ef.g02.xyz'), 'www.abcd-ef.g02.xyz',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
57 'domain w/o port (host header)');
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
58 is(http_host_header('abcd-ef.g02.xyz:' . port(8080)), 'abcd-ef.g02.xyz',
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
59 'domain w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
60
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
61 is(http_absolute_path('abcd-ef.g02.xyz'), 'abcd-ef.g02.xyz',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
62 'domain w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
63 is(http_absolute_path('www.abcd-ef.g02.xyz:10'), 'www.abcd-ef.g02.xyz',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
64 'domain w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
65
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
66
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
67 is(http_host_header('www.abcd-ef.g02.xyz.'), 'www.abcd-ef.g02.xyz',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
68 'domain w/ ending dot w/o port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
69
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
70 is(http_host_header('abcd-ef.g02.xyz.:88'), 'abcd-ef.g02.xyz',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
71 'domain w/ ending dot w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
72
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
73 is(http_absolute_path('www.abcd-ef.g02.xyz.'), 'www.abcd-ef.g02.xyz',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
74 'domain w/ ending dot w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
75 is(http_absolute_path('abcd-ef.g02.xyz.:2'), 'abcd-ef.g02.xyz',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
76 'domain w/ ending dot w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
77
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
78
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
79 is(http_absolute_path('AbC-d93.0.34ZhGt-s.nk.Ru'), 'abc-d93.0.34zhgt-s.nk.ru',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
80 'mixed case domain w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
81 is(http_host_header('AbC-d93.0.34ZhGt-s.nk.Ru:88'), 'abc-d93.0.34zhgt-s.nk.ru',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
82 'mixed case domain w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
83
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
84
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
85 is(http_host_header('123.40.56.78'), '123.40.56.78',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
86 'ipv4 w/o port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
87 is(http_host_header('123.49.0.78:987'), '123.49.0.78',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
88 'ipv4 w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
89
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
90 is(http_absolute_path('123.49.0.78'), '123.49.0.78',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
91 'ipv4 w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
92 is(http_absolute_path('123.40.56.78:123'), '123.40.56.78',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
93 'ipv4 w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
94
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
95 is(http_host_header('[abcd::ef98:0:7654:321]'), '[abcd::ef98:0:7654:321]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
96 'ipv6 literal w/o port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
97 is(http_host_header('[abcd::ef98:0:7654:321]:80'), '[abcd::ef98:0:7654:321]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
98 'ipv6 literal w/port (host header)');
212
a7cc4371f4ad Tests: whitespace fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 183
diff changeset
99
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
100 is(http_absolute_path('[abcd::ef98:0:7654:321]'), '[abcd::ef98:0:7654:321]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
101 'ipv6 literal w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
102 is(http_absolute_path('[abcd::ef98:0:7654:321]:5'), '[abcd::ef98:0:7654:321]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
103 'ipv6 literal w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
104
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
105 is(http_host_header('[::ffff:12.30.67.89]'), '[::ffff:12.30.67.89]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
106 'ipv4-mapped ipv6 w/o port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
107 is(http_host_header('[::123.45.67.89]:4321'), '[::123.45.67.89]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
108 'ipv4-mapped ipv6 w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
109
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
110 is(http_absolute_path('[::123.45.67.89]'), '[::123.45.67.89]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
111 'ipv4-mapped ipv6 w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
112 is(http_absolute_path('[::ffff:12.30.67.89]:4321'), '[::ffff:12.30.67.89]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
113 'ipv4-mapped ipv6 w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
114
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
115 like(http_host_header('example.com/\:552', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
116 'domain w/ path separators (host header)');
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
117 like(http_absolute_path('\e/xample.com', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
118 'domain w/ path separators (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
119
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
120 like(http_host_header('..examp-LE.com', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
121 'domain w/ double dot (host header)');
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
122 like(http_absolute_path('com.exa-m.45..:', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
123 'domain w/ double dot (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
124
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
125
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
126 like(http_host_header('[abcd::e\f98:0/:7654:321]', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
127 'ipv6 literal w/ path separators (host header)');
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
128 like(http_absolute_path('[abcd\::ef98:0:7654:321/]:12', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
129 'ipv6 literal w/ path separators (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
130
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
131 like(http_host_header('[abcd::ef98:0:7654:321]..:98', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
132 'ipv6 literal w/ double dot (host header)');
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
133 like(http_absolute_path('[ab..cd::ef98:0:7654:321]', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
134 'ipv6 literal w/ double dot (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
135
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
136
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
137 like(http_host_header('[abcd::ef98:0:7654:321]..:98', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
138 'ipv6 literal w/ double dot (host header)');
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
139 like(http_absolute_path('[ab..cd::ef98:0:7654:321]', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
140 'ipv6 literal w/ double dot (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
141
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
142
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
143 # As per RFC 3986,
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
144 # http://tools.ietf.org/html/rfc3986#section-3.2.2
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
145 #
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
146 # IP-literal = "[" ( IPv6address / IPvFuture ) "]"
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
147 #
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
148 # IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
149 #
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
150 # sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
151 # / "*" / "+" / "," / ";" / "="
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
152 #
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
153 # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
154 #
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
155
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
156 is(http_host_header(
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
157 '[v0123456789aBcDeF.!$&\'()*+,;=-._~AbCdEfGhIjKlMnOpQrStUvWxYz'
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
158 . '0123456789:]'),
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
159 '[v0123456789abcdef.!$&\'()*+,;=-._~abcdefghijklmnopqrstuvwxyz'
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
160 . '0123456789:]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
161 'IPvFuture all symbols (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
162
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
163 is(http_absolute_path(
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
164 '[v0123456789aBcDeF.!$&\'()*+,;=-._~AbCdEfGhIjKlMnOpQrStUvWxYz'
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
165 . '0123456789:]'),
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
166 '[v0123456789abcdef.!$&\'()*+,;=-._~abcdefghijklmnopqrstuvwxyz'
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
167 . '0123456789:]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
168 'IPvFuture all symbols (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
169
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
170 is(http_host_header('123.40.56.78:9000:80'), '123.40.56.78',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
171 'double port hack');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
172
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
173 ###############################################################################
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
174
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
175 sub http_host_header {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
176 my ($host, $all) = @_;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
177 my ($r) = http(<<EOF);
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
178 GET / HTTP/1.0
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
179 Host: $host
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
180
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
181 EOF
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
182 return ($all ? $r : Test::Nginx::http_content($r));
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
183 }
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
184
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
185 sub http_absolute_path {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
186 my ($host, $all) = @_;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
187 my ($r) = http(<<EOF);
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
188 GET http://$host/ HTTP/1.0
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
189 Host: localhost
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
190
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
191 EOF
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
192 return ($all ? $r : Test::Nginx::http_content($r));
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
193 }