On 5/20/19 2:47 PM, Gerd Hoffmann wrote: > When not running in snapshot mode ask the guest to poweroff and wait for > this to finish instead of simply quitting qemu, so the guest can flush > pending updates to disk. > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > Tested-by: Thomas Huth <th...@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> Tested-by: Philippe Mathieu-Daudé <phi...@redhat.com> > --- > tests/vm/basevm.py | 22 +++++++++++++++------- > 1 file changed, 15 insertions(+), 7 deletions(-) > > diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py > index 878f1a7a32b8..465c7b80d011 100755 > --- a/tests/vm/basevm.py > +++ b/tests/vm/basevm.py > @@ -51,6 +51,8 @@ class BaseVM(object): > name = "#base" > # The guest architecture, to be overridden by subclasses > arch = "#arch" > + # command to halt the guest, can be overridden by subclasses > + poweroff = "poweroff" > def __init__(self, debug=False, vcpus=None): > self._guest = None > self._tmpdir = os.path.realpath(tempfile.mkdtemp(prefix="vm-test-", > @@ -201,6 +203,10 @@ class BaseVM(object): > def wait(self): > self._guest.wait() > > + def graceful_shutdown(self): > + self.ssh_root(self.poweroff) > + self._guest.wait() > + > def qmp(self, *args, **kwargs): > return self._guest.qmp(*args, **kwargs) > > @@ -277,11 +283,13 @@ def main(vmcls): > traceback.print_exc() > return 2 > > - if args.interactive: > - if vm.ssh(*cmd) == 0: > - return 0 > + exitcode = 0 > + if vm.ssh(*cmd) != 0: > + exitcode = 3 > + if exitcode != 0 and args.interactive: > vm.ssh() > - return 3 > - else: > - if vm.ssh(*cmd) != 0: > - return 3 > + > + if not args.snapshot: > + vm.graceful_shutdown() > + > + return exitcode >