[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 29/30] tests/unit: cleanups for test-io-channel-command
From: |
Alex Bennée |
Subject: |
[PATCH v4 29/30] tests/unit: cleanups for test-io-channel-command |
Date: |
Thu, 27 Oct 2022 19:36:35 +0100 |
This test is hanging under heavy load when the two socats race while
trying to create the socket. I've tried various approaches to avoid
the race but it seems "creat=0" won't stop socat trying to create a
pipe if it executes first. In the end I just use a small sleep which
seems to be reliable enough on the load situations I've tried.
While I was there I also properly created a tmpdir for the socket to
live in which is cleaned up at the end of the test.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Thomas Huth <thuth@redhat.com>
Cc: Daniel P. Berrangé <berrange@redhat.com>
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Juan Quintela <quintela@redhat.com>
---
tests/unit/test-io-channel-command.c | 45 +++++++++++++++++-----------
1 file changed, 28 insertions(+), 17 deletions(-)
diff --git a/tests/unit/test-io-channel-command.c
b/tests/unit/test-io-channel-command.c
index 7eee939c07..54bb0f139a 100644
--- a/tests/unit/test-io-channel-command.c
+++ b/tests/unit/test-io-channel-command.c
@@ -19,6 +19,7 @@
*/
#include "qemu/osdep.h"
+#include <glib/gstdio.h>
#include "io/channel-command.h"
#include "io-channel-helpers.h"
#include "qapi/error.h"
@@ -26,32 +27,32 @@
#define TEST_FIFO "test-io-channel-command.fifo"
-#define SOCAT_SRC "PIPE:" TEST_FIFO ",wronly"
-#define SOCAT_DST "PIPE:" TEST_FIFO ",rdonly"
-
static char *socat = NULL;
static void test_io_channel_command_fifo(bool async)
{
+ g_autofree gchar *tmpdir = g_dir_make_tmp("qemu-test-io-channel.XXXXXX",
NULL);
+ g_autofree gchar *fifo = g_strdup_printf("%s/%s", tmpdir, TEST_FIFO);
+ g_autoptr(GString) srcargs = g_string_new(socat);
+ g_autoptr(GString) dstargs = g_string_new(socat);
+ g_auto(GStrv) srcargv;
+ g_auto(GStrv) dstargv;
QIOChannel *src, *dst;
QIOChannelTest *test;
- const char *srcargv[] = {
- socat, "-", SOCAT_SRC, NULL,
- };
- const char *dstargv[] = {
- socat, SOCAT_DST, "-", NULL,
- };
- if (!socat) {
- g_test_skip("socat is not found in PATH");
- return;
- }
+ g_string_append_printf(srcargs, " - PIPE:%s,wronly", fifo);
+ g_string_append_printf(dstargs, " PIPE:%s,rdonly -", fifo);
+
+ srcargv = g_strsplit(srcargs->str, " ", -1);
+ dstargv = g_strsplit(dstargs->str, " ", -1);
- unlink(TEST_FIFO);
- src = QIO_CHANNEL(qio_channel_command_new_spawn(srcargv,
+ src = QIO_CHANNEL(qio_channel_command_new_spawn((const char**) srcargv,
O_WRONLY,
&error_abort));
- dst = QIO_CHANNEL(qio_channel_command_new_spawn(dstargv,
+ /* try to avoid a race to create the socket */
+ g_usleep(1000);
+
+ dst = QIO_CHANNEL(qio_channel_command_new_spawn((const char**) dstargv,
O_RDONLY,
&error_abort));
@@ -62,17 +63,27 @@ static void test_io_channel_command_fifo(bool async)
object_unref(OBJECT(src));
object_unref(OBJECT(dst));
- unlink(TEST_FIFO);
+ g_rmdir(tmpdir);
}
static void test_io_channel_command_fifo_async(void)
{
+ if (!socat) {
+ g_test_skip("socat is not found in PATH");
+ return;
+ }
+
test_io_channel_command_fifo(true);
}
static void test_io_channel_command_fifo_sync(void)
{
+ if (!socat) {
+ g_test_skip("socat is not found in PATH");
+ return;
+ }
+
test_io_channel_command_fifo(false);
}
--
2.34.1
- [PATCH v4 16/30] MAINTAINERS: add features_to_c.sh to gdbstub files, (continued)
- [PATCH v4 16/30] MAINTAINERS: add features_to_c.sh to gdbstub files, Alex Bennée, 2022/10/27
- [PATCH v4 23/30] target/s390x: don't use ld_code2 to probe next pc, Alex Bennée, 2022/10/27
- [PATCH v4 20/30] tests/avocado: disable sh4 rd2 tests on Gitlab, Alex Bennée, 2022/10/27
- [PATCH v4 15/30] MAINTAINERS: add entries for the key build bits, Alex Bennée, 2022/10/27
- [PATCH v4 18/30] tests/avocado: set -machine none for userfwd and vnc tests, Alex Bennée, 2022/10/27
- [PATCH v4 17/30] MAINTAINERS: fix-up for check-tcg Makefile changes, Alex Bennée, 2022/10/27
- [PATCH v4 28/30] contrib/plugins: protect execlog's last_exec expansion, Alex Bennée, 2022/10/27
- [PATCH v4 25/30] target/s390x: fake instruction loading when handling 'ex', Alex Bennée, 2022/10/27
- [PATCH v4 27/30] contrib/plugins: enable debug on CONFIG_DEBUG_TCG, Alex Bennée, 2022/10/27
- [PATCH v4 29/30] tests/unit: cleanups for test-io-channel-command,
Alex Bennée <=
- [PATCH v4 24/30] target/s390x: don't probe next pc for EXecuted insns, Alex Bennée, 2022/10/27
- [PATCH v4 30/30] tests/vm: use -o IdentitiesOnly=yes for ssh, Alex Bennée, 2022/10/27
- [PATCH v4 19/30] tests/avocado: raspi2_initrd: Wait for guest shutdown message before stopping, Alex Bennée, 2022/10/27