Module: tools Branch: master Commit: 7efd44208f2686d9c3d168f021d40c3172804dcd URL: https://source.winehq.org/git/tools.git/?a=commit;h=7efd44208f2686d9c3d168f0...
Author: Francois Gouget fgouget@codeweavers.com Date: Fri Sep 20 15:04:21 2019 +0200
testbot/LibvirtTool: Detect if a VM is booting after a revert.
And adjust the TestAgent connection timeout accordingly.
Signed-off-by: Francois Gouget fgouget@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
testbot/bin/LibvirtTool.pl | 6 +++--- testbot/lib/WineTestBot/LibvirtDomain.pm | 13 +++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/testbot/bin/LibvirtTool.pl b/testbot/bin/LibvirtTool.pl index dca5a92..60e868e 100755 --- a/testbot/bin/LibvirtTool.pl +++ b/testbot/bin/LibvirtTool.pl @@ -366,7 +366,7 @@ sub Revert() # Revert the VM (and power it on if necessary) my $Domain = $VM->GetDomain(); Debug(Elapsed($Start), " Reverting $VMKey to ", $VM->IdleSnapshot, "\n"); - my $ErrMessage = $Domain->RevertToSnapshot(); + my ($ErrMessage, $Booting) = $Domain->RevertToSnapshot(); if (defined $ErrMessage) { # Libvirt/QEmu is buggy and cannot revert a running VM from one hardware @@ -380,7 +380,7 @@ sub Revert() }
Debug(Elapsed($Start), " Reverting $VMKey to ", $VM->IdleSnapshot, "... again\n"); - $ErrMessage = $Domain->RevertToSnapshot(); + ($ErrMessage, $Booting) = $Domain->RevertToSnapshot(); } if (defined $ErrMessage) { @@ -394,7 +394,7 @@ sub Revert() Debug(Elapsed($Start), " Verifying the TestAgent server\n"); LogMsg "Verifying the $VMKey TestAgent server\n"; my $TA = $VM->GetAgent(); - $TA->SetConnectTimeout(undef, undef, $WaitForBoot); + $TA->SetConnectTimeout(undef, undef, $WaitForBoot) if ($Booting); my $Success = $TA->Ping(); $TA->Disconnect(); if (!$Success) diff --git a/testbot/lib/WineTestBot/LibvirtDomain.pm b/testbot/lib/WineTestBot/LibvirtDomain.pm index f0a8c69..bb68bd0 100644 --- a/testbot/lib/WineTestBot/LibvirtDomain.pm +++ b/testbot/lib/WineTestBot/LibvirtDomain.pm @@ -313,11 +313,20 @@ sub RevertToSnapshot($)
my $SnapshotName = $self->{VM}->IdleSnapshot; my ($ErrMessage, $Domain, $Snapshot) = $self->_GetSnapshot($SnapshotName); - return $ErrMessage if (defined $ErrMessage); + return ($ErrMessage, undef) if (defined $ErrMessage);
# Note that if the snapshot was of a powered off domain, this boots it up eval { $Snapshot->revert_to(Sys::Virt::DomainSnapshot::REVERT_RUNNING) }; - return $@ ? $self->_Reset(_eval_err()) : undef; + return $self->_Reset(_eval_err(), undef) if ($@); + + my ($State, $Reason) = $Domain->get_state(); + if ($State != Sys::Virt::Domain::STATE_RUNNING) + { + return ($self->{VM}->Name ." is not running (". + _GetStateDescription($State, $Reason) + .") after revert to $SnapshotName", undef); + } + return (undef, $Reason != Sys::Virt::Domain::STATE_RUNNING_FROM_SNAPSHOT); }
sub CreateSnapshot($)