tests: daemon: Cleanly shut down the daemon on exit.

This refines the previous commit by shutting down the daemon cleanly
at the end of the test (assuming the test was successful).  It
repurposes the 'internal_exit' API for this, which was previously used
by the now defunct --enable-valgrind-daemon functionality.
This commit is contained in:
Richard W.M. Jones
2015-06-24 12:43:32 +01:00
parent 9f85477cba
commit f2438b75a2
3 changed files with 8 additions and 14 deletions

View File

@@ -46,14 +46,9 @@ do_internal_autosync (void)
}
/* NB: Only called when valgrinding the daemon. */
int
int __attribute__((noreturn))
do_internal_exit (void)
{
if (!autosync_umount) {
reply_with_error ("guestfsd -r flag used, ignoring");
return -1;
}
/* Send a reply before exiting so the protocol doesn't get confused. */
reply (NULL, NULL);

View File

@@ -11951,7 +11951,8 @@ This function is used internally when setting up the appliance." };
name = "internal_exit"; added = (1, 23, 30);
style = RErr, [], [];
proc_nr = Some 414;
visibility = VInternal;
(* Really VInternal, but we need to use it from the Perl bindings. XXX *)
visibility = VDebug;
cancellable = true;
shortdesc = "cause the daemon to exit (internal use only)";
longdesc = "\

View File

@@ -93,14 +93,15 @@ sub run_tests {
# libguestfs live.
$g = Sys::Guestfs->new ();
$g->set_backend ("unix:" . $sockname);
$g->set_autosync (0);
$g->launch;
# Run the user tests.
my $r = ::tests ($g);
# Close the socket. The daemon should now exit.
$g->shutdown ();
$g->close ();
# Tell the daemon to exit cleanly, and remove the socket.
$g->internal_exit;
$g->close;
unlink $sockname;
waitpid ($pid, 0) or die "waitpid: $!";
@@ -112,10 +113,7 @@ sub run_tests {
my $status = $? >> 8;
die "ERROR: guestfsd died with exit code 119 (valgrind failure)\n"
if $status == 119;
# Note we allow guestfsd to die with exit code 1, because
# that indicates a read failure from the socket.
die "ERROR: guestfsd died with exit code $status\n" if $status > 1;
die "ERROR: guestfsd died with exit code $status\n";
}
# Exit with failure if the user test failed.