test: add a test for the hash server+client

This commit is contained in:
Simon Cruanes 2024-02-20 18:25:18 -05:00
parent 83ae0e7a4e
commit 004f5fc82b
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4
4 changed files with 246 additions and 7 deletions

View file

@ -1,3 +1,14 @@
(executables (executables
(names echo_server echo_client hash_server hash_client) (names echo_server echo_client hash_server hash_client)
(libraries moonpool moonpool-lwt lwt lwt.unix trace.core trace-tef)) (libraries moonpool moonpool-lwt lwt lwt.unix trace.core trace-tef))
(rule
(targets output_hash.txt)
(deps ./hash_server.exe ./hash_client.exe ./run_hash.sh)
(action
(with-stdout-to %{targets}
(run ./run_hash.sh -d ../../src --n-conn=2 -j=4 --ext ".ml"))))
(rule
(alias runtest)
(action (diff ./output_hash.expected ./output_hash.txt)))

View file

@ -2,9 +2,15 @@ module M = Moonpool
module M_lwt = Moonpool_lwt module M_lwt = Moonpool_lwt
module Trace = Trace_core module Trace = Trace_core
module Str_tbl = Hashtbl.Make (struct
include String
let hash = Hashtbl.hash
end)
let ( let@ ) = ( @@ ) let ( let@ ) = ( @@ )
let main ~port ~runner ~dir ~n_conn () : unit Lwt.t = let main ~port ~runner ~ext ~dir ~n_conn () : unit Lwt.t =
let@ _sp = Trace.with_span ~__FILE__ ~__LINE__ "main" in let@ _sp = Trace.with_span ~__FILE__ ~__LINE__ "main" in
Printf.printf "hash dir=%S\n%!" dir; Printf.printf "hash dir=%S\n%!" dir;
@ -15,21 +21,34 @@ let main ~port ~runner ~dir ~n_conn () : unit Lwt.t =
(* TODO: *) (* TODO: *)
let run_task () : unit = let run_task () : unit =
let _sp = Trace.enter_manual_toplevel_span ~__FILE__ ~__LINE__ "run-task" in let _sp = Trace.enter_manual_toplevel_span ~__FILE__ ~__LINE__ "run-task" in
let seen = Str_tbl.create 16 in
M_lwt.TCP_client.with_connect_lwt addr @@ fun ic oc -> M_lwt.TCP_client.with_connect_lwt addr @@ fun ic oc ->
let rec walk file : unit = let rec walk file : unit =
if not (Sys.file_exists file) then if not (Sys.file_exists file) then
() ()
else if Sys.is_regular_file file then ( else if Str_tbl.mem seen file then
M_lwt.run_in_lwt_and_await (fun () -> Lwt_io.write_line oc file); ()
let res = M_lwt.run_in_lwt_and_await (fun () -> Lwt_io.read_line ic) in else if Sys.is_regular_file file then
Printf.printf "%s\n%!" res if ext <> "" && Filename.extension file <> ext then
) else if Sys.is_directory file then ( ()
else (
Str_tbl.add seen file ();
M_lwt.run_in_lwt_and_await (fun () -> Lwt_io.write_line oc file);
let res =
M_lwt.run_in_lwt_and_await (fun () -> Lwt_io.read_line ic)
in
Printf.printf "%s\n%!" res
)
else if Sys.is_directory file then (
let _sp = let _sp =
Trace.enter_manual_sub_span ~parent:_sp ~__FILE__ ~__LINE__ "walk-dir" Trace.enter_manual_sub_span ~parent:_sp ~__FILE__ ~__LINE__ "walk-dir"
~data:(fun () -> [ "d", `String file ]) ~data:(fun () -> [ "d", `String file ])
in in
Printf.printf "explore %S\n%!" file; Printf.printf "explore %S\n%!" file;
Str_tbl.add seen file ();
let d = Sys.readdir file in let d = Sys.readdir file in
Array.sort String.compare d; Array.sort String.compare d;
Array.iter (fun sub -> walk (Filename.concat file sub)) d Array.iter (fun sub -> walk (Filename.concat file sub)) d
@ -51,6 +70,7 @@ let () =
let port = ref 1234 in let port = ref 1234 in
let j = ref 4 in let j = ref 4 in
let n_conn = ref 100 in let n_conn = ref 100 in
let ext = ref "" in
let dir = ref "." in let dir = ref "." in
let opts = let opts =
@ -59,6 +79,7 @@ let () =
"-j", Arg.Set_int j, " number of threads"; "-j", Arg.Set_int j, " number of threads";
"-d", Arg.Set_string dir, " directory to hash"; "-d", Arg.Set_string dir, " directory to hash";
"--n-conn", Arg.Set_int n_conn, " number of parallel connections"; "--n-conn", Arg.Set_int n_conn, " number of parallel connections";
"--ext", Arg.Set_string ext, " extension to filter files";
] ]
|> Arg.align |> Arg.align
in in
@ -66,4 +87,5 @@ let () =
let@ runner = M.Ws_pool.with_ ~name:"tpool" ~num_threads:!j () in let@ runner = M.Ws_pool.with_ ~name:"tpool" ~num_threads:!j () in
Lwt_engine.set @@ new Lwt_engine.libev (); Lwt_engine.set @@ new Lwt_engine.libev ();
Lwt_main.run @@ main ~runner ~port:!port ~dir:!dir ~n_conn:!n_conn () Lwt_main.run
@@ main ~runner ~port:!port ~ext:!ext ~dir:!dir ~n_conn:!n_conn ()

