summaryrefslogtreecommitdiffstats
path: root/.github/scripts/tests/mute_utils.py
diff options
context:
space:
mode:
authorNikita Kozlovskiy <[email protected]>2023-08-16 14:39:21 +0300
committernkozlovskiy <[email protected]>2023-08-16 16:15:08 +0300
commit193c3861dc3bed68a1d0a394effdda630d0eb551 (patch)
treebe90a52ef8b2b6eae122641e3c6b5d32748afca9 /.github/scripts/tests/mute_utils.py
parent8662d99f68311ede697154b9fb02e3fd9e9ad52e (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.py83
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"):