tests/unit: Update test-io-channel-socket.c for Windows

Change to dynamically include the test cases by checking AF_UNIX
availability using a new helper socket_check_afunix_support().
With such changes testing on a Windows host can be covered as well.

Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20220802075200.907360-5-bmeng.cn@gmail.com>
This commit is contained in:
Bin Meng 2022-08-02 15:52:00 +08:00 committed by Marc-André Lureau
parent 120fa5e0e6
commit 0370f239ad
3 changed files with 48 additions and 14 deletions

View File

@ -154,3 +154,19 @@ int socket_check_protocol_support(bool *has_ipv4, bool *has_ipv6)
return 0;
}
void socket_check_afunix_support(bool *has_afunix)
{
int fd;
fd = socket(PF_UNIX, SOCK_STREAM, 0);
closesocket(fd);
#ifdef _WIN32
*has_afunix = (fd != (int)INVALID_SOCKET);
#else
*has_afunix = (fd >= 0);
#endif
return;
}

View File

@ -32,4 +32,13 @@
*/
int socket_check_protocol_support(bool *has_ipv4, bool *has_ipv6);
/*
* @has_afunix: set to true on return if unix socket support is available
*
* Check whether unix domain socket support is available for use.
* On success, @has_afunix will be set to indicate whether AF_UNIX protocol
* is available.
*/
void socket_check_afunix_support(bool *has_afunix);
#endif

View File

@ -179,10 +179,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_async(listen_addr, connect_addr,
&srv, &src, &dst);
#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@ -206,10 +208,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_async(listen_addr, connect_addr,
&srv, &src, &dst);
#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@ -236,10 +240,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_sync(listen_addr, connect_addr,
&srv, &src, &dst);
#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@ -263,10 +269,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_sync(listen_addr, connect_addr,
&srv, &src, &dst);
#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@ -367,7 +375,6 @@ static void test_io_channel_ipv6_async(void)
}
#ifndef _WIN32
static void test_io_channel_unix(bool async)
{
SocketAddress *listen_addr = g_new0(SocketAddress, 1);
@ -398,6 +405,7 @@ static void test_io_channel_unix_async(void)
return test_io_channel_unix(true);
}
#ifndef _WIN32
static void test_io_channel_unix_fd_pass(void)
{
SocketAddress *listen_addr = g_new0(SocketAddress, 1);
@ -491,6 +499,7 @@ static void test_io_channel_unix_fd_pass(void)
}
g_free(fdrecv);
}
#endif /* _WIN32 */
static void test_io_channel_unix_listen_cleanup(void)
{
@ -522,9 +531,6 @@ static void test_io_channel_unix_listen_cleanup(void)
unlink(TEST_SOCKET);
}
#endif /* _WIN32 */
static void test_io_channel_ipv4_fd(void)
{
QIOChannel *ioc;
@ -555,7 +561,7 @@ static void test_io_channel_ipv4_fd(void)
int main(int argc, char **argv)
{
bool has_ipv4, has_ipv6;
bool has_ipv4, has_ipv6, has_afunix;
module_call_init(MODULE_INIT_QOM);
qemu_init_main_loop(&error_abort);
@ -588,16 +594,19 @@ int main(int argc, char **argv)
test_io_channel_ipv6_async);
}
socket_check_afunix_support(&has_afunix);
if (has_afunix) {
g_test_add_func("/io/channel/socket/unix-sync",
test_io_channel_unix_sync);
g_test_add_func("/io/channel/socket/unix-async",
test_io_channel_unix_async);
#ifndef _WIN32
g_test_add_func("/io/channel/socket/unix-sync",
test_io_channel_unix_sync);
g_test_add_func("/io/channel/socket/unix-async",
test_io_channel_unix_async);
g_test_add_func("/io/channel/socket/unix-fd-pass",
test_io_channel_unix_fd_pass);
g_test_add_func("/io/channel/socket/unix-listen-cleanup",
test_io_channel_unix_listen_cleanup);
#endif /* _WIN32 */
g_test_add_func("/io/channel/socket/unix-fd-pass",
test_io_channel_unix_fd_pass);
#endif
g_test_add_func("/io/channel/socket/unix-listen-cleanup",
test_io_channel_unix_listen_cleanup);
}
end:
return g_test_run();