KVM test: use new monitor interface
- Add new monitor definition syntax that allows definition of multiple
monitors.
Monitors are now defined like other objects in the config file:
monitors = MyMonitor SomeOtherMonitor YetAnotherMonitor # defines 3 monitors
monitor_type = human # default for all monitors
monitor_type_SomeOtherMonitor = qmp # applies only to SomeOtherMonitor
monitor_type_YetAnotherMonitor = qmp # applies only to YetAnotherMonitor
main_monitor = MyMonitor # defines the main monitor to use
# in the test
- Use the new syntax in tests_base.cfg.sample.
- Establish monitor connections using kvm_monitor in VM.create().
Store all monitors in self.monitors. Store main monitor in
self.monitor.
- Replace calls to send_monitor_cmd() with appropriate calls to methods
of self.monitor (the main monitor).
- For now, ignore the parameter screendump_verbose because currently
monitor commands are always silent (when successful).
Changes from v2:
- Rebased against the latest upstream
- Corrected a few bugs left on tests
Changes from v1:
- Turn VM.monitor into a property
Signed-off-by: Michael Goldish <mgoldish@redhat.com>
Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@4639 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/client/tests/kvm/kvm_preprocessing.py b/client/tests/kvm/kvm_preprocessing.py
index 76c8268..ee3e9b2 100644
--- a/client/tests/kvm/kvm_preprocessing.py
+++ b/client/tests/kvm/kvm_preprocessing.py
@@ -1,7 +1,7 @@
import sys, os, time, commands, re, logging, signal, glob, threading, shutil
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
-import kvm_vm, kvm_utils, kvm_subprocess, ppm_utils
+import kvm_vm, kvm_utils, kvm_subprocess, kvm_monitor, ppm_utils
try:
import PIL.Image
except ImportError:
@@ -83,7 +83,11 @@
raise error.TestError("Could not start VM")
scrdump_filename = os.path.join(test.debugdir, "pre_%s.ppm" % name)
- vm.send_monitor_cmd("screendump %s" % scrdump_filename)
+ try:
+ if vm.monitor:
+ vm.monitor.screendump(scrdump_filename)
+ except kvm_monitor.MonitorError, e:
+ logging.warn(e)
def postprocess_image(test, params):
@@ -117,7 +121,11 @@
return
scrdump_filename = os.path.join(test.debugdir, "post_%s.ppm" % name)
- vm.send_monitor_cmd("screendump %s" % scrdump_filename)
+ try:
+ if vm.monitor:
+ vm.monitor.screendump(scrdump_filename)
+ except kvm_monitor.MonitorError, e:
+ logging.warn(e)
if params.get("kill_vm") == "yes":
kill_vm_timeout = float(params.get("kill_vm_timeout", 0))
@@ -356,8 +364,9 @@
for vm in kvm_utils.env_get_all_vms(env):
if not vm.is_dead():
logging.info("VM '%s' is alive.", vm.name)
- logging.info("The monitor unix socket of '%s' is: %s",
- vm.name, vm.monitor_file_name)
+ for m in vm.monitors:
+ logging.info("'%s' has a %s monitor unix socket at: %s",
+ vm.name, m.protocol, m.filename)
logging.info("The command line used to start '%s' was:\n%s",
vm.name, vm.make_qemu_command())
raise error.JobError("Abort requested (%s)" % exc_string)
@@ -403,10 +412,6 @@
kvm_utils.generate_random_string(6))
delay = float(params.get("screendump_delay", 5))
quality = int(params.get("screendump_quality", 30))
- if params.get("screendump_verbose") == 'yes':
- screendump_verbose = True
- else:
- screendump_verbose = False
cache = {}
@@ -414,11 +419,11 @@
for vm in kvm_utils.env_get_all_vms(env):
if vm.is_dead():
continue
- if screendump_verbose:
- vm.send_monitor_cmd("screendump %s" % temp_filename)
- else:
- vm.send_monitor_cmd("screendump %s" % temp_filename,
- verbose=False)
+ try:
+ vm.monitor.screendump(temp_filename)
+ except kvm_monitor.MonitorError, e:
+ logging.warn(e)
+ continue
if not os.path.exists(temp_filename):
logging.warn("VM '%s' failed to produce a screendump", vm.name)
continue