From cadfc7293977ecadc2d6c48d7cffc553ed2f85f1 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Tue, 7 Nov 2023 04:35:12 -0500 Subject: [PATCH] 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 --- tests/qtest/netdev-socket.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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)