[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 30/31] tests/unit: cleanups for test-io-channel-command
From: |
Alex Bennée |
Subject: |
[PULL 30/31] tests/unit: cleanups for test-io-channel-command |
Date: |
Mon, 31 Oct 2022 13:10:09 +0000 |
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>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Juan Quintela <quintela@redhat.com>
Message-Id: <20221027183637.2772968-30-alex.bennee@linaro.org>
diff --git a/tests/unit/test-io-channel-command.c
b/tests/unit/test-io-channel-command.c
index 7eee939c07..43e29c8cfb 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
- [PULL 14/31] block/vvfat: Unify the mkdir() call, (continued)
- [PULL 14/31] block/vvfat: Unify the mkdir() call, Alex Bennée, 2022/10/31
- [PULL 01/31] tests/lcitool: Rename non-Debian specific helper, Alex Bennée, 2022/10/31
- [PULL 05/31] tests/docker: Add flex/bison to `debian-all-test`, Alex Bennée, 2022/10/31
- [PULL 02/31] tests/lcitool: Refresh to latest libvirt-ci module, Alex Bennée, 2022/10/31
- [PULL 08/31] tests/avocado: extend the timeout for x86_64 tcg tests, Alex Bennée, 2022/10/31
- [PULL 26/31] target/s390x: fake instruction loading when handling 'ex', Alex Bennée, 2022/10/31
- [PULL 25/31] target/s390x: don't probe next pc for EXecuted insns, Alex Bennée, 2022/10/31
- [PULL 28/31] contrib/plugins: enable debug on CONFIG_DEBUG_TCG, Alex Bennée, 2022/10/31
- [PULL 19/31] tests/avocado: set -machine none for userfwd and vnc tests, Alex Bennée, 2022/10/31
- [PULL 17/31] MAINTAINERS: add features_to_c.sh to gdbstub files, Alex Bennée, 2022/10/31
- [PULL 30/31] tests/unit: cleanups for test-io-channel-command,
Alex Bennée <=
- [PULL 24/31] target/s390x: don't use ld_code2 to probe next pc, Alex Bennée, 2022/10/31
- [PULL 20/31] tests/avocado: raspi2_initrd: Wait for guest shutdown message before stopping, Alex Bennée, 2022/10/31
- [PULL 21/31] tests/avocado: disable sh4 rd2 tests on Gitlab, Alex Bennée, 2022/10/31
- [PULL 23/31] tests/tcg: re-enable threadcount for sh4, Alex Bennée, 2022/10/31
- [PULL 31/31] tests/vm: use -o IdentitiesOnly=yes for ssh, Alex Bennée, 2022/10/31
- [PULL 22/31] tests/tcg: re-enable linux-test for sh4, Alex Bennée, 2022/10/31
- [PULL 29/31] contrib/plugins: protect execlog's last_exec expansion, Alex Bennée, 2022/10/31
- [PULL 18/31] MAINTAINERS: fix-up for check-tcg Makefile changes, Alex Bennée, 2022/10/31
- [PULL 27/31] tests/tcg: include CONFIG_PLUGIN in config-host.mak, Alex Bennée, 2022/10/31
- [PULL 16/31] MAINTAINERS: add entries for the key build bits, Alex Bennée, 2022/10/31