[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