From: Mike Yuan Date: Wed, 12 Nov 2025 00:47:01 +0000 (+0100) Subject: test-fd-util: add unit test for fd_vet_accmode() X-Git-Tag: v259-rc1~83^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2c5d73660e0c959842c84a8495941f5473625d91;p=thirdparty%2Fsystemd.git test-fd-util: add unit test for fd_vet_accmode() Co-authored-by: Chris Down --- 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);