From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org, jasowang@redhat.com, eblake@redhat.com,
armbru@redhat.com, laine@redhat.com
Subject: [Qemu-devel] [PATCH v4 5/5] net/announce: Expand test for stopping self announce
Date: Thu, 13 Jun 2019 10:59:24 +0100 [thread overview]
Message-ID: <20190613095924.21908-6-dgilbert@redhat.com> (raw)
In-Reply-To: <20190613095924.21908-1-dgilbert@redhat.com>
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 {
+ 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);
+
+ 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)
--
2.21.0
next prev parent reply other threads:[~2019-06-13 10:19 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 ` Dr. David Alan Gilbert (git) [this message]
2019-06-18 3:26 ` [Qemu-devel] [PATCH v4 5/5] net/announce: Expand test for stopping self announce Jason Wang
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=20190613095924.21908-6-dgilbert@redhat.com \
--to=dgilbert@redhat.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=jasowang@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).