From patchwork Tue Nov 30 01:23:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 14853 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 6D0EDBDB13 for ; Tue, 30 Nov 2021 01:23:37 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 25927605B6; Tue, 30 Nov 2021 02:23:36 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="nM/MPoJl"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8B91A604FC for ; Tue, 30 Nov 2021 02:23:33 +0100 (CET) Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 333A593 for ; Tue, 30 Nov 2021 02:23:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1638235413; bh=K1tJ6XN5vrLXFt1ohWaTt5kneyz8VAJqM80uvTAIPO4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=nM/MPoJlCyME4KolAhbOiAgtAvI6mKHk6mlYPfV5f5CgXuX72jEs2ZNdmcIkEzcw/ 7/cZAJndvcwCXFMgEsjMGgWnS7uEGkS7pS0Md2at+UGbPnSlAX6dd1PTgNrUWKgm5o BPVo8VfQ8epupVPhTEiyNvuquVqJIiDx8cYa4k0w= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Tue, 30 Nov 2021 03:23:02 +0200 Message-Id: <20211130012303.10574-2-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211130012303.10574-1-laurent.pinchart@ideasonboard.com> References: <20211130012303.10574-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v1 1/2] test: Store path to the test executable in Test class 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" Store the path to the test executable, found in argv[0], in the Test instance. This can be useful for tests that need to fork processes. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Reviewed-by: Kieran Bingham --- test/ipc/unixsocket.cpp | 4 +++- test/ipc/unixsocket_ipc.cpp | 4 +++- test/libtest/test.cpp | 5 +++++ test/libtest/test.h | 15 ++++++++++++--- test/log/log_process.cpp | 4 +++- test/process/process_test.cpp | 5 +++-- 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp index 7270bf4d2fe7..4fc1c10a2125 100644 --- a/test/ipc/unixsocket.cpp +++ b/test/ipc/unixsocket.cpp @@ -501,5 +501,7 @@ int main(int argc, char **argv) return slave.run(ipcfd); } - return UnixSocketTest().execute(); + UnixSocketTest test; + test.setArgs(argc, argv); + return test.execute(); } diff --git a/test/ipc/unixsocket_ipc.cpp b/test/ipc/unixsocket_ipc.cpp index ab5d25572d83..2e3b52ca4d4b 100644 --- a/test/ipc/unixsocket_ipc.cpp +++ b/test/ipc/unixsocket_ipc.cpp @@ -227,5 +227,7 @@ int main(int argc, char **argv) return slave.run(ipcfd); } - return UnixSocketTestIPC().execute(); + UnixSocketTestIPC test; + test.setArgs(argc, argv); + return test.execute(); } diff --git a/test/libtest/test.cpp b/test/libtest/test.cpp index fd9f3d74d6ce..af37b4dd28ff 100644 --- a/test/libtest/test.cpp +++ b/test/libtest/test.cpp @@ -17,6 +17,11 @@ Test::~Test() { } +void Test::setArgs([[maybe_unused]] int argc, char *argv[]) +{ + self_ = argv[0]; +} + int Test::execute() { int ret; diff --git a/test/libtest/test.h b/test/libtest/test.h index ee01a22591f8..23b07743fd2a 100644 --- a/test/libtest/test.h +++ b/test/libtest/test.h @@ -8,6 +8,7 @@ #pragma once #include +#include enum TestStatus { TestPass = 0, @@ -21,16 +22,24 @@ public: Test(); virtual ~Test(); + void setArgs(int argc, char *argv[]); int execute(); + const std::string &self() const { return self_; } + protected: virtual int init() { return 0; } virtual int run() = 0; virtual void cleanup() {} + +private: + std::string self_; }; -#define TEST_REGISTER(klass) \ -int main([[maybe_unused]] int argc, [[maybe_unused]] char *argv[]) \ +#define TEST_REGISTER(Klass) \ +int main(int argc, char *argv[]) \ { \ - return klass().execute(); \ + Klass klass; \ + klass.setArgs(argc, argv); \ + return klass.execute(); \ } diff --git a/test/log/log_process.cpp b/test/log/log_process.cpp index a56a399848a7..ca8351335f3a 100644 --- a/test/log/log_process.cpp +++ b/test/log/log_process.cpp @@ -154,5 +154,7 @@ int main(int argc, char **argv) return child.run(status, num); } - return LogProcessTest().execute(); + LogProcessTest test; + test.setArgs(argc, argv); + return test.execute(); } diff --git a/test/process/process_test.cpp b/test/process/process_test.cpp index 378d680bf4ef..96bea17f8dce 100644 --- a/test/process/process_test.cpp +++ b/test/process/process_test.cpp @@ -9,7 +9,6 @@ #include #include - #include #include #include @@ -106,5 +105,7 @@ int main(int argc, char **argv) return child.run(status); } - return ProcessTest().execute(); + ProcessTest test; + test.setArgs(argc, argv); + return test.execute(); } From patchwork Tue Nov 30 01:23:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 14854 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 9AC05BDB13 for ; Tue, 30 Nov 2021 01:23:38 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 1AC86605AA; Tue, 30 Nov 2021 02:23:37 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="GLMjePnA"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0B79C604FC for ; Tue, 30 Nov 2021 02:23:34 +0100 (CET) Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 946C98F0 for ; Tue, 30 Nov 2021 02:23:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1638235413; bh=8NY/Nj+qgC+tCMt8hZ/p1gGEX+qWcFCbWVmwxKntxYo=; h=From:To:Subject:Date:In-Reply-To:References:From; b=GLMjePnAS3b7Gpo8k20Nuh1ZHv+qHTtg4aW6BJK4gqjateK/DrHL3BL4dLjhaEuoH L+iuVALNAWg52AGDp3riL7X3SI5FYy3FywXBWM8s8E+8tWiSbZyrVG1mfW8DnSnZeU q/7Ggmjau1cvBw1hZWxnfc52pDkWYndz+UNUJI6w= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Tue, 30 Nov 2021 03:23:03 +0200 Message-Id: <20211130012303.10574-3-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211130012303.10574-1-laurent.pinchart@ideasonboard.com> References: <20211130012303.10574-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v1 2/2] test: Replace "/proc/self/exe" with path to test binary 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" When tests are run under valgrind, /proc/self/exe points to valgrind, not to the test binary. This results in failures for tests that need to fork processes. Fix it by replacing "/proc/self/exe" with the path to the test binary. Signed-off-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- test/file.cpp | 4 ++-- test/ipc/unixsocket.cpp | 5 ++--- test/ipc/unixsocket_ipc.cpp | 2 +- test/log/log_process.cpp | 2 +- test/process/process_test.cpp | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/test/file.cpp b/test/file.cpp index 9ac151c944b5..5c978ebfcada 100644 --- a/test/file.cpp +++ b/test/file.cpp @@ -180,7 +180,7 @@ protected: } /* Test size(). */ - file.setFileName("/proc/self/exe"); + file.setFileName(self()); if (file.size() >= 0) { cerr << "File has valid size before open" << endl; @@ -277,7 +277,7 @@ protected: file.close(); /* Test mapping and unmapping. */ - file.setFileName("/proc/self/exe"); + file.setFileName(self()); file.open(File::OpenModeFlag::ReadOnly); Span data = file.map(); diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp index 4fc1c10a2125..b3568c0684b0 100644 --- a/test/ipc/unixsocket.cpp +++ b/test/ipc/unixsocket.cpp @@ -209,8 +209,7 @@ protected: if (!pid_) { std::string arg = std::to_string(fd); - execl("/proc/self/exe", "/proc/self/exe", - arg.c_str(), nullptr); + execl(self().c_str(), self().c_str(), arg.c_str(), nullptr); /* Only get here if exec fails. */ exit(TestFail); @@ -464,7 +463,7 @@ private: int prepareFDs(IPCUnixSocket::Payload *message, unsigned int num) { - int fd = open("/proc/self/exe", O_RDONLY); + int fd = open(self().c_str(), O_RDONLY); if (fd < 0) return fd; diff --git a/test/ipc/unixsocket_ipc.cpp b/test/ipc/unixsocket_ipc.cpp index 2e3b52ca4d4b..1a8d06a12d5c 100644 --- a/test/ipc/unixsocket_ipc.cpp +++ b/test/ipc/unixsocket_ipc.cpp @@ -173,7 +173,7 @@ protected: int run() { - ipc_ = std::make_unique("", "/proc/self/exe"); + ipc_ = std::make_unique("", self().c_str()); if (!ipc_->isConnected()) { cerr << "Failed to create IPCPipe" << endl; return TestFail; diff --git a/test/log/log_process.cpp b/test/log/log_process.cpp index ca8351335f3a..2484c58f2fa9 100644 --- a/test/log/log_process.cpp +++ b/test/log/log_process.cpp @@ -74,7 +74,7 @@ protected: vector args; args.push_back(to_string(exitCode)); args.push_back(to_string(num_)); - int ret = proc_.start("/proc/self/exe", args); + int ret = proc_.start(self(), args); if (ret) { cerr << "failed to start process" << endl; return TestFail; diff --git a/test/process/process_test.cpp b/test/process/process_test.cpp index 96bea17f8dce..b410756b3288 100644 --- a/test/process/process_test.cpp +++ b/test/process/process_test.cpp @@ -55,7 +55,7 @@ protected: proc_.kill(); /* Test starting the process and retrieving the exit code. */ - int ret = proc_.start("/proc/self/exe", args); + int ret = proc_.start(self(), args); if (ret) { cerr << "failed to start process" << endl; return TestFail;