[libcamera-devel,v2,2/4] test: camera: Add setting of configuration test

Message ID 20190311022232.4759-3-niklas.soderlund@ragnatech.se
State Superseded
Headers show
Series
  • test: camera: Add basic tests for the camera
Related show

Commit Message

Niklas Söderlund March 11, 2019, 2:22 a.m. UTC
Try to set the default configuration, a modified valid configuration and
an invalid configuration.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
---
 test/camera/configuration_set.cpp | 90 +++++++++++++++++++++++++++++++
 test/camera/meson.build           |  1 +
 2 files changed, 91 insertions(+)
 create mode 100644 test/camera/configuration_set.cpp

Comments

Laurent Pinchart March 11, 2019, 8:54 a.m. UTC | #1
Hi Niklas,

Thank you for the patch.

On Mon, Mar 11, 2019 at 03:22:30AM +0100, Niklas Söderlund wrote:
> Try to set the default configuration, a modified valid configuration and
> an invalid configuration.
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
> ---
>  test/camera/configuration_set.cpp | 90 +++++++++++++++++++++++++++++++
>  test/camera/meson.build           |  1 +
>  2 files changed, 91 insertions(+)
>  create mode 100644 test/camera/configuration_set.cpp
> 
> diff --git a/test/camera/configuration_set.cpp b/test/camera/configuration_set.cpp
> new file mode 100644
> index 0000000000000000..cf0b96b7d1d6583c
> --- /dev/null
> +++ b/test/camera/configuration_set.cpp
> @@ -0,0 +1,90 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * libcamera Camera API tests
> + */
> +
> +#include <iostream>
> +
> +#include "camera_test.h"
> +
> +using namespace std;
> +
> +namespace {
> +
> +class ConfigurationSet : public CameraTest
> +{
> +protected:
> +	int run()
> +	{
> +		std::set<Stream *> streams = { *camera_->streams().begin() };
> +		std::map<Stream *, StreamConfiguration> conf =
> +			camera_->streamConfiguration(streams);
> +		StreamConfiguration *sconf = &conf.begin()->second;
> +
> +		if (!configurationValid(streams, conf)) {
> +			cout << "Reading default configuration" << endl;

"Failed to read ..." ? Same for the other messages.

> +			return TestFail;
> +		}
> +
> +		if (camera_->acquire()) {
> +			cout << "Acquiring the camera" << endl;
> +			return TestFail;
> +		}
> +
> +		/* Test that setting the default configuration works. */
> +		if (camera_->configureStreams(conf)) {
> +			cout << "Setting default configuration" << endl;
> +			return TestFail;
> +		}
> +
> +		/*
> +		 * Test that configuring the camera fails if it is not
> +		 * acquired, this will also test release and reacquiring
> +		 * of the camera.
> +		 */
> +		if (camera_->release()) {
> +			cout << "Releasing the camera" << endl;
> +			return TestFail;
> +		}
> +
> +		if (!camera_->configureStreams(conf)) {
> +			cout << "Setting configuration on a camera not acquired" << endl;

"... succeeded when it should have failed" ? (Or maybe something
shorter)

> +			return TestFail;
> +		}
> +
> +		if (camera_->acquire()) {
> +			cout << "Acquiring the camera" << endl;
> +			return TestFail;
> +		}
> +
> +		/*
> +		 * Test that modifying the default configuration works. Doubling
> +		 * the default configuration of the VIMC camera is known to
> +		 * work.
> +		 */
> +		sconf->width *= 2;
> +		sconf->height *= 2;
> +		if (camera_->configureStreams(conf)) {
> +			cout << "Setting modified configuration" << endl;
> +			return TestFail;
> +		}
> +
> +		/*
> +		 * Test that setting an invalid configuration fails.
> +		 */
> +		sconf->width = 0;
> +		sconf->height = 0;
> +		if (!camera_->configureStreams(conf)) {
> +			cout << "Setting invalid configuration" << endl;

"Invalid configuration incorrectly accepted" ?

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> +			return TestFail;
> +		}
> +
> +		return TestPass;
> +	}
> +};
> +
> +} /* namespace */
> +
> +TEST_REGISTER(ConfigurationSet);
> diff --git a/test/camera/meson.build b/test/camera/meson.build
> index 186ba211b9fde026..ed4837190ff6c52c 100644
> --- a/test/camera/meson.build
> +++ b/test/camera/meson.build
> @@ -2,6 +2,7 @@
>  # They are not alphabetically sorted.
>  camera_tests = [
>    [ 'configuration_default',  'configuration_default.cpp' ],
> +  [ 'configuration_set',      'configuration_set.cpp' ],
>  ]
>  
>  foreach t : camera_tests

Patch

diff --git a/test/camera/configuration_set.cpp b/test/camera/configuration_set.cpp
new file mode 100644
index 0000000000000000..cf0b96b7d1d6583c
--- /dev/null
+++ b/test/camera/configuration_set.cpp
@@ -0,0 +1,90 @@ 
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * libcamera Camera API tests
+ */
+
+#include <iostream>
+
+#include "camera_test.h"
+
+using namespace std;
+
+namespace {
+
+class ConfigurationSet : public CameraTest
+{
+protected:
+	int run()
+	{
+		std::set<Stream *> streams = { *camera_->streams().begin() };
+		std::map<Stream *, StreamConfiguration> conf =
+			camera_->streamConfiguration(streams);
+		StreamConfiguration *sconf = &conf.begin()->second;
+
+		if (!configurationValid(streams, conf)) {
+			cout << "Reading default configuration" << endl;
+			return TestFail;
+		}
+
+		if (camera_->acquire()) {
+			cout << "Acquiring the camera" << endl;
+			return TestFail;
+		}
+
+		/* Test that setting the default configuration works. */
+		if (camera_->configureStreams(conf)) {
+			cout << "Setting default configuration" << endl;
+			return TestFail;
+		}
+
+		/*
+		 * Test that configuring the camera fails if it is not
+		 * acquired, this will also test release and reacquiring
+		 * of the camera.
+		 */
+		if (camera_->release()) {
+			cout << "Releasing the camera" << endl;
+			return TestFail;
+		}
+
+		if (!camera_->configureStreams(conf)) {
+			cout << "Setting configuration on a camera not acquired" << endl;
+			return TestFail;
+		}
+
+		if (camera_->acquire()) {
+			cout << "Acquiring the camera" << endl;
+			return TestFail;
+		}
+
+		/*
+		 * Test that modifying the default configuration works. Doubling
+		 * the default configuration of the VIMC camera is known to
+		 * work.
+		 */
+		sconf->width *= 2;
+		sconf->height *= 2;
+		if (camera_->configureStreams(conf)) {
+			cout << "Setting modified configuration" << endl;
+			return TestFail;
+		}
+
+		/*
+		 * Test that setting an invalid configuration fails.
+		 */
+		sconf->width = 0;
+		sconf->height = 0;
+		if (!camera_->configureStreams(conf)) {
+			cout << "Setting invalid configuration" << endl;
+			return TestFail;
+		}
+
+		return TestPass;
+	}
+};
+
+} /* namespace */
+
+TEST_REGISTER(ConfigurationSet);
diff --git a/test/camera/meson.build b/test/camera/meson.build
index 186ba211b9fde026..ed4837190ff6c52c 100644
--- a/test/camera/meson.build
+++ b/test/camera/meson.build
@@ -2,6 +2,7 @@ 
 # They are not alphabetically sorted.
 camera_tests = [
   [ 'configuration_default',  'configuration_default.cpp' ],
+  [ 'configuration_set',      'configuration_set.cpp' ],
 ]
 
 foreach t : camera_tests