mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-06 11:15:35 -05:00
test: more tests for multipart form data
This commit is contained in:
parent
c966d1839c
commit
3f37161649
5 changed files with 99 additions and 9 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
|
|
||||||
(tests
|
(tests
|
||||||
(names t1)
|
(names t1 t2)
|
||||||
(libraries tiny_httpd tiny_httpd.multipart-form-data))
|
(libraries tiny_httpd tiny_httpd.multipart-form-data))
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,6 @@ delim
|
||||||
chunk "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
chunk "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||||
delim
|
delim
|
||||||
delim
|
delim
|
||||||
chunk "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
chunk "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||||||
delim
|
delim
|
||||||
chunk "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
chunk "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ let read_stream (st : MFD.st) : _ list =
|
||||||
|
|
||||||
let test input_str =
|
let test input_str =
|
||||||
let st =
|
let st =
|
||||||
MFD.create ~buf_size:16 ~delim:"YOLO" (Iostream.In.of_string input_str)
|
MFD.create ~buf_size:16 ~boundary:"YOLO" (Iostream.In.of_string input_str)
|
||||||
in
|
in
|
||||||
let chunks = read_stream st in
|
let chunks = read_stream st in
|
||||||
List.iter
|
List.iter
|
||||||
|
|
@ -38,13 +38,17 @@ let test input_str =
|
||||||
let () =
|
let () =
|
||||||
pf "T1\n";
|
pf "T1\n";
|
||||||
test
|
test
|
||||||
{|hello--YOLO
|
"hello\r\n\
|
||||||
world
|
--YOLO\n\
|
||||||
what is the meaning of--YOLOthis??--YOLOok ok ok--YOLO|};
|
\ world\n\
|
||||||
|
\ what is the meaning of\r\n\
|
||||||
|
--YOLOthis??\r\n\
|
||||||
|
--YOLOok ok ok\r\n\
|
||||||
|
--YOLO";
|
||||||
pf "T2\n";
|
pf "T2\n";
|
||||||
test "--YOLO--YOLOah bon--YOLOaight--YOLO--YOLO";
|
test "\r\n--YOLO\r\n--YOLOah bon\r\n--YOLOaight\r\n--YOLO\r\n--YOLO";
|
||||||
pf "T3\n";
|
pf "T3\n";
|
||||||
test
|
test
|
||||||
(spf "--YOLO%s--YOLO--YOLO%s--YOLO%s" (String.make 400 'a')
|
(spf "\r\n--YOLO%s\r\n--YOLO\r\n--YOLO%s\r\n--YOLO%s" (String.make 400 'a')
|
||||||
(String.make 400 'b') (String.make 400 'c'));
|
(String.make 512 'b') (String.make 400 'c'));
|
||||||
()
|
()
|
||||||
|
|
|
||||||
12
tests/multipart_form/t2.expected
Normal file
12
tests/multipart_form/t2.expected
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
T1
|
||||||
|
part ["some-super-cool":"header here";"ohlook":"here"]
|
||||||
|
chunk "and now for the b-o-d-y \240\159\145\143\n"
|
||||||
|
part ["more":"headers"]
|
||||||
|
chunk "and another body\r\n"
|
||||||
|
end of input
|
||||||
|
T1
|
||||||
|
part ["some-super-cool":"header here";"ohlook":"here"]
|
||||||
|
chunk "and now for the bigger body:\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
|
part ["more":"headers"]
|
||||||
|
chunk "and another body"
|
||||||
|
end of input
|
||||||
74
tests/multipart_form/t2.ml
Normal file
74
tests/multipart_form/t2.ml
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
module MFD = Tiny_httpd_multipart_form_data
|
||||||
|
|
||||||
|
let spf = Printf.sprintf
|
||||||
|
let pf = Printf.printf
|
||||||
|
|
||||||
|
let read_stream (st : MFD.st) : _ list =
|
||||||
|
let l = ref [] in
|
||||||
|
let buffer = Buffer.create 32 in
|
||||||
|
let rec loop () =
|
||||||
|
match MFD.next st with
|
||||||
|
| Part headers ->
|
||||||
|
if Buffer.length buffer > 0 then l := `Str (Buffer.contents buffer) :: !l;
|
||||||
|
Buffer.clear buffer;
|
||||||
|
l := `Part headers :: !l;
|
||||||
|
loop ()
|
||||||
|
| Read sl ->
|
||||||
|
Buffer.add_subbytes buffer sl.bytes sl.off sl.len;
|
||||||
|
loop ()
|
||||||
|
| End_of_input ->
|
||||||
|
if Buffer.length buffer > 0 then l := `Str (Buffer.contents buffer) :: !l;
|
||||||
|
l := `End_of_input :: !l;
|
||||||
|
List.rev !l
|
||||||
|
in
|
||||||
|
loop ()
|
||||||
|
|
||||||
|
let test input_str =
|
||||||
|
let st =
|
||||||
|
MFD.create ~buf_size:16 ~boundary:"YOLO" (Iostream.In.of_string input_str)
|
||||||
|
in
|
||||||
|
let chunks = read_stream st in
|
||||||
|
List.iter
|
||||||
|
(function
|
||||||
|
| `End_of_input -> pf "end of input\n"
|
||||||
|
| `Part hs ->
|
||||||
|
pf "part [%s]\n"
|
||||||
|
(String.concat ";" @@ List.map (fun (k, v) -> spf "%S:%S" k v) hs)
|
||||||
|
| `Str s -> pf "chunk %S\n" s)
|
||||||
|
chunks;
|
||||||
|
()
|
||||||
|
|
||||||
|
let () =
|
||||||
|
pf "T1\n";
|
||||||
|
test
|
||||||
|
"\r\n\
|
||||||
|
--YOLO\r\n\
|
||||||
|
some-super-cool: header here\r\n\
|
||||||
|
ohlook: here\r\n\
|
||||||
|
\r\n\
|
||||||
|
and now for the b-o-d-y 👏\n\
|
||||||
|
\r\n\
|
||||||
|
--YOLO\r\n\
|
||||||
|
more: headers\r\n\
|
||||||
|
\r\n\
|
||||||
|
and another body\r\n\
|
||||||
|
\r\n\
|
||||||
|
--YOLO--";
|
||||||
|
pf "T1\n";
|
||||||
|
test
|
||||||
|
(spf
|
||||||
|
"\r\n\
|
||||||
|
--YOLO\r\n\
|
||||||
|
some-super-cool: header here\r\n\
|
||||||
|
ohlook: here\r\n\
|
||||||
|
\r\n\
|
||||||
|
and now for the bigger body:\n\
|
||||||
|
%s\n\
|
||||||
|
\r\n\
|
||||||
|
--YOLO\r\n\
|
||||||
|
more: headers\r\n\
|
||||||
|
\r\n\
|
||||||
|
and another body\r\n\
|
||||||
|
--YOLO--"
|
||||||
|
(String.make 500 'a'));
|
||||||
|
()
|
||||||
Loading…
Add table
Reference in a new issue