test-fs-util: some basic tests for XAT_FDROOT

This commit is contained in:
Lennart Poettering
2026-01-17 12:37:55 +01:00
parent 80499cf1c8
commit 6527f64600
+64 -5
View File
@@ -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);