Show a cover letter.

GET /api/1.1/covers/12082/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 12082,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/12082/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/12082/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api",
        "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=api",
        "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=api",
            "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(-)"
}