]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: fix test-fileio leaving directory behind and failing on rerun 42260/head
authorLuca Boccassi <luca.boccassi@gmail.com>
Fri, 22 May 2026 15:41:25 +0000 (16:41 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 22 May 2026 15:41:56 +0000 (16:41 +0100)
/* test_write_data_file_atomic_at */
src/test/test-fileio.c:740: Assertion failed: Expected "write_data_file_atomic_at(XAT_FDROOT, "tmp/zzz/wdfa", &a, 0)" to fail with error -2/ENOENT, but it succeeded

Follow-up for 67387626884afec7dbb64cb78a39a3676b7ff663

src/test/test-fileio.c

index b6ed739c9040d55bcbe61f30017284d3cba34337..1be693bea221fae0e262d5c6dc9b2a5021bacf43 100644 (file)
@@ -697,58 +697,68 @@ TEST(fdopen_independent) {
 }
 
 TEST(write_data_file_atomic_at) {
+        _cleanup_(rm_rf_physical_and_freep) char *t = NULL;
         int r;
 
+        ASSERT_OK(mkdtemp_malloc("/tmp/test-wdfaa-XXXXXX", &t));
+        ASSERT_TRUE(path_is_absolute(t));
+
+        const char *abs_wdfa = strjoina(t, "/wdfa");
+        const char *rel_wdfa = abs_wdfa + 1; /* path relative to / */
+        const char *abs_zzz = strjoina(t, "/zzz");
+        const char *abs_zzz_wdfa = strjoina(t, "/zzz/wdfa");
+        const char *rel_zzz_wdfa = abs_zzz_wdfa + 1;
+
         struct iovec a = IOVEC_MAKE_STRING("hallo");
-        ASSERT_OK(write_data_file_atomic_at(AT_FDCWD, "/tmp/wdfa", &a, /* flags= */ 0));
+        ASSERT_OK(write_data_file_atomic_at(AT_FDCWD, abs_wdfa, &a, /* flags= */ 0));
 
         _cleanup_(iovec_done) struct iovec ra = {};
-        ASSERT_OK(read_full_file("/tmp/wdfa", (char**) &ra.iov_base, &ra.iov_len));
+        ASSERT_OK(read_full_file(abs_wdfa, (char**) &ra.iov_base, &ra.iov_len));
         ASSERT_TRUE(iovec_equal(&a, &ra));
-        ASSERT_OK_ERRNO(unlink("/tmp/wdfa"));
+        ASSERT_OK_ERRNO(unlink(abs_wdfa));
 
-        ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, "tmp/wdfa", &a, /* flags= */ 0));
+        ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, rel_wdfa, &a, /* flags= */ 0));
         iovec_done(&ra);
-        ASSERT_OK(read_full_file("/tmp/wdfa", (char**) &ra.iov_base, &ra.iov_len));
+        ASSERT_OK(read_full_file(abs_wdfa, (char**) &ra.iov_base, &ra.iov_len));
         ASSERT_TRUE(iovec_equal(&a, &ra));
-        ASSERT_OK_ERRNO(unlink("/tmp/wdfa"));
+        ASSERT_OK_ERRNO(unlink(abs_wdfa));
 
         ASSERT_ERROR(write_data_file_atomic_at(AT_FDCWD, NULL, &a, /* flags= */ 0), EINVAL);
         ASSERT_ERROR(write_data_file_atomic_at(AT_FDCWD, "", &a, /* flags= */ 0), EINVAL);
         ASSERT_ERROR(write_data_file_atomic_at(AT_FDCWD, "/", &a, /* flags= */ 0), EISDIR);
         ASSERT_ERROR(write_data_file_atomic_at(AT_FDCWD, ".", &a, /* flags= */ 0), EISDIR);
-        ASSERT_ERROR(write_data_file_atomic_at(AT_FDCWD, "/tmp/", &a, /* flags= */ 0), EISDIR);
+        ASSERT_ERROR(write_data_file_atomic_at(AT_FDCWD, strjoina(t, "/"), &a, /* flags= */ 0), EISDIR);
 
         _cleanup_free_ char *cwd = NULL;
         ASSERT_OK(safe_getcwd(&cwd));
-        ASSERT_OK_ERRNO(chdir("/tmp"));
+        ASSERT_OK_ERRNO(chdir(t));
 
         ASSERT_OK(write_data_file_atomic_at(AT_FDCWD, "wdfa", &a, /* flags= */ 0));
         iovec_done(&ra);
-        ASSERT_OK(read_full_file("/tmp/wdfa", (char**) &ra.iov_base, &ra.iov_len));
+        ASSERT_OK(read_full_file(abs_wdfa, (char**) &ra.iov_base, &ra.iov_len));
         ASSERT_TRUE(iovec_equal(&a, &ra));
-        ASSERT_OK_ERRNO(unlink("/tmp/wdfa"));
+        ASSERT_OK_ERRNO(unlink(abs_wdfa));
 
-        ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, "tmp/wdfa", &a, /* flags= */ 0));
+        ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, rel_wdfa, &a, /* flags= */ 0));
         iovec_done(&ra);
-        ASSERT_OK(read_full_file("/tmp/wdfa", (char**) &ra.iov_base, &ra.iov_len));
+        ASSERT_OK(read_full_file(abs_wdfa, (char**) &ra.iov_base, &ra.iov_len));
         ASSERT_TRUE(iovec_equal(&a, &ra));
-        ASSERT_OK_ERRNO(unlink("/tmp/wdfa"));
+        ASSERT_OK_ERRNO(unlink(abs_wdfa));
 
         ASSERT_OK_ERRNO(chdir(cwd));
 
-        ASSERT_ERROR(write_data_file_atomic_at(XAT_FDROOT, "tmp/zzz/wdfa", &a, /* flags= */ 0), ENOENT);
-        ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, "tmp/zzz/wdfa", &a, WRITE_DATA_FILE_MKDIR_0755));
+        ASSERT_ERROR(write_data_file_atomic_at(XAT_FDROOT, rel_zzz_wdfa, &a, /* flags= */ 0), ENOENT);
+        ASSERT_OK(write_data_file_atomic_at(XAT_FDROOT, rel_zzz_wdfa, &a, WRITE_DATA_FILE_MKDIR_0755));
         iovec_done(&ra);
-        ASSERT_OK(read_full_file("/tmp/zzz/wdfa", (char**) &ra.iov_base, &ra.iov_len));
+        ASSERT_OK(read_full_file(abs_zzz_wdfa, (char**) &ra.iov_base, &ra.iov_len));
         ASSERT_TRUE(iovec_equal(&a, &ra));
-        ASSERT_OK_ERRNO(unlink("/tmp/zzz/wdfa"));
+        ASSERT_OK_ERRNO(unlink(abs_zzz_wdfa));
 
-        r = write_data_file_atomic_at(AT_FDCWD, "/tmp/zzz", &a, /* flags= */ 0);
+        r = write_data_file_atomic_at(AT_FDCWD, abs_zzz, &a, /* flags= */ 0);
         /* In Gitlab CI this fails with EISDIR */
         ASSERT_TRUE(IN_SET(r, -EEXIST, -EISDIR));
 
-        ASSERT_OK_ERRNO(rmdir("/tmp/zzz"));
+        ASSERT_OK_ERRNO(rmdir(abs_zzz));
 }
 
 TEST(read_one_line_file_at_xat_fdroot) {