Skip to content

Commit

Permalink
libqtest: add qtest_socket_server()
Browse files Browse the repository at this point in the history
Add an API that returns a new UNIX domain socket in the listen state.
The code for this was already there but only used internally in
init_socket().

This new API will be used by vhost-user-blk-test.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Message-Id: <20210223144653.811468-3-stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
stefanhaRH authored and kevmw committed Mar 8, 2021
1 parent 535255b commit 9fb7bb0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 17 deletions.
8 changes: 8 additions & 0 deletions tests/qtest/libqos/libqtest.h
Expand Up @@ -132,6 +132,14 @@ void qtest_qmp_send(QTestState *s, const char *fmt, ...)
void qtest_qmp_send_raw(QTestState *s, const char *fmt, ...)
GCC_FMT_ATTR(2, 3);

/**
* qtest_socket_server:
* @socket_path: the UNIX domain socket path
*
* Create and return a listen socket file descriptor, or abort on failure.
*/
int qtest_socket_server(const char *socket_path);

/**
* qtest_vqmp_fds:
* @s: #QTestState instance to operate on.
Expand Down
40 changes: 23 additions & 17 deletions tests/qtest/libqtest.c
Expand Up @@ -81,24 +81,8 @@ static void qtest_client_set_rx_handler(QTestState *s, QTestRecvFn recv);

static int init_socket(const char *socket_path)
{
struct sockaddr_un addr;
int sock;
int ret;

sock = socket(PF_UNIX, SOCK_STREAM, 0);
g_assert_cmpint(sock, !=, -1);

addr.sun_family = AF_UNIX;
snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", socket_path);
int sock = qtest_socket_server(socket_path);
qemu_set_cloexec(sock);

do {
ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr));
} while (ret == -1 && errno == EINTR);
g_assert_cmpint(ret, !=, -1);
ret = listen(sock, 1);
g_assert_cmpint(ret, !=, -1);

return sock;
}

Expand Down Expand Up @@ -638,6 +622,28 @@ QDict *qtest_qmp_receive_dict(QTestState *s)
return qmp_fd_receive(s->qmp_fd);
}

int qtest_socket_server(const char *socket_path)
{
struct sockaddr_un addr;
int sock;
int ret;

sock = socket(PF_UNIX, SOCK_STREAM, 0);
g_assert_cmpint(sock, !=, -1);

addr.sun_family = AF_UNIX;
snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", socket_path);

do {
ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr));
} while (ret == -1 && errno == EINTR);
g_assert_cmpint(ret, !=, -1);
ret = listen(sock, 1);
g_assert_cmpint(ret, !=, -1);

return sock;
}

/**
* Allow users to send a message without waiting for the reply,
* in the case that they choose to discard all replies up until
Expand Down

0 comments on commit 9fb7bb0

Please sign in to comment.