summaryrefslogtreecommitdiff
path: root/tests/test-io-channel-socket.c
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2015-12-21 12:04:21 +0000
committerDaniel P. Berrange <berrange@redhat.com>2015-12-22 18:19:32 +0000
commitbead59946a8b54398f4ba3c9c8ecd15eeac78c53 (patch)
tree7a413335e6a2767b8d172dfe3d92348d7848e88a /tests/test-io-channel-socket.c
parente4d2edc9d0c58de421eb349871e90b67edec0b9c (diff)
downloadqemu-bead59946a8b54398f4ba3c9c8ecd15eeac78c53.tar.gz
io: fix setting of QIO_CHANNEL_FEATURE_FD_PASS on server connections
The QIO_CHANNEL_FEATURE_FD_PASS feature flag is set in the qio_channel_socket_set_fd() method, however, this only deals with client side connections. To ensure server side connections also have the feature flag set, we must set it in qio_channel_socket_accept() too. This also highlighted a typo fix where the code updated the sockaddr struct in the wrong object instance. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'tests/test-io-channel-socket.c')
-rw-r--r--tests/test-io-channel-socket.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/tests/test-io-channel-socket.c b/tests/test-io-channel-socket.c
index e76d54c3f8..b0eb5381b7 100644
--- a/tests/test-io-channel-socket.c
+++ b/tests/test-io-channel-socket.c
@@ -210,13 +210,19 @@ static void test_io_channel_setup_async(SocketAddress *listen_addr,
static void test_io_channel(bool async,
SocketAddress *listen_addr,
- SocketAddress *connect_addr)
+ SocketAddress *connect_addr,
+ bool passFD)
{
QIOChannel *src, *dst;
QIOChannelTest *test;
if (async) {
test_io_channel_setup_async(listen_addr, connect_addr, &src, &dst);
+ 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));
+
test = qio_channel_test_new();
qio_channel_test_run_threads(test, true, src, dst);
qio_channel_test_validate(test);
@@ -226,6 +232,11 @@ static void test_io_channel(bool async,
test_io_channel_setup_async(listen_addr, connect_addr, &src, &dst);
+ 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));
+
test = qio_channel_test_new();
qio_channel_test_run_threads(test, false, src, dst);
qio_channel_test_validate(test);
@@ -235,6 +246,11 @@ static void test_io_channel(bool async,
} else {
test_io_channel_setup_sync(listen_addr, connect_addr, &src, &dst);
+ 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));
+
test = qio_channel_test_new();
qio_channel_test_run_threads(test, true, src, dst);
qio_channel_test_validate(test);
@@ -244,6 +260,11 @@ static void test_io_channel(bool async,
test_io_channel_setup_sync(listen_addr, connect_addr, &src, &dst);
+ 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));
+
test = qio_channel_test_new();
qio_channel_test_run_threads(test, false, src, dst);
qio_channel_test_validate(test);
@@ -269,7 +290,7 @@ static void test_io_channel_ipv4(bool async)
connect_addr->u.inet->host = g_strdup("127.0.0.1");
connect_addr->u.inet->port = NULL; /* Filled in later */
- test_io_channel(async, listen_addr, connect_addr);
+ test_io_channel(async, listen_addr, connect_addr, false);
qapi_free_SocketAddress(listen_addr);
qapi_free_SocketAddress(connect_addr);
@@ -303,7 +324,7 @@ static void test_io_channel_ipv6(bool async)
connect_addr->u.inet->host = g_strdup("::1");
connect_addr->u.inet->port = NULL; /* Filled in later */
- test_io_channel(async, listen_addr, connect_addr);
+ test_io_channel(async, listen_addr, connect_addr, false);
qapi_free_SocketAddress(listen_addr);
qapi_free_SocketAddress(connect_addr);
@@ -337,7 +358,7 @@ static void test_io_channel_unix(bool async)
connect_addr->u.q_unix = g_new0(UnixSocketAddress, 1);
connect_addr->u.q_unix->path = g_strdup(TEST_SOCKET);
- test_io_channel(async, listen_addr, connect_addr);
+ test_io_channel(async, listen_addr, connect_addr, true);
qapi_free_SocketAddress(listen_addr);
qapi_free_SocketAddress(connect_addr);