From patchwork Tue Jun 4 08:59:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 54345 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1BDC91BC70; Tue, 4 Jun 2019 11:01:24 +0200 (CEST) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id DFB511BBEE for ; Tue, 4 Jun 2019 11:01:20 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2F263300740A; Tue, 4 Jun 2019 09:01:12 +0000 (UTC) Received: from dmarchan.remote.csb (ovpn-116-185.ams2.redhat.com [10.36.116.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id 036F918E35; Tue, 4 Jun 2019 09:01:01 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: thomas@monjalon.net, aconole@redhat.com, msantana@redhat.com, Fiona Trahe , Pablo de Lara , Ashish Gupta , Declan Doherty , David Hunt , Erik Gabriel Carrillo , Jerin Jacob , Olivier Matz , Andrew Rybchenko , Anatoly Burakov , Bruce Richardson , Vladimir Medvedkin , Yipeng Wang , Sameh Gobriel , Konstantin Ananyev , Bernard Iremonger , Honnappa Nagarahalli , Harry van Haaren , Gage Eads , Robert Sanford Date: Tue, 4 Jun 2019 10:59:52 +0200 Message-Id: <1559638792-8608-15-git-send-email-david.marchand@redhat.com> In-Reply-To: <1559638792-8608-1-git-send-email-david.marchand@redhat.com> References: <1559638792-8608-1-git-send-email-david.marchand@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Tue, 04 Jun 2019 09:01:18 +0000 (UTC) Subject: [dpdk-dev] [PATCH 14/14] test: skip tests when missing requirements X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 | 9 +++++---- 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(+), 63 deletions(-) diff --git a/app/test/test.c b/app/test/test.c index ea1e98f..194a92a 100644 --- a/app/test/test.c +++ b/app/test/test.c @@ -208,14 +208,16 @@ 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 @@ } goto suite_summary; } + } printf(" + ------------------------------------------------------- +\n"); @@ -246,6 +249,8 @@ 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 @@ 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 @@ 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 1b1983e..cf78775 100644 --- a/app/test/test_compressdev.c +++ b/app/test/test_compressdev.c @@ -134,8 +134,8 @@ struct test_data_params { 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 eca6d3d..0509af7 100644 --- a/app/test/test_cryptodev.c +++ b/app/test/test_cryptodev.c @@ -408,8 +408,8 @@ struct crypto_unittest_params { 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 da3348f..8084c07 100644 --- a/app/test/test_distributor.c +++ b/app/test/test_distributor.c @@ -594,8 +594,8 @@ int test_error_distributor_create_numworkers(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 edf1998..f6f1139 100644 --- a/app/test/test_distributor_perf.c +++ b/app/test/test_distributor_perf.c @@ -208,8 +208,8 @@ struct worker_stats { 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 742ca81..ad3f4dc 100644 --- a/app/test/test_event_timer_adapter.c +++ b/app/test/test_event_timer_adapter.c @@ -158,8 +158,9 @@ } 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 00d7327..c745e99 100644 --- a/app/test/test_eventdev.c +++ b/app/test/test_eventdev.c @@ -997,6 +997,8 @@ 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 e27d1e0..99ad902 100644 --- a/app/test/test_func_reentrancy.c +++ b/app/test/test_func_reentrancy.c @@ -473,9 +473,9 @@ struct test_case test_cases[] = { 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 50018db..46ab45f 100644 --- a/app/test/test_hash_multiwriter.c +++ b/app/test/test_hash_multiwriter.c @@ -260,12 +260,11 @@ struct { 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 480ae97..4376b09 100644 --- a/app/test/test_hash_readwrite.c +++ b/app/test/test_hash_readwrite.c @@ -618,10 +618,9 @@ struct { 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 5644361..2664f51 100644 --- a/app/test/test_hash_readwrite_lf.c +++ b/app/test/test_hash_readwrite_lf.c @@ -1254,10 +1254,10 @@ struct { 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 3993ff4..83f7895 100644 --- a/app/test/test_ipsec.c +++ b/app/test/test_ipsec.c @@ -296,8 +296,8 @@ struct supported_auth_algo { 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 030385e..2a97afe 100644 --- a/app/test/test_mbuf.c +++ b/app/test/test_mbuf.c @@ -753,18 +753,17 @@ 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 @@ 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 92ab0c2..725d27d 100644 --- a/app/test/test_rcu_qsbr.c +++ b/app/test/test_rcu_qsbr.c @@ -949,14 +949,14 @@ static int test_rcu_qsbr_main(void) { + if (rte_lcore_count() < 5) { + printf("Not enough cores for rcu_qsbr_autotest, expecting at least 5\n"); + return TEST_SKIPPED; + } + if (get_enabled_cores_mask() != 0) return -1; - 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 6b1912c..dcdd9da 100644 --- a/app/test/test_rcu_qsbr_perf.c +++ b/app/test/test_rcu_qsbr_perf.c @@ -623,6 +623,11 @@ static int test_rcu_qsbr_main(void) { + 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); @@ -632,10 +637,6 @@ return -1; 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; - } if (num_cores > TEST_RCU_MAX_LCORE) { printf("Test failed! %d cores supported\n", TEST_RCU_MAX_LCORE); goto test_fail; diff --git a/app/test/test_service_cores.c b/app/test/test_service_cores.c index 82bb2ce..9fe38f5 100644 --- a/app/test/test_service_cores.c +++ b/app/test/test_service_cores.c @@ -502,6 +502,10 @@ static int32_t dummy_mt_safe_cb(void *args) 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 int32_t dummy_mt_safe_cb(void *args) 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 int32_t dummy_mt_safe_cb(void *args) 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 e972a61..c8dac1f 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -336,12 +336,14 @@ struct test_args { 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 e2aab53..8e0a589 100644 --- a/app/test/test_timer.c +++ b/app/test/test_timer.c @@ -538,17 +538,17 @@ struct mytimerinfo { 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);