Message ID | 20190520124716.30472-7-kraxel@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | tests/vm: serial console autoinstall, misc fixes. | expand |
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 >
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