aboutsummaryrefslogtreecommitdiff
path: root/tests/qtest/libqtest.c
diff options
context:
space:
mode:
authorBin Meng <bin.meng@windriver.com>2022-10-28 12:57:34 +0800
committerThomas Huth <thuth@redhat.com>2022-10-28 14:32:09 +0200
commitdb8fca024fa98241ed40470f87b8ecfb82c57d32 (patch)
tree3338463e6ffe8855ea831f4336d33073dc0ca18d /tests/qtest/libqtest.c
parent8aff9c3279087b8527fd2c3dd4cf0706892887ba (diff)
tests/qtest: libqtest: Correct the timeout unit of blocking receive calls for win32
Some qtest cases don't get response from the QEMU executable under test in time on Windows. It turns out that the socket receive call got timeout before it receive the complete response. The timeout value is supposed to be set to 50 seconds via the setsockopt() call, but there is a difference among platforms. The timeout unit of blocking receive calls is measured in seconds on non-Windows platforms but milliseconds on Windows. Signed-off-by: Bin Meng <bin.meng@windriver.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20221028045736.679903-10-bin.meng@windriver.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
Diffstat (limited to 'tests/qtest/libqtest.c')
-rw-r--r--tests/qtest/libqtest.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index e1e2d39a6e..2fbc3b88f3 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -36,13 +36,14 @@
#include "qapi/qmp/qstring.h"
#define MAX_IRQ 256
-#define SOCKET_TIMEOUT 50
#ifndef _WIN32
+# define SOCKET_TIMEOUT 50
# define CMD_EXEC "exec "
# define DEV_STDERR "/dev/fd/2"
# define DEV_NULL "/dev/null"
#else
+# define SOCKET_TIMEOUT 50000
# define CMD_EXEC ""
# define DEV_STDERR "2"
# define DEV_NULL "nul"
@@ -106,8 +107,16 @@ static int socket_accept(int sock)
struct sockaddr_un addr;
socklen_t addrlen;
int ret;
+ /*
+ * timeout unit of blocking receive calls is different among platfoms.
+ * It's in seconds on non-Windows platforms but milliseconds on Windows.
+ */
+#ifndef _WIN32
struct timeval timeout = { .tv_sec = SOCKET_TIMEOUT,
.tv_usec = 0 };
+#else
+ DWORD timeout = SOCKET_TIMEOUT;
+#endif
if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
(void *)&timeout, sizeof(timeout))) {