[libcamera-devel] [PATCH 4/6] test: Add Thread test cases
Niklas Söderlund
niklas.soderlund at ragnatech.se
Thu Jul 11 07:46:45 CEST 2019
Hi Laurent,
Thanks for your test.
On 2019-07-10 22:17:06 +0300, Laurent Pinchart wrote:
> The Thread test case verifies that
>
> - a Thread instance is created for the main thread
> - a new Thread can be created, started, and stopped
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> test/meson.build | 1 +
> test/threads.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 94 insertions(+)
> create mode 100644 test/threads.cpp
>
> diff --git a/test/meson.build b/test/meson.build
> index 41b54ffd358c..bd0e0d98f0e7 100644
> --- a/test/meson.build
> +++ b/test/meson.build
> @@ -21,6 +21,7 @@ public_tests = [
>
> internal_tests = [
> ['camera-sensor', 'camera-sensor.cpp'],
> + ['threads', 'threads.cpp'],
> ]
>
> foreach t : public_tests
> diff --git a/test/threads.cpp b/test/threads.cpp
> new file mode 100644
> index 000000000000..9a2d39dfd106
> --- /dev/null
> +++ b/test/threads.cpp
> @@ -0,0 +1,93 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * threads.cpp - Threads test
> + */
> +
> +#include <chrono>
I learnt something new today :-)
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> +#include <iostream>
> +#include <thread>
> +
> +#include "thread.h"
> +#include "test.h"
> +
> +using namespace std;
> +using namespace libcamera;
> +
> +class InstrumentedThread : public Thread
> +{
> +public:
> + InstrumentedThread(unsigned int iterations)
> + : iterations_(iterations)
> + {
> + }
> +
> +protected:
> + void run()
> + {
> + for (unsigned int i = 0; i < iterations_; ++i) {
> + this_thread::sleep_for(chrono::milliseconds(50));
> + }
> + }
> +
> +private:
> + unsigned int iterations_;
> +};
> +
> +class ThreadTest : public Test
> +{
> +protected:
> + int init()
> + {
> + return 0;
> + }
> +
> + int run()
> + {
> + /* Test Thread() retrieval for the main thread. */
> + Thread *thread = Thread::current();
> + if (!thread) {
> + cout << "Thread::current() failed to main thread"
> + << endl;
> + return TestFail;
> + }
> +
> + if (!thread->isRunning()) {
> + cout << "Main thread is not running" << endl;
> + return TestFail;
> + }
> +
> + /* Test starting the main thread, the test shall not crash. */
> + thread->start();
> +
> + /* Test the running state of a custom thread. */
> + thread = new Thread();
> + thread->start();
> +
> + if (!thread->isRunning()) {
> + cout << "Thread is not running after being started"
> + << endl;
> + return TestFail;
> + }
> +
> + thread->exit(0);
> + thread->wait();
> +
> + if (thread->isRunning()) {
> + cout << "Thread is still running after finishing"
> + << endl;
> + return TestFail;
> + }
> +
> + delete thread;
> +
> + return TestPass;
> + }
> +
> + void cleanup()
> + {
> + }
> +};
> +
> +TEST_REGISTER(ThreadTest)
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> 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