2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-22 01:59:26 +00:00
bind/bin/tests/system/convert-junit-to-trs.py
Tom Krizek bec3dd10b3
Support older junit XML format in test result processing
When running `make check` on a platform which has older (but still
supported) pytest, e.g. 3.4.2 on EL8, the junit to trs conversion would
fail because the junit format has different structure. Make the junit
XML processing more lenient to support both the older and newer junit
XML formats.
2024-02-08 14:14:26 +01:00

71 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
#
# SPDX-License-Identifier: MPL-2.0
#
# Convert JUnit pytest output to automake .trs files
import argparse
import sys
from xml.etree import ElementTree
def junit_to_trs(junit_xml):
root = ElementTree.fromstring(junit_xml)
testcases = root.findall(".//testcase")
if len(testcases) < 1:
print(":test-result: ERROR convert-junit-to-trs.py")
return 99
has_fail = False
has_error = False
has_skipped = False
for testcase in testcases:
filename = f"{testcase.attrib['classname'].replace('.', '/')}.py"
name = f"{filename}::{testcase.attrib['name']}"
res = "PASS"
for node in testcase:
if node.tag == "failure":
res = "FAIL"
has_fail = True
elif node.tag == "error":
res = "ERROR"
has_error = True
elif node.tag == "skipped":
if node.attrib.get("type") == "pytest.xfail":
res = "XFAIL"
else:
res = "SKIP"
has_skipped = True
print(f":test-result: {res} {name}")
if has_error:
return 99
if has_fail:
return 1
if has_skipped:
return 77
return 0
def main():
parser = argparse.ArgumentParser(
description="Convert JUnit XML to Automake TRS and exit with "
"the appropriate Automake-compatible exit code."
)
parser.add_argument(
"junit_file",
type=argparse.FileType("r", encoding="utf-8"),
help="junit xml result file",
)
args = parser.parse_args()
junit_xml = args.junit_file.read()
sys.exit(junit_to_trs(junit_xml))
if __name__ == "__main__":
main()