mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-22 01:59:26 +00:00
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.
71 lines
1.8 KiB
Python
Executable File
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()
|