Message ID | 20230110173922.265055-5-alex.bennee@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | current maintainer trees (testing/semihosting/plugins) | expand |
On 10/01/2023 18.39, Alex Bennée wrote: > We don't need to play timing games to ensure one socat wins over the > other, just create the fifo they both can use before spawning the > processes. However in the process we need to disable two tests for > Windows platforms as we don't have an abstraction for mkfifo(). > > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1403 > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > --- > tests/unit/test-io-channel-command.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/tests/unit/test-io-channel-command.c b/tests/unit/test-io-channel-command.c > index 19f72eab96..425e2f5594 100644 > --- a/tests/unit/test-io-channel-command.c > +++ b/tests/unit/test-io-channel-command.c > @@ -20,6 +20,8 @@ > > #include "qemu/osdep.h" > #include <glib/gstdio.h> > +#include <sys/types.h> > +#include <sys/stat.h> > #include "io/channel-command.h" > #include "io-channel-helpers.h" > #include "qapi/error.h" > @@ -29,6 +31,7 @@ > > static char *socat = NULL; > > +#ifndef _WIN32 > static void test_io_channel_command_fifo(bool async) > { > g_autofree gchar *tmpdir = g_dir_make_tmp("qemu-test-io-channel.XXXXXX", NULL); > @@ -40,12 +43,13 @@ static void test_io_channel_command_fifo(bool async) > QIOChannel *src, *dst; > QIOChannelTest *test; > > + if (mkfifo(fifo, 0600)) { > + g_error("mkfifo: %s", strerror(errno)); > + } > + > src = QIO_CHANNEL(qio_channel_command_new_spawn((const char **) srcargv, > O_WRONLY, > &error_abort)); > - /* 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)); > @@ -60,7 +64,6 @@ static void test_io_channel_command_fifo(bool async) > g_rmdir(tmpdir); > } > > - > static void test_io_channel_command_fifo_async(void) > { > if (!socat) { > @@ -80,6 +83,7 @@ static void test_io_channel_command_fifo_sync(void) > > test_io_channel_command_fifo(false); > } > +#endif > > > static void test_io_channel_command_echo(bool async) > @@ -124,10 +128,12 @@ int main(int argc, char **argv) > > socat = g_find_program_in_path("socat"); > > +#ifndef _WIN32 > g_test_add_func("/io/channel/command/fifo/sync", > test_io_channel_command_fifo_sync); > g_test_add_func("/io/channel/command/fifo/async", > test_io_channel_command_fifo_async); > +#endif > g_test_add_func("/io/channel/command/echo/sync", > test_io_channel_command_echo_sync); > g_test_add_func("/io/channel/command/echo/async", Reviewed-by: Thomas Huth <thuth@redhat.com>
Hi On Tue, Jan 10, 2023 at 9:39 PM Alex Bennée <alex.bennee@linaro.org> wrote: > We don't need to play timing games to ensure one socat wins over the > other, just create the fifo they both can use before spawning the > processes. However in the process we need to disable two tests for > Windows platforms as we don't have an abstraction for mkfifo(). > > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1403 > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > --- > tests/unit/test-io-channel-command.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/tests/unit/test-io-channel-command.c > b/tests/unit/test-io-channel-command.c > index 19f72eab96..425e2f5594 100644 > --- a/tests/unit/test-io-channel-command.c > +++ b/tests/unit/test-io-channel-command.c > @@ -20,6 +20,8 @@ > > #include "qemu/osdep.h" > #include <glib/gstdio.h> > +#include <sys/types.h> > +#include <sys/stat.h> > #include "io/channel-command.h" > #include "io-channel-helpers.h" > #include "qapi/error.h" > @@ -29,6 +31,7 @@ > > static char *socat = NULL; > > +#ifndef _WIN32 > sigh, I give up trying to keep it running on windows then... You can further cleanup #ifdef stuff it seems static void test_io_channel_command_fifo(bool async) > { > g_autofree gchar *tmpdir = > g_dir_make_tmp("qemu-test-io-channel.XXXXXX", NULL); > @@ -40,12 +43,13 @@ static void test_io_channel_command_fifo(bool async) > QIOChannel *src, *dst; > QIOChannelTest *test; > > + if (mkfifo(fifo, 0600)) { > + g_error("mkfifo: %s", strerror(errno)); > + } > + > src = QIO_CHANNEL(qio_channel_command_new_spawn((const char **) > srcargv, > O_WRONLY, > &error_abort)); > - /* 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)); > @@ -60,7 +64,6 @@ static void test_io_channel_command_fifo(bool async) > g_rmdir(tmpdir); > } > > - > static void test_io_channel_command_fifo_async(void) > { > if (!socat) { > @@ -80,6 +83,7 @@ static void test_io_channel_command_fifo_sync(void) > > test_io_channel_command_fifo(false); > } > +#endif > > > static void test_io_channel_command_echo(bool async) > @@ -124,10 +128,12 @@ int main(int argc, char **argv) > > socat = g_find_program_in_path("socat"); > > +#ifndef _WIN32 > g_test_add_func("/io/channel/command/fifo/sync", > test_io_channel_command_fifo_sync); > g_test_add_func("/io/channel/command/fifo/async", > test_io_channel_command_fifo_async); > +#endif > g_test_add_func("/io/channel/command/echo/sync", > test_io_channel_command_echo_sync); > g_test_add_func("/io/channel/command/echo/async", > -- > 2.34.1 > >
diff --git a/tests/unit/test-io-channel-command.c b/tests/unit/test-io-channel-command.c index 19f72eab96..425e2f5594 100644 --- a/tests/unit/test-io-channel-command.c +++ b/tests/unit/test-io-channel-command.c @@ -20,6 +20,8 @@ #include "qemu/osdep.h" #include <glib/gstdio.h> +#include <sys/types.h> +#include <sys/stat.h> #include "io/channel-command.h" #include "io-channel-helpers.h" #include "qapi/error.h" @@ -29,6 +31,7 @@ static char *socat = NULL; +#ifndef _WIN32 static void test_io_channel_command_fifo(bool async) { g_autofree gchar *tmpdir = g_dir_make_tmp("qemu-test-io-channel.XXXXXX", NULL); @@ -40,12 +43,13 @@ static void test_io_channel_command_fifo(bool async) QIOChannel *src, *dst; QIOChannelTest *test; + if (mkfifo(fifo, 0600)) { + g_error("mkfifo: %s", strerror(errno)); + } + src = QIO_CHANNEL(qio_channel_command_new_spawn((const char **) srcargv, O_WRONLY, &error_abort)); - /* 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)); @@ -60,7 +64,6 @@ static void test_io_channel_command_fifo(bool async) g_rmdir(tmpdir); } - static void test_io_channel_command_fifo_async(void) { if (!socat) { @@ -80,6 +83,7 @@ static void test_io_channel_command_fifo_sync(void) test_io_channel_command_fifo(false); } +#endif static void test_io_channel_command_echo(bool async) @@ -124,10 +128,12 @@ int main(int argc, char **argv) socat = g_find_program_in_path("socat"); +#ifndef _WIN32 g_test_add_func("/io/channel/command/fifo/sync", test_io_channel_command_fifo_sync); g_test_add_func("/io/channel/command/fifo/async", test_io_channel_command_fifo_async); +#endif g_test_add_func("/io/channel/command/echo/sync", test_io_channel_command_echo_sync); g_test_add_func("/io/channel/command/echo/async",
We don't need to play timing games to ensure one socat wins over the other, just create the fifo they both can use before spawning the processes. However in the process we need to disable two tests for Windows platforms as we don't have an abstraction for mkfifo(). Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1403 Signed-off-by: Alex Bennée <alex.bennee@linaro.org> --- tests/unit/test-io-channel-command.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)