test: skip tests when missing requirements

Let's mark as skipped the tests when they are missing some requirements
like a number of used cores or specific hardware availability, like
compress, crypto or eventdev devices.

Signed-off-by: David Marchand <david.marchand@redhat.com>
This commit is contained in:
David Marchand 2019-06-15 08:42:30 +02:00 committed by Thomas Monjalon
parent ce33e2eaff
commit e0f4a0ed42
19 changed files with 90 additions and 64 deletions

View File

@ -208,14 +208,16 @@ unit_test_suite_runner(struct unit_test_suite *suite)
printf(" + Test Suite : %s\n", suite->suite_name);
}
if (suite->setup)
if (suite->setup() != 0) {
if (suite->setup) {
test_success = suite->setup();
if (test_success != 0) {
/*
* setup failed, so count all enabled tests and mark
* them as failed
* setup did not pass, so count all enabled tests and
* mark them as failed/skipped
*/
while (suite->unit_test_cases[total].testcase) {
if (!suite->unit_test_cases[total].enabled)
if (!suite->unit_test_cases[total].enabled ||
test_success == TEST_SKIPPED)
skipped++;
else
failed++;
@ -223,6 +225,7 @@ unit_test_suite_runner(struct unit_test_suite *suite)
}
goto suite_summary;
}
}
printf(" + ------------------------------------------------------- +\n");
@ -246,6 +249,8 @@ unit_test_suite_runner(struct unit_test_suite *suite)
test_success = suite->unit_test_cases[total].testcase();
if (test_success == TEST_SUCCESS)
succeeded++;
else if (test_success == TEST_SKIPPED)
skipped++;
else if (test_success == -ENOTSUP)
unsupported++;
else
@ -262,6 +267,8 @@ unit_test_suite_runner(struct unit_test_suite *suite)
if (test_success == TEST_SUCCESS)
status = "succeeded";
else if (test_success == TEST_SKIPPED)
status = "skipped";
else if (test_success == -ENOTSUP)
status = "unsupported";
else
@ -293,7 +300,8 @@ suite_summary:
last_test_result = failed;
if (failed)
return -1;
return 0;
return TEST_FAILED;
if (total == skipped)
return TEST_SKIPPED;
return TEST_SUCCESS;
}

View File

