From 004f5fc82b7c26496db508ce6a7e03a1d6cf8622 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 20 Feb 2024 18:25:18 -0500 Subject: [PATCH] test: add a test for the hash server+client --- test/lwt/dune | 11 ++ test/lwt/hash_client.ml | 36 +++++-- test/lwt/output_hash.expected | 198 ++++++++++++++++++++++++++++++++++ test/lwt/run_hash.sh | 8 ++ 4 files changed, 246 insertions(+), 7 deletions(-) create mode 100644 test/lwt/output_hash.expected create mode 100755 test/lwt/run_hash.sh diff --git a/test/lwt/dune b/test/lwt/dune index f52b77d7..e4708887 100644 --- a/test/lwt/dune +++ b/test/lwt/dune @@ -1,3 +1,14 @@ (executables (names echo_server echo_client hash_server hash_client) (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))) diff --git a/test/lwt/hash_client.ml b/test/lwt/hash_client.ml index 8d6db790..372704d3 100644 --- a/test/lwt/hash_client.ml +++ b/test/lwt/hash_client.ml @@ -2,9 +2,15 @@ module M = Moonpool module M_lwt = Moonpool_lwt module Trace = Trace_core +module Str_tbl = Hashtbl.Make (struct + include String + + let hash = Hashtbl.hash +end) + 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 Printf.printf "hash dir=%S\n%!" dir; @@ -15,21 +21,34 @@ let main ~port ~runner ~dir ~n_conn () : unit Lwt.t = (* TODO: *) let run_task () : unit = 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 -> let rec walk file : unit = if not (Sys.file_exists file) then () - else if Sys.is_regular_file 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 - Printf.printf "%s\n%!" res - ) else if Sys.is_directory file then ( + else if Str_tbl.mem seen file then + () + else if Sys.is_regular_file file then + if ext <> "" && Filename.extension file <> ext 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 = Trace.enter_manual_sub_span ~parent:_sp ~__FILE__ ~__LINE__ "walk-dir" ~data:(fun () -> [ "d", `String file ]) in Printf.printf "explore %S\n%!" file; + Str_tbl.add seen file (); let d = Sys.readdir file in Array.sort String.compare d; Array.iter (fun sub -> walk (Filename.concat file sub)) d @@ -51,6 +70,7 @@ let () = let port = ref 1234 in let j = ref 4 in let n_conn = ref 100 in + let ext = ref "" in let dir = ref "." in let opts = @@ -59,6 +79,7 @@ let () = "-j", Arg.Set_int j, " number of threads"; "-d", Arg.Set_string dir, " directory to hash"; "--n-conn", Arg.Set_int n_conn, " number of parallel connections"; + "--ext", Arg.Set_string ext, " extension to filter files"; ] |> Arg.align in @@ -66,4 +87,5 @@ let () = let@ runner = M.Ws_pool.with_ ~name:"tpool" ~num_threads:!j () in 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 () diff --git a/test/lwt/output_hash.expected b/test/lwt/output_hash.expected new file mode 100644 index 00000000..34ba5eb4 --- /dev/null +++ b/test/lwt/output_hash.expected @@ -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 diff --git a/test/lwt/run_hash.sh b/test/lwt/run_hash.sh new file mode 100755 index 00000000..cbdb4d8c --- /dev/null +++ b/test/lwt/run_hash.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +./hash_server.exe & + +echo "run hash client $@" +./hash_client.exe $@ | sort + +kill %1