All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lucas Meneghel Rodrigues <lmr@redhat.com>
To: autotest@test.kernel.org
Cc: kvm@vger.kernel.org
Subject: [PATCH 05/18] KVM Test: Add a common ping module for network related tests
Date: Tue, 14 Sep 2010 19:25:30 -0300	[thread overview]
Message-ID: <1284503143-5993-6-git-send-email-lmr@redhat.com> (raw)
In-Reply-To: <1284503143-5993-1-git-send-email-lmr@redhat.com>

The kvm_net_utils.py is a just a place that wraps common network
related commands which is used to do the network-related tests.
Use -1 as the packet ratio for loss analysis.
Use quiet mode when doing the flood ping.

Changes from v1:
- Use None to indicate that the session should be local in raw_ping
- Use session.sendline("\003") to send (ctrl+c) signal
- Use None to indicate that the session should be local
- Fix of coding style

Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Amos Kong <akong@redhat.com>
---
 client/tests/kvm/kvm_test_utils.py |  112 +++++++++++++++++++++++++++++++++++-
 1 files changed, 111 insertions(+), 1 deletions(-)

diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py
index 5412aac..1e4bd9d 100644
--- a/client/tests/kvm/kvm_test_utils.py
+++ b/client/tests/kvm/kvm_test_utils.py
@@ -21,7 +21,7 @@ More specifically:
 @copyright: 2008-2009 Red Hat Inc.
 """
 
-import time, os, logging, re, commands
+import time, os, logging, re, commands, signal
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.bin import utils
 import kvm_utils, kvm_vm, kvm_subprocess, scan_results
@@ -505,3 +505,113 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
             e_msg = ("Tests %s failed during control file execution" %
                      " ".join(bad_results))
         raise error.TestFail(e_msg)
+
+
+def get_loss_ratio(output):
+    """
+    Get the packet loss ratio from the output of ping
+.
+    @param output: Ping output.
+    """
+    try:
+        return int(re.findall('(\d+)% packet loss', output)[0])
+    except IndexError:
+        logging.debug(output)
+        return -1
+
+
+def raw_ping(command, timeout, session, output_func):
+    """
+    Low-level ping command execution.
+
+    @param command: Ping command.
+    @param timeout: Timeout of the ping command.
+    @param session: Local executon hint or session to execute the ping command.
+    """
+    if session is None:
+        process = kvm_subprocess.run_bg(command, output_func=output_func,
+                                        timeout=timeout)
+
+        # Send SIGINT signal to notify the timeout of running ping process,
+        # Because ping have the ability to catch the SIGINT signal so we can
+        # always get the packet loss ratio even if timeout.
+        if process.is_alive():
+            kvm_utils.kill_process_tree(process.get_pid(), signal.SIGINT)
+
+        status = process.get_status()
+        output = process.get_output()
+
+        process.close()
+        return status, output
+    else:
+        session.sendline(command)
+        status, output = session.read_up_to_prompt(timeout=timeout,
+                                                   print_func=output_func)
+        if not status:
+            # Send ctrl+c (SIGINT) through ssh session
+            session.send("\003")
+            status, output2 = session.read_up_to_prompt(print_func=output_func)
+            output += output2
+            if not status:
+                # We also need to use this session to query the return value
+                session.send("\003")
+
+        session.sendline(session.status_test_command)
+        s2, o2 = session.read_up_to_prompt()
+        if not s2:
+            status = -1
+        else:
+            try:
+                status = int(re.findall("\d+", o2)[0])
+            except:
+                status = -1
+
+        return status, output
+
+
+def ping(dest=None, count=None, interval=None, interface=None,
+         packetsize=None, ttl=None, hint=None, adaptive=False,
+         broadcast=False, flood=False, timeout=0,
+         output_func=logging.debug, session=None):
+    """
+    Wrapper of ping.
+
+    @param dest: Destination address.
+    @param count: Count of icmp packet.
+    @param interval: Interval of two icmp echo request.
+    @param interface: Specified interface of the source address.
+    @param packetsize: Packet size of icmp.
+    @param ttl: IP time to live.
+    @param hint: Path mtu discovery hint.
+    @param adaptive: Adaptive ping flag.
+    @param broadcast: Broadcast ping flag.
+    @param flood: Flood ping flag.
+    @param timeout: Timeout for the ping command.
+    @param output_func: Function used to log the result of ping.
+    @param session: Local executon hint or session to execute the ping command.
+    """
+    if dest is not None:
+        command = "ping %s " % dest
+    else:
+        command = "ping localhost "
+    if count is not None:
+        command += " -c %s" % count
+    if interval is not None:
+        command += " -i %s" % interval
+    if interface is not None:
+        command += " -I %s" % interface
+    if packetsize is not None:
+        command += " -s %s" % packetsize
+    if ttl is not None:
+        command += " -t %s" % ttl
+    if hint is not None:
+        command += " -M %s" % hint
+    if adaptive:
+        command += " -A"
+    if broadcast:
+        command += " -b"
+    if flood:
+        command += " -f -q"
+        output_func = None
+
+    return raw_ping(command, timeout, session, output_func)
-- 
1.7.2.2

  parent reply	other threads:[~2010-09-14 22:25 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-14 22:25 [PATCH 00/18] KVM autotest network patchset v3 Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 01/18] KVM test: Add a new macaddress pool algorithm Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 02/18] KVM test: Make physical_resources_check to work with MAC management Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 03/18] KVM test: Remove address_pools.cfg dependency Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 04/18] KVM test: Add a get_ifname function Lucas Meneghel Rodrigues
2010-09-14 22:25 ` Lucas Meneghel Rodrigues [this message]
2010-09-14 22:25 ` [PATCH 06/18] KVM test: Add a new subtest ping Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 07/18] KVM test: Add a subtest jumbo Lucas Meneghel Rodrigues
2010-09-24  8:16   ` [Autotest] " pradeep
2010-09-14 22:25 ` [PATCH 08/18] KVM test: Add basic file transfer test Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 09/18] KVM test: Add a subtest of load/unload nic driver Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 10/18] KVM test: Add a subtest of nic promisc Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 11/18] KVM test: Add a subtest of multicast Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 12/18] KVM test: Add a subtest of pxe Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 13/18] KVM test: Add a subtest of changing MAC address Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 14/18] KVM test: Add a netperf subtest Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 15/18] KVM test: kvm_utils - Add support of check if remote port free Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 16/18] KVM test: Improve vlan subtest Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 17/18] KVM test: vlan subtest - Replace extra_params '-snapshot' with image_snapshot Lucas Meneghel Rodrigues
2010-09-14 22:25 ` [PATCH 18/18] KVM test: Add subtest of testing offload by ethtool Lucas Meneghel Rodrigues
2010-09-23 13:41   ` [Autotest] " pradeep
2010-09-23 13:47     ` Lucas Meneghel Rodrigues

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1284503143-5993-6-git-send-email-lmr@redhat.com \
    --to=lmr@redhat.com \
    --cc=autotest@test.kernel.org \
    --cc=kvm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.