diff options
author | Nikita Kozlovskiy <[email protected]> | 2023-08-16 14:39:21 +0300 |
---|---|---|
committer | nkozlovskiy <[email protected]> | 2023-08-16 16:15:08 +0300 |
commit | 193c3861dc3bed68a1d0a394effdda630d0eb551 (patch) | |
tree | be90a52ef8b2b6eae122641e3c6b5d32748afca9 /.github/scripts/tests/mute_utils.py | |
parent | 8662d99f68311ede697154b9fb02e3fd9e9ad52e (diff) |
CI: group tests by test shard name
CI: group tests by test shard name
Pull Request resolved: #332
Diffstat (limited to '.github/scripts/tests/mute_utils.py')
-rw-r--r-- | .github/scripts/tests/mute_utils.py | 83 |
1 files changed, 35 insertions, 48 deletions
diff --git a/.github/scripts/tests/mute_utils.py b/.github/scripts/tests/mute_utils.py index 5d31137fab2..a096b407a63 100644 --- a/.github/scripts/tests/mute_utils.py +++ b/.github/scripts/tests/mute_utils.py @@ -1,63 +1,50 @@ import operator +import re import xml.etree.ElementTree as ET from junit_utils import add_junit_property -class MutedTestCheck: - def __init__(self, fn=None): - self.classes = set() - self.methods = set() +def pattern_to_re(pattern): + res = [] + for c in pattern: + if c == '*': + res.append('.*') + else: + res.append(re.escape(c)) - if fn: - self.populate(fn) + return f"(?:^{''.join(res)}$)" - def populate(self, fn): - with open(fn, "r") as fp: - for line in fp: - line = line.strip() - if not line: - continue - if "::" in line: - cls, method = line.split("::", maxsplit=1) - self.methods.add((cls, method)) - else: - self.classes.add(line) - - def __call__(self, cls, method=None): - if cls in self.classes: - return True - - if method and (cls, method) in self.methods: - return True - - return False - @property - def has_rules(self): - return len(self.classes) or len(self.methods) +class MuteTestCheck: + def __init__(self, fn): + self.regexps = [] - -class MutedShardCheck: - def __init__(self, fn=None): - self.muted = set() - if fn: - self.populate(fn) - - def populate(self, fn): - with open(fn, "rt") as fp: + with open(fn, 'r') as fp: for line in fp: - target = line.strip() - if target: - self.muted.add(target) - - def __call__(self, target): - return target in self.muted + line = line.strip() + pattern = pattern_to_re(line) + + try: + self.regexps.append(re.compile(pattern)) + except re.error: + print(f"Unable to compile regex {pattern!r}") + raise + + def __call__(self, fullname): + for r in self.regexps: + if r.match(fullname): + return True + return False -def mute_target(node, node_name="failure"): - failure = node.find(node_name) +def mute_target(node): + for node_name in ('failure', 'error'): + failure = node.find(node_name) + # print('failure', node_name, node, failure) - if failure is None: + if failure is not None: + break + else: return False msg = failure.get("message") @@ -117,7 +104,7 @@ def recalc_suite_info(suite): for case in suite.findall("testcase"): tests += 1 - elapsed += float(case.get("time")) + elapsed += float(case.get("time", 0)) if case.find("skipped"): skipped += 1 if case.find("failure"): |