[gnome-continuous-yocto/gnomeostree-3.28-rocko: 6049/8267] oeqa/core/decorator/oetimeout: Add support for OEQA threaded mode
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-continuous-yocto/gnomeostree-3.28-rocko: 6049/8267] oeqa/core/decorator/oetimeout: Add support for OEQA threaded mode
- Date: Sun, 17 Dec 2017 04:17:51 +0000 (UTC)
commit d3d4ba902dee8b19fa1054330cffdf73f9b81fe7
Author: Aníbal Limón <anibal limon linux intel com>
Date: Fri May 26 15:37:40 2017 -0500
oeqa/core/decorator/oetimeout: Add support for OEQA threaded mode
In python signals are only allowed to delivery into the main thread,
to support the threading mode test if the runner is threaded and
use threading.Timer instead.
There are some considerations like SIGALRM interrupts the execution
after N seconds but the Timer only starts a Thread to notice the
timeout and the exception will be raised when the test run ends.
[YOCTO #11450]
(From OE-Core rev: 8ab201612e22493dc2509ba339a8f07ade611a54)
Signed-off-by: Aníbal Limón <anibal limon linux intel com>
Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>
meta/lib/oeqa/core/decorator/oetimeout.py | 40 +++++++++++++++++++++-------
1 files changed, 30 insertions(+), 10 deletions(-)
---
diff --git a/meta/lib/oeqa/core/decorator/oetimeout.py b/meta/lib/oeqa/core/decorator/oetimeout.py
index a247583..f85e7d9 100644
--- a/meta/lib/oeqa/core/decorator/oetimeout.py
+++ b/meta/lib/oeqa/core/decorator/oetimeout.py
@@ -1,8 +1,12 @@
# Copyright (C) 2016 Intel Corporation
# Released under the MIT license (see COPYING.MIT)
-import signal
from . import OETestDecorator, registerDecorator
+
+import signal
+from threading import Timer
+
+from oeqa.core.threaded import OETestRunnerThreaded
from oeqa.core.exception import OEQATimeoutError
@registerDecorator
@@ -10,16 +14,32 @@ class OETimeout(OETestDecorator):
attrs = ('oetimeout',)
def setUpDecorator(self):
- timeout = self.oetimeout
- def _timeoutHandler(signum, frame):
- raise OEQATimeoutError("Timed out after %s "
+ self.logger.debug("Setting up a %d second(s) timeout" % self.oetimeout)
+
+ if isinstance(self.case.tc.runner, OETestRunnerThreaded):
+ self.timeouted = False
+ def _timeoutHandler():
+ self.timeouted = True
+
+ self.timer = Timer(self.oetimeout, _timeoutHandler)
+ self.timer.start()
+ else:
+ timeout = self.oetimeout
+ def _timeoutHandler(signum, frame):
+ raise OEQATimeoutError("Timed out after %s "
"seconds of execution" % timeout)
- self.logger.debug("Setting up a %d second(s) timeout" % self.oetimeout)
- self.alarmSignal = signal.signal(signal.SIGALRM, _timeoutHandler)
- signal.alarm(self.oetimeout)
+ self.alarmSignal = signal.signal(signal.SIGALRM, _timeoutHandler)
+ signal.alarm(self.oetimeout)
def tearDownDecorator(self):
- signal.alarm(0)
- signal.signal(signal.SIGALRM, self.alarmSignal)
- self.logger.debug("Removed SIGALRM handler")
+ if isinstance(self.case.tc.runner, OETestRunnerThreaded):
+ self.timer.cancel()
+ self.logger.debug("Removed Timer handler")
+ if self.timeouted:
+ raise OEQATimeoutError("Timed out after %s "
+ "seconds of execution" % self.oetimeout)
+ else:
+ signal.alarm(0)
+ signal.signal(signal.SIGALRM, self.alarmSignal)
+ self.logger.debug("Removed SIGALRM handler")
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]