* [PATCH] KVM-test: Update pci_hotplug to suit for new qemu
@ 2010-09-24 0:11 Lucas Meneghel Rodrigues
2010-09-24 0:15 ` [Autotest] " Lucas Meneghel Rodrigues
0 siblings, 1 reply; 2+ messages in thread
From: Lucas Meneghel Rodrigues @ 2010-09-24 0:11 UTC (permalink / raw)
To: autotest; +Cc: kvm, Yiqiao Pu
From: Yiqiao Pu <ypu@redhat.com>
In the new version of qemu device_add is instead of pci_add. So modify
the scripts to suit for the new version of qemu. Now both nic and block
devices are support in qemu, so keep using monitor command line for
this test.
Changs from v1:
Can support block device hotplug in scripts. But scsi is still not
supported.
Changs from v2:
- using "?" to check which command is supported in qemu and add the
debug information for unsupported commands.
- using "$add_cmd ?" to check the support devices in command line and
add the debug information for unsupported devices
Signed-off-by: Yiqiao Pu <ypu@redhat.com>
---
client/tests/kvm/tests/pci_hotplug.py | 113 ++++++++++++++++++++++++---------
1 files changed, 84 insertions(+), 29 deletions(-)
diff --git a/client/tests/kvm/tests/pci_hotplug.py b/client/tests/kvm/tests/pci_hotplug.py
index 2c459d7..55cf666 100644
--- a/client/tests/kvm/tests/pci_hotplug.py
+++ b/client/tests/kvm/tests/pci_hotplug.py
@@ -1,20 +1,22 @@
-import logging, os
+import logging, os, commands, re
from autotest_lib.client.common_lib import error
import kvm_subprocess, kvm_test_utils, kvm_utils, kvm_vm
def run_pci_hotplug(test, params, env):
"""
- Test pci devices' hotplug
+ Test hotplug of PCI devices.
+
+ (Elements between [] are configurable test parameters)
1) PCI add a deivce (NIC / block)
- 2) Compare output of hypervisor command `info pci`
- 3) Compare output of guest command `reference_cmd`
- 4) Verify whether pci_model is shown in `pci_find_cmd`
- 5) Check whether the newly added pci device works fine
- 6) PCI delete the device, verify whether could remove the pci device
-
- @param test: kvm test object
- @param params: Dictionary with the test parameters
+ 2) Compare output of monitor command 'info pci'.
+ 3) Compare output of guest command [reference_cmd].
+ 4) Verify whether pci_model is shown in [pci_find_cmd].
+ 5) Check whether the newly added PCI device works fine.
+ 6) PCI delete the device, verify whether could remove the PCI device.
+
+ @param test: KVM test object.
+ @param params: Dictionary with the test parameters.
@param env: Dictionary with test environment.
"""
vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
@@ -35,26 +37,79 @@ def run_pci_hotplug(test, params, env):
tested_model = params.get("pci_model")
test_type = params.get("pci_type")
-
- if test_type == "nic":
- pci_add_cmd = "pci_add pci_addr=auto nic model=%s" % tested_model
- elif test_type == "block":
- image_params = kvm_utils.get_sub_dict(params, "stg")
- image_filename = kvm_vm.get_image_filename(image_params, test.bindir)
- pci_add_cmd = ("pci_add pci_addr=auto storage file=%s,if=%s" %
- (image_filename, tested_model))
-
- # Execute pci_add (should be replaced by a proper monitor method call)
- add_output = vm.monitor.cmd(pci_add_cmd)
- if not "OK domain" in add_output:
- raise error.TestFail("Add device failed. Hypervisor command is: %s. "
- "Output: %r" % (pci_add_cmd, add_output))
- after_add = vm.monitor.info("pci")
+ image_format = params.get("image_format_stg")
+
+ # Probe qemu to verify what is the supported syntax for PCI hotplug
+ cmd_output = vm.monitor.cmd("?")
+ if len(re.findall("\ndevice_add", cmd_output)) > 0:
+ cmd_type = "device_add"
+ elif len(re.findall("\npci_add", cmd_output)) > 0:
+ cmd_type = "pci_add"
+ else:
+ raise error.TestError("Unknow version of qemu")
+
+ if cmd_type == "pci_add":
+ if test_type == "nic":
+ pci_add_cmd = "pci_add pci_addr=auto nic model=%s" % tested_model
+ elif test_type == "block":
+ image_params = kvm_utils.get_sub_dict(params, "stg")
+ image_filename = kvm_vm.get_image_filename(image_params,
+ test.bindir)
+ pci_add_cmd = ("pci_add pci_addr=auto storage file=%s,if=%s" %
+ (image_filename, tested_model))
+ # Execute pci_add (should be replaced by a proper monitor method call)
+ add_output = vm.monitor.cmd(pci_add_cmd)
+ if not "OK domain" in add_output:
+ raise error.TestFail("Add PCI device failed. "
+ "Monitor command is: %s, Output: %r" %
+ (pci_add_cmd, add_output))
+ after_add = vm.monitor.info("pci")
+
+ elif cmd_type == "device_add":
+ driver_id = test_type + "-" + kvm_utils.generate_random_id()
+ id = test_type + "-" + kvm_utils.generate_random_id()
+ if test_type == "nic":
+ if tested_model == "virtio":
+ tested_model = "virtio-net-pci"
+ pci_add_cmd = "device_add id=%s,driver=%s" % (id, tested_model)
+
+ elif test_type == "block":
+ image_params = kvm_utils.get_sub_dict(params, "stg")
+ image_filename = kvm_vm.get_image_filename(image_params,
+ test.bindir)
+ if tested_model == "virtio":
+ tested_model = "virtio-blk-pci"
+
+ if tested_model == "scsi":
+ tested_model = "scsi-disk"
+
+ driver_add_cmd = (" __com.redhat_drive_add "
+ "file=%s,format=%s,id=%s" %
+ (image_filename, image_format, driver_id))
+ pci_add_cmd = ("device_add id=%s,driver=%s,drive=%s" %
+ (id, tested_model, driver_id))
+ driver_output = vm.monitor.cmd(driver_add_cmd)
+
+ # Check if the device is support in qemu
+ devices_support = vm.monitor.cmd("%s ?" % cmd_type)
+ if len(re.findall(tested_model, devices_support)) > 0:
+ add_output = vm.monitor.cmd(pci_add_cmd)
+ else:
+ raise error.TestError("%s doesn't support device: %s" %
+ (cmd_type, tested_model))
+ after_add = vm.monitor.info("pci")
+
+ if not id in after_add:
+ raise error.TestFail("Add device failed. Monitor command is: %s"
+ ". Output: %r" % (pci_add_cmd, add_output))
# Define a helper function to delete the device
def pci_del(ignore_failure=False):
- slot_id = "0" + add_output.split(",")[2].split()[1]
- cmd = "pci_del pci_addr=%s" % slot_id
+ if cmd_type == "pci_add":
+ slot_id = "0" + add_output.split(",")[2].split()[1]
+ cmd = "pci_del pci_addr=%s" % slot_id
+ elif cmd_type == "device_add":
+ cmd = "device_del %s" % id
# This should be replaced by a proper monitor method call
vm.monitor.cmd(cmd)
@@ -65,14 +120,14 @@ def run_pci_hotplug(test, params, env):
if (not kvm_utils.wait_for(device_removed, 10, 0, 1)
and not ignore_failure):
raise error.TestFail("Failed to hot remove PCI device: %s. "
- "Hypervisor command: %s" % (tested_model,
- cmd))
+ "Monitor command: %s" %
+ (tested_model, cmd))
try:
# Compare the output of 'info pci'
if after_add == info_pci_ref:
raise error.TestFail("No new PCI device shown after executing "
- "hypervisor command: 'info pci'")
+ "monitor command: 'info pci'")
# Define a helper function to compare the output
def new_shown():
--
1.7.2.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Autotest] [PATCH] KVM-test: Update pci_hotplug to suit for new qemu
2010-09-24 0:11 [PATCH] KVM-test: Update pci_hotplug to suit for new qemu Lucas Meneghel Rodrigues
@ 2010-09-24 0:15 ` Lucas Meneghel Rodrigues
0 siblings, 0 replies; 2+ messages in thread
From: Lucas Meneghel Rodrigues @ 2010-09-24 0:15 UTC (permalink / raw)
To: autotest; +Cc: kvm
On Thu, 2010-09-23 at 21:11 -0300, Lucas Meneghel Rodrigues wrote:
> From: Yiqiao Pu <ypu@redhat.com>
>
> In the new version of qemu device_add is instead of pci_add. So modify
> the scripts to suit for the new version of qemu. Now both nic and block
> devices are support in qemu, so keep using monitor command line for
> this test.
Yiqiao, I have rebased, cleaned up and tested your patch. Thanks!
Lucas
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-09-24 0:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-24 0:11 [PATCH] KVM-test: Update pci_hotplug to suit for new qemu Lucas Meneghel Rodrigues
2010-09-24 0:15 ` [Autotest] " Lucas Meneghel Rodrigues
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox