oeqa/core/threaded: Add OEStreamLoggerThreaded class

The OEStreamLoggerThreaded overrides OEStreamLogger to redirect
the PyUnit output to a logger.

Instead of log every line when comes the OEStreamLoggerThreaded
will buffer the PyUnit output and write everything at end of every
suite execution to don't have mixed suite outputs.

[YOCTO #11450]

(From OE-Core rev: 87d3e5b70c52e5c7439afe4af5aa002522043e81)

Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Aníbal Limón
2017-05-26 15:37:34 -05:00
committed by Richard Purdie
parent c118f80f17
commit ce422c7008

View File

@@ -1,10 +1,13 @@
# Copyright (C) 2017 Intel Corporation
# Released under the MIT license (see COPYING.MIT)
import threading
import multiprocessing
from unittest.suite import TestSuite
from oeqa.core.loader import OETestLoader
from oeqa.core.runner import OEStreamLogger
class OETestLoaderThreaded(OETestLoader):
def __init__(self, tc, module_paths, modules, tests, modules_required,
@@ -89,3 +92,25 @@ class OETestLoaderThreaded(OETestLoader):
return suites
class OEStreamLoggerThreaded(OEStreamLogger):
_lock = threading.Lock()
buffers = {}
def write(self, msg):
tid = threading.get_ident()
if not tid in self.buffers:
self.buffers[tid] = ""
if msg:
self.buffers[tid] += msg
def finish(self):
tid = threading.get_ident()
self._lock.acquire()
self.logger.info('THREAD: %d' % tid)
self.logger.info('-' * 70)
for line in self.buffers[tid].split('\n'):
self.logger.info(line)
self._lock.release()