mte/unikernel/duniverse/ocaml-h1/lib_test/test_websocket.ml

47 lines
1.8 KiB
OCaml
Raw Normal View History

2025-11-11 02:07:51 +01:00
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);
]