On Fri, Nov 04, 2022 at 08:22:59AM +0100, Laszlo Ersek wrote: > On 11/03/22 16:16, Richard W.M. Jones wrote: > > On Thu, Nov 03, 2022 at 04:03:42PM +0100, Laszlo Ersek wrote: > >> On 11/02/22 22:10, Richard W.M. Jones wrote: > >>> +open Unix > >>> +open Printf > >>> + > >>> +let () = > >>> + let nbd = NBD.create () in > >>> + > >>> + (* Unlike other tests, we're going to run nbdkit as a subprocess > >>> + * by hand and have it listening on a randomly named socket > >>> + * that we create. > >>> + *) > >>> + let sock = Filename.temp_file "580-" ".sock" in > >>> + unlink sock; > >>> + let pidfile = Filename.temp_file "580-" ".pid" in > >>> + unlink pidfile; > >>> + let cmd = > >>> + sprintf "nbdkit -U %s -P %s --exit-with-parent memory size=512 &" > >>> + (Filename.quote sock) (Filename.quote pidfile) in > >>> + if Sys.command cmd <> 0 then > >>> + failwith "nbdkit command failed"; > >>> + let rec loop i = > >>> + if i > 60 then > >>> + failwith "nbdkit subcommand did not start up"; > >>> + if not (Sys.file_exists pidfile) then ( > >>> + sleep 1; > >>> + loop (i+1) > >>> + ) > >>> + in > >>> + loop 0; > >>> + > >>> + (* Connect to the subprocess using a Unix.sockaddr. *) > >>> + let sa = ADDR_UNIX sock in > >>> + NBD.aio_connect nbd sa; > >>> + while NBD.aio_is_connecting nbd do > >>> + ignore (NBD.poll nbd 1) > >>> + done; > >>> + assert (NBD.aio_is_ready nbd); > >>> + NBD.close nbd; > >>> + > >>> + (* Kill the nbdkit subprocess. *) > >>> + let chan = open_in pidfile in > >>> + let pid = int_of_string (input_line chan) in > >>> + kill pid Sys.sigint; > >> > >> I think it's more customary to send SIGTERM in such situations; SIGINT > >> is more like an interactive interrupt signal (usually sent by the > >> terminal driver when the INTR character is entered on the terminal). > >> POSIX calls SIGINT "Terminal interrupt signal", and SIGTERM "Termination > >> signal". But it's really tangential. > > > > I changed it to SIGTERM now (commit eb13699a75). > > > > The whole test is very unsatisfactory though. Compare it to the > > elegance of the equivalent Python test: > > > > https://gitlab.com/nbdkit/libnbd/-/blob/master/python/python-aio-connect-unix.sh > > Can you perhaps introduce the test not under ML_TESTS but TESTS (called > "test_580_aio_connect.sh")? Then use the "captive nbdkit" pattern > (--run) just like in the python example. > > Now, ocaml doesn't support "-c" (I think), so the "$PYTHON -c" idea > won't work identically, but if you also introduced > "test_580_aio_connect.ml", and began that with an "ocaml shebang", that > should work, shouldn't it? > > nbdkit [...] --run 'test_580_aio_connect.ml "$unixsocket"' > > (Not sure if it's worth the churn though.)
I was thinking about a complicated scheme with re-execing the test under nbdkit, but the above might well work too. I'll see what I can do. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs