aboutsummaryrefslogtreecommitdiff
path: root/tests/qtest/netdev-socket.c
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2023-11-07 04:35:12 -0500
committerMichael S. Tsirkin <mst@redhat.com>2023-12-01 08:53:04 -0500
commitcadfc7293977ecadc2d6c48d7cffc553ed2f85f1 (patch)
treea37f7aff96c61091da181a5058416e55d5ad73b7 /tests/qtest/netdev-socket.c
parentdc864d3a3777424187280e50c9bfb84dced54f12 (diff)
netdev: set timeout depending on loadavg
netdev test keeps failing sometimes. I don't think we should increase the timeout some more: let's try something else instead, testing how busy the system is. Seems to work for me. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'tests/qtest/netdev-socket.c')
-rw-r--r--tests/qtest/netdev-socket.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/tests/qtest/netdev-socket.c b/tests/qtest/netdev-socket.c
index 7ba1eff120..bb99d08b5e 100644
--- a/tests/qtest/netdev-socket.c
+++ b/tests/qtest/netdev-socket.c
@@ -18,6 +18,32 @@
#define CONNECTION_TIMEOUT 120
+static double connection_timeout(void)
+{
+ double load;
+ int ret = getloadavg(&load, 1);
+
+ /*
+ * If we can't get load data, or load is low because we just started
+ * running, assume load of 1 (we are alone in this system).
+ */
+ if (ret < 1 || load < 1.0) {
+ load = 1.0;
+ }
+ /*
+ * No one wants to wait more than 10 minutes for this test. Higher load?
+ * Too bad.
+ */
+ if (load > 10.0) {
+ fprintf(stderr, "Warning: load %f higher than 10 - test might timeout\n",
+ load);
+ load = 10.0;
+ }
+
+ /* if load is high increase timeout as we might not get a chance to run */
+ return load * CONNECTION_TIMEOUT;
+}
+
#define EXPECT_STATE(q, e, t) \
do { \
char *resp = NULL; \
@@ -31,7 +57,7 @@ do { \
if (g_str_equal(resp, e)) { \
break; \
} \
- } while (g_test_timer_elapsed() < CONNECTION_TIMEOUT); \
+ } while (g_test_timer_elapsed() < connection_timeout()); \
g_assert_cmpstr(resp, ==, e); \
g_free(resp); \
} while (0)