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 <david.marchand@6wind.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
This commit is contained in:
Thomas Monjalon 2016-07-13 18:41:12 +02:00
parent 26e09db6cb
commit d553c8f2b1
2 changed files with 10 additions and 14 deletions

View File

@ -99,18 +99,6 @@ def per_sockets(num):
"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,
},
]
},
{

View File

@ -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()