Mercurial > hg > nginx-tests
annotate http_request.t @ 1965:84f4d4930835
Tests: relaxed mail_imap_ssl.t cipher matching.
Previously, exact match between cipher name in the log and the one from
IO::Socket:SSL was needed, which might not be the case if nginx and
Net::SSLeay are compiled with different SSL libraries, notably LibreSSL
(which uses names like AEAD-AES256-GCM-SHA384 till 3.5.0), and
OpenSSL or BoringSSL (which use TLS_AES_256_GCM_SHA384). In particular,
this affects macOS, where Net::SSLeay compiled with LibreSSL 3.3.6 is
shipped with the OS, while nginx is likely to be compiled with OpenSSL.
Fix is to not require exact match but instead accept properly looking names
as checked by a regular expression, similarly to how it is already tested
in ssl.t and stream_ssl_variables.t.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 06 May 2024 00:01:40 +0300 |
parents | 0b1a671c20c1 |
children | 4e79bd25642f |
rev | line source |
---|---|
1955
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Tests for basic HTTP request parsing. |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 use Socket qw/ CRLF CR LF /; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 BEGIN { use FindBin; chdir($FindBin::Bin); } |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 use lib 'lib'; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 use Test::Nginx; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 ############################################################################### |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(40) |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 ->write_file_expand('nginx.conf', <<'EOF'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 %%TEST_GLOBALS%% |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 daemon off; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 events { |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 } |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 http { |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 %%TEST_GLOBALS_HTTP%% |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 server { |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 listen 127.0.0.1:8080; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 return 200 ok\n; |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 } |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 } |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 EOF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 $t->run(); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 ############################################################################### |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 # some basic HTTP/0.9, HTTP/1.0, and HTTP/1.1 requests |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 "GET /" . CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 ), qr/^ok/s, 'http/0.9 request'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 "GET / HTTP/1.0" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 ), qr/ 200 /, 'http/1.0 request'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 "GET / HTTP/1.0" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 "Host: foo" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 ), qr/ 200 /, 'http/1.0 request with host'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 "GET / HTTP/1.1" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 "Host: foo" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 "Connection: close" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 ), qr/ 200 /, 'http/1.1 request'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 "GET / HTTP/1.1" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 "Connection: close" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 ), qr/ 400 /, 'http/1.1 request rejected without host'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 "GET http://foo/ HTTP/1.1" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 "Host: foo" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 "Connection: close" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 ), qr/ 200 /, 'http/1.1 request absolute form'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 # ensure an empty line is ignored before the request |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 like(http(CRLF . "GET / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 'empty line ignored'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 like(http(LF . "GET / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 'empty line with just LF ignored'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 TODO: { |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 local $TODO = 'not yet' unless $t->has_version('1.25.5'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 like(http(CR . "GET / HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 'empty line with just CR rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 like(http(CRLF . CRLF . "GET / HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 'multiple empty lines rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 like(http(LF . LF . "GET / HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 'multiple LFs rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 like(http(CR . CR . "GET / HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 'multiple CRs rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 } |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 # method |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 like(http("FOO / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, 'method'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 like(http("FOO-BAR / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 'method with dash'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 like(http("FOO_BAR / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 'method with underscore'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 like(http("FOO.BAR / HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 'method with dot rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 like(http("get / HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 'method in lowercase rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
121 # URI |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 like(http("GET /foo12.bar HTTP/1.0" . CRLF . CRLF), qr/ 200 /, 'uri'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 like(http("GET /control\x0d HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 'uri with CR'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 like(http("GET /control\x01 HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
127 'uri with control'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
128 like(http("GET /control\t HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 'uri with tab'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 # version |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 "GET / HTTP/1.2" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 "Host: foo" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 "Connection: close" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 ), qr/ 200 /, 'version 1.2'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 "GET / HTTP/1.99" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 "Host: foo" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 "Connection: close" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 ), qr/ 200 /, 'version 1.99'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 like(http("GET / HTTP/1.000" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 'version leading zeros'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 like(http("GET / HTTP/2.0" . CRLF . CRLF), qr/ 505 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 'version too high rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 like(http("GET / HTTP/1.x" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 'version non-numeric rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 like(http("GET / HTTP/1.100" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 'version too high minor rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 like(http("GET / http/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 'lowercase protocol rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
158 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 # spaces in request line |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 like(http("GET / HTTP/1.0 " . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 'spaces after version'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 like(http("GET / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 'spaces after uri'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
165 like(http("GET / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 'spaces before uri'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 like(http("GET / HTTP/ 1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 'spaces before version rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 like(http("GET / HTTP /1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 'spaces after protocol rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 like(http("GET / HT TP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 'spaces within protocol rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 like(http(" GET / HTTP/ 1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 'spaces before method rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 # headers |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 like(http("GET / HTTP/1.0" . CRLF . "Foo: bar" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
180 'header'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 like(http("GET / HTTP/1.0" . CRLF . "Foo : bar" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
182 'header with space rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 like(http("GET / HTTP/1.0" . CRLF . " Foo: bar" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 'header with leading space rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 like(http("GET / HTTP/1.0" . CRLF . "Foo\x01: bar" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
186 'header with control rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
187 like(http("GET / HTTP/1.0" . CRLF . "Foo\t: bar" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
188 'header with tab rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
189 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
190 ############################################################################### |