From d7aee3f41f69f46d8328f658cab84f8a4b05bb86 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 23 May 2023 18:39:53 +0200 Subject: [PATCH] test: test O_CLOEXEC filtering of fdset fill logic --- src/test/test-fdset.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/test/test-fdset.c b/src/test/test-fdset.c index 01e21a5599e..8947a319b62 100644 --- a/src/test/test-fdset.c +++ b/src/test/test-fdset.c @@ -13,12 +13,48 @@ TEST(fdset_new_fill) { int fd = -EBADF; _cleanup_fdset_free_ FDSet *fdset = NULL; - _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-fdset_new_fill.XXXXXX"; - fd = mkostemp_safe(name); + log_close(); + log_set_open_when_needed(true); + + fd = open("/dev/null", O_CLOEXEC|O_RDONLY); assert_se(fd >= 0); + assert_se(fdset_new_fill(/* filter_cloexec= */ -1, &fdset) >= 0); assert_se(fdset_contains(fdset, fd)); + fdset = fdset_free(fdset); + assert_se(fcntl(fd, F_GETFD) < 0); + assert_se(errno == EBADF); + + fd = open("/dev/null", O_CLOEXEC|O_RDONLY); + assert_se(fd >= 0); + + assert_se(fdset_new_fill(/* filter_cloexec= */ 0, &fdset) >= 0); + assert_se(!fdset_contains(fdset, fd)); + fdset = fdset_free(fdset); + assert_se(fcntl(fd, F_GETFD) >= 0); + + assert_se(fdset_new_fill(/* filter_cloexec= */ 1, &fdset) >= 0); + assert_se(fdset_contains(fdset, fd)); + fdset = fdset_free(fdset); + assert_se(fcntl(fd, F_GETFD) < 0); + assert_se(errno == EBADF); + + fd = open("/dev/null", O_RDONLY); + assert_se(fd >= 0); + + assert_se(fdset_new_fill(/* filter_cloexec= */ 1, &fdset) >= 0); + assert_se(!fdset_contains(fdset, fd)); + fdset = fdset_free(fdset); + assert_se(fcntl(fd, F_GETFD) >= 0); + + assert_se(fdset_new_fill(/* filter_cloexec= */ 0, &fdset) >= 0); + assert_se(fdset_contains(fdset, fd)); + fdset = fdset_free(fdset); + assert_se(fcntl(fd, F_GETFD) < 0); + assert_se(errno == EBADF); + + log_open(); } TEST(fdset_put_dup) { -- 2.47.3