[libcamera-devel] [PATCH 2/2] test: threads: Add wait() timeout test
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Jan 23 11:19:23 CET 2020
Hi Laurent
On 23/01/2020 02:55, Laurent Pinchart wrote:
> Add a test case to wait with a timeout, testing both a too short and a
> long enough duration.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Some discussion below, but this is fine stand-alone anyway.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> test/threads.cpp | 33 ++++++++++++++++++++++++++-------
> 1 file changed, 26 insertions(+), 7 deletions(-)
>
> diff --git a/test/threads.cpp b/test/threads.cpp
> index 9a2d39dfd106..fc4b07cc6428 100644
> --- a/test/threads.cpp
> +++ b/test/threads.cpp
> @@ -15,24 +15,22 @@
> using namespace std;
> using namespace libcamera;
>
> -class InstrumentedThread : public Thread
> +class DelayThread : public Thread
> {
> public:
> - InstrumentedThread(unsigned int iterations)
> - : iterations_(iterations)
> + DelayThread(chrono::steady_clock::duration duration)
> + : duration_(duration)
> {
> }
>
> protected:
> void run()
> {
> - for (unsigned int i = 0; i < iterations_; ++i) {
> - this_thread::sleep_for(chrono::milliseconds(50));
> - }
> + this_thread::sleep_for(duration_);
> }
>
> private:
> - unsigned int iterations_;
> + chrono::steady_clock::duration duration_;
> };
>
> class ThreadTest : public Test
> @@ -82,6 +80,27 @@ protected:
>
> delete thread;
>
> + /* Test waiting for completion with a timeout. */
> + thread = new DelayThread(chrono::milliseconds(500));
> + thread->start();
> + thread->exit(0);
> +
> + bool timeout = thread->wait(chrono::milliseconds(100));
> +
> + if (!timeout) {
> + cout << "Waiting for thread didn't time out" << endl;
> + return TestFail;
> + }
> +
> + timeout = thread->wait(chrono::milliseconds(1000));
> +
> + if (timeout) {
> + cout << "Waiting for thread timed out" << endl;
> + return TestFail;
> + }
> +
> + delete thread;
> +
How about a test for waiting on a thread that isn't running? (Perhaps
put in an thread->wait(utils::duration::max()); after we know the thread
has already stopped here ?
What happens if the wait receives a signal while it is waiting?
> return TestPass;
> }
>
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list