This test could be greatly simplifiyed by reusing the Thread class and file_transfer test.
Signed-off-by: Jason Wang <[email protected]> --- client/tests/kvm/tests/nicdriver_unload.py | 104 ++++++++-------------------- client/tests/kvm/tests_base.cfg.sample | 8 +- 2 files changed, 32 insertions(+), 80 deletions(-) diff --git a/client/tests/kvm/tests/nicdriver_unload.py b/client/tests/kvm/tests/nicdriver_unload.py index 065c60e..15a73ce 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() diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample index 05ba546..8de3db0 100644 --- a/client/tests/kvm/tests_base.cfg.sample +++ b/client/tests/kvm/tests_base.cfg.sample @@ -647,10 +647,10 @@ variants: - nicdriver_unload: install setup unattended_install.cdrom type = nicdriver_unload nic_mode = tap - file_size = 100 - connect_time = 4 - scp_timeout = 300 - thread_num = 10 + filesize = 100 + transfer_timeout = 100 + transfer_type = remote + sessions_num = 10 - nic_promisc: install setup unattended_install.cdrom type = nic_promisc _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
