qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>,
	qemu-devel@nongnu.org, eblake@redhat.com, armbru@redhat.com,
	laine@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 5/5] net/announce: Expand test for stopping self announce
Date: Tue, 18 Jun 2019 11:26:15 +0800	[thread overview]
Message-ID: <46411fb1-62d8-30ee-e558-557ad6ceb323@redhat.com> (raw)
In-Reply-To: <20190613095924.21908-6-dgilbert@redhat.com>


On 2019/6/13 下午5:59, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> Expand self-announce test to check we can stop an announce timer.
> We set it up to send 300 packets, but after we receive
> the first one we tell it to stop.
>
> We error if:
>     a) We receive more than 30 of the packets
>     b) We're still receiving packets after a lot longer than the
>        30 seconds should have arrived
>
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
>   tests/virtio-net-test.c | 57 ++++++++++++++++++++++++++++++++++++++---
>   1 file changed, 54 insertions(+), 3 deletions(-)
>
> diff --git a/tests/virtio-net-test.c b/tests/virtio-net-test.c
> index 663cf7ea7e..3b49b431dc 100644
> --- a/tests/virtio-net-test.c
> +++ b/tests/virtio-net-test.c
> @@ -184,21 +184,72 @@ static void announce_self(void *obj, void *data, QGuestAllocator *t_alloc)
>       QDict *rsp;
>       int ret;
>       uint16_t *proto = (uint16_t *)&buffer[12];
> +    size_t total_received = 0;
> +    uint64_t start, now, last_rxt, deadline;
>   
> +    /* Send a set of packets over a few second period */
>       rsp = qmp("{ 'execute' : 'announce-self', "
>                     " 'arguments': {"
> -                      " 'initial': 50, 'max': 550,"
> -                      " 'rounds': 10, 'step': 50 } }");
> +                      " 'initial': 20, 'max': 100,"
> +                      " 'rounds': 300, 'step': 10, 'id': 'bob' } }");
>       assert(!qdict_haskey(rsp, "error"));
>       qobject_unref(rsp);
>   
> -    /* Catch the packet and make sure it's a RARP */
> +    /* Catch the first packet and make sure it's a RARP */
>       ret = qemu_recv(sv[0], &len, sizeof(len), 0);
>       g_assert_cmpint(ret, ==,  sizeof(len));
>       len = ntohl(len);
>   
>       ret = qemu_recv(sv[0], buffer, len, 0);
>       g_assert_cmpint(*proto, ==, htons(ETH_P_RARP));
> +
> +    /*
> +     * Stop the announcment by settings rounds to 0 on the
> +     * existing timer.
> +     */
> +    rsp = qmp("{ 'execute' : 'announce-self', "
> +                  " 'arguments': {"
> +                      " 'initial': 20, 'max': 100,"
> +                      " 'rounds': 0, 'step': 10, 'id': 'bob' } }");
> +    assert(!qdict_haskey(rsp, "error"));
> +    qobject_unref(rsp);
> +
> +    /* Now make sure the packets stop */
> +
> +    /* Times are in us */
> +    start = g_get_monotonic_time();
> +    /* 30 packets, max gap 100ms, * 2 for wiggle */
> +    deadline = start + 1000 * (100 * 30 * 2);
> +    last_rxt = start;
> +
> +    do {


while (ture) looks better here.


> +        int saved_err;
> +        ret = qemu_recv(sv[0], buffer, 60, MSG_DONTWAIT);
> +        saved_err = errno;
> +        now = g_get_monotonic_time();
> +        g_assert_cmpint(now, <, deadline);

The maximum gap allowed is 1000 * 100 * 4, and we allow at most 30 
packets that's 30 * 1000 * 100 * 4 which is 1200000.

But the deadline is 1000 * 100 * 30 * 2 which is 6000000.

Does this mean deadline is conflict with the assumption above?

Thanks


> +
> +        if (ret >= 0) {
> +            if (ret) {
> +                last_rxt = now;
> +            }
> +            total_received += ret;
> +
> +            /* Check it's not spewing loads */
> +            g_assert_cmpint(total_received, <, 60 * 30 * 2);
> +        } else {
> +            g_assert_cmpint(saved_err, ==, EAGAIN);
> +
> +            /* 400ms, i.e. 4 worst case gaps */
> +            if ((now - last_rxt) > (1000 * 100 * 4)) {
> +                /* Nothings arrived for a while - must have stopped */
> +                break;
> +            };
> +
> +            /* 100ms */
> +            g_usleep(1000 * 100);
> +        }
> +    } while (true);
>   }
>   
>   static void virtio_net_test_cleanup(void *sockets)


  reply	other threads:[~2019-06-18  3:27 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-13  9:59 [Qemu-devel] [PATCH v4 0/5] network announce; interface selection & IDs Dr. David Alan Gilbert (git)
2019-06-13  9:59 ` [Qemu-devel] [PATCH v4 1/5] net/announce: Allow optional list of interfaces Dr. David Alan Gilbert (git)
2019-06-18  3:12   ` Jason Wang
2019-06-18  9:36     ` Dr. David Alan Gilbert
2019-06-13  9:59 ` [Qemu-devel] [PATCH v4 2/5] net/announce: Add HMP optional interface list Dr. David Alan Gilbert (git)
2019-06-13  9:59 ` [Qemu-devel] [PATCH v4 3/5] net/announce: Add optional ID Dr. David Alan Gilbert (git)
2019-06-18  3:19   ` Jason Wang
2019-06-20 16:50     ` Dr. David Alan Gilbert
2019-06-13  9:59 ` [Qemu-devel] [PATCH v4 4/5] net/announce: Add HMP " Dr. David Alan Gilbert (git)
2019-06-13  9:59 ` [Qemu-devel] [PATCH v4 5/5] net/announce: Expand test for stopping self announce Dr. David Alan Gilbert (git)
2019-06-18  3:26   ` Jason Wang [this message]
2019-06-20 17:27     ` Dr. David Alan Gilbert
2019-06-18  3:11 ` [Qemu-devel] [PATCH v4 0/5] network announce; interface selection & IDs Jason Wang
2019-06-20 17:34   ` Dr. David Alan Gilbert

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=46411fb1-62d8-30ee-e558-557ad6ceb323@redhat.com \
    --to=jasowang@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=laine@redhat.com \
    --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).