xref: /dpdk/buildtools/get-test-suites.py (revision 39846d56c48ba9a5da23f4a8af40cd46b47e9367)
1#! /usr/bin/env python3
2# SPDX-License-Identifier: BSD-3-Clause
3# Copyright(c) 2023 Intel Corporation
4
5import sys
6import re
7
8input_list = sys.argv[1:]
9test_def_regex = re.compile("REGISTER_([A-Z]+)_TEST\s*\(\s*([a-z0-9_]+)")
10test_suites = {}
11# track tests not in any test suite.
12non_suite_regex = re.compile("REGISTER_TEST_COMMAND\s*\(\s*([a-z0-9_]+)")
13non_suite_tests = []
14
15def get_fast_test_params(test_name, ln):
16    "Extract the extra fast-test parameters from the line"
17    (_, rest_of_line) = ln.split(test_name, 1)
18    (_, nohuge, asan, _func) = rest_of_line.split(',', 3)
19    return f":{nohuge.strip().lower()}:{asan.strip().lower()}"
20
21for fname in input_list:
22    with open(fname, "r", encoding="utf-8") as f:
23        contents = [ln.strip() for ln in f.readlines()]
24        test_lines = [ln for ln in contents if test_def_regex.match(ln)]
25        non_suite_tests.extend([non_suite_regex.match(ln).group(1)
26                for ln in contents if non_suite_regex.match(ln)])
27    for ln in test_lines:
28        (test_suite, test_name) = test_def_regex.match(ln).group(1, 2)
29        suite_name = f"{test_suite.lower()}-tests"
30        if suite_name in test_suites:
31            test_suites[suite_name].append(test_name)
32        else:
33            test_suites[suite_name] = [test_name]
34        if suite_name == "fast-tests":
35            test_suites["fast-tests"][-1] += get_fast_test_params(test_name, ln)
36
37for suite in test_suites.keys():
38    print(f"{suite}={','.join(test_suites[suite])}")
39print(f"non_suite_tests={','.join(non_suite_tests)}")
40