| 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..4bb8bfbf55093828e6fec740e6d2ad97794b3aa6 100644
 | 
| --- a/client/tests/kvm/tests/pci_hotplug.py
 | 
| +++ b/client/tests/kvm/tests/pci_hotplug.py
 | 
| @@ -1,6 +1,6 @@
 | 
| -import logging, os, commands, re
 | 
| +import re
 | 
|  from autotest_lib.client.common_lib import error
 | 
| -import kvm_subprocess, kvm_test_utils, kvm_utils, kvm_vm
 | 
| +import kvm_subprocess, kvm_utils, kvm_vm
 | 
|  
 | 
|  
 | 
|  def run_pci_hotplug(test, params, env):
 | 
| @@ -19,21 +19,21 @@ def run_pci_hotplug(test, params, env):
 | 
|      @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"))
 | 
| +    vm = env.get_vm(params["main_vm"])
 | 
| +    vm.verify_alive()
 | 
|      timeout = int(params.get("login_timeout", 360))
 | 
| -    session = kvm_test_utils.wait_for_login(vm, timeout=timeout)
 | 
| +    session = vm.wait_for_login(timeout=timeout)
 | 
|  
 | 
|      # Modprobe the module if specified in config file
 | 
|      module = params.get("modprobe_module")
 | 
|      if module:
 | 
| -        if session.get_command_status("modprobe %s" % module):
 | 
| -            raise error.TestError("Modprobe module '%s' failed" % module)
 | 
| +        session.cmd("modprobe %s" % module)
 | 
|  
 | 
|      # Get output of command 'info pci' as reference
 | 
|      info_pci_ref = vm.monitor.info("pci")
 | 
|  
 | 
|      # Get output of command as reference
 | 
| -    reference = session.get_command_output(params.get("reference_cmd"))
 | 
| +    reference = session.cmd_output(params.get("reference_cmd"))
 | 
|  
 | 
|      tested_model = params.get("pci_model")
 | 
|      test_type = params.get("pci_type")
 | 
| @@ -48,11 +48,24 @@ def run_pci_hotplug(test, params, env):
 | 
|      else:
 | 
|          raise error.TestError("Unknow version of qemu")
 | 
|  
 | 
| +    # Determine syntax of drive hotplug
 | 
| +    # __com.redhat_drive_add == qemu-kvm-0.12 on RHEL 6
 | 
| +    if len(re.findall("\n__com.redhat_drive_add", cmd_output)) > 0:
 | 
| +        drive_cmd_type = "__com.redhat_drive_add"
 | 
| +    # drive_add == qemu-kvm-0.13 onwards
 | 
| +    elif len(re.findall("\ndrive_add", cmd_output)) > 0:
 | 
| +        drive_cmd_type = "drive_add"
 | 
| +    else:
 | 
| +        raise error.TestError("Unknow version of qemu")
 | 
| +
 | 
| +    # Probe qemu for a list of supported devices
 | 
| +    devices_support = vm.monitor.cmd("%s ?" % cmd_type)
 | 
| +
 | 
|      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_params = params.object_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" %
 | 
| @@ -67,31 +80,49 @@ def run_pci_hotplug(test, params, env):
 | 
|  
 | 
|      elif cmd_type == "device_add":
 | 
|          driver_id = test_type + "-" + kvm_utils.generate_random_id()
 | 
| -        id = test_type + "-" + kvm_utils.generate_random_id()
 | 
| +        device_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)
 | 
| +            pci_add_cmd = "device_add id=%s,driver=%s" % (device_id,
 | 
| +                                                          tested_model)
 | 
|  
 | 
|          elif test_type == "block":
 | 
| -            image_params = kvm_utils.get_sub_dict(params, "stg")
 | 
| +            image_params = params.object_params("stg")
 | 
|              image_filename = kvm_vm.get_image_filename(image_params,
 | 
|                                                         test.bindir)
 | 
| +            controller_model = None
 | 
|              if tested_model == "virtio":
 | 
|                  tested_model = "virtio-blk-pci"
 | 
