* [PATCH 1/3] KVM-test: introduce a verify_status method
2011-04-29 5:05 ` [Autotest] " Lucas Meneghel Rodrigues
@ 2011-05-06 15:03 ` Amos Kong
2011-05-06 15:03 ` [PATCH 2/3] KVM-test: Simple stop/continue test Amos Kong
2011-05-06 15:04 ` [PATCH 3/3] KVM-test: Check if guest bootable after reseting several times Amos Kong
2 siblings, 0 replies; 5+ messages in thread
From: Amos Kong @ 2011-05-06 15:03 UTC (permalink / raw)
To: autotest; +Cc: lmr, kvm
This method is used to check if VM status is same as
we expected.
Signed-off-by: Amos Kong <akong@redhat.com>
---
0 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/client/virt/kvm_monitor.py b/client/virt/kvm_monitor.py
index 7934b07..aff716a 100644
--- a/client/virt/kvm_monitor.py
+++ b/client/virt/kvm_monitor.py
@@ -282,6 +282,18 @@ class HumanMonitor(Monitor):
self.cmd("info status", debug=False)
+ def verify_status(self, status):
+ """
+ Verify VM status
+
+ @param status: Optional VM status, 'running' or 'paused'
+ @return: return True if VM status is same as we expected
+ """
+ o = self.cmd("info status", debug=False)
+ if status=='paused' or status=='running':
+ return (status in o)
+
+
# Command wrappers
# Notes:
# - All of the following commands raise exceptions in a similar manner to
@@ -650,6 +662,20 @@ class QMPMonitor(Monitor):
self.cmd(cmd="query-status", debug=False)
+ def verify_status(self, status):
+ """
+ Verify VM status
+
+ @param status: Optional VM status, 'running' or 'paused'
+ @return: return True if VM status is same as we expected
+ """
+ o = str(self.cmd(cmd="query-status", debug=False))
+ if (status=='paused' and "u'running': False" in o):
+ return True
+ if (status=='running' and "u'running': True" in o):
+ return True
+
+
def get_events(self):
"""
Return a list of the asynchronous events received since the last
diff --git a/client/virt/kvm_vm.py b/client/virt/kvm_vm.py
index 57fc61b..830ab2e 100644
--- a/client/virt/kvm_vm.py
+++ b/client/virt/kvm_vm.py
@@ -82,6 +82,15 @@ class VM(virt_vm.BaseVM):
return not self.process or not self.process.is_alive()
+ def verify_status(self, status):
+ """
+ Check VM status
+
+ @param status: Optional VM status, 'running' or 'paused'
+ @raise VMStatusError: If the VM status is not same as parameter
+ """
+ if not self.monitor.verify_status(status):
+ raise virt_vm.VMStatusError("VM status is unexpected.")
def clone(self, name=None, params=None, root_dir=None, address_cache=None,
diff --git a/client/virt/virt_vm.py b/client/virt/virt_vm.py
index fd28966..5e9838a 100644
--- a/client/virt/virt_vm.py
+++ b/client/virt/virt_vm.py
@@ -185,6 +185,8 @@ class VMMigrateStateMismatchError(VMMigrateError):
class VMRebootError(VMError):
pass
+class VMStatusError(VMError):
+ pass
def get_image_filename(params, root_dir):
"""
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH 2/3] KVM-test: Simple stop/continue test
2011-04-29 5:05 ` [Autotest] " Lucas Meneghel Rodrigues
2011-05-06 15:03 ` [PATCH 1/3] KVM-test: introduce a verify_status method Amos Kong
@ 2011-05-06 15:03 ` Amos Kong
2011-05-06 15:04 ` [PATCH 3/3] KVM-test: Check if guest bootable after reseting several times Amos Kong
2 siblings, 0 replies; 5+ messages in thread
From: Amos Kong @ 2011-05-06 15:03 UTC (permalink / raw)
To: autotest; +Cc: kvm
Change guest state by monitor cmd, verify guest status,
and try to login guest by network.
Changes from v1:
- use new method verify_status() to check vm status
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Amos Kong <akong@redhat.com>
---
client/tests/kvm/tests/stop_continue.py | 43 +++++++++++++++++++++++++++++++
client/tests/kvm/tests_base.cfg.sample | 4 +++
2 files changed, 47 insertions(+), 0 deletions(-)
create mode 100644 client/tests/kvm/tests/stop_continue.py
diff --git a/client/tests/kvm/tests/stop_continue.py b/client/tests/kvm/tests/stop_continue.py
new file mode 100644
index 0000000..62df48e
--- /dev/null
+++ b/client/tests/kvm/tests/stop_continue.py
@@ -0,0 +1,43 @@
+import logging
+from autotest_lib.client.common_lib import error
+
+
+def run_stop_continue(test, params, env):
+ """
+ Suspend a running Virtual Machine and verify its state.
+
+ 1) Boot the vm
+ 2) Suspend the vm through stop command
+ 3) Verify the state through info status command
+ 4) Check is the ssh session to guest is still responsive,
+ if succeed, fail the test.
+
+ @param test: Kvm test object
+ @param params: Dictionary with the test parameters
+ @param env: Dictionary with test environment.
+ """
+ vm = env.get_vm(params["main_vm"])
+ vm.verify_alive()
+ timeout = float(params.get("login_timeout", 240))
+ session = vm.wait_for_login(timeout=timeout)
+
+ try:
+ logging.info("Stop the VM")
+ vm.monitor.cmd("stop")
+ logging.info("Verifying the status of VM is 'paused'")
+ vm.verify_status("paused")
+
+ logging.info("Check the session is responsive")
+ if session.is_responsive():
+ raise error.TestFail("Session is still responsive after stop")
+
+ logging.info("Try to resume the guest")
+ vm.monitor.cmd("cont")
+ logging.info("Verifying the status of VM is 'running'")
+ vm.verify_status("running")
+
+ logging.info("Try to re-log into guest")
+ session = vm.wait_for_login(timeout=timeout)
+
+ finally:
+ session.close()
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index 78c84c6..1e659bc 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -261,6 +261,10 @@ variants:
- systemtap:
test_control_file = systemtap.control
+ - stop_continue:
+ type = stop_continue
+ kill_vm_on_error = yes
+
- linux_s3: install setup unattended_install.cdrom
only Linux
type = linux_s3
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH 3/3] KVM-test: Check if guest bootable after reseting several times
2011-04-29 5:05 ` [Autotest] " Lucas Meneghel Rodrigues
2011-05-06 15:03 ` [PATCH 1/3] KVM-test: introduce a verify_status method Amos Kong
2011-05-06 15:03 ` [PATCH 2/3] KVM-test: Simple stop/continue test Amos Kong
@ 2011-05-06 15:04 ` Amos Kong
2 siblings, 0 replies; 5+ messages in thread
From: Amos Kong @ 2011-05-06 15:04 UTC (permalink / raw)
To: autotest; +Cc: lmr, kvm
This test comes from a regression bug:
Guest can not found bootable device after reseting several times by
monitor command.
https://bugzilla.redhat.com/show_bug.cgi?id=531026
Changes from v1:
- add bug id to commitlog
- remove unnecessary imports
- add some log message
Signed-off-by: Amos Kong <akong@redhat.com>
---
client/tests/kvm/tests/system_reset_bootable.py | 31 +++++++++++++++++++++++
client/tests/kvm/tests_base.cfg.sample | 7 +++++
2 files changed, 38 insertions(+), 0 deletions(-)
create mode 100755 client/tests/kvm/tests/system_reset_bootable.py
diff --git a/client/tests/kvm/tests/system_reset_bootable.py b/client/tests/kvm/tests/system_reset_bootable.py
new file mode 100755
index 0000000..54536dc
--- /dev/null
+++ b/client/tests/kvm/tests/system_reset_bootable.py
@@ -0,0 +1,31 @@
+import logging, time
+from autotest_lib.client.common_lib import error
+
+def run_system_reset_bootable(test, params, env):
+ """
+ KVM reset test:
+ 1) Boot guest.
+ 2) Reset system by monitor command for several times.
+ 3) Log into the guest to verify it could normally boot.
+
+ @param test: kvm test object
+ @param params: Dictionary with the test parameters
+ @param env: Dictionary with test environment.
+ """
+ vm = env.get_vm(params["main_vm"])
+ vm.verify_alive()
+ timeout = float(params.get("login_timeout", 240))
+ reset_times = int(params.get("reset_times",20))
+ interval = int(params.get("reset_interval",10))
+ wait_time = int(params.get("wait_time_for_reset",60))
+
+ logging.info("Wait for %d seconds before reset" % wait_time)
+ time.sleep(wait_time)
+
+ for i in range(reset_times):
+ logging.info("Reset the system by monitor cmd")
+ vm.monitor.cmd("system_reset")
+ time.sleep(interval)
+
+ logging.info("Try to login guest after reset")
+ session = vm.wait_for_login(timeout=timeout)
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index 1e659bc..3b69b37 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -962,6 +962,13 @@ variants:
sleep_before_reset = 20
kill_vm_on_error = yes
+ - system_reset_bootable:
+ type = system_reset_bootable
+ interval = 1
+ reset_times = 20
+ wait_time_for_reset = 120
+ kill_vm_on_error = yes
+
- shutdown: install setup unattended_install.cdrom
type = shutdown
shutdown_method = shell
^ permalink raw reply related [flat|nested] 5+ messages in thread