From patchwork Wed Jan 28 14:56:49 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 26010 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id BEC16C3200 for ; Wed, 28 Jan 2026 14:56:54 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id EE4A761FD0; Wed, 28 Jan 2026 15:56:53 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="r0m9TWwi"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8BBE261FC4 for ; Wed, 28 Jan 2026 15:56:52 +0100 (CET) Received: from pb-laptop.local (185.221.142.123.nat.pool.zt.hu [185.221.142.123]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8244AC6F; Wed, 28 Jan 2026 15:56:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1769612175; bh=N+CnG/3FlOtU/wzXp61LYbd25Dws/VuP5/2WcPoi+Io=; h=From:To:Cc:Subject:Date:From; b=r0m9TWwiCTuWU1goBMguEk35G0GmW9FSaKRf7jfAWOi6Ut8I1KOf/8vSfHNpy54Mb fPQpDd3sX5wZjgSIIW3UPUYMSefGWXA2WpLOdJZV9erPjjBpjOS1TC9jdyIElTE1KM cUqLRNwruXZS9aUhmutSmRd+9kN4KT4/85H/b9fI= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Cc: Laurent Pinchart Subject: [PATCH v1] test: Remove uses of `O_TMPFILE` Date: Wed, 28 Jan 2026 15:56:49 +0100 Message-ID: <20260128145649.890107-1-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.52.0 MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" `O_TMPFILE` requires file system support, which may not be available in certain environments, usually containerized ones. So do not use it. In the ipc/unixsocket and log/log_api tests the temporary file is replaced with a memfd using the `libcamera::MemFd` class since these tests are already internal tests. In the unique-fd and shared-fd tests instead of creating a temporary file simply open "/proc/self/exe", which should be available and readable in most cases. Signed-off-by: Barnabás Pőcze --- test/ipc/unixsocket.cpp | 34 ++++++++++++++-------------------- test/log/log_api.cpp | 14 ++++++-------- test/shared-fd.cpp | 2 +- test/unique-fd.cpp | 2 +- 4 files changed, 22 insertions(+), 30 deletions(-) diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp index f39bd986b..28864b829 100644 --- a/test/ipc/unixsocket.cpp +++ b/test/ipc/unixsocket.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -137,11 +138,11 @@ private: } case CMD_JOIN: { - int outfd = open("/tmp", O_TMPFILE | O_RDWR, - S_IRUSR | S_IWUSR); - if (outfd < 0) { + auto outfd = MemFd::create("test", 0); + if (!outfd.isValid()) { + ret = errno; cerr << "Create out file failed" << endl; - stop(outfd); + stop(ret); return; } @@ -152,15 +153,13 @@ private: if (num < 0) { cerr << "Read failed" << endl; - close(outfd); stop(-EIO); return; } else if (!num) break; - if (write(outfd, buf, num) < 0) { + if (write(outfd.get(), buf, num) < 0) { cerr << "Write failed" << endl; - close(outfd); stop(-EIO); return; } @@ -169,9 +168,9 @@ private: close(fd); } - lseek(outfd, 0, 0); + lseek(outfd.get(), 0, SEEK_SET); response.data.push_back(CMD_JOIN); - response.fds.push_back(outfd); + response.fds.push_back(outfd.get()); ret = ipc_.send(response); if (ret < 0) { @@ -179,8 +178,6 @@ private: stop(ret); } - close(outfd); - break; } @@ -315,22 +312,21 @@ protected: "Foo", "Bar", }; - int fds[2]; + std::array fds; for (unsigned int i = 0; i < std::size(strings); i++) { unsigned int len = strlen(strings[i]); - fds[i] = open("/tmp", O_TMPFILE | O_RDWR, - S_IRUSR | S_IWUSR); - if (fds[i] < 0) + fds[i] = MemFd::create("test", 0); + if (!fds[i].isValid()) return TestFail; - ret = write(fds[i], strings[i], len); + ret = write(fds[i].get(), strings[i], len); if (ret < 0) return TestFail; - lseek(fds[i], 0, 0); - message.fds.push_back(fds[i]); + lseek(fds[i].get(), 0, SEEK_SET); + message.fds.push_back(fds[i].get()); } message.data.push_back(CMD_JOIN); @@ -343,8 +339,6 @@ protected: unsigned int len = strlen(strings[i]); std::vector buf(len); - close(fds[i]); - if (read(response.fds[0], buf.data(), len) <= 0) return TestFail; diff --git a/test/log/log_api.cpp b/test/log/log_api.cpp index 8d19cf0ce..0eaf67a71 100644 --- a/test/log/log_api.cpp +++ b/test/log/log_api.cpp @@ -17,6 +17,7 @@ #include #include +#include #include @@ -109,18 +110,17 @@ protected: int testFile() { - int fd = open("/tmp", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR); - if (fd < 0) { + auto fd = MemFd::create("test", 0); + if (!fd.isValid()) { cerr << "Failed to open tmp log file" << endl; return TestFail; } char path[32]; - snprintf(path, sizeof(path), "/proc/self/fd/%u", fd); + snprintf(path, sizeof(path), "/proc/self/fd/%u", fd.get()); if (logSetFile(path) < 0) { cerr << "Failed to set log file" << endl; - close(fd); return TestFail; } @@ -128,13 +128,11 @@ protected: char buf[1000]; memset(buf, 0, sizeof(buf)); - lseek(fd, 0, SEEK_SET); - if (read(fd, buf, sizeof(buf)) < 0) { + lseek(fd.get(), 0, SEEK_SET); + if (read(fd.get(), buf, sizeof(buf)) < 0) { cerr << "Failed to read tmp log file" << endl; - close(fd); return TestFail; } - close(fd); istringstream iss(buf); return verifyOutput(iss); diff --git a/test/shared-fd.cpp b/test/shared-fd.cpp index 57199dfe7..09634f2c2 100644 --- a/test/shared-fd.cpp +++ b/test/shared-fd.cpp @@ -27,7 +27,7 @@ protected: desc1_ = nullptr; desc2_ = nullptr; - fd_ = open("/tmp", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR); + fd_ = open("/proc/self/exe", O_RDONLY); if (fd_ < 0) return TestFail; diff --git a/test/unique-fd.cpp b/test/unique-fd.cpp index e556439ea..7d7ba1447 100644 --- a/test/unique-fd.cpp +++ b/test/unique-fd.cpp @@ -189,7 +189,7 @@ protected: private: int createFd() { - fd_ = open("/tmp", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR); + fd_ = open("/proc/self/exe", O_RDONLY); if (fd_ < 0) return TestFail;