[libcamera-devel] [PATCH v3 3/3] test: v4l2_device: Add test suite and initial test
Niklas Söderlund
niklas.soderlund at ragnatech.se
Wed Jan 16 16:03:16 CET 2019
Hi Kieran,
Thanks for your work.
On 2019-01-15 23:19:09 +0000, Kieran Bingham wrote:
> Provide a base class to construct a v4l2_device object for further tests
> and an initial test which validates the FD handle can not be leaked.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> test/meson.build | 1 +
> test/v4l2_device/double_open.cpp | 38 +++++++++++++++++++++++
> test/v4l2_device/meson.build | 12 ++++++++
> test/v4l2_device/v4l2_device_test.cpp | 43 +++++++++++++++++++++++++++
> test/v4l2_device/v4l2_device_test.h | 27 +++++++++++++++++
> 5 files changed, 121 insertions(+)
> create mode 100644 test/v4l2_device/double_open.cpp
> create mode 100644 test/v4l2_device/meson.build
> create mode 100644 test/v4l2_device/v4l2_device_test.cpp
> create mode 100644 test/v4l2_device/v4l2_device_test.h
>
> diff --git a/test/meson.build b/test/meson.build
> index 32152888a55e..fb6b115eb2ab 100644
> --- a/test/meson.build
> +++ b/test/meson.build
> @@ -1,6 +1,7 @@
> subdir('libtest')
>
> subdir('media_device')
> +subdir('v4l2_device')
>
> public_tests = [
> ['event', 'event.cpp'],
> diff --git a/test/v4l2_device/double_open.cpp b/test/v4l2_device/double_open.cpp
> new file mode 100644
> index 000000000000..ca2b201454a4
> --- /dev/null
> +++ b/test/v4l2_device/double_open.cpp
> @@ -0,0 +1,38 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * libcamera V4L2 API tests
> + */
> +
> +#include <iostream>
> +
> +#include "v4l2_device_test.h"
> +
> +namespace {
> +
> +class DoubleOpen : public V4L2DeviceTest
> +{
> +protected:
> + int run()
> + {
> + int ret;
> +
> + /*
> + * Expect failure: The device has already been opened by the
> + * V4L2DeviceTest base class
> + */
> + ret = dev_->open();
> + if (!ret) {
> + std::cout << "Double open erroneously succeeded" << std::endl;
> + dev_->close();
> + return TestFail;
> + }
> +
> + return TestPass;
> + }
> +};
> +
> +} /* namespace */
> +
> +TEST_REGISTER(DoubleOpen);
> diff --git a/test/v4l2_device/meson.build b/test/v4l2_device/meson.build
> new file mode 100644
> index 000000000000..41675a303498
> --- /dev/null
> +++ b/test/v4l2_device/meson.build
> @@ -0,0 +1,12 @@
> +# Tests are listed in order of complexity.
> +# They are not alphabetically sorted.
> +v4l2_device_tests = [
> + [ 'double_open', 'double_open.cpp' ],
> +]
> +
> +foreach t : v4l2_device_tests
> + exe = executable(t[0], [t[1], 'v4l2_device_test.cpp'],
> + link_with : test_libraries,
> + include_directories : test_includes_internal)
> + test(t[0], exe, suite: 'v4l2_device', is_parallel: false)
> +endforeach
> diff --git a/test/v4l2_device/v4l2_device_test.cpp b/test/v4l2_device/v4l2_device_test.cpp
> new file mode 100644
> index 000000000000..362553712caa
> --- /dev/null
> +++ b/test/v4l2_device/v4l2_device_test.cpp
> @@ -0,0 +1,43 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * libcamera V4L2 API tests
> + */
> +
> +#include <iostream>
> +#include <sys/stat.h>
> +
> +#include "v4l2_device_test.h"
> +
> +using namespace libcamera;
> +
> +bool exists(const std::string &path)
> +{
> + struct stat sb;
> +
> + if (stat(path.c_str(), &sb) == 0)
> + return true;
> +
> + return false;
> +}
> +
> +int V4L2DeviceTest::init()
> +{
> + const std::string device("/dev/video0");
> +
> + /* Validate the device node exists. */
> + if (!exists(device)) {
> + std::cout << "No video device available" << std::endl;
> + return TestSkip;
> + }
> +
> + dev_ = new V4L2Device(device);
> +
> + return dev_->open();
> +}
> +
> +void V4L2DeviceTest::cleanup()
> +{
> + delete dev_;
> +};
> diff --git a/test/v4l2_device/v4l2_device_test.h b/test/v4l2_device/v4l2_device_test.h
> new file mode 100644
> index 000000000000..405cb7d6f404
> --- /dev/null
> +++ b/test/v4l2_device/v4l2_device_test.h
> @@ -0,0 +1,27 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2018, Google Inc.
> + *
> + * vl42device_test.h - libcamera v4l2device test base class
> + */
> +#ifndef __LIBCAMERA_V4L2_DEVICE_TEST_H_
> +#define __LIBCAMERA_V4L2_DEVICE_TEST_H_
> +
> +#include "test.h"
> +#include "v4l2_device.h"
> +
> +using namespace libcamera;
> +
> +class V4L2DeviceTest : public Test
> +{
> +public:
> + V4L2DeviceTest() : dev_(nullptr) { };
> +
> +protected:
> + int init();
> + void cleanup();
> +
> + V4L2Device *dev_;
> +};
> +
> +#endif /* __LIBCAMERA_V4L2_DEVICE_TEST_H_ */
> --
> 2.17.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list