From e0f4a0ed4237e273b78728b7c7a3bf71d2d5218f Mon Sep 17 00:00:00 2001 From: David Marchand Date: Sat, 15 Jun 2019 08:42:30 +0200 Subject: [PATCH] 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 --- app/test/test.c | 24 ++++++++++++++++-------- app/test/test_compressdev.c | 4 ++-- app/test/test_cryptodev.c | 4 ++-- app/test/test_distributor.c | 4 ++-- app/test/test_distributor_perf.c | 4 ++-- app/test/test_event_timer_adapter.c | 5 +++-- app/test/test_eventdev.c | 2 ++ app/test/test_func_reentrancy.c | 6 +++--- app/test/test_hash_multiwriter.c | 7 +++---- app/test/test_hash_readwrite.c | 7 +++---- app/test/test_hash_readwrite_lf.c | 8 ++++---- app/test/test_ipsec.c | 4 ++-- app/test/test_mbuf.c | 13 ++++++------- app/test/test_rcu_qsbr.c | 10 +++++----- app/test/test_rcu_qsbr_perf.c | 10 +++++----- app/test/test_service_cores.c | 14 ++++++++++++++ app/test/test_stack.c | 8 +++++--- app/test/test_timer.c | 10 +++++----- app/test/test_timer_secondary.c | 10 ++++++---- 19 files changed, 90 insertions(+), 64 deletions(-) diff --git a/app/test/test.c b/app/test/test.c index ea1e98f2ec..194a92a398 100644 --- a/app/test/test.c +++ b/app/test/test.c @@ -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; } diff --git a/app/test/test_compressdev.c b/app/test/test_compressdev.c index 1b1983e219..cf78775f73 100644 --- a/app/test/test_compressdev.c +++ b/app/test/test_compressdev.c @@ -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", diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c index eca6d3db16..0509af7b6c 100644 --- a/app/test/test_cryptodev.c +++ b/app/test/test_cryptodev.c @@ -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 */ diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c index da3348fd1f..8084c07943 100644 --- a/app/test/test_distributor.c +++ b/app/test/test_distributor.c @@ -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) { diff --git a/app/test/test_distributor_perf.c b/app/test/test_distributor_perf.c index edf1998ab0..f6f1139492 100644 --- a/app/test/test_distributor_perf.c +++ b/app/test/test_distributor_perf.c @@ -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 */ diff --git a/app/test/test_event_timer_adapter.c b/app/test/test_event_timer_adapter.c index 742ca81818..ad3f4dcc20 100644 --- a/app/test/test_event_timer_adapter.c +++ b/app/test/test_event_timer_adapter.c @@ -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 */ diff --git a/app/test/test_eventdev.c b/app/test/test_eventdev.c index 00d73275c8..c745e997eb 100644 --- a/app/test/test_eventdev.c +++ b/app/test/test_eventdev.c @@ -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)); } diff --git a/app/test/test_func_reentrancy.c b/app/test/test_func_reentrancy.c index e27d1e020f..99ad902a24 100644 --- a/app/test/test_func_reentrancy.c +++ b/app/test/test_func_reentrancy.c @@ -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"); diff --git a/app/test/test_hash_multiwriter.c b/app/test/test_hash_multiwriter.c index 50018db56c..46ab45f82a 100644 --- a/app/test/test_hash_multiwriter.c +++ b/app/test/test_hash_multiwriter.c @@ -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, ""); diff --git a/app/test/test_hash_readwrite.c b/app/test/test_hash_readwrite.c index 480ae97d85..4376b099b3 100644 --- a/app/test/test_hash_readwrite.c +++ b/app/test/test_hash_readwrite.c @@ -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) { diff --git a/app/test/test_hash_readwrite_lf.c b/app/test/test_hash_readwrite_lf.c index 5644361968..2664f5138c 100644 --- a/app/test/test_hash_readwrite_lf.c +++ b/app/test/test_hash_readwrite_lf.c @@ -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, ""); diff --git a/app/test/test_ipsec.c b/app/test/test_ipsec.c index 3993ff465a..83f789508f 100644 --- a/app/test/test_ipsec.c +++ b/app/test/test_ipsec.c @@ -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 */ diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c index 030385ec59..2a97afe204 100644 --- a/app/test/test_mbuf.c +++ b/app/test/test_mbuf.c @@ -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; } diff --git a/app/test/test_rcu_qsbr.c b/app/test/test_rcu_qsbr.c index 97af087136..943a1e370e 100644 --- a/app/test/test_rcu_qsbr.c +++ b/app/test/test_rcu_qsbr.c @@ -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; diff --git a/app/test/test_rcu_qsbr_perf.c b/app/test/test_rcu_qsbr_perf.c index c918a9433c..363365f463 100644 --- a/app/test/test_rcu_qsbr_perf.c +++ b/app/test/test_rcu_qsbr_perf.c @@ -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; diff --git a/app/test/test_service_cores.c b/app/test/test_service_cores.c index 82bb2ce50b..9fe38f5e08 100644 --- a/app/test/test_service_cores.c +++ b/app/test/test_service_cores.c @@ -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; diff --git a/app/test/test_stack.c b/app/test/test_stack.c index e972a61a7f..c8dac1f55c 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -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", diff --git a/app/test/test_timer.c b/app/test/test_timer.c index e2aab53085..8e0a589828 100644 --- a/app/test/test_timer.c +++ b/app/test/test_timer.c @@ -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; iaddr; 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); -- 2.20.1