63 lines
2.3 KiB
Python
63 lines
2.3 KiB
Python
import logging, threading, os, time
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.bin import utils
|
|
from autotest_lib.client.virt.tests import file_transfer
|
|
from autotest_lib.client.virt import virt_test_utils, virt_utils
|
|
|
|
|
|
def run_nicdriver_unload(test, params, env):
|
|
"""
|
|
Test nic driver.
|
|
|
|
1) Boot a VM.
|
|
2) Get the NIC driver name.
|
|
3) Repeatedly unload/load NIC driver.
|
|
4) Multi-session TCP transfer on test interface.
|
|
5) Check whether the test interface should still work.
|
|
|
|
@param test: KVM test object.
|
|
@param params: Dictionary with the test parameters.
|
|
@param env: Dictionary with test environment.
|
|
"""
|
|
timeout = int(params.get("login_timeout", 360))
|
|
vm = env.get_vm(params["main_vm"])
|
|
vm.verify_alive()
|
|
session_serial = vm.wait_for_serial_login(timeout=timeout)
|
|
|
|
ethname = virt_test_utils.get_linux_ifname(session_serial,
|
|
vm.get_mac_address(0))
|
|
|
|
# get ethernet driver from '/sys' directory.
|
|
# ethtool can do the same thing and doesn't care about os type.
|
|
# if we make sure all guests have ethtool, we can make a change here.
|
|
sys_path = params.get("sys_path") % (ethname)
|
|
|
|
# readlink in RHEL4.8 doesn't have '-e' param, should use '-f' in RHEL4.8.
|
|
readlink_cmd = params.get("readlink_command", "readlink -e")
|
|
driver = os.path.basename(session_serial.cmd("%s %s" % (readlink_cmd,
|
|
sys_path)).strip())
|
|
|
|
logging.info("driver is %s", driver)
|
|
|
|
try:
|
|
threads = []
|
|
for t in range(int(params.get("sessions_num", "10"))):
|
|
thread = virt_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()
|