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 <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>
> ---
> 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
>