blob: f85e7d9792370999a0687fc9cc16737e67ea83c3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# Copyright (C) 2016 Intel Corporation
# Released under the MIT license (see COPYING.MIT)
from . import OETestDecorator, registerDecorator
import signal
from threading import Timer
from oeqa.core.threaded import OETestRunnerThreaded
from oeqa.core.exception import OEQATimeoutError
@registerDecorator
class OETimeout(OETestDecorator):
attrs = ('oetimeout',)
def setUpDecorator(self):
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.alarmSignal = signal.signal(signal.SIGALRM, _timeoutHandler)
signal.alarm(self.oetimeout)
def tearDownDecorator(self):
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")
|