tests/vm: proper guest shutdown

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 <kraxel@redhat.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20190617043858.8290-5-kraxel@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
Gerd Hoffmann 2019-06-17 06:38:51 +02:00 committed by Alex Bennée
parent 7f71d5051e
commit b3f94b2f46
1 changed files with 15 additions and 7 deletions

View File

@ -52,6 +52,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-",
@ -203,6 +205,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)
@ -279,11 +285,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