@ -134,8 +134,8 @@ testsuite_setup(void)
unsigned int i;
if (rte_compressdev_count() == 0) {
RTE_LOG(ERR, USER1, "Need at least one compress device\n");
return TEST_FAILED;
RTE_LOG(WARNING, USER1, "Need at least one compress device\n");
return TEST_SKIPPED;
}
RTE_LOG(NOTICE, USER1, "Running tests on device %s\n",

View File

@ -408,8 +408,8 @@ testsuite_setup(void)
nb_devs = rte_cryptodev_count();
if (nb_devs < 1) {
RTE_LOG(ERR, USER1, "No crypto devices found?\n");
return TEST_FAILED;
RTE_LOG(WARNING, USER1, "No crypto devices found?\n");
return TEST_SKIPPED;
}
/* Create list of valid crypto devs */

View File

@ -594,8 +594,8 @@ test_distributor(void)
int i;
if (rte_lcore_count() < 2) {
printf("ERROR: not enough cores to test distributor\n");
return -1;
printf("Not enough cores for distributor_autotest, expecting at least 2\n");
return TEST_SKIPPED;
}
if (db == NULL) {

View File

@ -208,8 +208,8 @@ test_distributor_perf(void)
static struct rte_mempool *p;
if (rte_lcore_count() < 2) {
printf("ERROR: not enough cores to test distributor\n");
return -1;
printf("Not enough cores for distributor_perf_autotest, expecting at least 2\n");
return TEST_SKIPPED;
}
/* first time how long it takes to round-trip a cache line */

View File

@ -158,8 +158,9 @@ testsuite_setup(void)
}
if (rte_lcore_count() < required_lcore_count) {
printf("%d lcores needed to run tests", required_lcore_count);
return TEST_FAILED;
printf("Not enough cores for event_timer_adapter_test, expecting at least %u\n",
required_lcore_count);
return TEST_SKIPPED;
}
/* Assign lcores for various tasks */

View File

@ -997,6 +997,8 @@ static int
test_eventdev_selftest_impl(const char *pmd, const char *opts)
{
rte_vdev_init(pmd, opts);
if (rte_event_dev_get_dev_id(pmd) == -ENODEV)
return TEST_SKIPPED;
return rte_event_dev_selftest(rte_event_dev_get_dev_id(pmd));
}

View File

@ -473,9 +473,9 @@ test_func_reentrancy(void)
uint32_t case_id;
struct test_case *pt_case = NULL;
if (rte_lcore_count() <= 1) {
printf("Not enough lcore for testing\n");
return -1;
if (rte_lcore_count() < 2) {
printf("Not enough cores for func_reentrancy_autotest, expecting at least 2\n");
return TEST_SKIPPED;
}
else if (rte_lcore_count() > MAX_LCORES)
printf("Too many lcores, some cores will be disabled\n");

View File

@ -260,12 +260,11 @@ err1:
static int
test_hash_multiwriter_main(void)
{
if (rte_lcore_count() == 1) {
printf("More than one lcore is required to do multiwriter test\n");
return 0;
if (rte_lcore_count() < 2) {
printf("Not enough cores for distributor_autotest, expecting at least 2\n");
return TEST_SKIPPED;
}
setlocale(LC_NUMERIC, "");

View File

@ -618,10 +618,9 @@ test_hash_readwrite_main(void)
int use_htm, use_ext, reader_faster;
unsigned int i = 0, core_id = 0;
if (rte_lcore_count() <= 2) {
printf("More than two lcores are required "
"to do read write test\n");
return -1;
if (rte_lcore_count() < 3) {
printf("Not enough cores for hash_readwrite_autotest, expecting at least 3\n");
return TEST_SKIPPED;
}
RTE_LCORE_FOREACH_SLAVE(core_id) {

View File

@ -1254,10 +1254,10 @@ test_hash_readwrite_lf_main(void)
int htm;
int use_jhash = 0;
int ext_bkt = 0;
if (rte_lcore_count() == 1) {
printf("More than one lcore is required "
"to do read write lock-free concurrency test\n");
return -1;
if (rte_lcore_count() < 2) {
printf("Not enough cores for hash_readwrite_lf_autotest, expecting at least 2\n");
return TEST_SKIPPED;
}
setlocale(LC_NUMERIC, "");

View File

@ -296,8 +296,8 @@ testsuite_setup(void)
nb_devs = rte_cryptodev_count();
if (nb_devs < 1) {
RTE_LOG(ERR, USER1, "No crypto devices found?\n");
return TEST_FAILED;
RTE_LOG(WARNING, USER1, "No crypto devices found?\n");
return TEST_SKIPPED;
}
/* Find first valid crypto device */

View File

@ -753,18 +753,17 @@ static int
test_refcnt_mbuf(void)
{
#ifdef RTE_MBUF_REFCNT_ATOMIC
unsigned lnum, master, slave, tref;
unsigned int master, slave, tref;
int ret = -1;
struct rte_mempool *refcnt_pool = NULL;
struct rte_ring *refcnt_mbuf_ring = NULL;
if ((lnum = rte_lcore_count()) == 1) {
printf("skipping %s, number of lcores: %u is not enough\n",
__func__, lnum);
return 0;
if (rte_lcore_count() < 2) {
printf("Not enough cores for test_refcnt_mbuf, expecting at least 2\n");
return TEST_SKIPPED;
}
printf("starting %s, at %u lcores\n", __func__, lnum);
printf("starting %s, at %u lcores\n", __func__, rte_lcore_count());
/* create refcnt pool & ring if they don't exist */
@ -1206,7 +1205,7 @@ test_mbuf(void)
goto err;
}
if (test_refcnt_mbuf()<0){
if (test_refcnt_mbuf() < 0) {
printf("test_refcnt_mbuf() failed \n");
goto err;
}

View File

@ -978,17 +978,17 @@ test_rcu_qsbr_main(void)
{
uint16_t core_id;
if (rte_lcore_count() < 5) {
printf("Not enough cores for rcu_qsbr_autotest, expecting at least 5\n");
return TEST_SKIPPED;
}
num_cores = 0;
RTE_LCORE_FOREACH_SLAVE(core_id) {
enabled_core_ids[num_cores] = core_id;
num_cores++;
}
if (num_cores < 4) {
printf("Test failed! Need 4 or more cores\n");
goto test_fail;
}
/* Error-checking test cases */
if (test_rcu_qsbr_get_memsize() < 0)
goto test_fail;

View File

@ -606,6 +606,11 @@ test_rcu_qsbr_main(void)
{
uint16_t core_id;
if (rte_lcore_count() < 3) {
printf("Not enough cores for rcu_qsbr_perf_autotest, expecting at least 3\n");
return TEST_SKIPPED;
}
rte_atomic64_init(&updates);
rte_atomic64_init(&update_cycles);
rte_atomic64_init(&checks);
@ -618,11 +623,6 @@ test_rcu_qsbr_main(void)
}
printf("Number of cores provided = %d\n", num_cores);
if (num_cores < 2) {
printf("Test failed! Need 2 or more cores\n");
goto test_fail;
}
printf("Perf test with all reader threads registered\n");
printf("--------------------------------------------\n");
all_registered = 1;

View File

@ -502,6 +502,10 @@ service_lcore_running_check(void)
static int
service_lcore_add_del(void)
{
if (!rte_lcore_is_enabled(0) || !rte_lcore_is_enabled(1) ||
!rte_lcore_is_enabled(2) || !rte_lcore_is_enabled(3))
return TEST_SKIPPED;
/* check initial count */
TEST_ASSERT_EQUAL(0, rte_service_lcore_count(),
"Service lcore count has value before adding a lcore");
@ -669,6 +673,11 @@ static int
service_mt_safe_poll(void)
{
int mt_safe = 1;
if (!rte_lcore_is_enabled(0) || !rte_lcore_is_enabled(1) ||
!rte_lcore_is_enabled(2))
return TEST_SKIPPED;
TEST_ASSERT_EQUAL(1, service_threaded_test(mt_safe),
"Error: MT Safe service not run by two cores concurrently");
return TEST_SUCCESS;
@ -681,6 +690,11 @@ static int
service_mt_unsafe_poll(void)
{
int mt_safe = 0;
if (!rte_lcore_is_enabled(0) || !rte_lcore_is_enabled(1) ||
!rte_lcore_is_enabled(2))
return TEST_SKIPPED;
TEST_ASSERT_EQUAL(1, service_threaded_test(mt_safe),
"Error: NON MT Safe service run by two cores concurrently");
return TEST_SUCCESS;

View File

@ -336,12 +336,14 @@ test_stack_multithreaded(uint32_t flags)
struct rte_stack *s;
rte_atomic64_t size;
if (rte_lcore_count() < 2) {
printf("Not enough cores for test_stack_multithreaded, expecting at least 2\n");
return TEST_SKIPPED;
}
printf("[%s():%u] Running with %u lcores\n",
__func__, __LINE__, rte_lcore_count());
if (rte_lcore_count() < 2)
return 0;
args = rte_malloc(NULL, sizeof(struct test_args) * RTE_MAX_LCORE, 0);
if (args == NULL) {
printf("[%s():%u] failed to malloc %zu bytes\n",

View File

@ -538,17 +538,17 @@ test_timer(void)
uint64_t cur_time;
uint64_t hz;
if (rte_lcore_count() < 2) {
printf("Not enough cores for timer_autotest, expecting at least 2\n");
return TEST_SKIPPED;
}
/* sanity check our timer sources and timer config values */
if (timer_sanity_check() < 0) {
printf("Timer sanity checks failed\n");
return TEST_FAILED;
}
if (rte_lcore_count() < 2) {
printf("not enough lcores for this test\n");
return TEST_FAILED;
}
/* init timer */
for (i=0; i<NB_TIMER; i++) {
memset(&mytiminfo[i], 0, sizeof(struct mytimerinfo));

View File

@ -118,16 +118,18 @@ test_timer_secondary(void)
int ret;
if (proc_type == RTE_PROC_PRIMARY) {
if (rte_lcore_count() < NUM_LCORES_NEEDED) {
printf("Not enough cores for test_timer_secondary, expecting at least %u\n",
NUM_LCORES_NEEDED);
return TEST_SKIPPED;
}
mz = rte_memzone_reserve(TEST_INFO_MZ_NAME, sizeof(*test_info),
SOCKET_ID_ANY, 0);
test_info = mz->addr;
TEST_ASSERT_NOT_NULL(test_info, "Couldn't allocate memory for "
"test data");
TEST_ASSERT(rte_lcore_count() >= NUM_LCORES_NEEDED,
"at least %d lcores needed to run tests",
NUM_LCORES_NEEDED);
test_info->tim_mempool = rte_mempool_create("test_timer_mp",
NUM_TIMERS, sizeof(struct rte_timer), 0, 0,
NULL, NULL, NULL, NULL, rte_socket_id(), 0);