1# Copyright (C) 2016 Intel Corporation 2# Released under the MIT license (see COPYING.MIT) 3 4import signal 5from . import OETestDecorator, registerDecorator 6from oeqa.core.exception import OEQATimeoutError 7 8@registerDecorator 9class OETimeout(OETestDecorator): 10 attrs = ('oetimeout',) 11 12 def setUpDecorator(self): 13 timeout = self.oetimeout 14 def _timeoutHandler(signum, frame): 15 raise OEQATimeoutError("Timed out after %s " 16 "seconds of execution" % timeout) 17 18 self.logger.debug("Setting up a %d second(s) timeout" % self.oetimeout) 19 self.alarmSignal = signal.signal(signal.SIGALRM, _timeoutHandler) 20 signal.alarm(self.oetimeout) 21 22 def tearDownDecorator(self): 23 signal.alarm(0) 24 signal.signal(signal.SIGALRM, self.alarmSignal) 25 self.logger.debug("Removed SIGALRM handler") 26