forked from
anil.recoil.org/ocaml-requests
A batteries included HTTP/1.1 client in OCaml
1(*---------------------------------------------------------------------------
2 Copyright (c) 2025 Anil Madhavapeddy <anil@recoil.org>. All rights reserved.
3 SPDX-License-Identifier: ISC
4 ---------------------------------------------------------------------------*)
5
6(* Simple test to debug connection issues *)
7
8open Eio.Std
9
10let () =
11 Vlog.setup_test ~level:Logs.Debug ();
12 Logs.Src.set_level Conpool.src (Some Logs.Debug);
13 Eio_main.run @@ fun env ->
14 Switch.run @@ fun sw ->
15 traceln "Starting simple server on 127.0.0.1:9000";
16
17 (* Start a simple echo server *)
18 let raw_bytes = Bytes.create 4 in
19 Bytes.set raw_bytes 0 (Char.chr 127);
20 Bytes.set raw_bytes 1 (Char.chr 0);
21 Bytes.set raw_bytes 2 (Char.chr 0);
22 Bytes.set raw_bytes 3 (Char.chr 1);
23 let ipaddr = Eio.Net.Ipaddr.of_raw (Bytes.to_string raw_bytes) in
24
25 let socket =
26 Eio.Net.listen env#net ~sw ~reuse_addr:true ~backlog:10
27 (`Tcp (ipaddr, 9000))
28 in
29
30 Eio.Fiber.fork ~sw (fun () ->
31 Eio.Net.accept_fork socket ~sw ~on_error:raise (fun flow _addr ->
32 traceln "Server: accepted connection";
33 let buf = Eio.Buf_read.of_flow flow ~max_size:1024 in
34 let line = Eio.Buf_read.line buf in
35 traceln "Server: received: %s" line;
36 Eio.Flow.copy_string (line ^ "\n") flow;
37 Eio.Flow.close flow));
38
39 Eio.Time.sleep env#clock 0.1;
40
41 traceln "Creating connection pool";
42 let pool = Conpool.basic ~sw ~net:env#net ~clock:env#clock () in
43
44 traceln "Testing connection";
45 let endpoint = Conpool.Endpoint.v ~host:"127.0.0.1" ~port:9000 in
46
47 let response =
48 Conpool.with_connection pool endpoint (fun conn ->
49 traceln "Client: sending message";
50 Eio.Flow.copy_string "test message\n" conn.Conpool.flow;
51 let buf = Eio.Buf_read.of_flow conn.Conpool.flow ~max_size:1024 in
52 let resp = Eio.Buf_read.line buf in
53 traceln "Client: received: %s" resp;
54 resp)
55 in
56
57 traceln "Response: %s" response;
58 traceln "Test passed!"