]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-fs-util: some basic tests for XAT_FDROOT 39244/head
authorLennart Poettering <lennart@poettering.net>
Mon, 8 Dec 2025 12:34:24 +0000 (13:34 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 17 Jan 2026 11:37:55 +0000 (12:37 +0100)
src/test/test-fs-util.c

index 51b7b146fe3b031d50dfb01da9555354c9a9fea8..a56f8f92ada9af53f44fb176967d98c9e010e2a4 100644 (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);