From 568f00d65f9a2ef04c77d141345ff170ae2e8569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Wed, 19 Jan 2022 16:15:12 +0400 Subject: [PATCH] gio/tests: enable most AF_UNIX tests on all platforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The main difference is that g_socket_new_from_fd() requires bound sockets on Win32. Signed-off-by: Marc-André Lureau --- gio/tests/socket.c | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/gio/tests/socket.c b/gio/tests/socket.c index ee38fabcd..6f6553d6d 100644 --- a/gio/tests/socket.c +++ b/gio/tests/socket.c @@ -17,15 +17,21 @@ */ #include +#include #include +#include + #ifdef G_OS_UNIX #include #include #include #include #include -#include +#endif + +#ifdef G_OS_WIN32 +#include "giowin32-afunix.h" #endif #include "gnetworkingprivate.h" @@ -1327,7 +1333,23 @@ test_sockaddr (void) g_object_unref (saddr); } -#ifdef G_OS_UNIX +static void +bind_win32_unixfd (int fd) +{ +#ifdef G_OS_WIN32 + gint len, ret; + struct sockaddr_un addr; + + memset (&addr, 0, sizeof addr); + addr.sun_family = AF_UNIX; + len = g_snprintf (addr.sun_path, sizeof addr.sun_path, "%s" G_DIR_SEPARATOR_S "%d.sock", g_get_tmp_dir (), fd); + g_assert_cmpint (len, <=, sizeof addr.sun_path); + ret = bind (fd, (struct sockaddr *)&addr, sizeof addr); + g_assert_cmpint (ret, ==, 0); + g_remove (addr.sun_path); +#endif +} + static void test_unix_from_fd (void) { @@ -1338,6 +1360,8 @@ test_unix_from_fd (void) fd = socket (AF_UNIX, SOCK_STREAM, 0); g_assert_cmpint (fd, !=, -1); + bind_win32_unixfd (fd); + error = NULL; s = g_socket_new_from_fd (fd, &error); g_assert_no_error (error); @@ -1358,6 +1382,8 @@ test_unix_connection (void) fd = socket (AF_UNIX, SOCK_STREAM, 0); g_assert_cmpint (fd, !=, -1); + bind_win32_unixfd (fd); + error = NULL; s = g_socket_new_from_fd (fd, &error); g_assert_no_error (error); @@ -1367,6 +1393,7 @@ test_unix_connection (void) g_object_unref (s); } +#ifdef G_OS_UNIX static GSocketConnection * create_connection_for_fd (int fd) { @@ -1466,6 +1493,7 @@ test_unix_connection_ancillary_data (void) * g_unix_connection_receive_credentials(). */ } +#endif static gboolean postmortem_source_cb (GSocket *socket, @@ -1513,8 +1541,6 @@ test_source_postmortem (void) g_main_context_unref (context); } -#endif /* G_OS_UNIX */ - static void test_reuse_tcp (void) { @@ -2151,12 +2177,12 @@ main (int argc, g_test_add_func ("/socket/timed_wait", test_timed_wait); g_test_add_func ("/socket/fd_reuse", test_fd_reuse); g_test_add_func ("/socket/address", test_sockaddr); -#ifdef G_OS_UNIX g_test_add_func ("/socket/unix-from-fd", test_unix_from_fd); g_test_add_func ("/socket/unix-connection", test_unix_connection); +#ifdef G_OS_UNIX g_test_add_func ("/socket/unix-connection-ancillary-data", test_unix_connection_ancillary_data); - g_test_add_func ("/socket/source-postmortem", test_source_postmortem); #endif + g_test_add_func ("/socket/source-postmortem", test_source_postmortem); g_test_add_func ("/socket/reuse/tcp", test_reuse_tcp); g_test_add_func ("/socket/reuse/udp", test_reuse_udp); g_test_add_data_func ("/socket/get_available/datagram", GUINT_TO_POINTER (G_SOCKET_TYPE_DATAGRAM),