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 E5C8CA054F; Tue, 16 Mar 2021 15:33:50 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D984F260091; Tue, 16 Mar 2021 15:33:13 +0100 (CET) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id 3A5AA26007C for ; Tue, 16 Mar 2021 15:33:11 +0100 (CET) IronPort-SDR: LFJS6Yn5aSKZKLFzzJcYNqOFPijdOudFLT7bnRVtygzzrzVENtD6c6KTLpRP26b2Hike9S89Eu tLxmNGRjx5qg== X-IronPort-AV: E=McAfee;i="6000,8403,9924"; a="189361827" X-IronPort-AV: E=Sophos;i="5.81,251,1610438400"; d="scan'208";a="189361827" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Mar 2021 07:33:10 -0700 IronPort-SDR: gqacvckB1+wlvTmGEMMkHGsqHlGFQ0Pz+LWsrVmE19HZo7/7JiMRYZu2woXMUS5SVyLsBWxAUc xCuRfn8Ol2wg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,251,1610438400"; d="scan'208";a="373805458" Received: from silpixa00400355.ir.intel.com (HELO silpixa00400355.ger.corp.intel.com) ([10.237.223.148]) by orsmga006.jf.intel.com with ESMTP; 16 Mar 2021 07:33:08 -0700 From: Ciara Power To: dev@dpdk.org Cc: declan.doherty@intel.com, Ciara Power , Konstantin Ananyev , Bernard Iremonger , Vladimir Medvedkin Date: Tue, 16 Mar 2021 14:32:51 +0000 Message-Id: <20210316143253.3849182-5-ciara.power@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210316143253.3849182-1-ciara.power@intel.com> References: <20210316143253.3849182-1-ciara.power@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 4/6] test/crypto: move testsuite params to header file 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" The testsuite params struct and ut functions are now in the cryptodev test header file. This will allow them be used outside of the cryptodev_test.c file. They will be used in a subsequent patch by the blockcipher test. As a result of this change, slight renaming changes were necessary for ipsec and asym tests, to avoid a clash in names. Signed-off-by: Ciara Power --- app/test/test_cryptodev.c | 18 ++----- app/test/test_cryptodev.h | 20 ++++++++ app/test/test_cryptodev_asym.c | 93 ++++++++++++++++++---------------- app/test/test_ipsec.c | 32 ++++++------ 4 files changed, 89 insertions(+), 74 deletions(-) diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c index 638b3845d4..6cfd866f2f 100644 --- a/app/test/test_cryptodev.c +++ b/app/test/test_cryptodev.c @@ -72,19 +72,6 @@ static enum rte_security_session_action_type gbl_action_type = enum cryptodev_api_test_type global_api_test_type = CRYPTODEV_API_TEST; -struct crypto_testsuite_params { - struct rte_mempool *mbuf_pool; - struct rte_mempool *large_mbuf_pool; - struct rte_mempool *op_mpool; - struct rte_mempool *session_mpool; - struct rte_mempool *session_priv_mpool; - struct rte_cryptodev_config conf; - struct rte_cryptodev_qp_conf qp_conf; - - uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS]; - uint8_t valid_dev_count; -}; - struct crypto_unittest_params { struct rte_crypto_sym_xform cipher_xform; struct rte_crypto_sym_xform auth_xform; @@ -492,6 +479,7 @@ process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op) } static struct crypto_testsuite_params testsuite_params = { NULL }; +struct crypto_testsuite_params *p_testsuite_params = &testsuite_params; static struct crypto_unittest_params unittest_params; static int @@ -922,7 +910,7 @@ dev_configure_and_start(uint64_t ff_disable) return TEST_SUCCESS; } -static int +int ut_setup(void) { /* Configure and start the device with security feature disabled */ @@ -936,7 +924,7 @@ ut_setup_security(void) return dev_configure_and_start(0); } -static void +void ut_teardown(void) { struct crypto_testsuite_params *ts_params = &testsuite_params; diff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h index bf4f6c8d62..5b97f716a0 100644 --- a/app/test/test_cryptodev.h +++ b/app/test/test_cryptodev.h @@ -79,6 +79,20 @@ enum cryptodev_api_test_type { extern enum cryptodev_api_test_type global_api_test_type; +extern struct crypto_testsuite_params *p_testsuite_params; +struct crypto_testsuite_params { + struct rte_mempool *mbuf_pool; + struct rte_mempool *large_mbuf_pool; + struct rte_mempool *op_mpool; + struct rte_mempool *session_mpool; + struct rte_mempool *session_priv_mpool; + struct rte_cryptodev_config conf; + struct rte_cryptodev_qp_conf qp_conf; + + uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS]; + uint8_t valid_dev_count; +}; + /** * Write (spread) data from buffer to mbuf data * @@ -222,4 +236,10 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id, struct rte_crypto_op *op, uint8_t is_cipher, uint8_t is_auth, uint8_t len_in_bits, uint8_t cipher_iv_len); +int +ut_setup(void); + +void +ut_teardown(void); + #endif /* TEST_CRYPTODEV_H_ */ diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c index 4a2c0a310f..e0133f31cb 100644 --- a/app/test/test_cryptodev_asym.c +++ b/app/test/test_cryptodev_asym.c @@ -35,7 +35,7 @@ #define TEST_VECTOR_SIZE 256 static int gbl_driver_id; -struct crypto_testsuite_params { +struct crypto_testsuite_params_asym { struct rte_mempool *op_mpool; struct rte_mempool *session_mpool; struct rte_cryptodev_config conf; @@ -63,12 +63,12 @@ static struct test_cases_array test_vector = {0, { NULL } }; static uint32_t test_index; -static struct crypto_testsuite_params testsuite_params = { NULL }; +static struct crypto_testsuite_params_asym testsuite_params = { NULL }; static int queue_ops_rsa_sign_verify(struct rte_cryptodev_asym_session *sess) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_op *op, *result_op; @@ -159,7 +159,7 @@ queue_ops_rsa_sign_verify(struct rte_cryptodev_asym_session *sess) static int queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session *sess) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_op *op, *result_op; @@ -300,7 +300,7 @@ test_cryptodev_asym_ver(struct rte_crypto_op *op, } static int -test_cryptodev_asym_op(struct crypto_testsuite_params *ts_params, +test_cryptodev_asym_op(struct crypto_testsuite_params_asym *ts_params, union test_case_structure *data_tc, char *test_msg, int sessionless, enum rte_crypto_asym_op_type type, enum rte_crypto_rsa_priv_key_type key_type) @@ -617,7 +617,7 @@ static int test_one_by_one(void) { int status = TEST_SUCCESS; - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; uint32_t i = 0; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_cryptodev_info dev_info; @@ -650,7 +650,7 @@ test_one_by_one(void) static int test_rsa_sign_verify(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_cryptodev_asym_session *sess; @@ -699,7 +699,7 @@ test_rsa_sign_verify(void) static int test_rsa_enc_dec(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_cryptodev_asym_session *sess; @@ -747,7 +747,7 @@ test_rsa_enc_dec(void) static int test_rsa_sign_verify_crt(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_cryptodev_asym_session *sess; @@ -795,7 +795,7 @@ test_rsa_sign_verify_crt(void) static int test_rsa_enc_dec_crt(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_cryptodev_asym_session *sess; @@ -842,7 +842,7 @@ test_rsa_enc_dec_crt(void) static int testsuite_setup(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS]; struct rte_cryptodev_info info; int ret, dev_id = -1; @@ -959,7 +959,7 @@ testsuite_setup(void) static void testsuite_teardown(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; if (ts_params->op_mpool != NULL) { RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n", @@ -974,9 +974,9 @@ testsuite_teardown(void) } static int -ut_setup(void) +ut_setup_asym(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; uint16_t qp_id; @@ -1008,9 +1008,9 @@ ut_setup(void) } static void -ut_teardown(void) +ut_teardown_asym(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_cryptodev_stats stats; rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats); @@ -1056,7 +1056,7 @@ static inline void print_asym_capa( static int test_capability(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_cryptodev_info dev_info; const struct rte_cryptodev_capabilities *dev_capa; @@ -1093,7 +1093,7 @@ test_capability(void) static int test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; @@ -1186,7 +1186,7 @@ test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm) static int test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; @@ -1277,7 +1277,7 @@ test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm) static int test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; @@ -1376,7 +1376,7 @@ test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm) static int test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; @@ -1473,7 +1473,7 @@ test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm) static int test_mod_inv(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; @@ -1597,7 +1597,7 @@ test_mod_inv(void) static int test_mod_exp(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; @@ -1757,7 +1757,7 @@ test_dh_keygenration(void) static int test_dsa_sign(void) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; @@ -1901,7 +1901,7 @@ test_dsa(void) static int test_ecdsa_sign_verify(enum curve curve_id) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; struct rte_mempool *op_mpool = ts_params->op_mpool; struct crypto_testsuite_ecdsa_params input_params; @@ -2114,7 +2114,7 @@ test_ecdsa_sign_verify_all_curve(void) static int test_ecpm(enum curve curve_id) { - struct crypto_testsuite_params *ts_params = &testsuite_params; + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; struct rte_mempool *op_mpool = ts_params->op_mpool; struct crypto_testsuite_ecpm_params input_params; @@ -2289,16 +2289,20 @@ static struct unit_test_suite cryptodev_openssl_asym_testsuite = { .setup = testsuite_setup, .teardown = testsuite_teardown, .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), - TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec), - TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_sign_verify), - TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec_crt), - TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_sign_verify_crt), - TEST_CASE_ST(ut_setup, ut_teardown, test_mod_inv), - TEST_CASE_ST(ut_setup, ut_teardown, test_mod_exp), - TEST_CASE_ST(ut_setup, ut_teardown, test_one_by_one), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_capability), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_dsa), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, + test_dh_keygenration), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_rsa_enc_dec), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, + test_rsa_sign_verify), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, + test_rsa_enc_dec_crt), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, + test_rsa_sign_verify_crt), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_mod_inv), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_mod_exp), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_one_by_one), TEST_CASES_END() /**< NULL terminate unit test array */ }) }; @@ -2308,7 +2312,7 @@ static struct unit_test_suite cryptodev_qat_asym_testsuite = { .setup = testsuite_setup, .teardown = testsuite_teardown, .unit_test_cases = ((struct unit_test_case []) { - TEST_CASE_ST(ut_setup, ut_teardown, test_one_by_one), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_one_by_one), TEST_CASES_END() /**< NULL terminate unit test array */ }) }; @@ -2318,13 +2322,16 @@ static struct unit_test_suite cryptodev_octeontx_asym_testsuite = { .setup = testsuite_setup, .teardown = testsuite_teardown, .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), - TEST_CASE_ST(ut_setup, ut_teardown, test_mod_exp), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_capability), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, + test_rsa_enc_dec_crt), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, + test_rsa_sign_verify_crt), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_mod_exp), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, test_ecdsa_sign_verify_all_curve), - TEST_CASE_ST(ut_setup, ut_teardown, test_ecpm_all_curve), + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, + test_ecpm_all_curve), TEST_CASES_END() /**< NULL terminate unit test array */ }) }; diff --git a/app/test/test_ipsec.c b/app/test/test_ipsec.c index bd9fc3f999..d78f2c57fd 100644 --- a/app/test/test_ipsec.c +++ b/app/test/test_ipsec.c @@ -424,7 +424,7 @@ testsuite_teardown(void) } static int -ut_setup(void) +ut_setup_ipsec(void) { struct ipsec_testsuite_params *ts_params = &testsuite_params; struct ipsec_unitest_params *ut_params = &unittest_params; @@ -444,7 +444,7 @@ ut_setup(void) } static void -ut_teardown(void) +ut_teardown_ipsec(void) { struct ipsec_testsuite_params *ts_params = &testsuite_params; struct ipsec_unitest_params *ut_params = &unittest_params; @@ -2499,33 +2499,33 @@ static struct unit_test_suite ipsec_testsuite = { .setup = testsuite_setup, .teardown = testsuite_teardown, .unit_test_cases = ((struct unit_test_case []) { - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_crypto_inb_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_crypto_outb_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_inline_crypto_inb_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_inline_crypto_outb_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_inline_proto_inb_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_inline_proto_outb_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_lksd_proto_inb_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_lksd_proto_outb_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_replay_inb_inside_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_replay_inb_outside_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_replay_inb_repeat_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_replay_inb_inside_burst_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_crypto_inb_burst_2sa_null_null_wrapper), - TEST_CASE_ST(ut_setup, ut_teardown, + TEST_CASE_ST(ut_setup_ipsec, ut_teardown_ipsec, test_ipsec_crypto_inb_burst_2sa_4grp_null_null_wrapper), TEST_CASES_END() /**< NULL terminate unit test array */ }) -- 2.25.1