From: Lucas Meneghel Rodrigues <lmr@redhat.com>
To: Amos Kong <akong@redhat.com>
Cc: autotest@test.kernel.org, qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: Re: [Qemu-devel] [RFC PATCH 03/14] KVM Test: Add a common ping module for network related tests
Date: Tue, 27 Jul 2010 10:01:27 -0300 [thread overview]
Message-ID: <1280235687.2637.19.camel@freedom> (raw)
In-Reply-To: <20100720013515.2212.66387.stgit@z>
On Tue, 2010-07-20 at 09:35 +0800, Amos Kong wrote:
> 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.
>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> Signed-off-by: Amos Kong <akong@redhat.com>
> ---
> 0 files changed, 0 insertions(+), 0 deletions(-)
>
> diff --git a/client/tests/kvm/kvm_net_utils.py b/client/tests/kvm/kvm_net_utils.py
> index ede4965..8a71858 100644
> --- a/client/tests/kvm/kvm_net_utils.py
> +++ b/client/tests/kvm/kvm_net_utils.py
> @@ -1,4 +1,114 @@
> -import re
> +import logging, re, signal
> +from autotest_lib.client.common_lib import error
> +import kvm_subprocess, kvm_utils
> +
> +def get_loss_ratio(output):
> + """
> + Get the packet loss ratio from the output of ping
> +
> + @param 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 == "localhost":
> + process = kvm_subprocess.run_bg(command, output_func=output_func,
> + timeout=timeout)
Do we really have to resort to kvm_subprocess here? We use subprocess on
special occasions, usually when the command in question is required to
live throughout the tests, which doesn't seem to be the case.
kvm_subprocess is a good library, but it is a more heavyweight
alternative (spawns its own shell process, for example). Maybe you are
using it because you can directly send input to the process at any time,
such as the ctrl+c later on this same code.
> +
> + # Send SIGINT singal to notify the timeout of running ping process,
^ typo, signal
> + # 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 status is False:
^ For None objects, it is better to explicitly test for is None. However
the above construct seems more natural if put as
if not status:
Any particular reason you tested explicitely for False?
> + # Send ctrl+c (SIGINT) through ssh session
> + session.sendline("\003")
> + status, output2 = session.read_up_to_prompt(print_func=output_func)
> + output += output2
> + if status is False:
> + # We also need to use this session to query the return value
> + session.sendline("\003")
> +
> + session.sendline(session.status_test_command)
> + s2, o2 = session.read_up_to_prompt()
> + if s2 is False:
^ See comment above
> + status = -1
> + else:
> + try:
> + status = int(re.findall("\d+", o2)[0])
> + except:
> + status = -1
> +
> + return status, output
> +
> +def ping(dest = "localhost", 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 = "localhost"):
^ On function headers, we pretty much follow PEP 8 and don't use spacing
between argument keys, the equal sign and the default value, so this
header should be rewritten
def ping(dest="localhost",...)
> + """
> + 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
> + """
> +
> + command = "ping %s " % dest
> +
> + 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 is True:
> + command += " -A"
> + if broadcast is True:
> + command += " -b"
> + if flood is True:
> + # temporary workaround as the kvm_subprocess may not properly handle
> + # the timeout for the output of flood ping
> + command += " -f -q"
> + output_func = None
^ the last 3 if clauses could be simpler if put as:
if adaptive:
if broadcast:
if flood:
> + return raw_ping(command, timeout, session, output_func)
>
> def get_linux_ifname(session, mac_address):
> """
>
>
next prev parent reply other threads:[~2010-07-27 13:01 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-20 1:34 [Qemu-devel] [Autotest][RFC PATCH 00/14] Patchset of network related subtests Amos Kong
2010-07-20 1:34 ` [Qemu-devel] [RFC PATCH 01/14] KVM-test: Add a new macaddress pool algorithm Amos Kong
2010-07-20 10:19 ` Michael Goldish
2010-07-20 13:44 ` Amos Kong
2010-07-20 15:53 ` Michael Goldish
2010-08-03 1:34 ` Amos Kong
2010-07-27 1:48 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-07-20 1:35 ` [Qemu-devel] [RFC PATCH 02/14] KVM Test: Add a function get_interface_name() to kvm_net_utils.py Amos Kong
2010-07-27 2:08 ` Lucas Meneghel Rodrigues
2010-07-28 10:29 ` Michael Goldish
2010-08-03 1:39 ` Amos Kong
2010-07-20 1:35 ` [Qemu-devel] [RFC PATCH 03/14] KVM Test: Add a common ping module for network related tests Amos Kong
2010-07-27 13:01 ` Lucas Meneghel Rodrigues [this message]
2010-07-28 11:50 ` Michael Goldish
2010-07-28 13:56 ` Michael Goldish
2010-07-20 1:35 ` [Qemu-devel] [RFC PATCH 04/14] KVM-test: Add a new subtest ping Amos Kong
2010-07-27 13:15 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-08-03 1:54 ` Amos Kong
2010-07-20 1:35 ` [Qemu-devel] [RFC PATCH 05/14] KVM-test: Add a subtest jumbo Amos Kong
2010-07-27 14:13 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-08-10 7:18 ` [Qemu-devel] Re: [Autotest] " Amos Kong
2010-07-20 1:35 ` [Qemu-devel] [RFC PATCH 06/14] KVM-test: Add basic file transfer test Amos Kong
2010-07-27 14:36 ` Lucas Meneghel Rodrigues
2010-08-10 9:29 ` [Autotest] " Amos Kong
2010-07-20 1:35 ` [Qemu-devel] [RFC PATCH 07/14] KVM-test: Add a subtest of load/unload nic driver Amos Kong
2010-07-28 18:12 ` Lucas Meneghel Rodrigues
2010-07-20 1:35 ` [Qemu-devel] [RFC PATCH 08/14] KVM-test: Add a subtest of nic promisc Amos Kong
2010-07-28 21:35 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-08-11 1:34 ` [Qemu-devel] Re: [Autotest] " Amos Kong
2010-07-20 1:36 ` [Qemu-devel] [RFC PATCH 09/14] KVM-test: Add a subtest of multicast Amos Kong
2010-07-28 21:55 ` Lucas Meneghel Rodrigues
2010-07-20 1:36 ` [Qemu-devel] [RFC PATCH 10/14] KVM-test: Add a subtest of pxe Amos Kong
2010-07-28 22:07 ` Lucas Meneghel Rodrigues
2010-08-10 6:11 ` Amos Kong
2010-07-20 1:36 ` [Qemu-devel] [RFC PATCH 11/14] KVM-test: Add a subtest of changing mac address Amos Kong
2010-07-28 22:30 ` Lucas Meneghel Rodrigues
2010-07-20 1:36 ` [Qemu-devel] [RFC PATCH 12/14] KVM-test: Add a subtest of netperf Amos Kong
2010-07-30 16:32 ` Lucas Meneghel Rodrigues
2010-07-20 1:36 ` [Qemu-devel] [RFC PATCH 13/14] KVM-test: Improve vlan subtest Amos Kong
2010-07-20 1:36 ` [Qemu-devel] [RFC PATCH 14/14] KVM-test: Add subtest of testing offload by ethtool Amos Kong
2010-08-02 19:10 ` [Qemu-devel] " Lucas Meneghel Rodrigues
2010-08-10 7:07 ` [Qemu-devel] Re: [Autotest] " Amos Kong
2010-07-20 12:12 ` [Qemu-devel] Re: [Autotest][RFC PATCH 00/14] Patchset of network related subtests Lucas Meneghel Rodrigues
2010-08-02 20:58 ` 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=1280235687.2637.19.camel@freedom \
--to=lmr@redhat.com \
--cc=akong@redhat.com \
--cc=autotest@test.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).