47 lines
1.8 KiB
OCaml
47 lines
1.8 KiB
OCaml
|
|
open H1.Websocket
|
||
|
|
|
||
|
|
module Testable = struct
|
||
|
|
let opcode = Alcotest.testable Opcode.pp_hum ( = )
|
||
|
|
end
|
||
|
|
|
||
|
|
let parse_frame serialized_frame =
|
||
|
|
match Angstrom.parse_string ~consume:All Frame.parse serialized_frame with
|
||
|
|
| Ok frame -> frame
|
||
|
|
| Error err -> Alcotest.fail err
|
||
|
|
|
||
|
|
let test_parsing_ping_frame () =
|
||
|
|
let frame = parse_frame "\137\128\000\000\046\216" in
|
||
|
|
Alcotest.check Testable.opcode "opcode" `Ping (Frame.opcode frame);
|
||
|
|
Alcotest.(check bool) "has mask" true (Frame.has_mask frame);
|
||
|
|
Alcotest.(check int32) "mask" 11992l (Frame.mask_exn frame);
|
||
|
|
Alcotest.(check int) "payload_length" (Frame.payload_length frame) 0;
|
||
|
|
Alcotest.(check int) "length" (Frame.length frame) 6
|
||
|
|
|
||
|
|
let test_parsing_close_frame () =
|
||
|
|
let frame = parse_frame "\136\000" in
|
||
|
|
Alcotest.check Testable.opcode "opcode" `Connection_close
|
||
|
|
(Frame.opcode frame);
|
||
|
|
Alcotest.(check int) "payload_length" (Frame.payload_length frame) 0;
|
||
|
|
Alcotest.(check int) "length" (Frame.length frame) 2
|
||
|
|
|
||
|
|
let test_parsing_text_frame () =
|
||
|
|
let frame =
|
||
|
|
parse_frame
|
||
|
|
"\129\139\086\057\046\216\103\011\029\236\099\015\025\224\111\009\036"
|
||
|
|
in
|
||
|
|
Alcotest.check Testable.opcode "opcode" `Text (Frame.opcode frame);
|
||
|
|
Alcotest.(check bool) "has mask" true (Frame.has_mask frame);
|
||
|
|
Alcotest.(check int32) "mask" 1446588120l (Frame.mask_exn frame);
|
||
|
|
Alcotest.(check int) "payload_length" (Frame.payload_length frame) 11;
|
||
|
|
Alcotest.(check int) "length" (Frame.length frame) 17;
|
||
|
|
Frame.unmask_inplace frame;
|
||
|
|
let payload = Bstr.to_string (Frame.payload_view frame) in
|
||
|
|
Alcotest.(check string) "payload" "1234567890\n" payload
|
||
|
|
|
||
|
|
let tests =
|
||
|
|
[
|
||
|
|
("parsing ping frame", `Quick, test_parsing_ping_frame);
|
||
|
|
("parsing close frame", `Quick, test_parsing_close_frame);
|
||
|
|
("parsing text frame", `Quick, test_parsing_text_frame);
|
||
|
|
]
|