| Index: client/tests/kvm/tests/nicdriver_unload.py
|
| diff --git a/client/tests/kvm/tests/nicdriver_unload.py b/client/tests/kvm/tests/nicdriver_unload.py
|
| index 065c60eeb0d62e83e063513b38b301dcec0e599f..15a73ce202321a1d292c1f03ed9ca619530c3755 100644
|
| --- a/client/tests/kvm/tests/nicdriver_unload.py
|
| +++ b/client/tests/kvm/tests/nicdriver_unload.py
|
| @@ -1,7 +1,8 @@
|
| -import logging, threading, os
|
| +import logging, threading, os, time
|
| from autotest_lib.client.common_lib import error
|
| from autotest_lib.client.bin import utils
|
| -import kvm_test_utils
|
| +from autotest_lib.client.tests.kvm.tests import file_transfer
|
| +import kvm_test_utils, kvm_utils
|
|
|
|
|
| def run_nicdriver_unload(test, params, env):
|
| @@ -21,84 +22,35 @@ def run_nicdriver_unload(test, params, env):
|
| timeout = int(params.get("login_timeout", 360))
|
| vm = env.get_vm(params["main_vm"])
|
| vm.verify_alive()
|
| - session = vm.wait_for_login(timeout=timeout)
|
| session_serial = vm.wait_for_serial_login(timeout=timeout)
|
|
|
| - ethname = kvm_test_utils.get_linux_ifname(session, vm.get_mac_address(0))
|
| + ethname = kvm_test_utils.get_linux_ifname(session_serial,
|
| + vm.get_mac_address(0))
|
| sys_path = "/sys/class/net/%s/device/driver" % (ethname)
|
| - o = session.cmd("readlink -e %s" % sys_path)
|
| - driver = os.path.basename(o.strip())
|
| + driver = os.path.basename(session_serial.cmd("readlink -e %s" %
|
| + sys_path).strip())
|
| logging.info("driver is %s", driver)
|
|
|
| - class ThreadScp(threading.Thread):
|
| - def run(self):
|
| - remote_file = '/tmp/' + self.getName()
|
| - file_list.append(remote_file)
|
| - vm.copy_files_to(file_name, remote_file, timeout=scp_timeout)
|
| - logging.debug("File %s was transfered successfuly", remote_file)
|
| -
|
| - def compare(origin_file, receive_file):
|
| - check_sum1 = utils.hash_file(origin_file, method="md5")
|
| - output2 = session.cmd("md5sum %s" % receive_file)
|
| - check_sum2 = output2.strip().split()[0]
|
| - logging.debug("original file md5: %s, received file md5: %s",
|
| - check_sum1, check_sum2)
|
| - if check_sum1 != check_sum2:
|
| - logging.error("MD5 hash of origin and received files doesn't match")
|
| - return False
|
| - return True
|
| -
|
| - #produce sized file in host
|
| - file_size = params.get("file_size")
|
| - file_name = "/tmp/nicdriver_unload_file"
|
| - cmd = "dd if=/dev/urandom of=%s bs=%sM count=1"
|
| - utils.system(cmd % (file_name, file_size))
|
| -
|
| - file_list = []
|
| - connect_time = params.get("connect_time")
|
| - scp_timeout = int(params.get("scp_timeout"))
|
| - thread_num = int(params.get("thread_num"))
|
| - unload_load_cmd = ("sleep %s && ifconfig %s down && modprobe -r %s && "
|
| - "sleep 1 && modprobe %s && sleep 4 && ifconfig %s up" %
|
| - (connect_time, ethname, driver, driver, ethname))
|
| - pid = os.fork()
|
| - if pid != 0:
|
| - logging.info("Unload/load NIC driver repeatedly in guest...")
|
| - while True:
|
| - logging.debug("Try to unload/load nic drive once")
|
| - try:
|
| - session_serial.cmd(unload_load_cmd, timeout=120)
|
| - except:
|
| - session.cmd_output("rm -rf /tmp/Thread-*")
|
| - raise
|
| - pid, s = os.waitpid(pid, os.WNOHANG)
|
| - status = os.WEXITSTATUS(s)
|
| - if (pid, status) != (0, 0):
|
| - logging.debug("Child process ending")
|
| - break
|
| - else:
|
| - logging.info("Multi-session TCP data transfer")
|
| - threads = []
|
| - for i in range(thread_num):
|
| - t = ThreadScp()
|
| - t.start()
|
| - threads.append(t)
|
| - for t in threads:
|
| - t.join(timeout = scp_timeout)
|
| - os._exit(0)
|
| -
|
| -
|
| try:
|
| - logging.info("Check MD5 hash for received files in multi-session")
|
| - for f in file_list:
|
| - if not compare(file_name, f):
|
| - raise error.TestFail("Fail to compare (guest) file %s" % f)
|
| -
|
| - logging.info("Test nic function after load/unload")
|
| - vm.copy_files_to(file_name, file_name)
|
| - if not compare(file_name, file_name):
|
| - raise error.TestFail("Test nic function after load/unload fail")
|
| + threads = []
|
| + for t in range(int(params.get("sessions_num", "10"))):
|
| + thread = kvm_utils.Thread(file_transfer.run_file_transfer,
|
| + (test, params, env))
|
| + thread.start()
|
| + threads.append(thread)
|
| +
|
| + time.sleep(10)
|
| + while threads[0].isAlive():
|
| + session_serial.cmd("sleep 10")
|
| + session_serial.cmd("ifconfig %s down" % ethname)
|
| + session_serial.cmd("modprobe -r %s" % driver)
|
| + session_serial.cmd("modprobe %s" % driver)
|
| + session_serial.cmd("ifconfig %s up" % ethname)
|
| + except:
|
| + for thread in threads:
|
| + thread.join(suppress_exception=True)
|
| + raise
|
| + else:
|
| + for thread in threads:
|
| + thread.join()
|
|
|
| - finally:
|
| - session.cmd_output("rm -rf /tmp/Thread-*")
|
| - session.close()
|
|
|