Index: client/tests/kvm/tests/pci_hotplug.py |
diff --git a/client/tests/kvm/tests/pci_hotplug.py b/client/tests/kvm/tests/pci_hotplug.py |
index 55cf66680bfdd9ddfc37bdbcd91bd3f23f77a498..2c459d73bcb3850cbdcce75a4e3053b72e83e0c8 100644 |
--- a/client/tests/kvm/tests/pci_hotplug.py |
+++ b/client/tests/kvm/tests/pci_hotplug.py |
@@ -1,22 +1,20 @@ |
-import logging, os, commands, re |
+import logging, os |
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 hotplug of PCI devices. |
- |
- (Elements between [] are configurable test parameters) |
+ Test pci devices' hotplug |
1) PCI add a deivce (NIC / block) |
- 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. |
+ 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 |
@param env: Dictionary with test environment. |
""" |
vm = kvm_test_utils.get_living_vm(env, params.get("main_vm")) |
@@ -37,79 +35,26 @@ def run_pci_hotplug(test, params, env): |
tested_model = params.get("pci_model") |
test_type = params.get("pci_type") |
- 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)) |
+ |
+ 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") |
# Define a helper function to delete the device |
def pci_del(ignore_failure=False): |
- 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 |
+ slot_id = "0" + add_output.split(",")[2].split()[1] |
+ cmd = "pci_del pci_addr=%s" % slot_id |
# This should be replaced by a proper monitor method call |
vm.monitor.cmd(cmd) |
@@ -120,14 +65,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. " |
- "Monitor command: %s" % |
- (tested_model, cmd)) |
+ "Hypervisor 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 " |
- "monitor command: 'info pci'") |
+ "hypervisor command: 'info pci'") |
# Define a helper function to compare the output |
def new_shown(): |