|  
 | 
|              if tested_model == "scsi":
 | 
|                  tested_model = "scsi-disk"
 | 
| +                controller_model = "lsi53c895a"
 | 
| +                if len(re.findall(controller_model, devices_support)) == 0:
 | 
| +                    raise error.TestError("scsi controller device (%s) not "
 | 
| +                                          "supported by qemu" %
 | 
| +                                          controller_model)
 | 
| +
 | 
| +            if controller_model is not None:
 | 
| +                controller_id = "controller-" + device_id
 | 
| +                controller_add_cmd = ("device_add %s,id=%s" %
 | 
| +                                      (controller_model, controller_id))
 | 
| +                vm.monitor.cmd(controller_add_cmd)
 | 
| +
 | 
| +            if drive_cmd_type == "drive_add":
 | 
| +                driver_add_cmd = ("drive_add auto "
 | 
| +                                  "file=%s,if=none,id=%s,format=%s" %
 | 
| +                                  (image_filename, driver_id, image_format))
 | 
| +            elif drive_cmd_type == "__com.redhat_drive_add":
 | 
| +                driver_add_cmd = ("__com.redhat_drive_add "
 | 
| +                                  "file=%s,format=%s,id=%s" %
 | 
| +                                  (image_filename, image_format, driver_id))
 | 
|  
 | 
| -            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)
 | 
| +                           (device_id, tested_model, driver_id))
 | 
| +            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:
 | 
| @@ -106,10 +137,14 @@ def run_pci_hotplug(test, params, env):
 | 
|      # 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
 | 
| +            result_domain, bus, slot, function = add_output.split(',')
 | 
| +            domain = int(result_domain.split()[2])
 | 
| +            bus = int(bus.split()[1])
 | 
| +            slot = int(slot.split()[1])
 | 
| +            pci_addr = "%x:%x:%x" % (domain, bus, slot)
 | 
| +            cmd = "pci_del pci_addr=%s" % pci_addr
 | 
|          elif cmd_type == "device_add":
 | 
| -            cmd = "device_del %s" % id
 | 
| +            cmd = "device_del %s" % device_id
 | 
|          # This should be replaced by a proper monitor method call
 | 
|          vm.monitor.cmd(cmd)
 | 
|  
 | 
| @@ -131,7 +166,7 @@ def run_pci_hotplug(test, params, env):
 | 
|  
 | 
|          # Define a helper function to compare the output
 | 
|          def new_shown():
 | 
| -            o = session.get_command_output(params.get("reference_cmd"))
 | 
| +            o = session.cmd_output(params.get("reference_cmd"))
 | 
|              return o != reference
 | 
|  
 | 
|          secs = int(params.get("wait_secs_for_hook_up"))
 | 
| @@ -142,7 +177,7 @@ def run_pci_hotplug(test, params, env):
 | 
|  
 | 
|          # Define a helper function to catch PCI device string
 | 
|          def find_pci():
 | 
| -            o = session.get_command_output(params.get("find_pci_cmd"))
 | 
| +            o = session.cmd_output(params.get("find_pci_cmd"))
 | 
|              return params.get("match_string") in o
 | 
|  
 | 
|          if not kvm_utils.wait_for(find_pci, 30, 3, 3):
 | 
| @@ -152,10 +187,11 @@ def run_pci_hotplug(test, params, env):
 | 
|                                    params.get("find_pci_cmd")))
 | 
|  
 | 
|          # Test the newly added device
 | 
| -        s, o = session.get_command_status_output(params.get("pci_test_cmd"))
 | 
| -        if s != 0:
 | 
| +        try:
 | 
| +            session.cmd(params.get("pci_test_cmd"))
 | 
| +        except kvm_subprocess.ShellError, e:
 | 
|              raise error.TestFail("Check for %s device failed after PCI "
 | 
| -                                 "hotplug. Output: %r" % (test_type, o))
 | 
| +                                 "hotplug. Output: %r" % (test_type, e.output))
 | 
|  
 | 
|          session.close()
 | 
|  
 | 
| 
 |