Loading tests/test-util-sockets.c +92 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,93 @@ static void test_socket_fd_pass_num_nocli(void) g_free(addr.u.fd.str); } #ifdef __linux__ static gchar *abstract_sock_name; static gpointer unix_server_thread_func(gpointer user_data) { SocketAddress addr; Error *err = NULL; int fd = -1; int connfd = -1; struct sockaddr_un un; socklen_t len = sizeof(un); addr.type = SOCKET_ADDRESS_TYPE_UNIX; addr.u.q_unix.path = abstract_sock_name; addr.u.q_unix.tight = user_data != NULL; addr.u.q_unix.abstract = true; fd = socket_listen(&addr, 1, &err); g_assert_cmpint(fd, >=, 0); g_assert(fd_is_socket(fd)); connfd = accept(fd, (struct sockaddr *)&un, &len); g_assert_cmpint(connfd, !=, -1); close(fd); return NULL; } static gpointer unix_client_thread_func(gpointer user_data) { SocketAddress addr; Error *err = NULL; int fd = -1; addr.type = SOCKET_ADDRESS_TYPE_UNIX; addr.u.q_unix.path = abstract_sock_name; addr.u.q_unix.tight = user_data != NULL; addr.u.q_unix.abstract = true; fd = socket_connect(&addr, &err); g_assert_cmpint(fd, >=, 0); close(fd); return NULL; } static void test_socket_unix_abstract_good(void) { GRand *r = g_rand_new(); abstract_sock_name = g_strdup_printf("unix-%d-%d", getpid(), g_rand_int_range(r, 100, 1000)); /* non tight socklen serv and cli */ GThread *serv = g_thread_new("abstract_unix_server", unix_server_thread_func, NULL); sleep(1); GThread *cli = g_thread_new("abstract_unix_client", unix_client_thread_func, NULL); g_thread_join(cli); g_thread_join(serv); /* tight socklen serv and cli */ serv = g_thread_new("abstract_unix_server", unix_server_thread_func, (gpointer)1); sleep(1); cli = g_thread_new("abstract_unix_client", unix_client_thread_func, (gpointer)1); g_thread_join(cli); g_thread_join(serv); g_free(abstract_sock_name); } #endif int main(int argc, char **argv) { Loading Loading @@ -265,6 +352,11 @@ int main(int argc, char **argv) test_socket_fd_pass_num_nocli); } #ifdef __linux__ g_test_add_func("/util/socket/unix-abstract/good", test_socket_unix_abstract_good); #endif end: return g_test_run(); } Loading
tests/test-util-sockets.c +92 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,93 @@ static void test_socket_fd_pass_num_nocli(void) g_free(addr.u.fd.str); } #ifdef __linux__ static gchar *abstract_sock_name; static gpointer unix_server_thread_func(gpointer user_data) { SocketAddress addr; Error *err = NULL; int fd = -1; int connfd = -1; struct sockaddr_un un; socklen_t len = sizeof(un); addr.type = SOCKET_ADDRESS_TYPE_UNIX; addr.u.q_unix.path = abstract_sock_name; addr.u.q_unix.tight = user_data != NULL; addr.u.q_unix.abstract = true; fd = socket_listen(&addr, 1, &err); g_assert_cmpint(fd, >=, 0); g_assert(fd_is_socket(fd)); connfd = accept(fd, (struct sockaddr *)&un, &len); g_assert_cmpint(connfd, !=, -1); close(fd); return NULL; } static gpointer unix_client_thread_func(gpointer user_data) { SocketAddress addr; Error *err = NULL; int fd = -1; addr.type = SOCKET_ADDRESS_TYPE_UNIX; addr.u.q_unix.path = abstract_sock_name; addr.u.q_unix.tight = user_data != NULL; addr.u.q_unix.abstract = true; fd = socket_connect(&addr, &err); g_assert_cmpint(fd, >=, 0); close(fd); return NULL; } static void test_socket_unix_abstract_good(void) { GRand *r = g_rand_new(); abstract_sock_name = g_strdup_printf("unix-%d-%d", getpid(), g_rand_int_range(r, 100, 1000)); /* non tight socklen serv and cli */ GThread *serv = g_thread_new("abstract_unix_server", unix_server_thread_func, NULL); sleep(1); GThread *cli = g_thread_new("abstract_unix_client", unix_client_thread_func, NULL); g_thread_join(cli); g_thread_join(serv); /* tight socklen serv and cli */ serv = g_thread_new("abstract_unix_server", unix_server_thread_func, (gpointer)1); sleep(1); cli = g_thread_new("abstract_unix_client", unix_client_thread_func, (gpointer)1); g_thread_join(cli); g_thread_join(serv); g_free(abstract_sock_name); } #endif int main(int argc, char **argv) { Loading Loading @@ -265,6 +352,11 @@ int main(int argc, char **argv) test_socket_fd_pass_num_nocli); } #ifdef __linux__ g_test_add_func("/util/socket/unix-abstract/good", test_socket_unix_abstract_good); #endif end: return g_test_run(); }