annotate http_host.t @ 1728:6d5ecf445e57

Tests: added HTTP/2 test with big request body. Notably, it is useful with body buffering in filters, in which case the stream window is flow controlled based on the preread buffer.
author Sergey Kandaurov <pluknet@nginx.com>
date Sat, 04 Sep 2021 14:50:02 +0300
parents c48b2b0b8c2a
children 2a0a6035a1af
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';
1612
8659123d2d37 Tests: made http_content() exportable.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1551
diff changeset
18 use Test::Nginx qw/ :DEFAULT http_content /;
183
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
1716
c48b2b0b8c2a Tests: added Host header test with control character.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(37);
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 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
173
1716
c48b2b0b8c2a Tests: added Host header test with control character.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
174 TODO: {
c48b2b0b8c2a Tests: added Host header test with control character.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
175 local $TODO = 'not yet' unless $t->has_version('1.21.1');
c48b2b0b8c2a Tests: added Host header test with control character.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
176
c48b2b0b8c2a Tests: added Host header test with control character.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
177 like(http_host_header("localhost\x02", 1), qr/ 400 /, 'control');
c48b2b0b8c2a Tests: added Host header test with control character.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
178
c48b2b0b8c2a Tests: added Host header test with control character.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
179 }
c48b2b0b8c2a Tests: added Host header test with control character.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
180
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
181 ###############################################################################
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
182
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
183 sub http_host_header {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
184 my ($host, $all) = @_;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
185 my ($r) = http(<<EOF);
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
186 GET / HTTP/1.0
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
187 Host: $host
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
188
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
189 EOF
1612
8659123d2d37 Tests: made http_content() exportable.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1551
diff changeset
190 return ($all ? $r : http_content($r));
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
191 }
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
192
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
193 sub http_absolute_path {
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
194 my ($host, $all) = @_;
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
195 my ($r) = http(<<EOF);
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
196 GET http://$host/ HTTP/1.0
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
197 Host: localhost
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
198
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
199 EOF
1612
8659123d2d37 Tests: made http_content() exportable.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1551
diff changeset
200 return ($all ? $r : http_content($r));
183
e43af26ac6ea Tests: host parsing tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
201 }
1451
9d579fc770a6 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
202
9d579fc770a6 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
203 ###############################################################################