Skip to content

Commit 24ee9bb

Browse files
authored
Merge pull request #166 from CamilaAlvarez/feat/test-filter
Allow wildcards in filter file
2 parents 23c4918 + 5bdccd3 commit 24ee9bb

2 files changed

Lines changed: 25 additions & 6 deletions

File tree

docs/results.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ kci-dev results builds --giturl 'https://git.kernel.org/pub/scm/linux/kernel/git
201201
## --filter
202202

203203
Pass a YAML filter file to customize results. Only supports hardware and test name filtering at the moment.
204+
You can use wildcards (`*`) in both `hardware` and `test`.
204205
See filter yaml example below:
205206
(available for subcommands `boots` and `tests`)
206207

@@ -212,6 +213,7 @@ hardware:
212213
test:
213214
- kselftest.dt
214215
- kselftest.iommu
216+
- kunit.*
215217
```
216218
217219
Example:

kcidev/subcommands/results/parser.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import gzip
22
import json
3+
import re
34

45
import requests
56
import yaml
@@ -224,29 +225,45 @@ def filter_out_by_hardware(test, filter_data):
224225
if "hardware" not in filter_data:
225226
return False
226227

227-
hardware_list = filter_data["hardware"]
228-
if test["environment_misc"]["platform"] in hardware_list:
228+
hardware_list_re = re.compile(filter_data["hardware"])
229+
if hardware_list_re.match(test["environment_misc"]["platform"]):
229230
return False
230231

231232
if test["environment_compatible"]:
232233
for compatible in test["environment_compatible"]:
233-
if compatible in hardware_list:
234+
if hardware_list_re.match(compatible):
234235
return False
235236

236237
return True
237238

238239

239240
def filter_out_by_test(test, filter_data):
240241
# Check if the test name is in the list
241-
test_list = filter_data["test"]
242-
if test["path"] in test_list:
242+
test_list_re = re.compile(filter_data["test"])
243+
if test_list_re.match(test["path"]):
243244
return False
244245

245246
return True
246247

247248

248-
def cmd_tests(data, id, download_logs, status_filter, filter, count, use_json):
249+
def filter_array2regex(filter_array):
250+
return f"^({'|'.join(filter_array)})$".replace(".", r"\.").replace("*", ".*")
251+
252+
253+
def parse_filter_file(filter):
249254
filter_data = yaml.safe_load(filter) if filter else None
255+
if filter_data is None:
256+
return None
257+
parsed_filter = {}
258+
if "hardware" in filter_data:
259+
parsed_filter["hardware"] = filter_array2regex(filter_data["hardware"])
260+
if "test" in filter_data:
261+
parsed_filter["test"] = filter_array2regex(filter_data["test"])
262+
return parsed_filter
263+
264+
265+
def cmd_tests(data, id, download_logs, status_filter, filter, count, use_json):
266+
filter_data = parse_filter_file(filter)
250267
filtered_tests = 0
251268
tests = []
252269
for test in data:

0 commit comments

Comments
 (0)