In this test, execute run_guest_test() to setup bonding, ping guest from host when repeatedly down/up interfaces, and check the lost packet ratio. But this test always fail of lose packets, we maybe need adjust the check_ratio in config file. Then execute file transfer test between guest and host.
Changes from v1: - Add file transfer test - Setup bonding by serial - Fix bonding_setup.py Signed-off-by: Feng Yang <[email protected]> Signed-off-by: Amos Kong <[email protected]> --- 0 files changed, 0 insertions(+), 0 deletions(-) diff --git a/client/tests/kvm/scripts/bonding_setup.py b/client/tests/kvm/scripts/bonding_setup.py new file mode 100644 index 0000000..dd5550a --- /dev/null +++ b/client/tests/kvm/scripts/bonding_setup.py @@ -0,0 +1,31 @@ +import os, re, commands + +eth_nums = 0 +ifconfig_output = commands.getoutput("ifconfig") +re_eth = "eth[0-9]*" +for ename in re.findall(re_eth, ifconfig_output): + eth_config_file = "/etc/sysconfig/network-scripts/ifcfg-%s" % ename + eth_config = """DEVICE=%s +USERCTL=no +ONBOOT=yes +MASTER=bond0 +SLAVE=yes +BOOTPROTO=none +""" % ename + f = file(eth_config_file,'w') + f.write(eth_config) + f.close() + +bonding_config_file = "/etc/sysconfig/network-scripts/ifcfg-bond0" +bond_config = """DEVICE=bond0 +BOOTPROTO=dhcp +NETWORKING_IPV6=no +ONBOOT=yes +USERCTL=no +""" +f = file(bonding_config_file, "w") +f.write(bond_config) +f.close() +os.system("modprobe bonding") +os.system("service NetworkManager stop") +os.system("service network restart") diff --git a/client/tests/kvm/tests/nic_bonding.py b/client/tests/kvm/tests/nic_bonding.py new file mode 100644 index 0000000..5a49a93 --- /dev/null +++ b/client/tests/kvm/tests/nic_bonding.py @@ -0,0 +1,89 @@ +import logging, re, os, subprocess, time, commands +from autotest_lib.client.common_lib import error +from tests import guest_test, file_transfer +import kvm_test_utils, kvm_subprocess, kvm_net_utils, kvm_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 bonding_setup.py. + 3) Run test.sh in guest to down/up all the interfaces + 4) Ping bond0 of guest for setting times to check packet loss ratio. + 5) Flood ping bond0 of guest for setting seconds. + 6) Ping bond0 of guest for another setting times to check packet loss ratio. + 7) Run set_link monitor command in guest. + 8) Ping bond0 of guest for setting times to check packet loss ratio. + 9) Flood ping bond0 of guest for setting seconds. + 10) Ping bond0 of guest for setting times to check packet loss ratio. + 11) 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. + """ + guest_test.run_guest_test(test, params, env) + timeout = int(params.get("login_timeout", 1200)) + vm = kvm_test_utils.get_living_vm(env, params.get("main_vm")) + + session_serial = kvm_test_utils.wait_for_login(vm, 0, timeout, 0, 2, + serial=True) + try: + o = session_serial.get_command_output("ifconfig bond0") + try: + re_ip = "inet addr:(\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3})" + bond_ip = re.findall(re_ip, o)[0] + except IndexError: + logging.debug(o) + raise error.TestFail("Fail to setup bond0 device!") + + cmd = 'while true;do ' + output = session_serial.get_command_output("ifconfig -a") + logging.debug(output) + for ethname in re.findall("\n(eth\d+)", output): + cmd += 'ifconfig %s down;ifconfig %s up;' % (ethname, ethname) + session_serial.get_command_status_output("echo '%s done' > test.sh" + % cmd) + if session_serial.get_command_status("bash test.sh&") != 0: + raise error.TestFail("Fail to launch test.sh in guest") + + check_ratio = params.get("check_ratio", 0) + ping_times = float(params.get("ping_times", 1500)) + flood_ping_time = float(params.get("flood_ping_time", 120)) + + def passed_ping_test(): + logging.info("Ping the guest for %s times!" % ping_times) + (s, o) = kvm_net_utils.ping(dest=bond_ip, count=ping_times, + timeout=ping_times * 2) + loss_ratio = kvm_net_utils.get_loss_ratio(o) + if loss_ratio < 0: + logging.error("Fail to get packets loss ratio!") + return False + elif loss_ratio > check_ratio: + logging.error("%s%% packet are lost!" % loss_ratio) + return False + return True + + if not passed_ping_test(): + raise error.TestFail("Ping test failed.") + logging.info("Flood ping the guest for %s seconds!" % flood_ping_time) + kvm_net_utils.ping(dest=bond_ip, flood=True, timeout=flood_ping_time) + if not passed_ping_test(): + raise error.TestFail("Ping test failed.") + + cmd = "set_link %s.0 down" % params.get("nic_model") + vm.monitor.cmd(cmd) + + if not passed_ping_test(): + raise error.TestFail("Ping test failed.") + logging.info("Flood ping the guest for %s seconds!" % flood_ping_time) + kvm_net_utils.ping(dest=bond_ip, flood=True, timeout=flood_ping_time) + if not passed_ping_test(): + raise error.TestFail("Ping test failed.") + + file_transfer.run_file_transfer(test, params, env) + + finally: + session_serial.close() + vm.destroy() diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample index 7b5aac2..412987b 100644 --- a/client/tests/kvm/tests_base.cfg.sample +++ b/client/tests/kvm/tests_base.cfg.sample @@ -540,6 +540,22 @@ variants: filesize = 512 nic_mode = tap + - nic_bonding: + type = nic_bonding + nics += ' nic2 nic3 nic4' + image_snapshot = yes + interpreter = "python" + guest_script = "scripts/bonding_setup.py" + dst_rsc_path = "/root/bonding_setup.py" + rsc_args = "" + serial_login = yes + test_timeout = 1000 + ping_times = 1500 + flood_ping_time = 120 + filesize = 4000 + transfer_timeout = 1000 + transfer_type = remote + - physical_resources_check: install setup unattended_install.cdrom type = physical_resources_check catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}' _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
