The fast-tests are special in that they have additional parameters associated with them. This requires script changes and meson.build changes to take account of these parameters.
Signed-off-by: Bruce Richardson <bruce.richard...@intel.com> --- app/test/suites/meson.build | 56 +++++++++++++++++-- buildtools/get-test-suites.py | 9 +++ .../has-hugepages.py | 0 buildtools/meson.build | 1 + 4 files changed, 61 insertions(+), 5 deletions(-) rename app/test/has_hugepage.py => buildtools/has-hugepages.py (100%) diff --git a/app/test/suites/meson.build b/app/test/suites/meson.build index 135620578c..720b43eb62 100644 --- a/app/test/suites/meson.build +++ b/app/test/suites/meson.build @@ -4,20 +4,24 @@ # some perf tests (eg: memcpy perf autotest)take very long # to complete, so timeout to 10 minutes timeout_seconds = 600 +timeout_seconds_fast = 10 + +test_no_huge_args = ['--no-huge', '-m', '2048'] +has_hugepage = run_command(has_hugepages_cmd, check: true).stdout().strip() != '0' +message('hugepage availability: @0@'.format(has_hugepage)) # process source files to determine the different unit test suites # - fast_tests # - perf_tests # - driver_tests -test_suites = run_command(get_test_suites_cmd, autotest_sources).stdout().strip().split() +test_suites = run_command(get_test_suites_cmd, autotest_sources, + check: true).stdout().strip().split() foreach suite:test_suites suite = suite.split('=') suite_name = suite[0] suite_tests = suite[1].split(',') - if suite_name == 'fast-tests' - # special fast-test handling here - - else + if suite_name != 'fast-tests' + # simple cases - tests without parameters or special handling foreach t: suite_tests test(t, dpdk_test, args: ['--', t], @@ -25,5 +29,47 @@ foreach suite:test_suites is_parallel: false, suite: suite_name) endforeach + else + # special fast-test handling here + foreach t: suite_tests + params = t.split(':') + test_name = params[0] + nohuge = params[1] == 'true' + asan = params[2] == 'true' + + test_args = [] + if nohuge + test_args += test_no_huge_args + elif not has_hugepage + continue #skip this tests + endif + if not asan and (get_option('b_sanitize') == 'address' + or get_option('b_sanitize') == 'address,undefined') + continue # skip this test + endif + + if (get_option('default_library') == 'shared' + and test_name == 'event_eth_tx_adapter_autotest') + test_args += ['-d', dpdk_drivers_build_dir] + endif + if is_linux + test_args += ['--file-prefix=@0@'.format(arg[0])] + endif + + test(test_name, dpdk_test, + args : test_args + ['--', test_name], + timeout : timeout_seconds_fast, + is_parallel : false, + suite : 'fast-tests') + if not is_windows and test_name == 'trace_autotest' + test_args += ['--trace=.*'] + test_args += ['--trace-dir=@0@'.format(meson.current_build_dir())] + test(test_name + '_with_traces', dpdk_test, + args : test_args + ['--', test_name], + timeout : timeout_seconds_fast, + is_parallel : false, + suite : 'fast-tests') + endif + endforeach endif endforeach diff --git a/buildtools/get-test-suites.py b/buildtools/get-test-suites.py index 43cde80970..95a9cad4c8 100644 --- a/buildtools/get-test-suites.py +++ b/buildtools/get-test-suites.py @@ -9,6 +9,13 @@ test_def_regex = re.compile("REGISTER_([A-Z]+)_TEST\s*\(\s*([a-z0-9_]+)") test_suites = {} +def get_fast_test_params(test_name, ln): + "Extract the extra fast-test parameters from the line" + #print(f"ln: {ln.rstrip()}, test_name: {test_name}, split: {ln.split(test_name, 1)}") + (_, rest_of_line) = ln.split(test_name, 1) + (_, nohuge, asan, _func) = rest_of_line.split(',', 3) + return f":{nohuge.strip().lower()}:{asan.strip().lower()}" + for fname in input_list: with open(fname) as f: contents = [ln for ln in f.readlines() if test_def_regex.match(ln.strip())] @@ -19,6 +26,8 @@ test_suites[suite_name].append(test_name) else: test_suites[suite_name] = [test_name] + if suite_name == "fast-tests": + test_suites["fast-tests"][-1] += get_fast_test_params(test_name, ln) for suite in test_suites.keys(): print(f"{suite}={','.join(test_suites[suite])}") diff --git a/app/test/has_hugepage.py b/buildtools/has-hugepages.py similarity index 100% rename from app/test/has_hugepage.py rename to buildtools/has-hugepages.py diff --git a/buildtools/meson.build b/buildtools/meson.build index 12e4b36165..ac5e4dcf08 100644 --- a/buildtools/meson.build +++ b/buildtools/meson.build @@ -19,6 +19,7 @@ sphinx_wrapper = py3 + files('call-sphinx-build.py') get_cpu_count_cmd = py3 + files('get-cpu-count.py') get_numa_count_cmd = py3 + files('get-numa-count.py') get_test_suites_cmd = py3 + files('get-test-suites.py') +has_hugepages_cmd = py3 + files('has-hugepages.py') binutils_avx512_check = (py3 + files('binutils-avx512-check.py') + [objdump] + cc.cmd_array()) -- 2.39.2