[{"id":3066,"web_url":"https://patchwork.libcamera.org/comment/3066/","msgid":"<20191118181833.GJ8072@bigcity.dyn.berto.se>","date":"2019-11-18T18:18:33","subject":"Re: [libcamera-devel] [PATCH v2 15/24] test: Add ByteStreamBuffer\n\ttest","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your work.\n\nOn 2019-11-08 22:54:00 +0200, Laurent Pinchart wrote:\n> The test exercises the API of the ByteStreamBuffer class in both read\n> and write modes, including carve out buffers.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  test/byte-stream-buffer.cpp | 172 ++++++++++++++++++++++++++++++++++++\n>  test/meson.build            |   1 +\n>  2 files changed, 173 insertions(+)\n>  create mode 100644 test/byte-stream-buffer.cpp\n> \n> diff --git a/test/byte-stream-buffer.cpp b/test/byte-stream-buffer.cpp\n> new file mode 100644\n> index 000000000000..bc1d462ebf6f\n> --- /dev/null\n> +++ b/test/byte-stream-buffer.cpp\n> @@ -0,0 +1,172 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2018, Google Inc.\n> + *\n> + * byte_stream_buffer.cpp - ByteStreamBuffer tests\n> + */\n> +\n> +#include <array>\n> +#include <iostream>\n> +\n> +#include \"byte_stream_buffer.h\"\n> +#include \"test.h\"\n> +\n> +using namespace std;\n> +using namespace libcamera;\n> +\n> +class ByteStreamBufferTest : public Test\n> +{\n> +protected:\n> +\tint run()\n> +\t{\n> +\t\tstd::array<uint8_t, 100> data;\n> +\t\tunsigned int i;\n> +\t\tuint32_t value;\n> +\t\tint ret;\n> +\n> +\t\t/*\n> +\t\t * Write mode.\n> +\t\t */\n> +\t\tByteStreamBuffer wbuf(data.data(), data.size());\n> +\n> +\t\tif (wbuf.base() != data.data() || wbuf.size() != data.size() ||\n> +\t\t    wbuf.offset() != 0 || wbuf.overflow()) {\n> +\t\t\tcerr << \"Write buffer incorrectly constructed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test write. */\n> +\t\tvalue = 0x12345678;\n> +\t\tret = wbuf.write(&value);\n> +\t\tif (ret || wbuf.offset() != 4 || wbuf.overflow() ||\n> +\t\t    *reinterpret_cast<uint32_t *>(data.data()) != 0x12345678) {\n> +\t\t\tcerr << \"Write failed on write buffer\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test write carve out. */\n> +\t\tByteStreamBuffer wco = wbuf.carveOut(10);\n> +\t\tif (wco.base() != wbuf.base() + 4 || wco.size() != 10 ||\n> +\t\t    wco.offset() != 0 || wco.overflow() || wbuf.offset() != 14 ||\n> +\t\t    wbuf.overflow()) {\n> +\t\t\tcerr << \"Carving out write buffer failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test write on the carved out buffer. */\n> +\t\tvalue = 0x87654321;\n> +\t\tret = wco.write(&value);\n> +\t\tif (ret || wco.offset() != 4 || wco.overflow() ||\n> +\t\t    *reinterpret_cast<uint32_t *>(data.data() + 4) != 0x87654321) {\n> +\t\t\tcerr << \"Write failed on carve out buffer\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (wbuf.offset() != 14 || wbuf.overflow()) {\n> +\t\t\tcerr << \"Write on carve out buffer modified write buffer\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test read, this should fail. */\n> +\t\tret = wbuf.read(&value);\n> +\t\tif (!ret || wbuf.overflow()) {\n> +\t\t\tcerr << \"Read should fail on write buffer\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test overflow on carved out buffer. */\n> +\t\tfor (i = 0; i < 2; ++i) {\n> +\t\t\tret = wco.write(&value);\n> +\t\t\tif (ret < 0)\n> +\t\t\t\tbreak;\n> +\t\t}\n> +\n> +\t\tif (i != 1 || !wco.overflow() || !wbuf.overflow()) {\n> +\t\t\tcerr << \"Write on carve out buffer failed to overflow\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test reinitialization of the buffer. */\n> +\t\twbuf = ByteStreamBuffer(data.data(), data.size());\n> +\t\tif (wbuf.overflow() || wbuf.base() != data.data() ||\n> +\t\t    wbuf.offset() != 0) {\n> +\t\t\tcerr << \"Write buffer reinitialization failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/*\n> +\t\t * Read mode.\n> +\t\t */\n> +\t\tByteStreamBuffer rbuf(const_cast<const uint8_t *>(data.data()),\n> +\t\t\t\t      data.size());\n> +\n> +\t\tif (rbuf.base() != data.data() || rbuf.size() != data.size() ||\n> +\t\t    rbuf.offset() != 0 || rbuf.overflow()) {\n> +\t\t\tcerr << \"Read buffer incorrectly constructed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test read. */\n> +\t\tvalue = 0;\n> +\t\tret = rbuf.read(&value);\n> +\t\tif (ret || rbuf.offset() != 4 || rbuf.overflow() ||\n> +\t\t    value != 0x12345678) {\n> +\t\t\tcerr << \"Write failed on write buffer\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test read carve out. */\n> +\t\tByteStreamBuffer rco = rbuf.carveOut(10);\n> +\t\tif (rco.base() != rbuf.base() + 4 || rco.size() != 10 ||\n> +\t\t    rco.offset() != 0 || rco.overflow() || rbuf.offset() != 14 ||\n> +\t\t    rbuf.overflow()) {\n> +\t\t\tcerr << \"Carving out read buffer failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test read on the carved out buffer. */\n> +\t\tvalue = 0;\n> +\t\tret = rco.read(&value);\n> +\t\tif (ret || rco.offset() != 4 || rco.overflow() || value != 0x87654321) {\n> +\t\t\tcerr << \"Read failed on carve out buffer\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (rbuf.offset() != 14 || rbuf.overflow()) {\n> +\t\t\tcerr << \"Read on carve out buffer modified read buffer\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test write, this should fail. */\n> +\t\tret = rbuf.write(&value);\n> +\t\tif (!ret || rbuf.overflow()) {\n> +\t\t\tcerr << \"Write should fail on read buffer\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test overflow on carved out buffer. */\n> +\t\tfor (i = 0; i < 2; ++i) {\n> +\t\t\tret = rco.read(&value);\n> +\t\t\tif (ret < 0)\n> +\t\t\t\tbreak;\n> +\t\t}\n> +\n> +\t\tif (i != 1 || !rco.overflow() || !rbuf.overflow()) {\n> +\t\t\tcerr << \"Read on carve out buffer failed to overflow\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test reinitialization of the buffer. */\n> +\t\trbuf = ByteStreamBuffer(const_cast<const uint8_t *>(data.data()),\n> +\t\t\t\t\tdata.size());\n> +\t\tif (rbuf.overflow() || rbuf.base() != data.data() ||\n> +\t\t    rbuf.offset() != 0) {\n> +\t\t\tcerr << \"Read buffer reinitialization failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +};\n> +\n> +TEST_REGISTER(ByteStreamBufferTest)\n> diff --git a/test/meson.build b/test/meson.build\n> index cf5eb84d20b2..adb5b29e69f3 100644\n> --- a/test/meson.build\n> +++ b/test/meson.build\n> @@ -19,6 +19,7 @@ public_tests = [\n>  ]\n>  \n>  internal_tests = [\n> +    ['byte-stream-buffer',              'byte-stream-buffer.cpp'],\n>      ['camera-sensor',                   'camera-sensor.cpp'],\n>      ['event',                           'event.cpp'],\n>      ['event-dispatcher',                'event-dispatcher.cpp'],\n> -- \n> Regards,\n> \n> Laurent Pinchart\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lf1-x130.google.com (mail-lf1-x130.google.com\n\t[IPv6:2a00:1450:4864:20::130])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B571F60F1C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 18 Nov 2019 19:18:35 +0100 (CET)","by mail-lf1-x130.google.com with SMTP id l28so5146694lfj.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 18 Nov 2019 10:18:35 -0800 (PST)","from localhost (h-93-159.A463.priv.bahnhof.se. [46.59.93.159])\n\tby smtp.gmail.com with ESMTPSA id\n\tf25sm8595628ljp.100.2019.11.18.10.18.34\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 18 Nov 2019 10:18:34 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to\n\t:user-agent; bh=NJC7oiiej9PlxEDiF1cZUYmp6S4poHxxhMfVCfrTR64=;\n\tb=osFg/ktWiEv3xzK88gE0K2862RzUCVsDCY0TR5hshBwJO2Y5fUOStB54dM3x/MbvO7\n\t0SC+VVgmbKjNrsRSKWnOHVWSddfoYy/SR2rEqG8MoOzHt1ot2lzHaWuALfUg9RGXk7ef\n\tSsqmwgq1nQzuTqlX4O8xOhBHr8KZomnu1PtzSKG1uroJxw+QeVHj4Ba/FFAphOJ5GQSo\n\tAIcawEXTVidKaI4l/lBjz6A+7cntzBt2PQopCpA77O2e+pxjBbC3VAXgsdiHQAay0q9V\n\t2aSI7ZYEGJcp22Ymq1pj9eYtjgAW5ikAmutu0fP+gatmTsaAeQQG8VxF3F5VYTxO8F4v\n\toRhw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to:user-agent;\n\tbh=NJC7oiiej9PlxEDiF1cZUYmp6S4poHxxhMfVCfrTR64=;\n\tb=RyupMa0Vm0uRdjQ1hjHwBJLEoHONJSP+ticKFMnViEtVCRQUy1+sztkPPjLT+dbrk4\n\t98AQX3XAKuhnAPBLLbILukSxnZ88FVOCDjm9s+zDZyp/kToXSXF/G+6UEnsdURWtwn8C\n\t73+hynBUl3h2A7En76isQZsc+h5ESYxjcDd7KXnIYX0flc3yjpsDNC4ieDKPIoxtsCSw\n\t+haDcFo1UMqQMVX3JgKZWH3NkOoJDfQiLCVATVX2dzzpLCynHX+81BxKEcqfc9Zu+uPG\n\tmXejWBSdtg1zfinJIZa2E4kD7tSoI5+MW//mczXW0S4Yj9n3DD5x1thsJuqaAdSg0YM3\n\tCAXA==","X-Gm-Message-State":"APjAAAUNRfSKKUvxKWuNOonDIYO1W5lfZLeVtn+kf8QPSE+TJGPT+TRx\n\t9QPK6gi6/Qkd/H2idV3P0wYMT6ZVmnk=","X-Google-Smtp-Source":"APXvYqx3bBrmZ2NCn5IfPgiK/cEybjZR50eze56J8pKKmzvDpYLyjD3Vo993zWJW0i5dQSzXDeqblg==","X-Received":"by 2002:a19:41d7:: with SMTP id\n\to206mr549903lfa.188.1574101114976; \n\tMon, 18 Nov 2019 10:18:34 -0800 (PST)","Date":"Mon, 18 Nov 2019 19:18:33 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20191118181833.GJ8072@bigcity.dyn.berto.se>","References":"<20191108205409.18845-1-laurent.pinchart@ideasonboard.com>\n\t<20191108205409.18845-16-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20191108205409.18845-16-laurent.pinchart@ideasonboard.com>","User-Agent":"Mutt/1.12.1 (2019-06-15)","Subject":"Re: [libcamera-devel] [PATCH v2 15/24] test: Add ByteStreamBuffer\n\ttest","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>","X-List-Received-Date":"Mon, 18 Nov 2019 18:18:35 -0000"}}]