[libcamera-devel] [PATCH 2/2] test: threads: Add wait() timeout test
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jan 23 14:10:49 CET 2020
Hi Kieran,
On Thu, Jan 23, 2020 at 10:19:23AM +0000, Kieran Bingham wrote:
> 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 ?
That's a good idea. I'll add it as a separate patch.
> What happens if the wait receives a signal while it is waiting?
As in a POSIX signal ? As far as I can tell, nothing.
> > return TestPass;
> > }
> >
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list