[libcamera-devel] [PATCH v3 5/7] apps: lc-compliance: Test for mandatory controls
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Jan 12 12:56:04 CET 2024
Quoting Jacopo Mondi via libcamera-devel (2023-12-30 16:29:10)
> Test for mandatory controls and properties to be supported by
> a Camera.
>
> Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
> ---
> src/apps/lc-compliance/meson.build | 1 +
> .../lc-compliance/tests/controls_test.cpp | 98 +++++++++++++++++++
> 2 files changed, 99 insertions(+)
> create mode 100644 src/apps/lc-compliance/tests/controls_test.cpp
>
> diff --git a/src/apps/lc-compliance/meson.build b/src/apps/lc-compliance/meson.build
> index ae8c6f4db51b..c927dd12e9f4 100644
> --- a/src/apps/lc-compliance/meson.build
> +++ b/src/apps/lc-compliance/meson.build
> @@ -15,6 +15,7 @@ lc_compliance_sources = files([
> 'helpers/capture.cpp',
> 'main.cpp',
> 'tests/capture_test.cpp',
> + 'tests/controls_test.cpp'
> ])
>
> lc_compliance_includes = ([
> diff --git a/src/apps/lc-compliance/tests/controls_test.cpp b/src/apps/lc-compliance/tests/controls_test.cpp
> new file mode 100644
> index 000000000000..e9bdf6fdb7e3
> --- /dev/null
> +++ b/src/apps/lc-compliance/tests/controls_test.cpp
> @@ -0,0 +1,98 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2023, Ideas On Board Oy
> + *
> + * controls_test.cpp - Test controls and properties
> + */
> +
> +#include <array>
> +#include <iostream>
> +
> +#include <libcamera/control_ids.h>
> +#include <libcamera/controls.h>
> +#include <libcamera/property_ids.h>
> +
> +#include <gtest/gtest.h>
> +
> +#include "environment.h"
> +
> +using namespace libcamera;
> +
> +std::array<const ControlIdMap *, 2> controlMaps = {
> + &controls::controls,
> + &properties::properties,
> +};
> +
> +class ControlTest : public testing::TestWithParam<const ControlIdMap *>
> +{
> +public:
> + static std::string nameParameters(const testing::TestParamInfo<ControlTest::ParamType> &info);
> +
> +protected:
> + void SetUp() override;
> + void TearDown() override;
> +
> + std::shared_ptr<Camera> camera_;
> +};
> +
> +void ControlTest::SetUp()
> +{
> + Environment *env = Environment::get();
> +
> + camera_ = env->cm()->get(env->cameraId());
> +
> + ASSERT_EQ(camera_->acquire(), 0);
> +}
> +
> +void ControlTest::TearDown()
> +{
> + if (!camera_)
> + return;
> +
> + camera_->release();
> + camera_.reset();
> +}
> +
> +std::string ControlTest::nameParameters(const testing::TestParamInfo<ControlTest::ParamType> &info)
> +{
> + const ControlIdMap *idMap = info.param;
> + if (idMap == &controls::controls)
> + return "controls";
> + else if (idMap == &properties::properties)
> + return "properties";
> +
> + return "vendor";
> +}
> +
> +/* Test that mandatory controls and properties are supported by a camera. */
> +TEST_P(ControlTest, RequiredControls)
> +{
> + auto controlMap = GetParam();
> +
> + for (const auto &[id, ctrl] : *controlMap) {
> + if (!ctrl->required())
> + continue;
> +
> + if (controlMap == &controls::controls) {
> + const auto it = camera_->controls().find(ctrl);
> +
> + if (it == camera_->controls().end())
> + FAIL() << "Mandatory control \"" << ctrl->name()
> + << "\" not supported" << std::endl;
> + } else if (controlMap == &properties::properties) {
> + bool found = camera_->properties().contains(id);
> +
> + if (!found)
> + FAIL() << "Mandatory property \"" << ctrl->name()
> + << "\" not supported" << std::endl;
> + }
> + }
> +}
> +
> +/*
> + * Use a Value-Parametrized Test case so that vendors can easily test vendor
> + * control lists by expading 'controlMaps'.
> + */
s/expading/expanding/
Where does this happen? I can't see a list of mandatory controls in this
test. Are any vendor controls even possible to be made Mandatory? I
can't see how vendor controls could be mandatory because they couldn't
apply to all cameras...
> +INSTANTIATE_TEST_SUITE_P(ControlsTest, ControlTest,
> + testing::ValuesIn(controlMaps),
> + ControlTest::nameParameters);
> --
> 2.41.0
>
More information about the libcamera-devel
mailing list