[libcamera-devel] [PATCH v2 14/18] test: Add Timer thread move test
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Aug 17 17:21:00 CEST 2019
The test verifies correct behaviour of a running timer moved to a
different thread.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
---
test/meson.build | 1 +
test/timer-thread.cpp | 78 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+)
create mode 100644 test/timer-thread.cpp
diff --git a/test/meson.build b/test/meson.build
index f695ffd7be44..05265b7d4976 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -29,6 +29,7 @@ internal_tests = [
['object-invoke', 'object-invoke.cpp'],
['signal-threads', 'signal-threads.cpp'],
['threads', 'threads.cpp'],
+ ['timer-thread', 'timer-thread.cpp'],
]
foreach t : public_tests
diff --git a/test/timer-thread.cpp b/test/timer-thread.cpp
new file mode 100644
index 000000000000..b9373050068c
--- /dev/null
+++ b/test/timer-thread.cpp
@@ -0,0 +1,78 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * timer-thread.cpp - Threaded timer test
+ */
+
+#include <chrono>
+#include <iostream>
+
+#include <libcamera/timer.h>
+
+#include "test.h"
+#include "thread.h"
+
+using namespace std;
+using namespace libcamera;
+
+class TimeoutHandler : public Object
+{
+public:
+ TimeoutHandler()
+ : timeout_(false)
+ {
+ timer_.timeout.connect(this, &TimeoutHandler::timeoutHandler);
+ timer_.start(100);
+ }
+
+ bool timeout() const
+ {
+ return timeout_;
+ }
+
+ void moveToThread(Thread *thread)
+ {
+ Object::moveToThread(thread);
+ timer_.moveToThread(thread);
+ }
+
+private:
+ void timeoutHandler(Timer *timer)
+ {
+ timeout_ = true;
+ }
+
+ Timer timer_;
+ bool timeout_;
+};
+
+class TimerThreadTest : public Test
+{
+protected:
+ int run()
+ {
+ Thread thread;
+ thread.start();
+
+ TimeoutHandler timeout;
+ timeout.moveToThread(&thread);
+
+ this_thread::sleep_for(chrono::milliseconds(100));
+
+ /* Must stop thread before destroying timeout. */
+ thread.exit(0);
+ thread.wait();
+
+ if (!timeout.timeout()) {
+ cout << "Timer expiration test failed" << endl;
+ return TestFail;
+ }
+
+ return TestPass;
+ }
+
+private:
+};
+
+TEST_REGISTER(TimerThreadTest)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list