From 6527f64600f767dde5b75547f04e742426bca1a8 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 8 Dec 2025 13:34:24 +0100 Subject: [PATCH] test-fs-util: some basic tests for XAT_FDROOT --- src/test/test-fs-util.c | 69 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 5 deletions(-) diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c index 51b7b146fe3..a56f8f92ada 100644 --- a/src/test/test-fs-util.c +++ b/src/test/test-fs-util.c @@ -819,11 +819,6 @@ TEST(linkat_replace) { assert_se(inode_same_at(fd1, NULL, fd2_check, NULL, AT_EMPTY_PATH) > 0); } -static int intro(void) { - arg_test_dir = saved_argv[1]; - return EXIT_SUCCESS; -} - TEST(readlinkat_malloc) { _cleanup_(rm_rf_physical_and_freep) char *t = NULL; _cleanup_close_ int tfd = -EBADF, fd = -EBADF; @@ -859,4 +854,68 @@ TEST(readlinkat_malloc) { q = mfree(q); } +TEST(xat_fdroot) { + _cleanup_free_ char *p = NULL; + ASSERT_OK(fd_get_path(XAT_FDROOT, &p)); + ASSERT_STREQ(p, "/"); + + _cleanup_close_ int fd = -EBADF; + fd = fd_reopen(XAT_FDROOT, O_CLOEXEC); + ASSERT_OK(fd); + + ASSERT_OK_POSITIVE(path_is_root_at(XAT_FDROOT, NULL)); + ASSERT_OK_POSITIVE(path_is_root_at(XAT_FDROOT, ".")); + ASSERT_OK_POSITIVE(path_is_root_at(XAT_FDROOT, "/")); + + ASSERT_OK_POSITIVE(path_is_root_at(fd, NULL)); + ASSERT_OK_POSITIVE(path_is_root_at(fd, ".")); + ASSERT_OK_POSITIVE(path_is_root_at(fd, "/")); + + ASSERT_OK_POSITIVE(fds_are_same_mount(fd, fd)); + ASSERT_OK_POSITIVE(fds_are_same_mount(XAT_FDROOT, XAT_FDROOT)); + ASSERT_OK_POSITIVE(fds_are_same_mount(fd, XAT_FDROOT)); + ASSERT_OK_POSITIVE(fds_are_same_mount(XAT_FDROOT, fd)); + + ASSERT_OK_POSITIVE(dir_fd_is_root(XAT_FDROOT)); + ASSERT_OK_POSITIVE(dir_fd_is_root(fd)); + + ASSERT_OK_POSITIVE(dir_fd_is_root_or_cwd(XAT_FDROOT)); + ASSERT_OK_POSITIVE(dir_fd_is_root_or_cwd(AT_FDCWD)); + ASSERT_OK_POSITIVE(dir_fd_is_root_or_cwd(fd)); + + ASSERT_OK(access_fd(XAT_FDROOT, F_OK)); + ASSERT_OK(access_fd(fd, F_OK)); + + fd = safe_close(fd); + fd = xopenat(XAT_FDROOT, ".", O_RDONLY); + ASSERT_OK(fd); + + fd = safe_close(fd); + fd = xopenat(XAT_FDROOT, "/", O_RDONLY); + ASSERT_OK(fd); + + ASSERT_OK(fd_verify_directory(fd)); + ASSERT_OK(fd_verify_directory(XAT_FDROOT)); + + ASSERT_OK(fd_verify_linked(fd)); + ASSERT_OK(fd_verify_linked(XAT_FDROOT)); + + int a = fd_is_read_only_fs(fd); + ASSERT_OK(a); + int b = fd_is_read_only_fs(XAT_FDROOT); + ASSERT_OK(b); + ASSERT_EQ(a, b); + + a = fd_is_temporary_fs(fd); + ASSERT_OK(a); + b = fd_is_temporary_fs(XAT_FDROOT); + ASSERT_OK(b); + ASSERT_EQ(a, b); +} + +static int intro(void) { + arg_test_dir = saved_argv[1]; + return EXIT_SUCCESS; +} + DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro); -- 2.47.3