From: Jason Wang <jasowang@redhat.com>
To: qemu-devel@nongnu.org, peter.maydell@linaro.org
Cc: Jason Wang <jasowang@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>
Subject: [Qemu-devel] [PULL 12/17] net/announce: Expand test for stopping self announce
Date: Tue, 2 Jul 2019 10:31:24 +0800 [thread overview]
Message-ID: <1562034689-6539-13-git-send-email-jasowang@redhat.com> (raw)
In-Reply-To: <1562034689-6539-1-git-send-email-jasowang@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>
Signed-off-by: Jason Wang <jasowang@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 663cf7e..7aa9622 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, * 4 for wiggle */
+ deadline = start + 1000 * (100 * 30 * 4);
+ last_rxt = start;
+
+ while (true) {
+ 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);
+ }
+ };
}
static void virtio_net_test_cleanup(void *sockets)
--
2.5.0
next prev parent reply other threads:[~2019-07-02 4:20 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-02 2:31 [Qemu-devel] [PULL 00/17] Net patches Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 01/17] MAINTAINERS: Add qemu-bridge-helper.c to "Network device backends" Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 02/17] qemu-bridge-helper: Document known shortcomings Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 03/17] ftgmac100: do not link to netdev Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 04/17] net: fix assertion failure when ipv6-prefixlen is not a number Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 05/17] net: avoid using variable length array in net_client_init() Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 06/17] net: use g_strsplit() for parsing host address and port Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 07/17] net: remove unused get_str_sep() function Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 08/17] net/announce: Allow optional list of interfaces Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 09/17] net/announce: Add HMP optional interface list Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 10/17] net/announce: Add optional ID Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 11/17] net/announce: Add HMP " Jason Wang
2019-07-02 2:31 ` Jason Wang [this message]
2019-07-02 2:31 ` [Qemu-devel] [PULL 13/17] COLO-compare: Add new parameter to communicate with remote colo-frame Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 14/17] COLO-compare: Add remote notification chardev handler frame Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 15/17] COLO-compare: Make the compare_chr_send() can send notification message Jason Wang
2019-07-02 2:31 ` [Qemu-devel] [PULL 16/17] COLO-compare: Add colo-compare remote notify support Jason Wang
2019-07-02 18:51 ` Peter Maydell
2019-07-03 1:08 ` Zhang, Chen
2019-07-03 1:20 ` Zhang, Chen
2019-07-02 2:31 ` [Qemu-devel] [PULL 17/17] migration/colo.c: Add missed filter notify for Xen COLO Jason Wang
2019-07-02 16:40 ` [Qemu-devel] [PULL 00/17] Net patches Peter Maydell
2019-07-03 4:03 ` Jason Wang
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=1562034689-6539-13-git-send-email-jasowang@redhat.com \
--to=jasowang@redhat.com \
--cc=dgilbert@redhat.com \
--cc=peter.maydell@linaro.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).