From d553c8f2b1a28bb24f15a42a3c1afdb03e586115 Mon Sep 17 00:00:00 2001 From: Thomas Monjalon Date: Wed, 13 Jul 2016 18:41:12 +0200 Subject: [PATCH] app/test: filter out unavailable tests Some tests can fail to run because they are not compiled. It has been more visible recently when the PCI test became disabled in the default configuration because of dependency on libarchive: PCI autotest: Fail [Not found] The autotest script catch them and do not count them as an error anymore: PCI autotest: Skipped [Not Available] The commands dump_ring and dump_mempool are removed from the autotest list because they are some internal commands but not some registered tests. Thus they cannot be parsed as available test commands. Suggested-by: David Marchand Signed-off-by: Thomas Monjalon --- app/test/autotest_data.py | 12 ------------ app/test/autotest_runner.py | 12 ++++++++++-- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/app/test/autotest_data.py b/app/test/autotest_data.py index 1e6b422c0b..c69705ed45 100644 --- a/app/test/autotest_data.py +++ b/app/test/autotest_data.py @@ -99,18 +99,6 @@ parallel_test_group_list = [ "Func" : default_autotest, "Report" : None, }, - { - "Name" : "Dump rings", - "Command" : "dump_ring", - "Func" : dump_autotest, - "Report" : None, - }, - { - "Name" : "Dump mempools", - "Command" : "dump_mempool", - "Func" : dump_autotest, - "Report" : None, - }, ] }, { diff --git a/app/test/autotest_runner.py b/app/test/autotest_runner.py index 291a8213f4..bd99e19e8c 100644 --- a/app/test/autotest_runner.py +++ b/app/test/autotest_runner.py @@ -33,7 +33,7 @@ # The main logic behind running autotests in parallel -import multiprocessing, sys, pexpect, time, os, StringIO, csv +import multiprocessing, subprocess, sys, pexpect, re, time, os, StringIO, csv # wait for prompt def wait_prompt(child): @@ -105,6 +105,11 @@ def run_test_group(cmdline, test_group): results.append((0, "Success", "Start %s" % test_group["Prefix"], time.time() - start_time, startuplog.getvalue(), None)) + # parse the binary for available test commands + binary = cmdline.split()[0] + symbols = subprocess.check_output(['nm', binary]).decode('utf-8') + avail_cmds = re.findall('test_register_(\w+)', symbols) + # run all tests in test group for test in test_group["Tests"]: @@ -124,7 +129,10 @@ def run_test_group(cmdline, test_group): print >>logfile, "\n%s %s\n" % ("-"*20, test["Name"]) # run test function associated with the test - result = test["Func"](child, test["Command"]) + if test["Command"] in avail_cmds: + result = test["Func"](child, test["Command"]) + else: + result = (0, "Skipped [Not Available]") # make a note when the test was finished end_time = time.time() -- 2.20.1