From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A57A1A034F; Wed, 31 Mar 2021 16:42:50 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8A8B3140F1E; Wed, 31 Mar 2021 16:42:50 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mails.dpdk.org (Postfix) with ESMTP id D04E7140EF2 for ; Wed, 31 Mar 2021 16:42:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1617201768; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=CIKU/gO40FMY3zYWmfI3AEog1LucOcaCtLS6xHxoL6k=; b=ZicS5UUKfJRucqCnWaT8SosglS3A+SN5oyRMd0GeeG1UHGXi7kuekAmSQGJxHCGyUB62o4 Cfs1L7CfnUNfIUpNed9mzEBg6WEbGXaFcMZg11HCdVST+VEeJuxdj+ZyLOaCRmZoLBSrP4 aCRFBmC2irpzMTZ+TtwUNYB2JFGmYfU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-467-md0K1yahPKq4HpNx4PAWqQ-1; Wed, 31 Mar 2021 10:42:43 -0400 X-MC-Unique: md0K1yahPKq4HpNx4PAWqQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8F0C5612A3; Wed, 31 Mar 2021 14:42:39 +0000 (UTC) Received: from dhcp-25.97.bos.redhat.com (ovpn-113-108.rdu2.redhat.com [10.10.113.108]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CF1FF19D9F; Wed, 31 Mar 2021 14:42:33 +0000 (UTC) From: Aaron Conole To: Ciara Power Cc: dev@dpdk.org, declan.doherty@intel.com, Fiona Trahe , Ashish Gupta , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko , Abhinandan Gujjar , Jay Jayatheerthan , Erik Gabriel Carrillo , Jerin Jacob , Anatoly Burakov , Vladimir Medvedkin , Kiran Kumar K , Nithin Dabilpuram , Konstantin Ananyev , Bernard Iremonger , Reshma Pattan , Chas Williams , "Min Hu \(Connor\)" , Bruce Richardson , Akhil Goyal , Harry van Haaren , Sunil Kumar Kori References: <20210316143253.3849182-1-ciara.power@intel.com> <20210316143253.3849182-3-ciara.power@intel.com> Date: Wed, 31 Mar 2021 10:42:32 -0400 In-Reply-To: <20210316143253.3849182-3-ciara.power@intel.com> (Ciara Power's message of "Tue, 16 Mar 2021 14:32:49 +0000") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=aconole@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain Subject: Re: [dpdk-dev] [PATCH 2/6] test: introduce parent testsuite format X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Ciara Power writes: > The current structure for unit testing only allows for running a > test suite with nested test cases. This means all test cases for an > autotest must be in one suite, which is not ideal. > For example, in some cases we may want to run multiple lists of test > cases that each require different setup, so should be in separate suites. > > The unit test suite struct is modified to hold either a pointer to a > list of test cases, or a pointer to a list of sub-testsuites. > A bool value is also introduced here to indicate whether the testsuite > is a parent suite or not. > > Signed-off-by: Ciara Power > --- > app/test/test.c | 151 ++++++++++++++++++--------- > app/test/test.h | 6 +- > app/test/test_bitratestats.c | 4 +- > app/test/test_compressdev.c | 4 +- > app/test/test_cryptodev.c | 24 ++--- > app/test/test_cryptodev_asym.c | 12 +-- > app/test/test_ethdev_link.c | 4 +- > app/test/test_event_crypto_adapter.c | 4 +- > app/test/test_event_eth_rx_adapter.c | 8 +- > app/test/test_event_eth_tx_adapter.c | 4 +- > app/test/test_event_timer_adapter.c | 4 +- > app/test/test_eventdev.c | 4 +- > app/test/test_fbarray.c | 4 +- > app/test/test_fib.c | 8 +- > app/test/test_fib6.c | 8 +- > app/test/test_graph.c | 4 +- > app/test/test_graph_perf.c | 4 +- > app/test/test_ipfrag.c | 4 +- > app/test/test_ipsec.c | 4 +- > app/test/test_ipsec_sad.c | 4 +- > app/test/test_latencystats.c | 4 +- > app/test/test_link_bonding.c | 4 +- > app/test/test_link_bonding_mode4.c | 4 +- > app/test/test_link_bonding_rssconf.c | 4 +- > app/test/test_metrics.c | 4 +- > app/test/test_pmd_ring.c | 4 +- > app/test/test_reorder.c | 4 +- > app/test/test_rib.c | 8 +- > app/test/test_rib6.c | 8 +- > app/test/test_security.c | 4 +- > app/test/test_service_cores.c | 4 +- > app/test/test_trace.c | 4 +- > 32 files changed, 188 insertions(+), 137 deletions(-) > > diff --git a/app/test/test.c b/app/test/test.c > index 72768c8854..fe40a91f97 100644 > --- a/app/test/test.c > +++ b/app/test/test.c > @@ -213,24 +213,37 @@ unit_test_suite_count_tcs_on_setup_fail(struct unit_test_suite *suite, > unsigned int *failed) > { > struct unit_test_case tc; > - > - tc = suite->unit_test_cases[*total]; > - while (tc.testcase) { > - if (!tc.enabled || test_success == TEST_SKIPPED) > - (*skipped)++; > - else > - (*failed)++; > - (*total)++; > - tc = suite->unit_test_cases[*total]; > + int i, tc_count = 0; > + > + if (suite->parent_testsuite) { > + for (i = 0; suite->unit_test_suites[i].suite_name != NULL; i++) > + unit_test_suite_count_tcs_on_setup_fail( > + &suite->unit_test_suites[i], > + test_success, total, > + skipped, failed); > + } else { > + tc = suite->unit_test_cases[tc_count]; > + while (tc.testcase) { > + if (!tc.enabled || > + test_success == TEST_SKIPPED) > + (*skipped)++; > + else > + (*failed)++; > + tc_count++; > + tc = suite->unit_test_cases[tc_count]; > + } > + *total += tc_count; > } > } > > int > unit_test_suite_runner(struct unit_test_suite *suite) > { > - int test_success; > + int test_success, i, ret; > unsigned int total = 0, executed = 0, skipped = 0; > unsigned int succeeded = 0, failed = 0, unsupported = 0; > + unsigned int sub_ts_succeeded = 0, sub_ts_failed = 0; > + unsigned int sub_ts_skipped = 0, sub_ts_total = 0; > const char *status; > struct unit_test_case tc; > > @@ -255,63 +268,80 @@ unit_test_suite_runner(struct unit_test_suite *suite) > > printf(" + ------------------------------------------------------- +\n"); > > - tc = suite->unit_test_cases[total]; > - while (tc.testcase) { > - if (!tc.enabled) { > - skipped++; > - total++; > - tc = suite->unit_test_cases[total]; > - continue; > - } else { > - executed++; > + if (suite->parent_testsuite) { > + for (i = 0; suite->unit_test_suites[i].suite_name != NULL; i++) { > + ret = unit_test_suite_runner(&suite->unit_test_suites[i]); > + if (ret == TEST_SUCCESS) > + sub_ts_succeeded++; > + else if (ret == TEST_SKIPPED) > + sub_ts_skipped++; > + else > + sub_ts_failed++; > + sub_ts_total++; I suggest adding these counts to the test suite object itself - that way we can track them separately. And we can clear them when we jump into the unit_test_suite_runner() so that we get fresh counts each time and don't need to track this information in different ways. ie: void run_test(suite, tc) { if (!tc.enabled) { suite->skipped++; } suite->executed++; if tc.setup res = tc.setup else res = success if res != success suite->failed++ return res = tc.testcase() switch res { case success: suite->success++ break case fail: suite->fail++ break case skipped: suite->skipped++ break; case unsupported: suite->unsupported++; break; } if tc.teardown tc.teardown() } ... void run_tests_in_suite(suite) { struct unit_test_case tc; size_t total; FOR_EACH_SUITE_TESTCASE(total, suite, tc) run_test(suite, tc); } ... FOR_EACH_SUITE_TESTSUITE(total, suite, tsuite) { run_tests_in_suite(suite); } FOR_EACH_SUITE_TESTSUITE(total, suite, tsuite) { total_failed += tsuite->failed; total_executed += tsuite->executed; total_skipped += tsuite->skipped; ... } etc.. Does it make sense? > } > + } else { > + tc = suite->unit_test_cases[total]; > + while (tc.testcase) { > + if (!tc.enabled) { > + skipped++; > + total++; > + tc = suite->unit_test_cases[total]; > + continue; > + } else { > + executed++; > + } > + > + /* run test case setup */ > + if (tc.setup) > + test_success = tc.setup(); > + else > + test_success = TEST_SUCCESS; > + > + if (test_success == TEST_SUCCESS) { > + /* run the test case */ > + test_success = tc.testcase(); > + if (test_success == TEST_SUCCESS) > + succeeded++; > + else if (test_success == TEST_SKIPPED) > + skipped++; > + else if (test_success == -ENOTSUP) > + unsupported++; > + else > + failed++; > + } else if (test_success == -ENOTSUP) { > + unsupported++; > + } else { > + failed++; > + } > > - /* run test case setup */ > - if (tc.setup) > - test_success = tc.setup(); > - else > - test_success = TEST_SUCCESS; > + /* run the test case teardown */ > + if (tc.teardown) > + tc.teardown(); > > - if (test_success == TEST_SUCCESS) { > - /* run the test case */ > - test_success = tc.testcase(); > if (test_success == TEST_SUCCESS) > - succeeded++; > + status = "succeeded"; > else if (test_success == TEST_SKIPPED) > - skipped++; > + status = "skipped"; > else if (test_success == -ENOTSUP) > - unsupported++; > + status = "unsupported"; > else > - failed++; > - } else if (test_success == -ENOTSUP) { > - unsupported++; > - } else { > - failed++; > - } > - > - /* run the test case teardown */ > - if (tc.teardown) > - tc.teardown(); This got dropped and never re-added anywhere afaict. > - > - if (test_success == TEST_SUCCESS) > - status = "succeeded"; > - else if (test_success == TEST_SKIPPED) > - status = "skipped"; > - else if (test_success == -ENOTSUP) > - status = "unsupported"; > - else > - status = "failed"; > + status = "failed"; > > - printf(" + TestCase [%2d] : %s %s\n", total, tc.name, status); > + printf(" + TestCase [%2d] : %s %s\n", total, > + tc.name, status); > > - total++; > - tc = suite->unit_test_cases[total]; > + total++; > + tc = suite->unit_test_cases[total]; > + } > } > > /* Run test suite teardown */ > if (suite->teardown) > suite->teardown(); > > + if (suite->parent_testsuite) > + goto parent_suite_summary; > + > goto suite_summary; > > suite_summary: > @@ -332,4 +362,21 @@ unit_test_suite_runner(struct unit_test_suite *suite) > if (total == skipped) > return TEST_SKIPPED; > return TEST_SUCCESS; > + > +parent_suite_summary: > + printf(" + ------------------------------------------------------- +\n"); > + printf(" + Parent Test Suite Summary : %s\n", suite->suite_name); > + printf(" + Sub Testsuites Total : %2d\n", sub_ts_total); > + printf(" + Sub Testsuites Skipped : %2d\n", sub_ts_skipped); > + printf(" + Sub Testsuites Passed : %2d\n", sub_ts_succeeded); > + printf(" + Sub Testsuites Failed : %2d\n", sub_ts_failed); > + printf(" + ------------------------------------------------------- +\n"); > + > + last_test_result = failed; > + > + if (sub_ts_failed) > + return TEST_FAILED; > + if (sub_ts_total == sub_ts_skipped) > + return TEST_SKIPPED; > + return TEST_SUCCESS; > } > diff --git a/app/test/test.h b/app/test/test.h > index b07f6c1ef0..3fdac56631 100644 > --- a/app/test/test.h > +++ b/app/test/test.h > @@ -138,7 +138,11 @@ struct unit_test_suite { > const char *suite_name; > int (*setup)(void); > void (*teardown)(void); > - struct unit_test_case unit_test_cases[]; > + bool parent_testsuite; > + union { > + struct unit_test_case *unit_test_cases; > + struct unit_test_suite *unit_test_suites; > + }; I don't see the advantage to this. Why not just have the structs as flat members, and use the NULL of unit_test_suites as your boolean. It saves on refactor of all the test suites, since those members should be 0 initialized anyway. In fact, you are relying on that behavior (since you don't explicitly set parent_testsuite to 'false') so might as well make your life easier by not having to touch all the test suite files. ie: instead of if (suite->parent_testsuite) FOR_EACH_SUITE_TESTSUITE else FOR_EACH_SUITE_TESTCASE you could just do: struct unit_test_case tc; struct unit_test_suite ts; size_t total; if (suite->unit_test_suite && suite->unit_test_case) /* is this prohibited? */ FOR_EACH_SUITE_TESTCASE(total, suite, tc); ... FOR_EACH_SUITE_TESTSUITE(total, suite, ts) ... This also makes reading the code a bit nicer. > }; > > int unit_test_suite_runner(struct unit_test_suite *suite); > diff --git a/app/test/test_bitratestats.c b/app/test/test_bitratestats.c > index f4a92c9be6..a3fe5e839a 100644 > --- a/app/test/test_bitratestats.c > +++ b/app/test/test_bitratestats.c > @@ -189,7 +189,7 @@ unit_test_suite bitratestats_testsuite = { > .suite_name = "BitRate Stats Unit Test Suite", > .setup = test_bit_ring_setup, > .teardown = test_bit_ring_free, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > /* TEST CASE 1: Test to create bit rate data */ > TEST_CASE(test_stats_bitrate_create), > > @@ -231,7 +231,7 @@ unit_test_suite bitratestats_testsuite = { > /* TEST CASE 9: Test to do the cleanup w.r.t create */ > TEST_CASE(test_stats_bitrate_free), > TEST_CASES_END() > - } > + }) > }; > > static int > diff --git a/app/test/test_compressdev.c b/app/test/test_compressdev.c > index 0571c17ecb..7789511bd0 100644 > --- a/app/test/test_compressdev.c > +++ b/app/test/test_compressdev.c > @@ -4183,7 +4183,7 @@ static struct unit_test_suite compressdev_testsuite = { > .suite_name = "compressdev unit test suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(NULL, NULL, > test_compressdev_invalid_configuration), > TEST_CASE_ST(generic_ut_setup, generic_ut_teardown, > @@ -4261,7 +4261,7 @@ static struct unit_test_suite compressdev_testsuite = { > test_compressdev_deflate_im_buffers_SGL_over_2ops_second), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c > index f91debc168..bdfb2727dd 100644 > --- a/app/test/test_cryptodev.c > +++ b/app/test/test_cryptodev.c > @@ -13247,7 +13247,7 @@ static struct unit_test_suite cryptodev_scheduler_testsuite = { > .suite_name = "Crypto Device Scheduler Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > /* Multi Core */ > TEST_CASE_ST(NULL, NULL, test_scheduler_attach_slave_op), > TEST_CASE_ST(NULL, NULL, test_scheduler_mode_multicore_op), > @@ -13281,7 +13281,7 @@ static struct unit_test_suite cryptodev_scheduler_testsuite = { > TEST_CASE_ST(NULL, NULL, test_scheduler_detach_slave_op), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > #endif /* RTE_CRYPTO_SCHEDULER */ > @@ -13290,7 +13290,7 @@ static struct unit_test_suite cryptodev_testsuite = { > .suite_name = "Crypto Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, > test_device_configure_invalid_dev_id), > TEST_CASE_ST(ut_setup, ut_teardown, > @@ -13921,25 +13921,25 @@ static struct unit_test_suite cryptodev_testsuite = { > TEST_CASE_ST(ut_setup, ut_teardown, test_enq_callback_setup), > TEST_CASE_ST(ut_setup, ut_teardown, test_deq_callback_setup), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static struct unit_test_suite cryptodev_virtio_testsuite = { > .suite_name = "Crypto VIRTIO Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static struct unit_test_suite cryptodev_caam_jr_testsuite = { > .suite_name = "Crypto CAAM JR Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, > test_device_configure_invalid_dev_id), > TEST_CASE_ST(ut_setup, ut_teardown, > @@ -13952,14 +13952,14 @@ static struct unit_test_suite cryptodev_caam_jr_testsuite = { > TEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static struct unit_test_suite cryptodev_mrvl_testsuite = { > .suite_name = "Crypto Device Marvell Component Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session), > TEST_CASE_ST(ut_setup, ut_teardown, > test_multi_session_random_usage), > @@ -13980,14 +13980,14 @@ static struct unit_test_suite cryptodev_mrvl_testsuite = { > auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static struct unit_test_suite cryptodev_ccp_testsuite = { > .suite_name = "Crypto Device CCP Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session), > TEST_CASE_ST(ut_setup, ut_teardown, > test_multi_session_random_usage), > @@ -14008,7 +14008,7 @@ static struct unit_test_suite cryptodev_ccp_testsuite = { > auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c > index 85cd076059..4a2c0a310f 100644 > --- a/app/test/test_cryptodev_asym.c > +++ b/app/test/test_cryptodev_asym.c > @@ -2288,7 +2288,7 @@ static struct unit_test_suite cryptodev_openssl_asym_testsuite = { > .suite_name = "Crypto Device OPENSSL ASYM Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, test_capability), > TEST_CASE_ST(ut_setup, ut_teardown, test_dsa), > TEST_CASE_ST(ut_setup, ut_teardown, test_dh_keygenration), > @@ -2300,24 +2300,24 @@ static struct unit_test_suite cryptodev_openssl_asym_testsuite = { > TEST_CASE_ST(ut_setup, ut_teardown, test_mod_exp), > TEST_CASE_ST(ut_setup, ut_teardown, test_one_by_one), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static struct unit_test_suite cryptodev_qat_asym_testsuite = { > .suite_name = "Crypto Device QAT ASYM Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, test_one_by_one), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static struct unit_test_suite cryptodev_octeontx_asym_testsuite = { > .suite_name = "Crypto Device OCTEONTX ASYM Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, test_capability), > TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec_crt), > TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_sign_verify_crt), > @@ -2326,7 +2326,7 @@ static struct unit_test_suite cryptodev_octeontx_asym_testsuite = { > test_ecdsa_sign_verify_all_curve), > TEST_CASE_ST(ut_setup, ut_teardown, test_ecpm_all_curve), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_ethdev_link.c b/app/test/test_ethdev_link.c > index ee11987bae..1f3ac34b5f 100644 > --- a/app/test/test_ethdev_link.c > +++ b/app/test/test_ethdev_link.c > @@ -148,13 +148,13 @@ static struct unit_test_suite link_status_testsuite = { > .suite_name = "link status formatting", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_link_status_up_default), > TEST_CASE(test_link_status_down_default), > TEST_CASE(test_link_speed_all_values), > TEST_CASE(test_link_status_invalid), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c > index 335211cd8c..722e2f1b7c 100644 > --- a/app/test/test_event_crypto_adapter.c > +++ b/app/test/test_event_crypto_adapter.c > @@ -959,7 +959,7 @@ static struct unit_test_suite functional_testsuite = { > .suite_name = "Event crypto adapter test suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > > TEST_CASE_ST(NULL, test_crypto_adapter_free, > test_crypto_adapter_create), > @@ -989,7 +989,7 @@ static struct unit_test_suite functional_testsuite = { > test_sessionless_with_op_new_mode), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_event_eth_rx_adapter.c b/app/test/test_event_eth_rx_adapter.c > index 9198767b41..735d5766d6 100644 > --- a/app/test/test_event_eth_rx_adapter.c > +++ b/app/test/test_event_eth_rx_adapter.c > @@ -754,7 +754,7 @@ static struct unit_test_suite event_eth_rx_tests = { > .suite_name = "rx event eth adapter test suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(NULL, NULL, adapter_create_free), > TEST_CASE_ST(adapter_create, adapter_free, > adapter_queue_add_del), > @@ -763,18 +763,18 @@ static struct unit_test_suite event_eth_rx_tests = { > TEST_CASE_ST(adapter_create, adapter_free, adapter_start_stop), > TEST_CASE_ST(adapter_create, adapter_free, adapter_stats), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static struct unit_test_suite event_eth_rx_intr_tests = { > .suite_name = "rx event eth adapter test suite", > .setup = testsuite_setup_rx_intr, > .teardown = testsuite_teardown_rx_intr, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(adapter_create, adapter_free, > adapter_intr_queue_add_del), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_event_eth_tx_adapter.c b/app/test/test_event_eth_tx_adapter.c > index 7073030902..bf67afcc69 100644 > --- a/app/test/test_event_eth_tx_adapter.c > +++ b/app/test/test_event_eth_tx_adapter.c > @@ -680,7 +680,7 @@ static struct unit_test_suite event_eth_tx_tests = { > .setup = testsuite_setup, > .teardown = testsuite_teardown, > .suite_name = "tx event eth adapter test suite", > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(NULL, NULL, tx_adapter_create_free), > TEST_CASE_ST(tx_adapter_create, tx_adapter_free, > tx_adapter_queue_add_del), > @@ -690,7 +690,7 @@ static struct unit_test_suite event_eth_tx_tests = { > tx_adapter_service), > TEST_CASE_ST(NULL, NULL, tx_adapter_dynamic_device), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_event_timer_adapter.c b/app/test/test_event_timer_adapter.c > index ad3f4dcc20..08c3035c7c 100644 > --- a/app/test/test_event_timer_adapter.c > +++ b/app/test/test_event_timer_adapter.c > @@ -1779,7 +1779,7 @@ static struct unit_test_suite event_timer_adptr_functional_testsuite = { > .suite_name = "event timer functional test suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(timdev_setup_usec, timdev_teardown, > test_timer_state), > TEST_CASE_ST(timdev_setup_usec, timdev_teardown, > @@ -1832,7 +1832,7 @@ static struct unit_test_suite event_timer_adptr_functional_testsuite = { > adapter_tick_resolution), > TEST_CASE(adapter_create_max), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_eventdev.c b/app/test/test_eventdev.c > index 27ca5a6494..b4b55117b4 100644 > --- a/app/test/test_eventdev.c > +++ b/app/test/test_eventdev.c > @@ -934,7 +934,7 @@ static struct unit_test_suite eventdev_common_testsuite = { > .suite_name = "eventdev common code unit test suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(NULL, NULL, > test_eventdev_count), > TEST_CASE_ST(NULL, NULL, > @@ -984,7 +984,7 @@ static struct unit_test_suite eventdev_common_testsuite = { > TEST_CASE_ST(eventdev_setup_device, NULL, > test_eventdev_close), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_fbarray.c b/app/test/test_fbarray.c > index a691bf4458..ff6896d1bc 100644 > --- a/app/test/test_fbarray.c > +++ b/app/test/test_fbarray.c > @@ -714,7 +714,7 @@ static struct unit_test_suite fbarray_test_suite = { > .suite_name = "fbarray autotest", > .setup = autotest_setup, > .teardown = autotest_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_invalid), > TEST_CASE(test_basic), > TEST_CASE_ST(first_msk_test_setup, reset_array, test_find), > @@ -724,7 +724,7 @@ static struct unit_test_suite fbarray_test_suite = { > TEST_CASE_ST(full_msk_test_setup, reset_array, test_find), > TEST_CASE_ST(empty_msk_test_setup, reset_array, test_empty), > TEST_CASES_END() > - } > + }) > }; > > static int > diff --git a/app/test/test_fib.c b/app/test/test_fib.c > index e46b9934fe..fc574bdf0b 100644 > --- a/app/test/test_fib.c > +++ b/app/test/test_fib.c > @@ -375,24 +375,24 @@ static struct unit_test_suite fib_fast_tests = { > .suite_name = "fib autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_create_invalid), > TEST_CASE(test_free_null), > TEST_CASE(test_add_del_invalid), > TEST_CASE(test_get_invalid), > TEST_CASE(test_lookup), > TEST_CASES_END() > - } > + }) > }; > > static struct unit_test_suite fib_slow_tests = { > .suite_name = "fib slow autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_multiple_create), > TEST_CASES_END() > - } > + }) > }; > > /* > diff --git a/app/test/test_fib6.c b/app/test/test_fib6.c > index 74abfc7a5d..4e36ab795e 100644 > --- a/app/test/test_fib6.c > +++ b/app/test/test_fib6.c > @@ -384,24 +384,24 @@ static struct unit_test_suite fib6_fast_tests = { > .suite_name = "fib6 autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_create_invalid), > TEST_CASE(test_free_null), > TEST_CASE(test_add_del_invalid), > TEST_CASE(test_get_invalid), > TEST_CASE(test_lookup), > TEST_CASES_END() > - } > + }) > }; > > static struct unit_test_suite fib6_slow_tests = { > .suite_name = "fib6 slow autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_multiple_create), > TEST_CASES_END() > - } > + }) > }; > > /* > diff --git a/app/test/test_graph.c b/app/test/test_graph.c > index 81bdcb9bea..81eef73900 100644 > --- a/app/test/test_graph.c > +++ b/app/test/test_graph.c > @@ -815,7 +815,7 @@ static struct unit_test_suite graph_testsuite = { > .suite_name = "Graph library test suite", > .setup = graph_setup, > .teardown = graph_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_update_edges), > TEST_CASE(test_lookup_functions), > TEST_CASE(test_create_graph), > @@ -823,7 +823,7 @@ static struct unit_test_suite graph_testsuite = { > TEST_CASE(test_graph_walk), > TEST_CASE(test_print_stats), > TEST_CASES_END(), /**< NULL terminate unit test array */ > - }, > + }), > }; > > static int > diff --git a/app/test/test_graph_perf.c b/app/test/test_graph_perf.c > index 296d99a9d3..ae30ab3c41 100644 > --- a/app/test/test_graph_perf.c > +++ b/app/test/test_graph_perf.c > @@ -1035,7 +1035,7 @@ static struct unit_test_suite graph_perf_testsuite = { > .suite_name = "Graph library performance test suite", > .setup = graph_perf_setup, > .teardown = graph_perf_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(graph_init_hr, graph_fini, > graph_hr_4s_1n_1src_1snk), > TEST_CASE_ST(graph_init_hr_brst_one, graph_fini, > @@ -1051,7 +1051,7 @@ static struct unit_test_suite graph_perf_testsuite = { > TEST_CASE_ST(graph_init_parallel_tree, graph_fini, > graph_parallel_tree_5s_4n_4src_4snk), > TEST_CASES_END(), /**< NULL terminate unit test array */ > - }, > + }), > }; > > static int > diff --git a/app/test/test_ipfrag.c b/app/test/test_ipfrag.c > index da8c212f92..b0ac54e422 100644 > --- a/app/test/test_ipfrag.c > +++ b/app/test/test_ipfrag.c > @@ -242,12 +242,12 @@ static struct unit_test_suite ipfrag_testsuite = { > .suite_name = "IP Frag Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, > test_ip_frag), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_ipsec.c b/app/test/test_ipsec.c > index d18220a885..bd9fc3f999 100644 > --- a/app/test/test_ipsec.c > +++ b/app/test/test_ipsec.c > @@ -2498,7 +2498,7 @@ static struct unit_test_suite ipsec_testsuite = { > .suite_name = "IPsec NULL Unit Test Suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, > test_ipsec_crypto_inb_burst_null_null_wrapper), > TEST_CASE_ST(ut_setup, ut_teardown, > @@ -2528,7 +2528,7 @@ static struct unit_test_suite ipsec_testsuite = { > TEST_CASE_ST(ut_setup, ut_teardown, > test_ipsec_crypto_inb_burst_2sa_4grp_null_null_wrapper), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_ipsec_sad.c b/app/test/test_ipsec_sad.c > index 491164689e..874b19a286 100644 > --- a/app/test/test_ipsec_sad.c > +++ b/app/test/test_ipsec_sad.c > @@ -864,7 +864,7 @@ static struct unit_test_suite ipsec_sad_tests = { > .suite_name = "ipsec sad autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_create_invalid), > TEST_CASE(test_find_existing), > TEST_CASE(test_multiple_create), > @@ -875,7 +875,7 @@ static struct unit_test_suite ipsec_sad_tests = { > TEST_CASE(test_lookup_adv), > TEST_CASE(test_lookup_order), > TEST_CASES_END() > - } > + }) > }; > > static int > diff --git a/app/test/test_latencystats.c b/app/test/test_latencystats.c > index 427339904d..f72eee98cc 100644 > --- a/app/test/test_latencystats.c > +++ b/app/test/test_latencystats.c > @@ -171,7 +171,7 @@ unit_test_suite latencystats_testsuite = { > .suite_name = "Latency Stats Unit Test Suite", > .setup = test_latency_ring_setup, > .teardown = test_latency_ring_free, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > > /* Test Case 1: To check latency init with > * metrics init > @@ -198,7 +198,7 @@ unit_test_suite latencystats_testsuite = { > TEST_CASE_ST(NULL, NULL, test_latency_uninit), > > TEST_CASES_END() > - } > + }) > }; > > static int test_latencystats(void) > diff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c > index 8a5c8310a8..4fa1e0525c 100644 > --- a/app/test/test_link_bonding.c > +++ b/app/test/test_link_bonding.c > @@ -5094,7 +5094,7 @@ static struct unit_test_suite link_bonding_test_suite = { > .suite_name = "Link Bonding Unit Test Suite", > .setup = test_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_create_bonded_device), > TEST_CASE(test_create_bonded_device_with_invalid_params), > TEST_CASE(test_add_slave_to_bonded_device), > @@ -5162,7 +5162,7 @@ static struct unit_test_suite link_bonding_test_suite = { > TEST_CASE(test_close_bonded_device), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > > diff --git a/app/test/test_link_bonding_mode4.c b/app/test/test_link_bonding_mode4.c > index 2c835fa7ad..aafa2236ce 100644 > --- a/app/test/test_link_bonding_mode4.c > +++ b/app/test/test_link_bonding_mode4.c > @@ -1653,7 +1653,7 @@ static struct unit_test_suite link_bonding_mode4_test_suite = { > .suite_name = "Link Bonding mode 4 Unit Test Suite", > .setup = test_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_NAMED("test_mode4_agg_mode_selection", > test_mode4_agg_mode_selection_wrapper), > TEST_CASE_NAMED("test_mode4_lacp", test_mode4_lacp_wrapper), > @@ -1667,7 +1667,7 @@ static struct unit_test_suite link_bonding_mode4_test_suite = { > test_mode4_ext_lacp_wrapper), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_link_bonding_rssconf.c b/app/test/test_link_bonding_rssconf.c > index 5dac60ca1e..58ff4a8971 100644 > --- a/app/test/test_link_bonding_rssconf.c > +++ b/app/test/test_link_bonding_rssconf.c > @@ -645,13 +645,13 @@ test_rss_lazy_wrapper(void) > static struct unit_test_suite link_bonding_rssconf_test_suite = { > .suite_name = "RSS Dynamic Configuration for Bonding Unit Test Suite", > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_NAMED("test_setup", test_setup_wrapper), > TEST_CASE_NAMED("test_rss", test_rss_wrapper), > TEST_CASE_NAMED("test_rss_lazy", test_rss_lazy_wrapper), > > TEST_CASES_END() > - } > + }) > }; > > static int > diff --git a/app/test/test_metrics.c b/app/test/test_metrics.c > index e736019ae4..d80be0e5b4 100644 > --- a/app/test/test_metrics.c > +++ b/app/test/test_metrics.c > @@ -275,7 +275,7 @@ static struct unit_test_suite metrics_testsuite = { > .suite_name = "Metrics Unit Test Suite", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > /* Test Case 1: Test to check all metric APIs without > * metrics init > */ > @@ -317,7 +317,7 @@ static struct unit_test_suite metrics_testsuite = { > TEST_CASE(test_metrics_deinitialize), > > TEST_CASES_END() > - } > + }) > }; > > static int > diff --git a/app/test/test_pmd_ring.c b/app/test/test_pmd_ring.c > index 86b1db2c1f..9ef667aed7 100644 > --- a/app/test/test_pmd_ring.c > +++ b/app/test/test_pmd_ring.c > @@ -576,7 +576,7 @@ unit_test_suite test_pmd_ring_suite = { > .setup = test_pmd_ringcreate_setup, > .teardown = test_cleanup_resources, > .suite_name = "Test Pmd Ring Unit Test Suite", > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_ethdev_configure_ports), > TEST_CASE(test_send_basic_packets), > TEST_CASE(test_get_stats_for_port), > @@ -584,7 +584,7 @@ unit_test_suite test_pmd_ring_suite = { > TEST_CASE(test_pmd_ring_pair_create_attach), > TEST_CASE(test_command_line_ring_port), > TEST_CASES_END() > - } > + }) > }; > > static int > diff --git a/app/test/test_reorder.c b/app/test/test_reorder.c > index 1c4226da65..04bdf4a2d1 100644 > --- a/app/test/test_reorder.c > +++ b/app/test/test_reorder.c > @@ -373,7 +373,7 @@ static struct unit_test_suite reorder_test_suite = { > .setup = test_setup, > .teardown = test_teardown, > .suite_name = "Reorder Unit Test Suite", > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_reorder_create), > TEST_CASE(test_reorder_init), > TEST_CASE(test_reorder_find_existing), > @@ -381,7 +381,7 @@ static struct unit_test_suite reorder_test_suite = { > TEST_CASE(test_reorder_insert), > TEST_CASE(test_reorder_drain), > TEST_CASES_END() > - } > + }) > }; > > static int > diff --git a/app/test/test_rib.c b/app/test/test_rib.c > index 3dc48fe1f2..8a2a7d68aa 100644 > --- a/app/test/test_rib.c > +++ b/app/test/test_rib.c > @@ -327,7 +327,7 @@ static struct unit_test_suite rib_tests = { > .suite_name = "rib autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_create_invalid), > TEST_CASE(test_free_null), > TEST_CASE(test_insert_invalid), > @@ -335,17 +335,17 @@ static struct unit_test_suite rib_tests = { > TEST_CASE(test_basic), > TEST_CASE(test_tree_traversal), > TEST_CASES_END() > - } > + }) > }; > > static struct unit_test_suite rib_slow_tests = { > .suite_name = "rib slow autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_multiple_create), > TEST_CASES_END() > - } > + }) > }; > > /* > diff --git a/app/test/test_rib6.c b/app/test/test_rib6.c > index c77df11298..c381c68ce6 100644 > --- a/app/test/test_rib6.c > +++ b/app/test/test_rib6.c > @@ -332,7 +332,7 @@ static struct unit_test_suite rib6_tests = { > .suite_name = "rib6 autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_create_invalid), > TEST_CASE(test_free_null), > TEST_CASE(test_insert_invalid), > @@ -340,17 +340,17 @@ static struct unit_test_suite rib6_tests = { > TEST_CASE(test_basic), > TEST_CASE(test_tree_traversal), > TEST_CASES_END() > - } > + }) > }; > > static struct unit_test_suite rib6_slow_tests = { > .suite_name = "rib6 slow autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_multiple_create), > TEST_CASES_END() > - } > + }) > }; > > /* > diff --git a/app/test/test_security.c b/app/test/test_security.c > index 060cf1ffa8..583a229c0e 100644 > --- a/app/test/test_security.c > +++ b/app/test/test_security.c > @@ -2484,7 +2484,7 @@ static struct unit_test_suite security_testsuite = { > .suite_name = "generic security", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(ut_setup, ut_teardown, > test_session_create_inv_context), > TEST_CASE_ST(ut_setup, ut_teardown, > @@ -2627,7 +2627,7 @@ static struct unit_test_suite security_testsuite = { > test_capability_get_docsis_match), > > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_service_cores.c b/app/test/test_service_cores.c > index 37d7172d53..ff4d3aa95a 100644 > --- a/app/test/test_service_cores.c > +++ b/app/test/test_service_cores.c > @@ -996,7 +996,7 @@ static struct unit_test_suite service_tests = { > .suite_name = "service core test suite", > .setup = testsuite_setup, > .teardown = testsuite_teardown, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE_ST(dummy_register, NULL, unregister_all), > TEST_CASE_ST(dummy_register, NULL, service_name), > TEST_CASE_ST(dummy_register, NULL, service_get_by_name), > @@ -1015,7 +1015,7 @@ static struct unit_test_suite service_tests = { > TEST_CASE_ST(dummy_register, NULL, service_may_be_active), > TEST_CASE_ST(dummy_register, NULL, service_active_two_cores), > TEST_CASES_END() /**< NULL terminate unit test array */ > - } > + }) > }; > > static int > diff --git a/app/test/test_trace.c b/app/test/test_trace.c > index 0f9df83c40..d704ceb8c2 100644 > --- a/app/test/test_trace.c > +++ b/app/test/test_trace.c > @@ -176,7 +176,7 @@ static struct unit_test_suite trace_tests = { > .suite_name = "trace autotest", > .setup = NULL, > .teardown = NULL, > - .unit_test_cases = { > + .unit_test_cases = ((struct unit_test_case []) { > TEST_CASE(test_trace_mode), > TEST_CASE(test_generic_trace_points), > TEST_CASE(test_fp_trace_points), > @@ -185,7 +185,7 @@ static struct unit_test_suite trace_tests = { > TEST_CASE(test_trace_point_regex), > TEST_CASE(test_trace_points_lookup), > TEST_CASES_END() > - } > + }) > }; > > static int