1alias(Version, Type, Port, Host, Node) ->
2    Opts = [],
3    ok = httpd_test_lib:verify_request(Type, Host, Port, Opts, Node,
4 				       "GET /pics/icon.sheet.gif "
5 				       ++ Version ++ "\r\n\r\n",
6 				       [{statuscode, 200},
7 					{header, "Content-Type","image/gif"},
8 					{header, "Server"},
9 					{header, "Date"},
10 				        {version, Version}]),
11
12    ok = httpd_test_lib:verify_request(Type, Host, Port, Opts, Node,
13 				       "GET / " ++  Version ++ "\r\n\r\n",
14 				       [{statuscode, 200},
15 					{header, "Content-Type","text/html"},
16 					{header, "Server"},
17 					{header, "Date"},
18 				        {version, Version}]),
19
20    ok = httpd_test_lib:verify_request(Type, Host, Port, Opts, Node,
21 				       "GET /misc/ " ++ Version ++ "\r\n\r\n",
22 				       [{statuscode, 200},
23 					{header, "Content-Type","text/html"},
24 					{header, "Server"},
25 					{header, "Date"},
26 				        {version, Version}]),
27
28    %% Check redirection if trailing slash is missing.
29    ok = httpd_test_lib:verify_request(Type, Host, Port, Opts, Node,
30 				       "GET /misc "++ Version ++ "\r\n\r\n",
31 				       [{statuscode, 301},
32 					{header, "Location"},
33 					{header, "Content-Type","text/html"},
34				        {version, Version}]).
35
36
37head(Version, Type, Port, Host, Node) ->
38    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
39				       "HEAD /index.html " ++ Version ++ "\r\n\r\n",
40				       [{statuscode, 200},
41					{version, Version}]).
42
43
44get(Version, Type, Port, Host, Node) ->
45    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
46				       "GET /index.html " ++ Version ++ "\r\n\r\n",
47				       [{statuscode, 200},
48					{header, "Content-Type", "text/html"},
49					{header, "Date"},
50					{header, "Server"},
51					{version, Version}]),
52
53    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
54				       "GET /fsize.shtml " ++ Version ++ "\r\nHost:"
55				       ++ Host ++ "\r\n\r\n",
56				       [{statuscode, 200},
57					{header, "Content-Type", "text/html"},
58					{header, "Date"},
59					{header, "Server"}]),
60
61    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
62				       "GET /secret/dummy.html "
63				       ++ Version  ++ "\r\n\r\n",
64				       [{statuscode, 401},
65					{header, "WWW-Authenticate"},
66					{version, Version}]).
67
68esi(Version, Type, Port, Host, Node) ->
69    %% Check "ErlScriptAlias" and "EvalScriptAlias" directives
70     ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
71					"GET /eval?httpd_example:print(\"Hi!\") "
72 				        ++ Version ++ "\r\n\r\n",
73					[{statuscode, 200},
74					 {version, Version}]),
75     ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
76 				       "GET /eval?not_allowed:print(\"Hi!\") "
77					++ Version ++ "\r\n\r\n",
78					[{statuscode, 403},
79					 {version, Version}]),
80     ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
81 				       "GET /eval?httpd_example:undef(\"Hi!\") "
82 				       ++ Version ++ "\r\n\r\n",
83 				       [{statuscode, 500},
84 					{version, Version}]),
85     ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
86					"GET /cgi-bin/erl/httpd_example "
87					++ Version ++ "\r\n\r\n",
88  				       [{statuscode, 400},
89 					{version, Version}]),
90     ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
91					"GET /cgi-bin/erl/httpd_example:get "
92					++ Version  ++ "\r\n\r\n",
93					[{statuscode, 200},
94					 {version, Version}]),
95     ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
96 				       "GET /cgi-bin/erl/httpd_example:"
97 				       "get?input=4711"
98 				       " HTTP/1.0\r\n\r\n",
99 				       [{statuscode, 200},
100 				       {version, "HTTP/1.0"}]),
101    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
102				       "GET /cgi-bin/erl/httpd_example:"
103				       "post " ++ Version ++ "\r\n\r\n",
104				       [{statuscode, 200},
105					{version, Version}]),
106    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
107				       "GET /cgi-bin/erl/not_allowed:post "
108				       ++ Version ++ "\r\n\r\n",
109				       [{statuscode, 403},
110					{version, Version}]),
111    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
112				       "GET /cgi-bin/erl/httpd_example:undef "
113				       ++ Version ++ "\r\n\r\n",
114				       [{statuscode, 404},
115					{version, Version}]),
116    ok =  httpd_test_lib:verify_request(Type, Host, Port, Node,
117					"GET /cgi-bin/erl/httpd_example/yahoo "
118					++ Version ++ "\r\n\r\n",
119					[{statuscode, 302},
120					{version, Version}]),
121    %% Check "ErlScriptNoCache" directive (default: false)
122    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
123				       "GET /cgi-bin/erl/httpd_example:get "
124				       ++ Version ++ "\r\n\r\n",
125				       [{statuscode, 200},
126					{no_header, "cache-control"},
127					{version, "HTTP/1.0"}]).
128
129cgi(Version, Type, Port, Host, Node) ->
130    {Script, Script2, Script3} =
131	case test_server:os_type() of
132	    {win32, _} ->
133		{"printenv.bat", "printenv.sh", "cgi_echo.exe"};
134	    _ ->
135		{"printenv.sh", "printenv.bat", "cgi_echo"}
136	end,
137
138    %% The length (> 100) is intentional
139    ok = httpd_test_lib:
140	verify_request(Type, Host, Port, Node,
141		       "POST /cgi-bin/" ++ Script3 ++
142			   Version ++ " \r\n"
143		       "Content-Length:100 \r\n\r\n "
144		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
145		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
146		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
147		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
148		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
149		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
150		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
151		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
152		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
153		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
154		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
155		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
156		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
157		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
158		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
159		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
160		       "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
161		       " \r\n\r\n",
162		       [{statuscode, 200},
163			{version, Version},
164			{header, "content-type", "text/plain"}]),
165
166    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
167				       "GET /cgi-bin/"++ Script ++
168					   " " ++ Version ++ "\r\n\r\n",
169				       [{statuscode, 200},
170					{version, Version}]),
171
172    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
173				       "GET /cgi-bin/not_there " ++
174					   Version ++ "\r\n\r\n",
175				       [{statuscode, 404},{statuscode, 500},
176					{version, Version}]),
177
178    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
179				       "GET /cgi-bin/"++ Script ++
180					   "?Nisse:kkk?sss/lll " ++ Version ++ "\r\n\r\n",
181				       [{statuscode, 200},
182					{version, Version}]),
183
184    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
185				       "POST /cgi-bin/"++ Script ++
186				       " HTTP/1.0\r\n\r\n",
187				       [{statuscode, 200},
188					{version, "HTTP/1.0"}]),
189
190    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
191				       "GET /htbin/"++ Script ++
192				       " HTTP/1.0\r\n\r\n",
193				       [{statuscode, 200},
194				       {version, "HTTP/1.0"}]),
195
196    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
197				       "GET /htbin/not_there "
198				       "HTTP/1.0\r\n\r\n",
199				       [{statuscode, 404},{statuscode, 500},
200				        {version, "HTTP/1.0"}]),
201
202    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
203				       "GET /htbin/"++ Script ++
204				       "?Nisse:kkk?sss/lll HTTP/1.0\r\n\r\n",
205				       [{statuscode, 200},
206					{version, "HTTP/1.0"}]),
207
208    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
209				       "POST /htbin/"++ Script ++
210				       " HTTP/1.0\r\n\r\n",
211				       [{statuscode, 200},
212				       {version, "HTTP/1.0"}]),
213
214    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
215				       "POST /htbin/"++ Script ++
216				       " HTTP/1.0\r\n\r\n",
217				       [{statuscode, 200},
218				       {version, "HTTP/1.0"}]),
219
220    %% Execute an existing, but bad CGI script..
221    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
222				       "POST /htbin/"++ Script2 ++
223				       " HTTP/1.0\r\n\r\n",
224				       [{statuscode, 404},
225					{version, "HTTP/1.0"}]),
226
227    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
228				       "POST /cgi-bin/"++ Script2 ++
229				       " HTTP/1.0\r\n\r\n",
230				       [{statuscode, 404},
231				       {version, "HTTP/1.0"}]),
232
233    %% Check "ScriptNoCache" directive (default: false)
234    ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
235				       "GET /cgi-bin/" ++ Script ++
236				       " HTTP/1.0\r\n\r\n",
237				       [{statuscode, 200},
238					{no_header, "cache-control"},
239					{version, "HTTP/1.0"}]).
240
241