summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/core/decorator/oetimeout.py
blob: df90d1c7987497b8a262cfcf337394968763634d (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
#
# Copyright (C) 2016 Intel Corporation
#
# SPDX-License-Identifier: MIT
#

import signal
from . import OETestDecorator, registerDecorator
from oeqa.core.exception import OEQATimeoutError

@registerDecorator
class OETimeout(OETestDecorator):
    attrs = ('oetimeout',)

    def setUpDecorator(self):
        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)

    def tearDownDecorator(self):
        signal.alarm(0)
        signal.signal(signal.SIGALRM, self.alarmSignal)
        self.logger.debug("Removed SIGALRM handler")