[RFC PATCH v2 15/16] apps: lc-compliance: Add multi-stream tests
Paul Elder
paul.elder at ideasonboard.com
Thu Jan 23 03:04:22 CET 2025
On Tue, Jan 14, 2025 at 06:23:00PM +0000, Barnabás Pőcze wrote:
> Rename the `SingleStream` test to `SimpleCapture`, and extend it
> to support using multiple roles. And instantiate another test suite
> from the `SimpleCapture` test that tests multiple streams in one
> capture session.
>
> Co-developed-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
> Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
> Signed-off-by: Barnabás Pőcze <pobrn at protonmail.com>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> src/apps/lc-compliance/tests/capture_test.cpp | 85 +++++++++++--------
> 1 file changed, 48 insertions(+), 37 deletions(-)
>
> diff --git a/src/apps/lc-compliance/tests/capture_test.cpp b/src/apps/lc-compliance/tests/capture_test.cpp
> index 147e17019..db1d52fc9 100644
> --- a/src/apps/lc-compliance/tests/capture_test.cpp
> +++ b/src/apps/lc-compliance/tests/capture_test.cpp
> @@ -8,7 +8,7 @@
>
> #include "capture.h"
>
> -#include <iostream>
> +#include <sstream>
>
> #include <gtest/gtest.h>
>
> @@ -18,19 +18,10 @@ namespace {
>
> using namespace libcamera;
>
> -const int NUMREQUESTS[] = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
> -
> -const StreamRole ROLES[] = {
> - StreamRole::Raw,
> - StreamRole::StillCapture,
> - StreamRole::VideoRecording,
> - StreamRole::Viewfinder
> -};
> -
> -class SingleStream : public testing::TestWithParam<std::tuple<StreamRole, int>>
> +class SimpleCapture : public testing::TestWithParam<std::tuple<std::vector<StreamRole>, int>>
> {
> public:
> - static std::string nameParameters(const testing::TestParamInfo<SingleStream::ParamType> &info);
> + static std::string nameParameters(const testing::TestParamInfo<SimpleCapture::ParamType> &info);
>
> protected:
> void SetUp() override;
> @@ -43,7 +34,7 @@ protected:
> * We use gtest's SetUp() and TearDown() instead of constructor and destructor
> * in order to be able to assert on them.
> */
> -void SingleStream::SetUp()
> +void SimpleCapture::SetUp()
> {
> Environment *env = Environment::get();
>
> @@ -52,7 +43,7 @@ void SingleStream::SetUp()
> ASSERT_EQ(camera_->acquire(), 0);
> }
>
> -void SingleStream::TearDown()
> +void SimpleCapture::TearDown()
> {
> if (!camera_)
> return;
> @@ -61,19 +52,17 @@ void SingleStream::TearDown()
> camera_.reset();
> }
>
> -std::string SingleStream::nameParameters(const testing::TestParamInfo<SingleStream::ParamType> &info)
> +std::string SimpleCapture::nameParameters(const testing::TestParamInfo<SimpleCapture::ParamType> &info)
> {
> - std::map<StreamRole, std::string> rolesMap = {
> - { StreamRole::Raw, "Raw" },
> - { StreamRole::StillCapture, "StillCapture" },
> - { StreamRole::VideoRecording, "VideoRecording" },
> - { StreamRole::Viewfinder, "Viewfinder" }
> - };
> + const auto &[roles, numRequests] = info.param;
> + std::ostringstream ss;
>
> - std::string roleName = rolesMap[std::get<0>(info.param)];
> - std::string numRequestsName = std::to_string(std::get<1>(info.param));
> + for (StreamRole r : roles)
> + ss << r << '_';
>
> - return roleName + "_" + numRequestsName;
> + ss << '_' << numRequests;
> +
> + return std::move(ss).str();
> }
>
> /*
> @@ -83,13 +72,13 @@ std::string SingleStream::nameParameters(const testing::TestParamInfo<SingleStre
> * failure is a camera that completes less requests than the number of requests
> * queued.
> */
> -TEST_P(SingleStream, Capture)
> +TEST_P(SimpleCapture, Capture)
> {
> - auto [role, numRequests] = GetParam();
> + const auto &[roles, numRequests] = GetParam();
>
> Capture capture(camera_);
>
> - capture.configure(std::array{ role });
> + capture.configure(roles);
>
> capture.run(numRequests, numRequests);
> }
> @@ -101,14 +90,14 @@ TEST_P(SingleStream, Capture)
> * a camera that does not clean up correctly in its error path but is only
> * tested by single-capture applications.
> */
> -TEST_P(SingleStream, CaptureStartStop)
> +TEST_P(SimpleCapture, CaptureStartStop)
> {
> - auto [role, numRequests] = GetParam();
> + const auto &[roles, numRequests] = GetParam();
> unsigned int numRepeats = 3;
>
> Capture capture(camera_);
>
> - capture.configure(std::array{ role });
> + capture.configure(roles);
>
> for (unsigned int starts = 0; starts < numRepeats; starts++)
> capture.run(numRequests, numRequests);
> @@ -121,21 +110,43 @@ TEST_P(SingleStream, CaptureStartStop)
> * is a camera that does not handle cancelation of buffers coming back from the
> * video device while stopping.
> */
> -TEST_P(SingleStream, UnbalancedStop)
> +TEST_P(SimpleCapture, UnbalancedStop)
> {
> - auto [role, numRequests] = GetParam();
> + const auto &[roles, numRequests] = GetParam();
>
> Capture capture(camera_);
>
> - capture.configure(std::array{ role });
> + capture.configure(roles);
>
> capture.run(numRequests);
> }
>
> -INSTANTIATE_TEST_SUITE_P(CaptureTests,
> - SingleStream,
> - testing::Combine(testing::ValuesIn(ROLES),
> +const int NUMREQUESTS[] = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
> +
> +const std::vector<StreamRole> SINGLEROLES[] = {
> + { StreamRole::Raw, },
> + { StreamRole::StillCapture, },
> + { StreamRole::VideoRecording, },
> + { StreamRole::Viewfinder, },
> +};
> +
> +const std::vector<StreamRole> MULTIROLES[] = {
> + { StreamRole::Raw, StreamRole::StillCapture },
> + { StreamRole::Raw, StreamRole::VideoRecording },
> + { StreamRole::StillCapture, StreamRole::VideoRecording },
> + { StreamRole::VideoRecording, StreamRole::VideoRecording },
> +};
> +
> +INSTANTIATE_TEST_SUITE_P(SingleStream,
> + SimpleCapture,
> + testing::Combine(testing::ValuesIn(SINGLEROLES),
> + testing::ValuesIn(NUMREQUESTS)),
> + SimpleCapture::nameParameters);
> +
> +INSTANTIATE_TEST_SUITE_P(MultiStream,
> + SimpleCapture,
> + testing::Combine(testing::ValuesIn(MULTIROLES),
> testing::ValuesIn(NUMREQUESTS)),
> - SingleStream::nameParameters);
> + SimpleCapture::nameParameters);
>
> } /* namespace */
> --
> 2.48.0
>
>
More information about the libcamera-devel
mailing list