diff options
-rw-r--r-- | meta/lib/oeqa/oetest.py | 6 | ||||
-rw-r--r-- | meta/lib/oeqa/utils/decorators.py | 25 |
2 files changed, 31 insertions, 0 deletions
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py index 0fe68d4d52..a6f89b6a86 100644 --- a/meta/lib/oeqa/oetest.py +++ b/meta/lib/oeqa/oetest.py | |||
@@ -151,6 +151,12 @@ class oeRuntimeTest(oeTest): | |||
151 | elif (type(self.target).__name__ == "QemuTarget"): | 151 | elif (type(self.target).__name__ == "QemuTarget"): |
152 | self.assertTrue(self.target.check(), msg = "Qemu not running?") | 152 | self.assertTrue(self.target.check(), msg = "Qemu not running?") |
153 | 153 | ||
154 | self.setUpLocal() | ||
155 | |||
156 | # a setup method before tests but after the class instantiation | ||
157 | def setUpLocal(self): | ||
158 | pass | ||
159 | |||
154 | def tearDown(self): | 160 | def tearDown(self): |
155 | # If a test fails or there is an exception | 161 | # If a test fails or there is an exception |
156 | if not exc_info() == (None, None, None): | 162 | if not exc_info() == (None, None, None): |
diff --git a/meta/lib/oeqa/utils/decorators.py b/meta/lib/oeqa/utils/decorators.py index 162a88fb78..b6adcb1846 100644 --- a/meta/lib/oeqa/utils/decorators.py +++ b/meta/lib/oeqa/utils/decorators.py | |||
@@ -220,3 +220,28 @@ def getAllTags(obj): | |||
220 | ret = __gettags(obj) | 220 | ret = __gettags(obj) |
221 | ret.update(__gettags(tc_method)) | 221 | ret.update(__gettags(tc_method)) |
222 | return ret | 222 | return ret |
223 | |||
224 | def timeout_handler(seconds): | ||
225 | def decorator(fn): | ||
226 | if hasattr(signal, 'alarm'): | ||
227 | @wraps(fn) | ||
228 | def wrapped_f(self, *args, **kw): | ||
229 | current_frame = sys._getframe() | ||
230 | def raiseTimeOut(signal, frame): | ||
231 | if frame is not current_frame: | ||
232 | try: | ||
233 | self.target.restart() | ||
234 | raise TimeOut('%s seconds' % seconds) | ||
235 | except: | ||
236 | raise TimeOut('%s seconds' % seconds) | ||
237 | prev_handler = signal.signal(signal.SIGALRM, raiseTimeOut) | ||
238 | try: | ||
239 | signal.alarm(seconds) | ||
240 | return fn(self, *args, **kw) | ||
241 | finally: | ||
242 | signal.alarm(0) | ||
243 | signal.signal(signal.SIGALRM, prev_handler) | ||
244 | return wrapped_f | ||
245 | else: | ||
246 | return fn | ||
247 | return decorator | ||