report-xfstests.py: Read compressed results

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
Anna Schumaker 2022-02-16 13:57:35 -05:00
parent 9bb097aae4
commit ee6e9c3cf8
3 changed files with 40 additions and 33 deletions

View File

@ -46,7 +46,7 @@ class TestViewer(Gtk.Box):
def set_test_result(self, file):
current = self.stack.clear()
self.viewer.clear()
if file and file.get_is_test_result():
if file and file.is_file():
results = testresults.TestResults(file.path)
self.stack.show_properties(results, current)
self.viewer.show_results(results)

View File

@ -10,13 +10,14 @@ class Path(GObject.GObject):
def __init__(self, path):
GObject.GObject.__init__(self)
self.path = path
self.is_file = self.path.is_file
def __lt__(self, rhs): return self.path < rhs.path
def get_is_test_result(self):
return False not in [ f.is_file() for f in self.path.iterdir() ]
def get_name(self): return self.path.name
def get_name(self):
name = self.path.name
return name.split(".")[0] if self.is_file() else name
def get_model(self):
if not self.get_is_test_result():
if self.path.is_dir():
return DirectoryModel(self.path)
@ -73,7 +74,7 @@ class DirectoryWindow(Gtk.ScrolledWindow):
expander = listitem.get_child()
expander.set_list_row(treerow)
expander.get_child().set_text(filepath.get_name())
listitem.set_selectable(filepath.get_is_test_result())
listitem.set_selectable(filepath.is_file())
def on_unbind(self, factory, listitem):
expander = listitem.get_child()

View File

@ -2,6 +2,8 @@
from gi.repository import GObject
from gi.repository import Gtk
import html
import pathlib
import tarfile
import xml.etree.ElementTree
class PassingTest:
@ -44,39 +46,43 @@ class TestCase(GObject.GObject):
class TestResults:
def __init__(self, testdir):
def __init__(self, testtar):
self.versions = [ ]
self.tests = dict()
self.properties = dict()
self.skipped = set()
for file in sorted(testdir.iterdir()):
self.versions.append(file.stem)
passed = 0
with tarfile.open(testtar, "r:*") as tf:
for member in [ m for m in tf.getmembers() if m.isfile() ]:
self.read_file(member.name, tf.extractfile(member))
self.versions.sort()
root = xml.etree.ElementTree.parse(file).getroot()
for prop in root.attrib.keys():
self.set_property(prop, file.stem, root.attrib[prop])
def read_file(self, name, file):
root = xml.etree.ElementTree.parse(file).getroot()
self.versions.append(pathlib.Path(name).stem)
passed = 0
for elm in root:
if elm.tag == "properties":
for prop in elm:
self.set_property(prop.attrib["name"], file.stem,
prop.attrib["value"])
elif elm.tag == "testcase":
if len(elm) == 0:
result = PassingTest(elm)
passed += 1
elif elm[0].tag == "skipped":
result = SkippedTest(elm)
self.skipped.add(result.message)
elif elm[0].tag == "failure":
result = FailedTest(elm)
self.add_testcase(elm.attrib["name"], file.stem, result)
self.set_property("passed", file.stem, str(passed))
for prop in root.attrib.keys():
self.set_property(prop, root.attrib[prop])
def set_property(self, name, vers, value):
self.properties.setdefault(vers, dict())[name.upper()] = value
for elm in root:
if elm.tag == "properties":
for prop in elm:
self.set_property(prop.attrib["name"], prop.attrib["value"])
elif elm.tag == "testcase":
if len(elm) == 0:
result = PassingTest(elm)
passed += 1
elif elm[0].tag == "skipped":
result = SkippedTest(elm)
self.skipped.add(result.message)
elif elm[0].tag == "failure":
result = FailedTest(elm)
self.add_testcase(elm.attrib["name"], result)
self.set_property("passed", str(passed))
def add_testcase(self, name, vers, result):
self.tests.setdefault(name, TestCase(name))[vers] = result
def set_property(self, name, value):
self.properties.setdefault(self.versions[-1], dict())[name.upper()] = value
def add_testcase(self, name, result):
self.tests.setdefault(name, TestCase(name))[self.versions[-1]] = result