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]) if not device_id: raise error.TestError("Could not find peer device for" " nic device %s" % nic) vm.set_link(device_id, up=False) time.sleep(1) vm.set_link(device_id, up=True) except Exception: 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`")
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 Exception: 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`")
def run_set_link(test, params, env): """ KVM guest link test: 1) Boot up guest with one nic 2) Ping guest from host 3) Disable guest link and ping guest from host 4) Re-enable guest link and ping guest from host 5) Do file transfer test @param test: kvm test object @param params: Dictionary with the test parameters @param env: Dictionary with test environment. """ vm = virt_test_utils.get_living_vm(env, params.get("main_vm")) timeout = float(params.get("login_timeout", 360)) session = virt_test_utils.wait_for_login(vm, 0, timeout, 0, 2) def set_link_test(linkid): """ Issue set_link commands and test its function @param linkid: id of netdev or devices to be tested """ ip = vm.get_address(0) vm.monitor.cmd("set_link %s down" % linkid) s, o = virt_test_utils.ping(ip, count=10, timeout=20) if virt_test_utils.get_loss_ratio(o) != 100: raise error.TestFail("Still can ping the %s after down %s" % (ip, linkid)) vm.monitor.cmd("set_link %s up" % linkid) s, o = virt_test_utils.ping(ip, count=10, timeout=20) # we use 100% here as the notification of link status changed may be # delayed in guest driver if virt_test_utils.get_loss_ratio(o) == 100: raise error.TestFail("Packet loss during ping %s after up %s" % (ip, linkid)) netdev_id = vm.netdev_id[0] device_id = vm.get_peer(netdev_id) logging.info("Issue set_link commands for netdevs") set_link_test(netdev_id) logging.info("Issue set_link commands for network devics") set_link_test(device_id) file_transfer.run_file_transfer(test, params, env) session.close()
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) #do a pgrep to check if dhclient has already been running pgrep_cmd = "pgrep dhclient" try: cmd_output = session_serial.cmd(pgrep_cmd) #if dhclient is there, killl it except aexpect.ShellCmdError: logging.info("it's safe to run dhclient now") else: logging.info("dhclient already is running,kill it") session_serial.cmd("killall -9 dhclient") time.sleep(1) 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 = utils.InterruptedThread( 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]) if not device_id: raise error.TestError("Could not find peer device for" " nic device %s" % nic) vm.set_link(device_id, up=False) time.sleep(1) vm.set_link(device_id, up=True) except Exception: 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`")