annotate http_host.t @ 1606:e4e0695552ed

Tests: fixed stream_proxy_ssl_conf_command.t. The stream_proxy_ssl_conf_command.t test used stream return module to return the response. Since this ignores actual request, but the perl test code used http_get(). This might result in the request being sent after the response is returned and the connection closed by the server, resulting in RST being generated and no response seen by the client at all. Fix is to use "stream(...)->read()" instead of http_get(), so no request is sent at all, eliminating possibility of RST being generated.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 10 Nov 2020 05:03:29 +0300
parents 27237569776f
children 8659123d2d37
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
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1451
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(36);
183
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 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
56 'domain w/o port (host header)');
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
57 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
58 'domain w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
59
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
60 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
61 'domain w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
62 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
63 'domain w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
64
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 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
67 'domain w/ ending dot w/o port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
68
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
69 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
70 'domain w/ ending dot w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
71
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
72 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
73 'domain w/ ending dot w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
74 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
75 'domain w/ ending dot w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
76
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 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
79 'mixed case domain w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
80 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
81 'mixed case domain w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
82
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 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
85 'ipv4 w/o port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
86 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
87 'ipv4 w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
88
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
89 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
90 'ipv4 w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
91 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
92 'ipv4 w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
93
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
94 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
95 'ipv6 literal w/o port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
96 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
97 'ipv6 literal w/port (host header)');
212
a7cc4371f4ad Tests: whitespace fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 183
diff changeset
98
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
99 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
100 'ipv6 literal w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
101 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
102 'ipv6 literal w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
103
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
104 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
105 'ipv4-mapped ipv6 w/o port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
106 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
107 'ipv4-mapped ipv6 w/port (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
108
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
109 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
110 'ipv4-mapped ipv6 w/o port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
111 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
112 'ipv4-mapped ipv6 w/port (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
113
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
114 like(http_host_header('example.com/\:552', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
115 'domain w/ path separators (host header)');
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
116 like(http_absolute_path('\e/xample.com', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
117 'domain w/ path separators (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
118
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
119 like(http_host_header('..examp-LE.com', 1), qr/ 400 /,
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
120 'domain w/ double dot (host header)');
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
121 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
122 'domain w/ double dot (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
123
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
124
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
125 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
126 '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
127 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
128 'ipv6 literal w/ path separators (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
129
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
130 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
131 '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
132 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
133 'ipv6 literal w/ double dot (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
134
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
135
491
d5bf5942a8b2 Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents: 224
diff changeset
136 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
137 '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
138 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
139 'ipv6 literal w/ double dot (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
140
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 # As per RFC 3986,
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
143 # http://tools.ietf.org/html/rfc3986#section-3.2.2
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
144 #
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
145 # IP-literal = "[" ( IPv6address / IPvFuture ) "]"
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
146 #
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
147 # IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
148 #
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
149 # sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
150 # / "*" / "+" / "," / ";" / "="
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 # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
153 #
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 is(http_host_header(
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
156 '[v0123456789aBcDeF.!$&\'()*+,;=-._~AbCdEfGhIjKlMnOpQrStUvWxYz'
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
157 . '0123456789:]'),
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
158 '[v0123456789abcdef.!$&\'()*+,;=-._~abcdefghijklmnopqrstuvwxyz'
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
159 . '0123456789:]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
160 'IPvFuture all symbols (host header)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
161
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
162 is(http_absolute_path(
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
163 '[v0123456789aBcDeF.!$&\'()*+,;=-._~AbCdEfGhIjKlMnOpQrStUvWxYz'
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
164 . '0123456789:]'),
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
165 '[v0123456789abcdef.!$&\'()*+,;=-._~abcdefghijklmnopqrstuvwxyz'
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
166 . '0123456789:]',
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
167 'IPvFuture all symbols (absolute request)');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
168
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
169 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
170 'double port hack');
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
171
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1451
diff changeset
172 TODO: {
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1451
diff changeset
173 local $TODO = 'not yet' unless $t->has_version('1.17.9');
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1451
diff changeset
174
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1451
diff changeset
175 like(http_host_header("localhost\nHost: again", 1), qr/ 400 /, 'host repeat');
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1451
diff changeset
176
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1451
diff changeset
177 }
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1451
diff changeset
178
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
179 ###############################################################################
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 sub http_host_header {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
182 my ($host, $all) = @_;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
183 my ($r) = http(<<EOF);
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
184 GET / HTTP/1.0
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
185 Host: $host
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
186
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
187 EOF
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
188 return ($all ? $r : Test::Nginx::http_content($r));
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
189 }
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 sub http_absolute_path {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
192 my ($host, $all) = @_;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
193 my ($r) = http(<<EOF);
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
194 GET http://$host/ HTTP/1.0
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
195 Host: localhost
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
196
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
197 EOF
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
198 return ($all ? $r : Test::Nginx::http_content($r));
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
199 }
1451
9d579fc770a6 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
200
9d579fc770a6 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
201 ###############################################################################