On Mon, Sep 5, 2011 at 4:43 PM, Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx> wrote: > This patch contain two tests: > > 1) Try kill guest when guest netwok is under loading. > 2) Try kill guest after multiple adding and removing network drivers. Ok Jiri, applied, thanks! http://autotest.kernel.org/changeset/5543 > Changes from v1: > * Use --color=never on ls command to correctly determine nw drivers > > Signed-off-by: Jiri Zupka <jzupka@xxxxxxxxxx> > --- > client/tests/kvm/subtests.cfg.sample | 18 ++++ > client/virt/tests/netstress_kill_guest.py | 148 +++++++++++++++++++++++++++++ > 2 files changed, 166 insertions(+), 0 deletions(-) > create mode 100644 client/virt/tests/netstress_kill_guest.py > > diff --git a/client/tests/kvm/subtests.cfg.sample b/client/tests/kvm/subtests.cfg.sample > index f1e2765..9d9dbba 100644 > --- a/client/tests/kvm/subtests.cfg.sample > +++ b/client/tests/kvm/subtests.cfg.sample > @@ -777,6 +777,24 @@ variants: > transfer_type = remote > kill_vm =yes > > + - netstress_kill_guest: install setup unattended_install.cdrom > + only Linux > + type = netstress_kill_guest > + image_snapshot = yes > + nic_mode = tap > + # There should be enough vms for build topology. > + variants: > + -driver: > + mode = driver > + -load: > + mode = load > + netperf_files = netperf-2.4.5.tar.bz2 wait_before_data.patch > + packet_size = 1500 > + setup_cmd = "cd %s && tar xvfj netperf-2.4.5.tar.bz2 && cd netperf-2.4.5 && patch -p0 < ../wait_before_data.patch && ./configure && make" > + clean_cmd = " while killall -9 netserver; do True test; done;" > + netserver_cmd = %s/netperf-2.4.5/src/netserver > + netperf_cmd = %s/netperf-2.4.5/src/netperf -t %s -H %s -l 60 -- -m %s > + > - physical_resources_check: install setup image_copy unattended_install.cdrom > type = physical_resources_check > catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}' > diff --git a/client/virt/tests/netstress_kill_guest.py b/client/virt/tests/netstress_kill_guest.py > new file mode 100644 > index 0000000..e7e0116 > --- /dev/null > +++ b/client/virt/tests/netstress_kill_guest.py > @@ -0,0 +1,148 @@ > +import logging, os, signal, re, time > +from autotest_lib.client.common_lib import error > +from autotest_lib.client.bin import utils > +from autotest_lib.client.virt import aexpect, virt_utils > + > + > +def run_netstress_kill_guest(test, params, env): > + """ > + Try stop network interface in VM when other VM try to communicate. > + > + @param test: kvm test object > + @param params: Dictionary with the test parameters > + @param env: Dictionary with test environment. > + """ > + def get_corespond_ip(ip): > + """ > + Get local ip address which is used for contact ip. > + > + @param ip: Remote ip > + @return: Local corespond IP. > + """ > + result = utils.run("ip route get %s" % (ip)).stdout > + ip = re.search("src (.+)", result) > + if ip is not None: > + ip = ip.groups()[0] > + return ip > + > + > + def get_ethernet_driver(session): > + """ > + Get driver of network cards. > + > + @param session: session to machine > + """ > + modules = [] > + out = session.cmd("ls -l --color=never " > + "/sys/class/net/*/device/driver/module") > + for module in out.split("\n"): > + modules.append(module.split("/")[-1]) > + modules.remove("") > + return set(modules) > + > + > + def kill_and_check(vm): > + vm_pid = vm.get_pid() > + vm.destroy(gracefully=False) > + time.sleep(2) > + try: > + os.kill(vm_pid, 0) > + logging.error("VM is not dead") > + raise error.TestFail("VM is not dead after sending signal 0 to it") > + except OSError: > + logging.info("VM is dead") > + > + > + def netload_kill_problem(session_serial): > + netperf_dir = os.path.join(os.environ['AUTODIR'], "tests/netperf2") > + setup_cmd = params.get("setup_cmd") > + clean_cmd = params.get("clean_cmd") > + firewall_flush = "iptables -F" > + > + try: > + utils.run(firewall_flush) > + except: > + logging.warning("Could not flush firewall rules on guest") > + > + try: > + session_serial.cmd(firewall_flush) > + except aexpect.ShellError: > + logging.warning("Could not flush firewall rules on guest") > + > + for i in params.get("netperf_files").split(): > + vm.copy_files_to(os.path.join(netperf_dir, i), "/tmp") > + > + guest_ip = vm.get_address(0) > + server_ip = get_corespond_ip(guest_ip) > + > + logging.info("Setup and run netperf on host and guest") > + session_serial.cmd(setup_cmd % "/tmp", timeout=200) > + utils.run(setup_cmd % netperf_dir) > + > + try: > + session_serial.cmd(clean_cmd) > + except: > + pass > + session_serial.cmd(params.get("netserver_cmd") % "/tmp") > + > + utils.run(clean_cmd, ignore_status=True) > + utils.run(params.get("netserver_cmd") % netperf_dir) > + > + server_netperf_cmd = params.get("netperf_cmd") % (netperf_dir, "TCP_STREAM", > + guest_ip, params.get("packet_size", "1500")) > + quest_netperf_cmd = params.get("netperf_cmd") % ("/tmp", "TCP_STREAM", > + server_ip, params.get("packet_size", "1500")) > + > + tcpdump = env.get("tcpdump") > + pid = None > + if tcpdump: > + # Stop the background tcpdump process > + try: > + pid = int(utils.system_output("pidof tcpdump")) > + logging.debug("Stopping the background tcpdump") > + os.kill(pid, signal.SIGSTOP) > + except: > + pass > + > + try: > + logging.info("Start heavy network load host <=> guest.") > + session_serial.sendline(quest_netperf_cmd) > + utils.BgJob(server_netperf_cmd) > + > + #Wait for create big network usage. > + time.sleep(10) > + kill_and_check(vm) > + > + finally: > + utils.run(clean_cmd, ignore_status=True) > + if tcpdump and pid: > + logging.debug("Resuming the background tcpdump") > + logging.info("pid is %s" % pid) > + os.kill(pid, signal.SIGCONT) > + > + > + def netdriver_kill_problem(session_serial): > + modules = get_ethernet_driver(session_serial) > + logging.debug(modules) > + for _ in range(50): > + for module in modules: > + session_serial.cmd("rmmod %s" % (module)) > + time.sleep(0.2) > + for module in modules: > + session_serial.cmd("modprobe %s" % (module)) > + time.sleep(0.2) > + kill_and_check(vm) > + > + > + vm = env.get_vm(params["main_vm"]) > + vm.verify_alive() > + login_timeout = int(params.get("login_timeout", 360)) > + session = vm.wait_for_login(timeout=login_timeout) > + session.close() > + session_serial = vm.wait_for_serial_login(timeout=login_timeout) > + > + mode = params.get("mode") > + if mode == "driver": > + netdriver_kill_problem(session_serial) > + elif mode == "load": > + netload_kill_problem(session_serial) > -- > 1.7.6 > > _______________________________________________ > Autotest mailing list > Autotest@xxxxxxxxxxxxxxx > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest > -- Lucas -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html