blob: e2901900b0c1866f360ad28f77057cf67efad38c [file] [log] [blame]
import logging, time, threading
from autotest_lib.client.virt.tests import file_transfer
from autotest_lib.client.virt import virt_test_utils, virt_utils
def run_nic_bonding(test, params, env):
"""
Nic bonding test in guest.
1) Start guest with four nic models.
2) Setup bond0 in guest by script nic_bonding_guest.py.
3) Execute file transfer test between guest and host.
4) Repeatedly put down/up interfaces by set_link
5) Execute file transfer test between guest and host.
@param test: Kvm test object.
@param params: Dictionary with the test parameters.
@param env: Dictionary with test environment.
"""
timeout = int(params.get("login_timeout", 1200))
vm = env.get_vm(params["main_vm"])
vm.verify_alive()
session_serial = vm.wait_for_serial_login(timeout=timeout)
# get params of bonding
modprobe_cmd = "modprobe bonding"
bonding_params = params.get("bonding_params")
if bonding_params:
modprobe_cmd += " %s" % bonding_params
session_serial.cmd(modprobe_cmd)
session_serial.cmd("ifconfig bond0 up")
ifnames = [virt_test_utils.get_linux_ifname(session_serial,
vm.get_mac_address(vlan))
for vlan, nic in enumerate(params.get("nics").split())]
setup_cmd = "ifenslave bond0 " + " ".join(ifnames)
session_serial.cmd(setup_cmd)
session_serial.cmd("dhclient bond0")
try:
logging.info("Test file transfering:")
file_transfer.run_file_transfer(test, params, env)
logging.info("Failover test with file transfer")
transfer_thread = virt_utils.Thread(file_transfer.run_file_transfer,
(test, params, env))
try:
transfer_thread.start()
while transfer_thread.isAlive():
for vlan, nic in enumerate(params.get("nics").split()):
device_id = vm.get_peer(vm.netdev_id[vlan])
vm.monitor.cmd("set_link %s down" % device_id)
time.sleep(1)
vm.monitor.cmd("set_link %s up" % device_id)
except:
transfer_thread.join(suppress_exception=True)
raise
else:
transfer_thread.join()
finally:
session_serial.sendline("ifenslave -d bond0 " + " ".join(ifnames))
session_serial.sendline("kill -9 `pgrep dhclient`")