[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