| Index: client/tests/kvm/tests/ethtool.py
|
| diff --git a/client/tests/kvm/tests/ethtool.py b/client/tests/kvm/tests/ethtool.py
|
| index 56b1c70e70fbfb9c2e3d9afcaa9f9691ba5bc3ee..81e45d3da83a5e053ba2f3ccb0881360da14e0c6 100644
|
| --- a/client/tests/kvm/tests/ethtool.py
|
| +++ b/client/tests/kvm/tests/ethtool.py
|
| @@ -1,7 +1,8 @@
|
| -import logging, commands, re
|
| +import logging, re
|
| from autotest_lib.client.common_lib import error
|
| from autotest_lib.client.bin import utils
|
| -import kvm_test_utils, kvm_utils
|
| +import kvm_test_utils, kvm_utils, kvm_subprocess
|
| +
|
|
|
| def run_ethtool(test, params, env):
|
| """
|
| @@ -22,7 +23,7 @@ def run_ethtool(test, params, env):
|
| find a way to get it installed using yum/apt-get/
|
| whatever
|
| """
|
| - def ethtool_get(type):
|
| + def ethtool_get(f_type):
|
| feature_pattern = {
|
| 'tx': 'tx.*checksumming',
|
| 'rx': 'rx.*checksumming',
|
| @@ -32,28 +33,32 @@ def run_ethtool(test, params, env):
|
| 'gro': 'generic.*receive.*offload',
|
| 'lro': 'large.*receive.*offload',
|
| }
|
| - s, o = session.get_command_status_output("ethtool -k %s" % ethname)
|
| + o = session.cmd("ethtool -k %s" % ethname)
|
| try:
|
| - return re.findall("%s: (.*)" % feature_pattern.get(type), o)[0]
|
| + return re.findall("%s: (.*)" % feature_pattern.get(f_type), o)[0]
|
| except IndexError:
|
| - logging.debug("Could not get %s status" % type)
|
| + logging.debug("Could not get %s status", f_type)
|
|
|
|
|
| - def ethtool_set(type, status):
|
| + def ethtool_set(f_type, status):
|
| """
|
| Set ethernet device offload status
|
|
|
| - @param type: Offload type name
|
| + @param f_type: Offload type name
|
| @param status: New status will be changed to
|
| """
|
| - logging.info("Try to set %s %s" % (type, status))
|
| + logging.info("Try to set %s %s", f_type, status)
|
| if status not in ["off", "on"]:
|
| return False
|
| - cmd = "ethtool -K %s %s %s" % (ethname, type, status)
|
| - if ethtool_get(type) != status:
|
| - return session.get_command_status(cmd) == 0
|
| - if ethtool_get(type) != status:
|
| - logging.error("Fail to set %s %s" % (type, status))
|
| + cmd = "ethtool -K %s %s %s" % (ethname, f_type, status)
|
| + if ethtool_get(f_type) != status:
|
| + try:
|
| + session.cmd(cmd)
|
| + return True
|
| + except:
|
| + return False
|
| + if ethtool_get(f_type) != status:
|
| + logging.error("Fail to set %s %s", f_type, status)
|
| return False
|
| return True
|
|
|
| @@ -74,13 +79,12 @@ def run_ethtool(test, params, env):
|
| logging.info("Compare md5sum of the files on guest and host")
|
| host_result = utils.hash_file(name, method="md5")
|
| try:
|
| - o = session.get_command_output("md5sum %s" % name)
|
| + o = session.cmd_output("md5sum %s" % name)
|
| guest_result = re.findall("\w+", o)[0]
|
| except IndexError:
|
| logging.error("Could not get file md5sum in guest")
|
| return False
|
| - logging.debug("md5sum: guest(%s), host(%s)" %
|
| - (guest_result, host_result))
|
| + logging.debug("md5sum: guest(%s), host(%s)", guest_result, host_result)
|
| return guest_result == host_result
|
|
|
|
|
| @@ -92,41 +96,48 @@ def run_ethtool(test, params, env):
|
| @param src: Source host of transfer file
|
| @return: Tuple (status, error msg/tcpdump result)
|
| """
|
| - session2.get_command_status("rm -rf %s" % filename)
|
| - dd_cmd = "dd if=/dev/urandom of=%s bs=1M count=%s" % (filename,
|
| - params.get("filesize"))
|
| - logging.info("Creat file in source host, cmd: %s" % dd_cmd)
|
| + session2.cmd_output("rm -rf %s" % filename)
|
| + dd_cmd = ("dd if=/dev/urandom of=%s bs=1M count=%s" %
|
| + (filename, params.get("filesize")))
|
| + failure = (False, "Failed to create file using dd, cmd: %s" % dd_cmd)
|
| + logging.info("Creating file in source host, cmd: %s", dd_cmd)
|
| tcpdump_cmd = "tcpdump -lep -s 0 tcp -vv port ssh"
|
| if src == "guest":
|
| - s = session.get_command_status(dd_cmd, timeout=360)
|
| tcpdump_cmd += " and src %s" % guest_ip
|
| - copy_files_fun = vm.copy_files_from
|
| + copy_files_from = vm.copy_files_from
|
| + try:
|
| + session.cmd_output(dd_cmd, timeout=360)
|
| + except kvm_subprocess.ShellCmdError, e:
|
| + return failure
|
| else:
|
| - s, o = commands.getstatusoutput(dd_cmd)
|
| tcpdump_cmd += " and dst %s" % guest_ip
|
| - copy_files_fun = vm.copy_files_to
|
| - if s != 0:
|
| - return (False, "Fail to create file by dd, cmd: %s" % dd_cmd)
|
| + copy_files_from = vm.copy_files_to
|
| + try:
|
| + utils.system(dd_cmd)
|
| + except error.CmdError, e:
|
| + return failure
|
|
|
| # only capture the new tcp port after offload setup
|
| original_tcp_ports = re.findall("tcp.*:(\d+).*%s" % guest_ip,
|
| utils.system_output("/bin/netstat -nap"))
|
| for i in original_tcp_ports:
|
| tcpdump_cmd += " and not port %s" % i
|
| - logging.debug("Listen by command: %s" % tcpdump_cmd)
|
| + logging.debug("Listen using command: %s", tcpdump_cmd)
|
| session2.sendline(tcpdump_cmd)
|
| - if not kvm_utils.wait_for(lambda: session.get_command_status(
|
| - "pgrep tcpdump") == 0, 30):
|
| + if not kvm_utils.wait_for(
|
| + lambda:session.cmd_status("pgrep tcpdump") == 0, 30):
|
| return (False, "Tcpdump process wasn't launched")
|
|
|
| logging.info("Start to transfer file")
|
| - if not copy_files_fun(filename, filename):
|
| - return (False, "Child process transfer file failed")
|
| + try:
|
| + copy_files_from(filename, filename)
|
| + except kvm_utils.SCPError, e:
|
| + return (False, "File transfer failed (%s)" % e)
|
| logging.info("Transfer file completed")
|
| - if session.get_command_status("killall tcpdump") != 0:
|
| - return (False, "Could not kill all tcpdump process")
|
| - s, tcpdump_string = session2.read_up_to_prompt(timeout=60)
|
| - if not s:
|
| + session.cmd("killall tcpdump")
|
| + try:
|
| + tcpdump_string = session2.read_up_to_prompt(timeout=60)
|
| + except kvm_subprocess.ExpectError:
|
| return (False, "Fail to read tcpdump's output")
|
|
|
| if not compare_md5sum(filename):
|
| @@ -169,14 +180,12 @@ def run_ethtool(test, params, env):
|
| return True
|
|
|
|
|
| - vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
|
| - session = kvm_test_utils.wait_for_login(vm,
|
| - timeout=int(params.get("login_timeout", 360)))
|
| + vm = env.get_vm(params["main_vm"])
|
| + vm.verify_alive()
|
| + session = vm.wait_for_login(timeout=int(params.get("login_timeout", 360)))
|
| # Let's just error the test if we identify that there's no ethtool installed
|
| - if session.get_command_status("ethtool -h"):
|
| - raise error.TestError("Command ethtool not installed on guest")
|
| - session2 = kvm_test_utils.wait_for_login(vm,
|
| - timeout=int(params.get("login_timeout", 360)))
|
| + session.cmd("ethtool -h")
|
| + session2 = vm.wait_for_login(timeout=int(params.get("login_timeout", 360)))
|
| mtu = 1514
|
| feature_status = {}
|
| filename = "/tmp/ethtool.dd"
|
| @@ -196,24 +205,24 @@ def run_ethtool(test, params, env):
|
| ethtool_save_params()
|
| success = True
|
| try:
|
| - for type in supported_features:
|
| - callback = test_matrix[type][0]
|
| - for i in test_matrix[type][2]:
|
| + for f_type in supported_features:
|
| + callback = test_matrix[f_type][0]
|
| + for i in test_matrix[f_type][2]:
|
| if not ethtool_set(i, "off"):
|
| - logging.error("Fail to disable %s" % i)
|
| + logging.error("Fail to disable %s", i)
|
| success = False
|
| - for i in [f for f in test_matrix[type][1]] + [type]:
|
| + for i in [f for f in test_matrix[f_type][1]] + [f_type]:
|
| if not ethtool_set(i, "on"):
|
| - logging.error("Fail to enable %s" % i)
|
| + logging.error("Fail to enable %s", i)
|
| success = False
|
| if not callback():
|
| - raise error.TestFail("Test failed, %s: on" % type)
|
| + raise error.TestFail("Test failed, %s: on", f_type)
|
|
|
| - if not ethtool_set(type, "off"):
|
| - logging.error("Fail to disable %s" % type)
|
| + if not ethtool_set(f_type, "off"):
|
| + logging.error("Fail to disable %s", f_type)
|
| success = False
|
| if not callback(status="off"):
|
| - raise error.TestFail("Test failed, %s: off" % type)
|
| + raise error.TestFail("Test failed, %s: off", f_type)
|
| if not success:
|
| raise error.TestError("Enable/disable offload function fail")
|
| finally:
|
|
|