Mercurial > hg > nginx-tests
annotate http_request.t @ 1990:85d88cd5091c
Tests: SSI include stub tests.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 04 Jul 2024 17:42:55 +0300 |
parents | a095b971fbcc |
children |
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 |
1976
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(41) |
1955
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 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
|
95 'empty line with just CR rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 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
|
97 'multiple empty lines rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 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
|
99 'multiple LFs rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 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
|
101 'multiple CRs rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 # method |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 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
|
106 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
|
107 'method with dash'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 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
|
109 'method with underscore'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 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
|
111 'method with dot rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 like(http("get / HTTP/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 'method in lowercase rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 # URI |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 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
|
118 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
|
119 'uri with CR'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 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
|
121 'uri with control'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 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
|
123 'uri with tab'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 # version |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
127 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
128 "GET / HTTP/1.2" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 "Host: foo" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 "Connection: close" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 ), qr/ 200 /, 'version 1.2'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 like(http( |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 "GET / HTTP/1.99" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 "Host: foo" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 "Connection: close" . CRLF . |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 CRLF |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 ), qr/ 200 /, 'version 1.99'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 like(http("GET / HTTP/1.000" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 'version leading zeros'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 like(http("GET / HTTP/2.0" . CRLF . CRLF), qr/ 505 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 'version too high rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 like(http("GET / HTTP/1.x" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 'version non-numeric rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 like(http("GET / HTTP/1.100" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 'version too high minor rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 like(http("GET / http/1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 'lowercase protocol rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 # spaces in request line |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 like(http("GET / HTTP/1.0 " . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 'spaces after version'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 like(http("GET / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
158 'spaces after uri'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 like(http("GET / HTTP/1.0" . CRLF . CRLF), qr/ 200 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 'spaces before uri'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 like(http("GET / HTTP/ 1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 'spaces before version rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 like(http("GET / HTTP /1.0" . CRLF . CRLF), qr/ 400 /, |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
165 'spaces after protocol rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 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
|
167 'spaces within protocol rejected'); |
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 method rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 # headers |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 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
|
174 'header'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 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
|
176 'header with space rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 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
|
178 'header with leading space rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 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
|
180 'header with control rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 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
|
182 'header with tab rejected'); |
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 |
1976
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
184 TODO: { |
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
185 local $TODO = 'not yet' unless $t->has_version('1.27.0'); |
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
186 |
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
187 like(http("GET / HTTP/1.0" . CRLF . "Foo" . CRLF . CRLF), qr/ 400 /, |
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
188 'header without colon rejected'); |
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
189 |
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
190 } |
4e79bd25642f
Tests: added test for headers without a colon.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1955
diff
changeset
|
191 |
1955
0b1a671c20c1
Tests: basic request parsing tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
192 ############################################################################### |