From patchwork Thu Dec 22 01:01:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 18048 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 3CE30C3213 for ; Thu, 22 Dec 2022 01:01:43 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id CAF79633B6; Thu, 22 Dec 2022 02:01:42 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1671670902; bh=cz9wHI+yo2zWjHitCzRiAj7jAhnBsbvYQ2VlKET/cA8=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=W3ze2myVTQQuh86byCkR82Gxi85QQGKPROrYDG95o8Y94cnxdVtASWdoFOeAAZWAZ +U9RKlfq2eIVQn7+4A0aWMPNsd20IF3L9JclwHF3TLvo5b9vOpMx+B0QXa9b2ujl+L ryJipkrDPGsIsNftxQrccjgBBmx1CqtcnBmtojhGQP2ZukaWpemZ3xHBGppCfSikGK plTG5lD/q+QcInaNmIc+woVNscECWsh6vE0DknIOBa+DsQPCca2KflUGtSIkRVpJmY ERR96xUeQA4SshsM2qO3ilPMIrjx4MzH6h54avG0jvwghTKCashuTcYVxg1gp5AxFY OGQk6YMMAca7Q== 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 332F5633AC for ; Thu, 22 Dec 2022 02:01:40 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="CG6t0sRx"; dkim-atps=neutral Received: from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi [213.243.189.158]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B2281471 for ; Thu, 22 Dec 2022 02:01:39 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1671670899; bh=cz9wHI+yo2zWjHitCzRiAj7jAhnBsbvYQ2VlKET/cA8=; h=From:To:Subject:Date:In-Reply-To:References:From; b=CG6t0sRx/2tC28Kgx3k+uYjyapvYGHLQ5RGzP31+YM3+v8eqMW6vMPuNz+7qzjpZp cszatB9Yz7lLw6A1qEtlDYm5qIHCz5Qp0x1lcin+YNQYP/pflKufDeRNpPtNmgFgF0 QGipgiZhk9DCczvyX66Rlw162BZ3er0vhTAtxbCo= To: libcamera-devel@lists.libcamera.org Date: Thu, 22 Dec 2022 03:01:29 +0200 Message-Id: <20221222010132.22177-2-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.38.2 In-Reply-To: <20221222010132.22177-1-laurent.pinchart@ideasonboard.com> References: <20221222010132.22177-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v1 1/4] test: v4l2_compat: Reduce indentation 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: , X-Patchwork-Original-From: Laurent Pinchart via libcamera-devel From: Laurent Pinchart Reply-To: Laurent Pinchart Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Return early with subdir_done() to reduce indentation in case the v4l2_compat layer is not enabled. This matches our usual code patterns in meson.build files, and prepares for enabling the v4l2_compat test with ASan. Signed-off-by: Laurent Pinchart Reviewed-by: Umang Jain Reviewed-by: Paul Elder --- test/v4l2_compat/meson.build | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/test/v4l2_compat/meson.build b/test/v4l2_compat/meson.build index 878095892679..10c4675286b3 100644 --- a/test/v4l2_compat/meson.build +++ b/test/v4l2_compat/meson.build @@ -1,5 +1,9 @@ # SPDX-License-Identifier: CC0-1.0 +if not is_variable('v4l2_compat') + subdir_done() +endif + # If ASan is enabled, the link order runtime check will fail as v4l2-ctl and # v4l2-compliance are not linked to ASan. Skip the test in that case. # @@ -10,11 +14,9 @@ if get_option('b_sanitize').contains('address') subdir_done() endif -if is_variable('v4l2_compat') - v4l2_compat_test = files('v4l2_compat_test.py') +v4l2_compat_test = files('v4l2_compat_test.py') - test('v4l2_compat_test', v4l2_compat_test, - args : v4l2_compat, - suite : 'v4l2_compat', - timeout : 60) -endif +test('v4l2_compat_test', v4l2_compat_test, + args : v4l2_compat, + suite : 'v4l2_compat', + timeout : 60) From patchwork Thu Dec 22 01:01:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 18049 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 AFB77C3213 for ; Thu, 22 Dec 2022 01:01:44 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 63BE8633B8; Thu, 22 Dec 2022 02:01:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1671670904; bh=wqj7E2inHEDN5kZWOdHcoml+x1X29nEtxC0dV0UpiRs=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=f7mX4wfpCoCL+kGcJTN6cOeUu3cxWGxlEjNm6KCSwsPbIE5+yl+geYSyyCNhfkQ/Q SalZEvQCIhSElpz/3MTKXIne8HnDyRGh2InW4XKtuycdbyz9FkXDvh1wwYfhBAXJVZ QbA7h0qd2taYhMMsrsygCvivu/nNk74k6k+bWArtEu6zpSfG7NW+Va4RHpWLosCmo+ cTOp7dIfWVVe31JSVQlLoNk+2WCrznKpPWkQZz/u3NnP6Es27ZRgM2QArqJYzpeJC+ kryQ+FTeEDmKB8Xi0yTev1yZVa1DSnPdsHVzJ/iRWaPjQhcxGq3pS2WZc5chW2e/AQ b62fCwF0qMDLw== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 4B041633B2 for ; Thu, 22 Dec 2022 02:01:42 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Mu8H8tqK"; dkim-atps=neutral Received: from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi [213.243.189.158]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id CC667471 for ; Thu, 22 Dec 2022 02:01:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1671670902; bh=wqj7E2inHEDN5kZWOdHcoml+x1X29nEtxC0dV0UpiRs=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Mu8H8tqKFEsnqWeqtl/62RHSZM4ZvyZuDyX1gSnpnpetuAOsaEzLpXnkP+iwtNi0w RUkWT2ilH0y7JQ1Cr3WEqoYxqI+hIuz+TABA2yw0eKMhmr3A+puH2eIIiPF0uP4uCx nlG6DLiQwOrgrmjOPGwp0/pzOdeSMZlay1Ht1j28= To: libcamera-devel@lists.libcamera.org Date: Thu, 22 Dec 2022 03:01:30 +0200 Message-Id: <20221222010132.22177-3-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.38.2 In-Reply-To: <20221222010132.22177-1-laurent.pinchart@ideasonboard.com> References: <20221222010132.22177-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v1 2/4] test: v4l2_compat: Enable test with ASan 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: , X-Patchwork-Original-From: Laurent Pinchart via libcamera-devel From: Laurent Pinchart Reply-To: Laurent Pinchart Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" When libcamera is compiled with the address sanitizer enabled, the v4l2_compat test generates failures in the link order runtime check, as the host v4l2-ctl and v4l2-compliance tools are not (generally) linked to ASan. For this reason, the test is disabled, which sadly shrinks test coverage. Fix this by loading the ASan runtime using LD_PRELOAD. This needs to be done from within the v4l2_compat_test.py Python script, as the Python interpreter itself leaks memory and would cause test failures if run with ASan. To LD_PRELOAD the ASan runtime, the path to the binary needs to be known. gcc gives us a generic way to get the path, but that doesn't work with clang as the ASan runtime file name depends on the clang version and target architecture. We thus have to keep the v4l2_compat test disabled with ASan is enabled and libcamera is compiled with clang. Signed-off-by: Laurent Pinchart Reviewed-by: Umang Jain Reviewed-by: Paul Elder --- test/meson.build | 16 ++++++++++++++++ test/v4l2_compat/meson.build | 21 ++++++++++++++------- test/v4l2_compat/v4l2_compat_test.py | 18 +++++++++++++----- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/test/meson.build b/test/meson.build index 05a54d5cad2f..19726f37421d 100644 --- a/test/meson.build +++ b/test/meson.build @@ -7,6 +7,22 @@ endif test_enabled = true +# When ASan is enabled, find the path to the ASan runtime needed by multiple +# tests. This currently works with gcc only, as clang uses different file names +# depending on the compiler version and target architecture. +asan_enabled = false +asan_runtime_missing = false + +if get_option('b_sanitize').contains('address') + asan_enabled = true + + if cc.get_id() == 'gcc' + asan_runtime = run_command(cc, '-print-file-name=libasan.so', check : true).stdout().strip() + else + asan_runtime_missing = true + endif +endif + subdir('libtest') subdir('camera') diff --git a/test/v4l2_compat/meson.build b/test/v4l2_compat/meson.build index 10c4675286b3..da2e7a6d9045 100644 --- a/test/v4l2_compat/meson.build +++ b/test/v4l2_compat/meson.build @@ -4,19 +4,26 @@ if not is_variable('v4l2_compat') subdir_done() endif -# If ASan is enabled, the link order runtime check will fail as v4l2-ctl and -# v4l2-compliance are not linked to ASan. Skip the test in that case. -# -# TODO: Find a way to LD_PRELOAD the ASan dynamic library instead, in a -# cross-platform way with support for both gcc and clang. +# If ASan is enabled but the ASan runtime shared library missing, +# v4l2_compat_test.py won't be able to LD_PRELOAD it, resulting in a link order +# runtime check failure as v4l2-ctl and v4l2-compliance are not linked to ASan. +# Skip the test in that case. -if get_option('b_sanitize').contains('address') +if asan_runtime_missing + warning('Unable to get path to ASan runtime, v4l2_compat test disabled') subdir_done() endif v4l2_compat_test = files('v4l2_compat_test.py') +v4l2_compat_args = [] + +if asan_enabled + v4l2_compat_args += ['-s', asan_runtime] +endif + +v4l2_compat_args += [v4l2_compat] test('v4l2_compat_test', v4l2_compat_test, - args : v4l2_compat, + args : v4l2_compat_args, suite : 'v4l2_compat', timeout : 60) diff --git a/test/v4l2_compat/v4l2_compat_test.py b/test/v4l2_compat/v4l2_compat_test.py index a77585fc2f49..bd89d4962c16 100755 --- a/test/v4l2_compat/v4l2_compat_test.py +++ b/test/v4l2_compat/v4l2_compat_test.py @@ -57,8 +57,8 @@ def extract_result(result): return ret -def test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, base_driver): - ret, output = run_with_stdout(v4l2_compliance, '-s', '-d', device, env={'LD_PRELOAD': v4l2_compat}) +def test_v4l2_compliance(v4l2_compliance, ld_preload, device, base_driver): + ret, output = run_with_stdout(v4l2_compliance, '-s', '-d', device, env={'LD_PRELOAD': ld_preload}) if ret < 0: output.append(f'Test for {device} terminated due to signal {signal.Signals(-ret).name}') return TestFail, output @@ -82,13 +82,21 @@ def main(argv): parser = argparse.ArgumentParser() parser.add_argument('-a', '--all', action='store_true', help='Test all available cameras') + parser.add_argument('-s', '--sanitizer', type=str, + help='Path to the address sanitizer (ASan) runtime') parser.add_argument('-v', '--verbose', action='store_true', help='Make the output verbose') parser.add_argument('v4l2_compat', type=str, help='Path to v4l2-compat.so') args = parser.parse_args(argv[1:]) - v4l2_compat = args.v4l2_compat + # Compute the LD_PRELOAD value by first loading ASan (if specified) and + # then the V4L2 compat layer. + ld_preload = [] + if args.sanitizer: + ld_preload.append(args.sanitizer) + ld_preload.append(args.v4l2_compat) + ld_preload = ':'.join(ld_preload) v4l2_compliance = shutil.which('v4l2-compliance') if v4l2_compliance is None: @@ -118,7 +126,7 @@ def main(argv): failed = [] drivers_tested = {} for device in dev_nodes: - ret, out = run_with_stdout(v4l2_ctl, '-D', '-d', device, env={'LD_PRELOAD': v4l2_compat}) + ret, out = run_with_stdout(v4l2_ctl, '-D', '-d', device, env={'LD_PRELOAD': ld_preload}) if ret < 0: failed.append(device) print(f'v4l2-ctl failed on {device} with v4l2-compat') @@ -144,7 +152,7 @@ def main(argv): continue print(f'Testing {device} with {driver} driver... ', end='') - ret, msg = test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, driver) + ret, msg = test_v4l2_compliance(v4l2_compliance, ld_preload, device, driver) if ret == TestFail: failed.append(device) print('failed') From patchwork Thu Dec 22 01:01:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 18050 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 1D56CC3213 for ; Thu, 22 Dec 2022 01:01:46 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D967D633BB; Thu, 22 Dec 2022 02:01:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1671670905; bh=zQIClbYdYiQSRYHSWNfLXgH4Jd0Gt7Ham3eOMOnVLTw=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=QUBh+hTfq39uSz3IPYut/OaWcRvgt/yb/nArWXYL56QOOWPzCpoeBnUYQCQsP4S7G 6wDrqYrKXrPoO99iF0dDurROuUhyL5Btbv3YuU3npr8JNwwXiS7VZ1vCwh7AjPVeMY w1WlYKgZfN0uoMoDoCswbiHXAo3dNWnzy17sUBl5GOViCdk7swo/WbDy4bzCI2nkoG +d0hpQxxle57doxBskNEi2MpC8iaxC1WhxJI0j42oRgEiQnrAZNNQlgjyEg5g7h7u4 mH/92wfihI2ZtxlKImPcsgw+XgcqD8NWDsTB7xDDwiPC5XtM3D8NEsdB/uYV9e63Pl VSE6hS0qF3TWw== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 36297633B7 for ; Thu, 22 Dec 2022 02:01:44 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="aQ74h6tc"; dkim-atps=neutral Received: from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi [213.243.189.158]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B0903903 for ; Thu, 22 Dec 2022 02:01:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1671670903; bh=zQIClbYdYiQSRYHSWNfLXgH4Jd0Gt7Ham3eOMOnVLTw=; h=From:To:Subject:Date:In-Reply-To:References:From; b=aQ74h6tcwxt3luLWaMHtkYhSmhVcWjceT4Ra33Am0C1zy48O995S/1s9ricZlYMrP Y1nyTwMMs0RXzXHzowClCTgFv8uySaT1kmjkgCdYccUcb3hmBRd3Xb4niF3RmhZOLZ QszLex7aDHxVrj4mI3B6sPs0+QAulMU4AnNLZZ7I= To: libcamera-devel@lists.libcamera.org Date: Thu, 22 Dec 2022 03:01:31 +0200 Message-Id: <20221222010132.22177-4-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.38.2 In-Reply-To: <20221222010132.22177-1-laurent.pinchart@ideasonboard.com> References: <20221222010132.22177-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v1 3/4] test: py: Fix test failure when ASan is enabled 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: , X-Patchwork-Original-From: Laurent Pinchart via libcamera-devel From: Laurent Pinchart Reply-To: Laurent Pinchart Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" When the address sanitizer is enabled, the Python unit tests fail due to the link order runtime check as the Python interpreter is (generally) not linked to ASan. Fix this by LD_PRELOAD'ing the ASan runtime. We have to disable the leak detector as the Python interpreter itself leaks memory, which would result in test failures. To LD_PRELOAD the ASan runtime, the path to the binary needs to be known. gcc gives us a generic way to get the path, but that doesn't work with clang as the ASan runtime file name depends on the clang version and target architecture. We thus have to keep the Python test disabled with ASan is enabled and libcamera is compiled with clang. Signed-off-by: Laurent Pinchart Acked-by: Umang Jain Reviewed-by: Paul Elder --- test/py/meson.build | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/py/meson.build b/test/py/meson.build index 2affdbd491a3..639f173594a8 100644 --- a/test/py/meson.build +++ b/test/py/meson.build @@ -4,14 +4,29 @@ if not pycamera_enabled subdir_done() endif +# If ASan is enabled, the link order runtime check will fail as Python is not +# linked to ASan. LD_PRELOAD the ASAn runtime if available, or skip the test +# otherwise. + +if asan_runtime_missing + warning('Unable to get path to ASan runtime, Python test disabled') + subdir_done() +endif + pymod = import('python') py3 = pymod.find_installation('python3') pypathdir = meson.project_build_root() / 'src' / 'py' +py_env = ['PYTHONPATH=' + pypathdir] + +if asan_enabled + # Disable leak detection as the Python interpreter is full of leaks. + py_env += ['LD_PRELOAD=' + asan_runtime, 'ASAN_OPTIONS=detect_leaks=0'] +endif test('pyunittests', py3, args : files('unittests.py'), - env : ['PYTHONPATH=' + pypathdir], + env : py_env, suite : 'pybindings', is_parallel : false) From patchwork Thu Dec 22 01:01:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 18051 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 B1CA0C3213 for ; Thu, 22 Dec 2022 01:01:48 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 7ABAD633B5; Thu, 22 Dec 2022 02:01:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1671670908; bh=W7OagI3dcESu4HQVZcBjXRmxc1imErCyI26RX/fnR3w=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=bDG6QTAR1FbyUDlirQUZe/Igh1FKDVHBDaLQkPCsgCJooeZdGeQz/CASCiRzoLIkD pqd5Qd/Mnlzdo8T3cB+HCgCzwdufL+vwH3rEzgK4dfmKXeK8jtClrSTuUiii8fLQdO 05GbBqBWwNlR9QKAdyf1EnaFTlZn0l5pFQWcDRx/td87wtFRNyPIYXtOidO+JUKorc ht9TNdE3qQXYaSXZrex6tfOhiwTagUf6E0xm06xeVTm8/I0ALANf6kj/2rAJQNlFkt iNPXwjpcJltmKhqJHH96r8bXIsqTYejHK2KQH59ZCcJBL3uFUWJWHxorXy/2TjLr/V lQI8tWo8LerSg== 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 6036B633AE for ; Thu, 22 Dec 2022 02:01:46 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Yg0ZyMAP"; dkim-atps=neutral Received: from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi [213.243.189.158]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C39C0903 for ; Thu, 22 Dec 2022 02:01:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1671670906; bh=W7OagI3dcESu4HQVZcBjXRmxc1imErCyI26RX/fnR3w=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Yg0ZyMAPBgfZVoT0ZsLYOmp3SiOTakB66nELQOcRdOOTyIkdmN7tik8QX6gC80xrY ooAiQ7bjfkIe69uzH64zKGmUFxl/WY0KjTEJJxwnC8KZ8AEmPg/nnyO2ycMbjCm6S5 Be82zEiPbh34nqlG6ww3yG8UhQcSGa/xJw+oa9KQ= To: libcamera-devel@lists.libcamera.org Date: Thu, 22 Dec 2022 03:01:32 +0200 Message-Id: <20221222010132.22177-5-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.38.2 In-Reply-To: <20221222010132.22177-1-laurent.pinchart@ideasonboard.com> References: <20221222010132.22177-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v1 4/4] test: Drop pipeline test 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: , X-Patchwork-Original-From: Laurent Pinchart via libcamera-devel From: Laurent Pinchart Reply-To: Laurent Pinchart Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The two pipeline test (for ipu3 and rkisp1) are meant to perform very basic validation of the corresponding pipeline handlers, limited to verifying camera enumeration. They are not unit tests as such, they are superseded by the lc-compliance tool, and they are never used in practice (and always skipped). Drop them. Signed-off-by: Laurent Pinchart Reviewed-by: Umang Jain Reviewed-by: Paul Elder --- test/meson.build | 1 - test/pipeline/ipu3/ipu3_pipeline_test.cpp | 126 ------------------ test/pipeline/ipu3/meson.build | 14 -- test/pipeline/meson.build | 4 - test/pipeline/rkisp1/meson.build | 14 -- test/pipeline/rkisp1/rkisp1_pipeline_test.cpp | 115 ---------------- 6 files changed, 274 deletions(-) delete mode 100644 test/pipeline/ipu3/ipu3_pipeline_test.cpp delete mode 100644 test/pipeline/ipu3/meson.build delete mode 100644 test/pipeline/meson.build delete mode 100644 test/pipeline/rkisp1/meson.build delete mode 100644 test/pipeline/rkisp1/rkisp1_pipeline_test.cpp diff --git a/test/meson.build b/test/meson.build index 19726f37421d..b227be818419 100644 --- a/test/meson.build +++ b/test/meson.build @@ -32,7 +32,6 @@ subdir('ipa') subdir('ipc') subdir('log') subdir('media_device') -subdir('pipeline') subdir('process') subdir('py') subdir('serialization') diff --git a/test/pipeline/ipu3/ipu3_pipeline_test.cpp b/test/pipeline/ipu3/ipu3_pipeline_test.cpp deleted file mode 100644 index 9e647af5fdf8..000000000000 --- a/test/pipeline/ipu3/ipu3_pipeline_test.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * Copyright (C) 2019, Google Inc. - * - * ipu3_pipeline_test.cpp - Intel IPU3 pipeline test - */ - -#include -#include -#include -#include - -#include -#include - -#include "libcamera/internal/device_enumerator.h" -#include "libcamera/internal/media_device.h" -#include "libcamera/internal/media_object.h" - -#include "test.h" - -using namespace std; -using namespace libcamera; - -/* - * Verify that the Intel IPU3 pipeline handler gets matched and cameras - * are enumerated correctly. - * - * The test is supposed to be run on an IPU3 platform, otherwise it gets - * skipped. - * - * The test lists all cameras registered in the system, if any camera is - * available at all. - */ -class IPU3PipelineTest : public Test -{ -protected: - int init(); - int run(); - void cleanup(); - -private: - CameraManager *cameraManager_; - unsigned int sensors_; -}; - -int IPU3PipelineTest::init() -{ - unique_ptr enumerator = DeviceEnumerator::create(); - if (!enumerator) { - cerr << "Failed to create device enumerator" << endl; - return TestFail; - } - - if (enumerator->enumerate()) { - cerr << "Failed to enumerate media devices" << endl; - return TestFail; - } - - DeviceMatch imgu_dm("ipu3-imgu"); - DeviceMatch cio2_dm("ipu3-cio2"); - - if (!enumerator->search(imgu_dm)) { - cerr << "Failed to find IPU3 IMGU: test skip" << endl; - return TestSkip; - } - - std::shared_ptr cio2 = enumerator->search(cio2_dm); - if (!cio2) { - cerr << "Failed to find IPU3 CIO2: test skip" << endl; - return TestSkip; - } - - /* - * Camera sensor are connected to the CIO2 unit. - * Count how many sensors are connected in the system - * and later verify this matches the number of registered - * cameras. - */ - int ret = cio2->populate(); - if (ret) { - cerr << "Failed to populate media device " << cio2->deviceNode() << endl; - return TestFail; - } - - sensors_ = 0; - const vector &entities = cio2->entities(); - for (MediaEntity *entity : entities) { - if (entity->function() == MEDIA_ENT_F_CAM_SENSOR) - sensors_++; - } - - enumerator.reset(nullptr); - - cameraManager_ = new CameraManager(); - ret = cameraManager_->start(); - if (ret) { - cerr << "Failed to start the CameraManager" << endl; - return TestFail; - } - - return 0; -} - -int IPU3PipelineTest::run() -{ - auto cameras = cameraManager_->cameras(); - for (const std::shared_ptr &cam : cameras) - cout << "Found camera '" << cam->id() << "'" << endl; - - if (cameras.size() != sensors_) { - cerr << cameras.size() << " cameras registered, but " << sensors_ - << " were expected" << endl; - return TestFail; - } - - return TestPass; -} - -void IPU3PipelineTest::cleanup() -{ - cameraManager_->stop(); - delete cameraManager_; -} - -TEST_REGISTER(IPU3PipelineTest) diff --git a/test/pipeline/ipu3/meson.build b/test/pipeline/ipu3/meson.build deleted file mode 100644 index af075707f505..000000000000 --- a/test/pipeline/ipu3/meson.build +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: CC0-1.0 - -ipu3_test = [ - {'name': 'ipu3_pipeline_test', 'sources': ['ipu3_pipeline_test.cpp']}, -] - -foreach test : ipu3_test - exe = executable(test['name'], test['sources'], - dependencies : libcamera_private, - link_with : test_libraries, - include_directories : test_includes_internal) - - test(test['name'], exe, suite : 'ipu3', is_parallel : false) -endforeach diff --git a/test/pipeline/meson.build b/test/pipeline/meson.build deleted file mode 100644 index 6e7901fee38f..000000000000 --- a/test/pipeline/meson.build +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-License-Identifier: CC0-1.0 - -subdir('ipu3') -subdir('rkisp1') diff --git a/test/pipeline/rkisp1/meson.build b/test/pipeline/rkisp1/meson.build deleted file mode 100644 index 1d178ad9da6f..000000000000 --- a/test/pipeline/rkisp1/meson.build +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: CC0-1.0 - -rkisp1_test = [ - {'name': 'rkisp1_pipeline_test', 'sources': ['rkisp1_pipeline_test.cpp']}, -] - -foreach test : rkisp1_test - exe = executable(test['name'], test['sources'], - dependencies : libcamera_private, - link_with : test_libraries, - include_directories : test_includes_internal) - - test(test['name'], exe, suite : 'rkisp1', is_parallel : false) -endforeach diff --git a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp deleted file mode 100644 index acaf3c33b529..000000000000 --- a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * Copyright (C) 2020, Linaro - * - * Based on test/pipeline/ipu3/ipu3_pipeline_test.cpp - * - * rkisp1_pipeline_test.cpp - Rockchip RK3399 rkisp1 pipeline test - */ - -#include - -#include -#include -#include - -#include -#include - -#include "libcamera/internal/device_enumerator.h" -#include "libcamera/internal/media_device.h" -#include "libcamera/internal/media_object.h" - -#include "test.h" - -using namespace std; -using namespace libcamera; - -/* - * Verify that the RK3399 pipeline handler gets matched and cameras - * are enumerated correctly. - * - * The test is supposed to be run on rockchip platform. - * - * The test lists all cameras registered in the system, if any camera is - * available at all. - */ -class RKISP1PipelineTest : public Test -{ -protected: - int init(); - int run(); - void cleanup(); - -private: - CameraManager *cameraManager_; - unsigned int sensors_; -}; - -int RKISP1PipelineTest::init() -{ - unique_ptr enumerator = DeviceEnumerator::create(); - if (!enumerator) { - cerr << "Failed to create device enumerator" << endl; - return TestFail; - } - - if (enumerator->enumerate()) { - cerr << "Failed to enumerate media devices" << endl; - return TestFail; - } - - DeviceMatch dm("rkisp1"); - - std::shared_ptr rkisp1 = enumerator->search(dm); - if (!rkisp1) { - cerr << "Failed to find rkisp1: test skip" << endl; - return TestSkip; - } - - int ret = rkisp1->populate(); - if (ret) { - cerr << "Failed to populate media device " - << rkisp1->deviceNode() << endl; - return TestFail; - } - - sensors_ = 0; - const vector &entities = rkisp1->entities(); - for (MediaEntity *entity : entities) { - if (entity->function() == MEDIA_ENT_F_CAM_SENSOR) - sensors_++; - } - - cameraManager_ = new CameraManager(); - ret = cameraManager_->start(); - if (ret) { - cerr << "Failed to start the CameraManager" << endl; - return TestFail; - } - - return 0; -} - -int RKISP1PipelineTest::run() -{ - auto cameras = cameraManager_->cameras(); - for (const std::shared_ptr &cam : cameras) - cout << "Found camera '" << cam->id() << "'" << endl; - - if (cameras.size() != sensors_) { - cerr << cameras.size() << " cameras registered, but " << sensors_ - << " were expected" << endl; - return TestFail; - } - - return TestPass; -} - -void RKISP1PipelineTest::cleanup() -{ - cameraManager_->stop(); - delete cameraManager_; -} - -TEST_REGISTER(RKISP1PipelineTest)