test: skip tests when missing requirements
authorDavid Marchand <david.marchand@redhat.com>
Sat, 15 Jun 2019 06:42:30 +0000 (08:42 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 27 Jun 2019 20:34:53 +0000 (22:34 +0200)
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>
19 files changed:
app/test/test.c
app/test/test_compressdev.c
app/test/test_cryptodev.c
app/test/test_distributor.c
app/test/test_distributor_perf.c
app/test/test_event_timer_adapter.c
app/test/test_eventdev.c
app/test/test_func_reentrancy.c
app/test/test_hash_multiwriter.c
app/test/test_hash_readwrite.c
app/test/test_hash_readwrite_lf.c
app/test/test_ipsec.c
app/test/test_mbuf.c
app/test/test_rcu_qsbr.c
app/test/test_rcu_qsbr_perf.c
app/test/test_service_cores.c
app/test/test_stack.c
app/test/test_timer.c
app/test/test_timer_secondary.c

index ea1e98f..194a92a 100644 (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;
 }
index 1b1983e..cf78775 100644 (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",
index eca6d3d..0509af7 100644 (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 */
index da3348f..8084c07 100644 (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) {
index edf1998..f6f1139 100644 (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 */
index 742ca81..ad3f4dc 100644 (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 */
index 00d7327..c745e99 100644 (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));
 }
 
index e27d1e0..99ad902 100644 (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");
index 50018db..46ab45f 100644 (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, "");
 
 
index 480ae97..4376b09 100644 (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) {
index 5644361..2664f51 100644 (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, "");
index 3993ff4..83f7895 100644 (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 */
index 030385e..2a97afe 100644 (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;
        }
index 97af087..943a1e3 100644 (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;
index c918a94..363365f 100644 (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;
index 82bb2ce..9fe38f5 100644 (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;
index e972a61..c8dac1f 100644 (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",
index e2aab53..8e0a589 100644 (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));
index 31e4a7f..790f180 100644 (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);