mte/unikernel/duniverse/httpun/lib_test/helpers.ml

74 lines
2 KiB
OCaml
Raw Normal View History

2025-11-11 02:07:51 +01:00
open Httpun
let maybe_serialize_body f body =
match body with
| None -> ()
| Some body -> Faraday.write_string f body
let request_to_string ?body r =
let f = Faraday.create 0x1000 in
Httpun_private.Serialize.write_request f r;
maybe_serialize_body f body;
Faraday.serialize_to_string f
let response_to_string ?body r =
let f = Faraday.create 0x1000 in
Httpun_private.Serialize.write_response f r;
maybe_serialize_body f body;
Faraday.serialize_to_string f
module Read_operation = struct
type t = [ `Read | `Yield | `Close ]
let pp_hum fmt (t : t) =
let str =
match t with
| `Read -> "Read"
| `Yield -> "Yield"
| `Close -> "Close"
in
Format.pp_print_string fmt str
;;
end
module Write_operation = struct
type t = [ `Write of Bigstringaf.t IOVec.t list | `Yield | `Close of int ]
let iovecs_to_string iovecs =
let len = IOVec.lengthv iovecs in
let bytes = Bytes.create len in
let dst_off = ref 0 in
List.iter (fun { IOVec.buffer; off = src_off; len } ->
Bigstringaf.unsafe_blit_to_bytes buffer ~src_off bytes ~dst_off:!dst_off ~len;
dst_off := !dst_off + len)
iovecs;
Bytes.unsafe_to_string bytes
;;
let pp_hum fmt (t : t) =
match t with
| `Write iovecs -> Format.fprintf fmt "Write %S" (iovecs_to_string iovecs)
| `Yield -> Format.pp_print_string fmt "Yield"
| `Close len -> Format.fprintf fmt "Close %i" len
;;
let to_write_as_string t =
match t with
| `Write iovecs -> Some (iovecs_to_string iovecs)
| `Close _ | `Yield -> None
;;
end
let write_operation = Alcotest.of_pp Write_operation.pp_hum
let read_operation = Alcotest.of_pp Read_operation.pp_hum
module Headers = struct
include Headers
let (@) a b = Headers.add_list a (Headers.to_list b)
let connection_close = Headers.of_list ["connection", "close"]
let encoding_chunked = Headers.of_list ["transfer-encoding", "chunked"]
let encoding_fixed n = Headers.of_list ["content-length", string_of_int n]
end