{"id":12082,"url":"https://patchwork.libcamera.org/api/1.1/covers/12082/?format=json","web_url":"https://patchwork.libcamera.org/cover/12082/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210422210609.425987-1-nfraprado@collabora.com>","date":"2021-04-22T21:06:07","name":"[libcamera-devel,RFC,0/2] lc-compliance: Refactor using Googletest","submitter":{"id":84,"url":"https://patchwork.libcamera.org/api/1.1/people/84/?format=json","name":"Nícolas F. R. A. Prado","email":"nfraprado@collabora.com"},"mbox":"https://patchwork.libcamera.org/cover/12082/mbox/","series":[{"id":1965,"url":"https://patchwork.libcamera.org/api/1.1/series/1965/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1965","date":"2021-04-22T21:06:07","name":"lc-compliance: Refactor using Googletest","version":1,"mbox":"https://patchwork.libcamera.org/series/1965/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/12082/comments/","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id F379ABDB1A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 22 Apr 2021 21:06:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 324436885C;\n\tThu, 22 Apr 2021 23:06:51 +0200 (CEST)","from bhuna.collabora.co.uk (bhuna.collabora.co.uk\n\t[IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B8EDB60516\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 22 Apr 2021 23:06:49 +0200 (CEST)","from [127.0.0.1] (localhost [127.0.0.1])\n\t(Authenticated sender: nfraprado) with ESMTPSA id B8B7D1F43738"],"From":"=?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= <nfraprado@collabora.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Thu, 22 Apr 2021 18:06:07 -0300","Message-Id":"<20210422210609.425987-1-nfraprado@collabora.com>","X-Mailer":"git-send-email 2.31.1","MIME-Version":"1.0","Subject":"[libcamera-devel] [RFC PATCH 0/2] lc-compliance: Refactor using\n\tGoogletest","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"kernel@collabora.com, =?utf-8?q?Andr=C3=A9_Almeida?=\n\t<andrealmeid@collabora.com>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"This is another prototype of the refactoring of lc-compliance, this time using\nGoogletest as the framework.\n\nPatch 1 is just to simplify cleanup and is the same patch used in the previous\nrefactoring series using Catch2 [1]. Patch 2 does the actual refactor.\n\nThe biggest advantage this has over the previous one using Catch2, is that\nGoogletest has a GTEST_SKIP() macro which skips the current test during runtime,\nwhich is essential for lc-compliance.\n\nOne drawback of Gtest is the need to use different assertion macros for each\ntype of comparison, like ASSERT_LE(a, b), instead of a single one used in\nCatch2, ASSERT(a <= b), which makes the code a little less clear, but is not a\nshow stopper.\n\nThe parameters for Gtest have yet to be wired up, but can currently be passed\nafter double dashes, like\n\n\tlc-compliance -c '<camera_name>' -- --gtest_list_tests\n\nto list all current tests defined. The parameter --gtest_filter can be used to\nfilter the individual tests or test suites to run. It uses string matching and\nglobing for the test names so it's easy to run a whole test suite MyTestSuite\nwith --gtest_list_tests='*MyTestSuite*'.\n\nFour INSTANTIATE_TEST_SUITE_P(), one for each stream role, were used in the code\nto make the StreamRole part of the test name string, making it possible to\nfilter only tests of a single StreamRole to run. In order to not have to define\neach new parametrized test suite four times, a macro could be used for the\nsubstitution.\n\nThis is a snippet of a successful run:\n\n\t[==========] Running 120 tests from 4 test suites.\n\t[----------] Global test environment set-up.\n\t[----------] 30 tests from Raw/FixedRequestsTest\n\t[ RUN      ] Raw/FixedRequestsTest.BalancedSingleCycle/0\n\t[79:31:45.624016307] [421717]  INFO Camera camera.cpp:905 configuring streams: (0) 1280x720-MJPEG\n\tCamera needs 4 requests, can't test only 1\n\t[  SKIPPED ] Raw/FixedRequestsTest.BalancedSingleCycle/0 (64 ms)\n\n\t[...]\n\n\t[ RUN      ] Viewfinder/FixedRequestsTest.Unbalanced/9\n\t[79:34:38.653213305] [421717]  INFO Camera camera.cpp:905 configuring streams: (0) 1280x720-MJPEG\n\t[       OK ] Viewfinder/FixedRequestsTest.Unbalanced/9 (3146 ms)\n\t[----------] 30 tests from Viewfinder/FixedRequestsTest (43964 ms total)\n\n\t[----------] Global test environment tear-down\n\t[==========] 120 tests from 4 test suites ran. (176177 ms total)\n\t[  PASSED  ] 96 tests.\n\t[  SKIPPED ] 24 tests, listed below:\n\t[  SKIPPED ] Raw/FixedRequestsTest.BalancedSingleCycle/0\n\t[  SKIPPED ] Raw/FixedRequestsTest.BalancedSingleCycle/1\n\n\t[...]\n\nAnd how a failure looks like:\n\n\t[ RUN      ] Raw/FixedRequestsTest.BalancedSingleCycle/3\n\t[79:46:37.536423187] [424054]  INFO Camera camera.cpp:905 configuring streams: (0) 1280x720-MJPEG\n\t../src/lc-compliance/simple_capture.cpp:110: Failure\n\tExpected equality of these values:\n\t  captureCount_\n\t    Which is: 5\n\t  captureLimit_\n\t    Which is: 4\n\t[  FAILED  ] Raw/FixedRequestsTest.BalancedSingleCycle/3, where GetParam() = (0, 5) (318 ms)\n\nThe current complete list of tests is shown below:\n\n\tRaw/FixedRequestsTest.\n\t  BalancedSingleCycle/0  # GetParam() = (0, 1)\n\t  BalancedSingleCycle/1  # GetParam() = (0, 2)\n\t  BalancedSingleCycle/2  # GetParam() = (0, 3)\n\t  BalancedSingleCycle/3  # GetParam() = (0, 5)\n\t  BalancedSingleCycle/4  # GetParam() = (0, 8)\n\t  BalancedSingleCycle/5  # GetParam() = (0, 13)\n\t  BalancedSingleCycle/6  # GetParam() = (0, 21)\n\t  BalancedSingleCycle/7  # GetParam() = (0, 34)\n\t  BalancedSingleCycle/8  # GetParam() = (0, 55)\n\t  BalancedSingleCycle/9  # GetParam() = (0, 89)\n\t  BalancedMultiCycle/0  # GetParam() = (0, 1)\n\t  BalancedMultiCycle/1  # GetParam() = (0, 2)\n\t  BalancedMultiCycle/2  # GetParam() = (0, 3)\n\t  BalancedMultiCycle/3  # GetParam() = (0, 5)\n\t  BalancedMultiCycle/4  # GetParam() = (0, 8)\n\t  BalancedMultiCycle/5  # GetParam() = (0, 13)\n\t  BalancedMultiCycle/6  # GetParam() = (0, 21)\n\t  BalancedMultiCycle/7  # GetParam() = (0, 34)\n\t  BalancedMultiCycle/8  # GetParam() = (0, 55)\n\t  BalancedMultiCycle/9  # GetParam() = (0, 89)\n\t  Unbalanced/0  # GetParam() = (0, 1)\n\t  Unbalanced/1  # GetParam() = (0, 2)\n\t  Unbalanced/2  # GetParam() = (0, 3)\n\t  Unbalanced/3  # GetParam() = (0, 5)\n\t  Unbalanced/4  # GetParam() = (0, 8)\n\t  Unbalanced/5  # GetParam() = (0, 13)\n\t  Unbalanced/6  # GetParam() = (0, 21)\n\t  Unbalanced/7  # GetParam() = (0, 34)\n\t  Unbalanced/8  # GetParam() = (0, 55)\n\t  Unbalanced/9  # GetParam() = (0, 89)\n\tStillCapture/FixedRequestsTest.\n\t  BalancedSingleCycle/0  # GetParam() = (1, 1)\n\t  BalancedSingleCycle/1  # GetParam() = (1, 2)\n\t  BalancedSingleCycle/2  # GetParam() = (1, 3)\n\t  BalancedSingleCycle/3  # GetParam() = (1, 5)\n\t  BalancedSingleCycle/4  # GetParam() = (1, 8)\n\t  BalancedSingleCycle/5  # GetParam() = (1, 13)\n\t  BalancedSingleCycle/6  # GetParam() = (1, 21)\n\t  BalancedSingleCycle/7  # GetParam() = (1, 34)\n\t  BalancedSingleCycle/8  # GetParam() = (1, 55)\n\t  BalancedSingleCycle/9  # GetParam() = (1, 89)\n\t  BalancedMultiCycle/0  # GetParam() = (1, 1)\n\t  BalancedMultiCycle/1  # GetParam() = (1, 2)\n\t  BalancedMultiCycle/2  # GetParam() = (1, 3)\n\t  BalancedMultiCycle/3  # GetParam() = (1, 5)\n\t  BalancedMultiCycle/4  # GetParam() = (1, 8)\n\t  BalancedMultiCycle/5  # GetParam() = (1, 13)\n\t  BalancedMultiCycle/6  # GetParam() = (1, 21)\n\t  BalancedMultiCycle/7  # GetParam() = (1, 34)\n\t  BalancedMultiCycle/8  # GetParam() = (1, 55)\n\t  BalancedMultiCycle/9  # GetParam() = (1, 89)\n\t  Unbalanced/0  # GetParam() = (1, 1)\n\t  Unbalanced/1  # GetParam() = (1, 2)\n\t  Unbalanced/2  # GetParam() = (1, 3)\n\t  Unbalanced/3  # GetParam() = (1, 5)\n\t  Unbalanced/4  # GetParam() = (1, 8)\n\t  Unbalanced/5  # GetParam() = (1, 13)\n\t  Unbalanced/6  # GetParam() = (1, 21)\n\t  Unbalanced/7  # GetParam() = (1, 34)\n\t  Unbalanced/8  # GetParam() = (1, 55)\n\t  Unbalanced/9  # GetParam() = (1, 89)\n\tVideoRecording/FixedRequestsTest.\n\t  BalancedSingleCycle/0  # GetParam() = (2, 1)\n\t  BalancedSingleCycle/1  # GetParam() = (2, 2)\n\t  BalancedSingleCycle/2  # GetParam() = (2, 3)\n\t  BalancedSingleCycle/3  # GetParam() = (2, 5)\n\t  BalancedSingleCycle/4  # GetParam() = (2, 8)\n\t  BalancedSingleCycle/5  # GetParam() = (2, 13)\n\t  BalancedSingleCycle/6  # GetParam() = (2, 21)\n\t  BalancedSingleCycle/7  # GetParam() = (2, 34)\n\t  BalancedSingleCycle/8  # GetParam() = (2, 55)\n\t  BalancedSingleCycle/9  # GetParam() = (2, 89)\n\t  BalancedMultiCycle/0  # GetParam() = (2, 1)\n\t  BalancedMultiCycle/1  # GetParam() = (2, 2)\n\t  BalancedMultiCycle/2  # GetParam() = (2, 3)\n\t  BalancedMultiCycle/3  # GetParam() = (2, 5)\n\t  BalancedMultiCycle/4  # GetParam() = (2, 8)\n\t  BalancedMultiCycle/5  # GetParam() = (2, 13)\n\t  BalancedMultiCycle/6  # GetParam() = (2, 21)\n\t  BalancedMultiCycle/7  # GetParam() = (2, 34)\n\t  BalancedMultiCycle/8  # GetParam() = (2, 55)\n\t  BalancedMultiCycle/9  # GetParam() = (2, 89)\n\t  Unbalanced/0  # GetParam() = (2, 1)\n\t  Unbalanced/1  # GetParam() = (2, 2)\n\t  Unbalanced/2  # GetParam() = (2, 3)\n\t  Unbalanced/3  # GetParam() = (2, 5)\n\t  Unbalanced/4  # GetParam() = (2, 8)\n\t  Unbalanced/5  # GetParam() = (2, 13)\n\t  Unbalanced/6  # GetParam() = (2, 21)\n\t  Unbalanced/7  # GetParam() = (2, 34)\n\t  Unbalanced/8  # GetParam() = (2, 55)\n\t  Unbalanced/9  # GetParam() = (2, 89)\n\tViewfinder/FixedRequestsTest.\n\t  BalancedSingleCycle/0  # GetParam() = (3, 1)\n\t  BalancedSingleCycle/1  # GetParam() = (3, 2)\n\t  BalancedSingleCycle/2  # GetParam() = (3, 3)\n\t  BalancedSingleCycle/3  # GetParam() = (3, 5)\n\t  BalancedSingleCycle/4  # GetParam() = (3, 8)\n\t  BalancedSingleCycle/5  # GetParam() = (3, 13)\n\t  BalancedSingleCycle/6  # GetParam() = (3, 21)\n\t  BalancedSingleCycle/7  # GetParam() = (3, 34)\n\t  BalancedSingleCycle/8  # GetParam() = (3, 55)\n\t  BalancedSingleCycle/9  # GetParam() = (3, 89)\n\t  BalancedMultiCycle/0  # GetParam() = (3, 1)\n\t  BalancedMultiCycle/1  # GetParam() = (3, 2)\n\t  BalancedMultiCycle/2  # GetParam() = (3, 3)\n\t  BalancedMultiCycle/3  # GetParam() = (3, 5)\n\t  BalancedMultiCycle/4  # GetParam() = (3, 8)\n\t  BalancedMultiCycle/5  # GetParam() = (3, 13)\n\t  BalancedMultiCycle/6  # GetParam() = (3, 21)\n\t  BalancedMultiCycle/7  # GetParam() = (3, 34)\n\t  BalancedMultiCycle/8  # GetParam() = (3, 55)\n\t  BalancedMultiCycle/9  # GetParam() = (3, 89)\n\t  Unbalanced/0  # GetParam() = (3, 1)\n\t  Unbalanced/1  # GetParam() = (3, 2)\n\t  Unbalanced/2  # GetParam() = (3, 3)\n\t  Unbalanced/3  # GetParam() = (3, 5)\n\t  Unbalanced/4  # GetParam() = (3, 8)\n\t  Unbalanced/5  # GetParam() = (3, 13)\n\t  Unbalanced/6  # GetParam() = (3, 21)\n\t  Unbalanced/7  # GetParam() = (3, 34)\n\t  Unbalanced/8  # GetParam() = (3, 55)\n\t  Unbalanced/9  # GetParam() = (3, 89)\n\n[1] https://lists.libcamera.org/pipermail/libcamera-devel/2021-April/019358.html\n\nNícolas F. R. A. Prado (2):\n  lc-compliance: Make SimpleCapture::stop() idempotent\n  lc-compliance: Refactor using Googletest\n\n src/lc-compliance/main.cpp           |  60 +++++------\n src/lc-compliance/meson.build        |   3 +\n src/lc-compliance/simple_capture.cpp |  85 ++++++----------\n src/lc-compliance/simple_capture.h   |   8 +-\n src/lc-compliance/single_stream.cpp  | 142 ++++++++++++++-------------\n 5 files changed, 137 insertions(+), 161 deletions(-)"}