mtest: convert jsonlogfile to TestLogger

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
pull/8001/head
Paolo Bonzini 4 years ago
parent fb02b5e858
commit 119a928f9f
  1. 47
      mesonbuild/mtest.py

@ -368,6 +368,31 @@ class TestLogger:
pass
class TestFileLogger(TestLogger):
def __init__(self, filename: str, errors: str = 'replace') -> None:
self.file = open(filename, 'w', encoding='utf8', errors=errors)
def close(self) -> None:
if self.file:
self.file.close()
self.file = None
class JsonLogfileBuilder(TestFileLogger):
def log(self, harness: 'TestHarness', result: 'TestRun') -> None:
jresult = {'name': result.name,
'stdout': result.stdo,
'result': result.res.value,
'starttime': result.starttime,
'duration': result.duration,
'returncode': result.returncode,
'env': result.env,
'command': result.cmd} # type: T.Dict[str, T.Any]
if result.stde:
jresult['stderr'] = result.stde
self.file.write(json.dumps(jresult) + '\n')
class JunitBuilder(TestLogger):
"""Builder for Junit test results.
@ -635,19 +660,6 @@ def decode(stream: T.Union[None, bytes]) -> str:
except UnicodeDecodeError:
return stream.decode('iso-8859-1', errors='ignore')
def write_json_log(jsonlogfile: T.TextIO, result: TestRun) -> None:
jresult = {'name': result.name,
'stdout': result.stdo,
'result': result.res.value,
'starttime': result.starttime,
'duration': result.duration,
'returncode': result.returncode,
'env': result.env,
'command': result.cmd} # type: T.Dict[str, T.Any]
if result.stde:
jresult['stderr'] = result.stde
jsonlogfile.write(json.dumps(jresult) + '\n')
def run_with_mono(fname: str) -> bool:
return fname.endswith('.exe') and not (is_windows() or is_cygwin())
@ -924,7 +936,6 @@ class TestHarness:
self.is_run = False
self.logfilename = None # type: T.Optional[str]
self.logfile = None # type: T.Optional[T.TextIO]
self.jsonlogfile = None # type: T.Optional[T.TextIO]
self.loggers = [] # type: T.List[TestLogger]
if self.options.benchmark:
@ -944,7 +955,7 @@ class TestHarness:
self.close_logfiles()
def close_logfiles(self) -> None:
for f in ['logfile', 'jsonlogfile']:
for f in ['logfile']:
lfile = getattr(self, f)
if lfile:
lfile.close()
@ -1028,8 +1039,6 @@ class TestHarness:
if self.logfile:
self.logfile.write(self.format(result, False))
self.logfile.write("\n\n" + result.get_log() + "\n")
if self.jsonlogfile:
write_json_log(self.jsonlogfile, result)
for l in self.loggers:
l.log(self, result)
@ -1199,11 +1208,9 @@ class TestHarness:
logfile_base += '-' + namebase.replace(' ', '_')
self.loggers.append(JunitBuilder(logfile_base + '.junit.xml'))
self.loggers.append(JsonLogfileBuilder(logfile_base + '.json'))
self.logfilename = logfile_base + '.txt'
self.jsonlogfilename = logfile_base + '.json'
self.jsonlogfile = open(self.jsonlogfilename, 'w', encoding='utf-8', errors='replace')
self.logfile = open(self.logfilename, 'w', encoding='utf-8', errors='surrogateescape')
self.logfile.write('Log of Meson test suite run on {}\n\n'.format(datetime.datetime.now().isoformat()))

Loading…
Cancel
Save