View file

@ -0,0 +1,198 @@
run hash client -d ../../src --n-conn=2 -j=4 --ext .ml
listening on port 1234
connecting to port 1234
explore explore "../../src/core""../../src/core"
explore explore "../../src/cpp/.cpp.eobjs/byte"
explore "../../src"
explore "../../src"
explore "../../src/core/.merlin-conf"
explore "../../src/core/.merlin-conf"
explore "../../src/core/.moonpool.objs"
explore "../../src/core/.moonpool.objs"
explore "../../src/core/.moonpool.objs/byte"
explore "../../src/core/.moonpool.objs/byte"
explore "../../src/core/.moonpool.objs/native"
explore "../../src/core/.moonpool.objs/native"
explore "../../src/core/.moonpool.objs/public_cmi"
explore "../../src/core/.moonpool.objs/public_cmi"
explore "../../src/cpp"
explore "../../src/cpp"
explore "../../src/cpp/.cpp.eobjs"
explore "../../src/cpp/.cpp.eobjs"
explore "../../src/cpp/.cpp.eobjs/native"explore
explore "../../src/cpp/.merlin-conf"
explore "../../src/cpp/.merlin-conf"
explore "../../src/fib"
explore "../../src/fib"
explore "../../src/fib/.merlin-conf"
explore "../../src/fib/.merlin-conf"
explore "../../src/fib/.moonpool_fib.objs"
explore "../../src/fib/.moonpool_fib.objs"
explore "../../src/fib/.moonpool_fib.objs/byte"
explore "../../src/fib/.moonpool_fib.objs/byte"
explore "../../src/fib/.moonpool_fib.objs/native"explore "../../src/fib/.moonpool_fib.objs/native"
explore "../../src/forkjoin"
explore "../../src/forkjoin"
explore "../../src/forkjoin/.merlin-conf"
explore "../../src/forkjoin/.merlin-conf"
explore "../../src/forkjoin/.moonpool_forkjoin.objs"
explore "../../src/forkjoin/.moonpool_forkjoin.objs"
explore "../../src/forkjoin/.moonpool_forkjoin.objs/byte"
explore "../../src/forkjoin/.moonpool_forkjoin.objs/byte"
explore "../../src/lwt"
explore "../../src/lwt"
explore "../../src/lwt/.merlin-conf"
explore "../../src/lwt/.merlin-conf"
explore "../../src/lwt/.moonpool_lwt.objs"
explore "../../src/lwt/.moonpool_lwt.objs"
explore "../../src/lwt/.moonpool_lwt.objs/byte"
explore "../../src/lwt/.moonpool_lwt.objs/byte"
explore "../../src/lwt/.moonpool_lwt.objs/native"
explore "../../src/lwt/.moonpool_lwt.objs/native"
explore "../../src/lwt/.moonpool_lwt.objs/public_cmi"
explore "../../src/lwt/.moonpool_lwt.objs/public_cmi"
explore "../../src/private"
explore "../../src/private"
explore "../../src/private/.merlin-conf"
explore "../../src/private/.merlin-conf"
explore "../../src/private/.moonpool_private.objs"
explore "../../src/private/.moonpool_private.objs"
explore "../../src/private/.moonpool_private.objs/byte"
explore "../../src/private/.moonpool_private.objs/byte"
explore "../../src/private/.moonpool_private.objs/native"
explore "../../src/private/.moonpool_private.objs/native"
hash dir="../../src"
../../src/core/background_thread.ml: 6d5c624dac304cf82ffa6f738516ec9a97aba297
../../src/core/background_thread.ml: 6d5c624dac304cf82ffa6f738516ec9a97aba297
../../src/core/background_thread.pp.ml: 6d5c624dac304cf82ffa6f738516ec9a97aba297
../../src/core/background_thread.pp.ml: 6d5c624dac304cf82ffa6f738516ec9a97aba297
../../src/core/bb_queue.ml: 6365ccec9683cfbf28e3385bab8549774e1eec69
../../src/core/bb_queue.ml: 6365ccec9683cfbf28e3385bab8549774e1eec69
../../src/core/bb_queue.pp.ml: 6365ccec9683cfbf28e3385bab8549774e1eec69
../../src/core/bb_queue.pp.ml: 6365ccec9683cfbf28e3385bab8549774e1eec69
../../src/core/bounded_queue.ml: 376746b4041b087e7b1c27f7eec119d699551e48
../../src/core/bounded_queue.ml: 376746b4041b087e7b1c27f7eec119d699551e48
../../src/core/bounded_queue.pp.ml: 376746b4041b087e7b1c27f7eec119d699551e48
../../src/core/bounded_queue.pp.ml: 376746b4041b087e7b1c27f7eec119d699551e48
../../src/core/chan.ml: 5fabf963a1515f044573b49ad66cc808f814205f
../../src/core/chan.ml: 5fabf963a1515f044573b49ad66cc808f814205f
../../src/core/chan.pp.ml: 8e3d9ff618d21b9e1bf95878a2a821533aaf53a7
../../src/core/chan.pp.ml: 8e3d9ff618d21b9e1bf95878a2a821533aaf53a7
../../src/core/domain_pool_.ml: 2dad9ca7afee20fc204d07c131fbd9925d0991fd
../../src/core/domain_pool_.ml: 2dad9ca7afee20fc204d07c131fbd9925d0991fd
../../src/core/domain_pool_.pp.ml: 2dad9ca7afee20fc204d07c131fbd9925d0991fd
../../src/core/domain_pool_.pp.ml: 2dad9ca7afee20fc204d07c131fbd9925d0991fd
../../src/core/exn_bt.ml: e5cd6bea505fdb562044427f570782048bbcfb77
../../src/core/exn_bt.ml: e5cd6bea505fdb562044427f570782048bbcfb77
../../src/core/exn_bt.pp.ml: e5cd6bea505fdb562044427f570782048bbcfb77
../../src/core/exn_bt.pp.ml: e5cd6bea505fdb562044427f570782048bbcfb77
../../src/core/fifo_pool.ml: c9e24c2e8cf7c56143e5ed42c355c03d02d56652
../../src/core/fifo_pool.ml: c9e24c2e8cf7c56143e5ed42c355c03d02d56652
../../src/core/fifo_pool.pp.ml: f258fa6dc5d0ea1ee84efba9f145ea855b24a631
../../src/core/fifo_pool.pp.ml: f258fa6dc5d0ea1ee84efba9f145ea855b24a631
../../src/core/fut.ml: 0076fabd647b5efaa6fd808f077c64c9ecf50761
../../src/core/fut.ml: 0076fabd647b5efaa6fd808f077c64c9ecf50761
../../src/core/fut.pp.ml: efa412417f6a95e0b38f5068565a4dc5d1f5ae80
../../src/core/fut.pp.ml: efa412417f6a95e0b38f5068565a4dc5d1f5ae80
../../src/core/immediate_runner.ml: d616257706d0700273bf84f5334f9e421ff3b6db
../../src/core/immediate_runner.ml: d616257706d0700273bf84f5334f9e421ff3b6db
../../src/core/immediate_runner.pp.ml: d616257706d0700273bf84f5334f9e421ff3b6db
../../src/core/immediate_runner.pp.ml: d616257706d0700273bf84f5334f9e421ff3b6db
../../src/core/lock.ml: ed161041459cab03969cac14d2cc33e5bca93e8f
../../src/core/lock.ml: ed161041459cab03969cac14d2cc33e5bca93e8f
../../src/core/lock.pp.ml: ed161041459cab03969cac14d2cc33e5bca93e8f
../../src/core/lock.pp.ml: ed161041459cab03969cac14d2cc33e5bca93e8f
../../src/core/moonpool.ml: fd662a1a0d5d8eb349b354e020d1d209ee1c3a5c
../../src/core/moonpool.ml: fd662a1a0d5d8eb349b354e020d1d209ee1c3a5c
../../src/core/moonpool.pp.ml: d3c0ed85c23e01c0ccebcf3eecec21f0f86fa2c6
../../src/core/moonpool.pp.ml: d3c0ed85c23e01c0ccebcf3eecec21f0f86fa2c6
../../src/core/runner.ml: cee177d402f775879f853e487d35429affb9272a
../../src/core/runner.ml: cee177d402f775879f853e487d35429affb9272a
../../src/core/runner.pp.ml: cee177d402f775879f853e487d35429affb9272a
../../src/core/runner.pp.ml: cee177d402f775879f853e487d35429affb9272a
../../src/core/suspend_.ml: 6444a03032f51f3e5c8a5a26298333934f3c73b0
../../src/core/suspend_.ml: 6444a03032f51f3e5c8a5a26298333934f3c73b0
../../src/core/suspend_.pp.ml: ef07aefc1f6a590e2508ecafefd8c3508cd312d2
../../src/core/suspend_.pp.ml: ef07aefc1f6a590e2508ecafefd8c3508cd312d2
../../src/core/task_local_storage.ml: 89ede0bb4821bdd6fff0c1aba9fdd161914668e9
../../src/core/task_local_storage.ml: 89ede0bb4821bdd6fff0c1aba9fdd161914668e9
../../src/core/task_local_storage.pp.ml: 89ede0bb4821bdd6fff0c1aba9fdd161914668e9
../../src/core/task_local_storage.pp.ml: 89ede0bb4821bdd6fff0c1aba9fdd161914668e9
../../src/core/types_.ml: 48dde17cf05a510a258be9ca2ea1a20f5da4e3cd
../../src/core/types_.ml: 48dde17cf05a510a258be9ca2ea1a20f5da4e3cd
../../src/core/types_.pp.ml: 48dde17cf05a510a258be9ca2ea1a20f5da4e3cd
../../src/core/types_.pp.ml: 48dde17cf05a510a258be9ca2ea1a20f5da4e3cd
../../src/core/util_pool_.ml: e9c362323178dc1dcb58276eb36729e9634ba7fd
../../src/core/util_pool_.ml: e9c362323178dc1dcb58276eb36729e9634ba7fd
../../src/core/util_pool_.pp.ml: e9c362323178dc1dcb58276eb36729e9634ba7fd
../../src/core/util_pool_.pp.ml: e9c362323178dc1dcb58276eb36729e9634ba7fd
../../src/core/ws_pool.ml: c4b4e64dbcd494fa60d3c3158cc0e0e247269a3d
../../src/core/ws_pool.ml: c4b4e64dbcd494fa60d3c3158cc0e0e247269a3d
../../src/core/ws_pool.pp.ml: 0074b9c5735e05c6781ee98fb593019771964f5e
../../src/core/ws_pool.pp.ml: 0074b9c5735e05c6781ee98fb593019771964f5e
"../../src/cpp/.cpp.eobjs/byte"
"../../src/cpp/.cpp.eobjs/native"
../../src/cpp/cpp.ml: 95f8df4e79fe7575aff0c126b329d930be82dde9
../../src/cpp/cpp.ml: 95f8df4e79fe7575aff0c126b329d930be82dde9
../../src/fib/fiber.ml: 771c014648a6f7e00d93ab3a5c4bb2ec49841c4d
../../src/fib/fiber.ml: 771c014648a6f7e00d93ab3a5c4bb2ec49841c4d
../../src/fib/fiber.pp.ml: 771c014648a6f7e00d93ab3a5c4bb2ec49841c4d
../../src/fib/fiber.pp.ml: 771c014648a6f7e00d93ab3a5c4bb2ec49841c4d
../../src/fib/fls.ml: 1d2d745c203a03980195471421e4101879d46a31
../../src/fib/fls.ml: 1d2d745c203a03980195471421e4101879d46a31
../../src/fib/fls.pp.ml: 1d2d745c203a03980195471421e4101879d46a31
../../src/fib/fls.pp.ml: 1d2d745c203a03980195471421e4101879d46a31
../../src/fib/handle.ml: d3c9c3c2c414372e8ce6cd7eb113955292cdda5e
../../src/fib/handle.ml: d3c9c3c2c414372e8ce6cd7eb113955292cdda5e
../../src/fib/handle.pp.ml: d3c9c3c2c414372e8ce6cd7eb113955292cdda5e
../../src/fib/handle.pp.ml: d3c9c3c2c414372e8ce6cd7eb113955292cdda5e
../../src/forkjoin/moonpool_forkjoin.ml: bc38ed5d228a85465bbd4e67d1e1f227d57b5fe3
../../src/forkjoin/moonpool_forkjoin.ml: bc38ed5d228a85465bbd4e67d1e1f227d57b5fe3
../../src/lwt/base.ml: f04b92ec1f6d9f389b7c5dc26fc17e8bd80c4673
../../src/lwt/base.ml: f04b92ec1f6d9f389b7c5dc26fc17e8bd80c4673
../../src/lwt/common_.ml: b3267137b9e0d74d220b090de9fcce051dc2bf93
../../src/lwt/common_.ml: b3267137b9e0d74d220b090de9fcce051dc2bf93
../../src/lwt/IO_in.ml: 6badd5ffb8fbbdb53f729b93a478bb007f2494f8
../../src/lwt/IO_in.ml: 6badd5ffb8fbbdb53f729b93a478bb007f2494f8
../../src/lwt/IO.ml: 48fae1816121700314aebbdfcca562979dc3ff06
../../src/lwt/IO.ml: 48fae1816121700314aebbdfcca562979dc3ff06
../../src/lwt/IO_out.ml: 600db42f1fecdd95ab216db85eadac6371db53c2
../../src/lwt/IO_out.ml: 600db42f1fecdd95ab216db85eadac6371db53c2
../../src/lwt/moonpool_lwt.ml: c71a73fb39bc2be146c7a30528799235c86cfcb8
../../src/lwt/moonpool_lwt.ml: c71a73fb39bc2be146c7a30528799235c86cfcb8
../../src/lwt/tcp_client.ml: d9c3f1a80709d2a3160309f00343bd1f561d879d
../../src/lwt/tcp_client.ml: d9c3f1a80709d2a3160309f00343bd1f561d879d
../../src/lwt/tcp_server.ml: 8219be881ec5b28a15cf6a5f3fc8cd6242f55091
../../src/lwt/tcp_server.ml: 8219be881ec5b28a15cf6a5f3fc8cd6242f55091
../../src/private/atomic_.ml: 59361c33aecdba9500f23520f6d132dc17994403
../../src/private/atomic_.ml: 59361c33aecdba9500f23520f6d132dc17994403
../../src/private/atomic_.pp.ml: 0da0702698c2bf4d32e20ba759f049f5c08aed4b
../../src/private/atomic_.pp.ml: 0da0702698c2bf4d32e20ba759f049f5c08aed4b
../../src/private/dla_.ml: 0a358d447df534f08fd7200b5b86ef0ecf56c385
../../src/private/dla_.ml: 0a358d447df534f08fd7200b5b86ef0ecf56c385
../../src/private/dla_.pp.ml: 0a358d447df534f08fd7200b5b86ef0ecf56c385
../../src/private/dla_.pp.ml: 0a358d447df534f08fd7200b5b86ef0ecf56c385
../../src/private/dla_.real.ml: 61f358e9c5dc5e3981257544fb9619c101862072
../../src/private/dla_.real.ml: 61f358e9c5dc5e3981257544fb9619c101862072
../../src/private/domain_.ml: f9d3066c0302c7538bba7f3c66373994930e6582
../../src/private/domain_.ml: f9d3066c0302c7538bba7f3c66373994930e6582
../../src/private/domain_.pp.ml: 7a49ce3176beda664781d982536a7491b6c7d1e2
../../src/private/domain_.pp.ml: 7a49ce3176beda664781d982536a7491b6c7d1e2
../../src/private/thread_local_storage_.ml: 0608b7a6514ff68c5301f2c90fce5bdbfa9b85a9
../../src/private/thread_local_storage_.ml: 0608b7a6514ff68c5301f2c90fce5bdbfa9b85a9
../../src/private/thread_local_storage_.pp.ml: 0608b7a6514ff68c5301f2c90fce5bdbfa9b85a9
../../src/private/thread_local_storage_.pp.ml: 0608b7a6514ff68c5301f2c90fce5bdbfa9b85a9
../../src/private/thread_local_storage_.stub.ml: 912952a77ec2ff34ee31eb8f91de1b2fe2f2c802
../../src/private/thread_local_storage_.stub.ml: 912952a77ec2ff34ee31eb8f91de1b2fe2f2c802
../../src/private/tracing_.ml: cc2edf9a726a4af1b06caa0201c9800884efafba
../../src/private/tracing_.ml: cc2edf9a726a4af1b06caa0201c9800884efafba
../../src/private/tracing_.pp.ml: cc2edf9a726a4af1b06caa0201c9800884efafba
../../src/private/tracing_.pp.ml: cc2edf9a726a4af1b06caa0201c9800884efafba
../../src/private/tracing_.real.ml: cef5edfa46b0ac7c9d507de73776a3c48c856860
../../src/private/tracing_.real.ml: cef5edfa46b0ac7c9d507de73776a3c48c856860
../../src/private/ws_deque_.ml: 03a3764ef4f30673735f08b0e2458afdbb678402
../../src/private/ws_deque_.ml: 03a3764ef4f30673735f08b0e2458afdbb678402
../../src/private/ws_deque_.pp.ml: 03a3764ef4f30673735f08b0e2458afdbb678402
../../src/private/ws_deque_.pp.ml: 03a3764ef4f30673735f08b0e2458afdbb678402

8
test/lwt/run_hash.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/bash
./hash_server.exe &
echo "run hash client $@"
./hash_client.exe $@ | sort
kill %1