From 2c5d73660e0c959842c84a8495941f5473625d91 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Wed, 12 Nov 2025 01:47:01 +0100 Subject: [PATCH] test-fd-util: add unit test for fd_vet_accmode() Co-authored-by: Chris Down --- src/test/test-fd-util.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/test/test-fd-util.c b/src/test/test-fd-util.c index 60e6a238a98..a22c0e3119e 100644 --- a/src/test/test-fd-util.c +++ b/src/test/test-fd-util.c @@ -878,4 +878,29 @@ TEST(fd_get_path) { assert_se(chdir(saved_cwd) >= 0); } +TEST(fd_vet_accmode) { + _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-fd-accmode.XXXXXX"; + _cleanup_close_ int fd_rw = -EBADF, fd_ro = -EBADF, fd_wo = -EBADF, fd_opath = -EBADF; + + ASSERT_OK(fd_rw = mkostemp_safe(name)); + ASSERT_OK_ZERO(fd_vet_accmode(fd_rw, O_RDONLY)); + ASSERT_OK_ZERO(fd_vet_accmode(fd_rw, O_WRONLY)); + ASSERT_OK_POSITIVE(fd_vet_accmode(fd_rw, O_RDWR)); + + ASSERT_OK_ERRNO(fd_ro = open(name, O_RDONLY | O_CLOEXEC)); + ASSERT_OK_POSITIVE(fd_vet_accmode(fd_ro, O_RDONLY)); + ASSERT_ERROR(fd_vet_accmode(fd_ro, O_WRONLY), EPROTOTYPE); + ASSERT_ERROR(fd_vet_accmode(fd_ro, O_RDWR), EPROTOTYPE); + + ASSERT_OK_ERRNO(fd_wo = open(name, O_WRONLY | O_CLOEXEC)); + ASSERT_ERROR(fd_vet_accmode(fd_wo, O_RDONLY), EPROTOTYPE); + ASSERT_OK_POSITIVE(fd_vet_accmode(fd_wo, O_WRONLY)); + ASSERT_ERROR(fd_vet_accmode(fd_wo, O_RDWR), EPROTOTYPE); + + ASSERT_OK_ERRNO(fd_opath = open(name, O_PATH | O_CLOEXEC)); + ASSERT_ERROR(fd_vet_accmode(fd_opath, O_RDONLY), EBADFD); + ASSERT_ERROR(fd_vet_accmode(fd_opath, O_WRONLY), EBADFD); + ASSERT_ERROR(fd_vet_accmode(fd_opath, O_RDWR), EBADFD); +} + DEFINE_TEST_MAIN(LOG_DEBUG); -- 2.47.3