From 8dd6cae6b5a195449f391b5c05a224def59629ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Thu, 27 Jul 2023 17:52:36 +0200
Subject: [PATCH] Fix invalid path write attempt test

Actually since Gitlab CI is running as root, one must use ioctl to
make directory immutable. Otherwise, root can create the file which
invalidates the test.
---
 tests/test_OFStream.cpp | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/tests/test_OFStream.cpp b/tests/test_OFStream.cpp
index e9aa25778..1671a9cbe 100644
--- a/tests/test_OFStream.cpp
+++ b/tests/test_OFStream.cpp
@@ -7,6 +7,12 @@
 
 #include <filesystem>
 
+#ifdef __linux__
+#include <fcntl.h>
+#include <linux/fs.h>
+#include <sys/ioctl.h>
+#endif   // __linux__
+
 // clazy:excludeall=non-pod-global-static
 
 TEST_CASE("OFStream", "[language]")
@@ -49,6 +55,7 @@ TEST_CASE("OFStream", "[language]")
     REQUIRE(not std::filesystem::exists(filename));
   }
 
+#ifdef __linux__
   SECTION("invalid filename")
   {
     if (parallel::rank() == 0) {
@@ -60,8 +67,14 @@ TEST_CASE("OFStream", "[language]")
                                      std::filesystem::perms::others_all,
                                    std::filesystem::perm_options::remove);
 
+      int fd    = open("tests/badpath/invalidpath", O_DIRECTORY);
+      int flags = FS_IMMUTABLE_FL;
+      ioctl(fd, FS_IOC_SETFLAGS, &flags);
       REQUIRE_THROWS_WITH(std::make_shared<OFStream>(filename), "error: cannot create file " + filename);
 
+      flags = 0;
+      ioctl(fd, FS_IOC_SETFLAGS, &flags);
+
       std::filesystem::permissions(directory,
                                    std::filesystem::perms::owner_all | std::filesystem::perms::group_all |
                                      std::filesystem::perms::others_all,
@@ -69,4 +82,5 @@ TEST_CASE("OFStream", "[language]")
       std::filesystem::remove_all("tests/badpath");
     }
   }
+#endif   // __linux__
 }
-- 
GitLab