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:
parent
120fa5e0e6
commit
0370f239ad
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user