[v2] test/crypto: fix enqueue dequeue callback case

Message ID 20240523124838.3474899-1-gakhil@marvell.com (mailing list archive)
State Superseded
Delegated to: akhil goyal
Headers
Series [v2] test/crypto: fix enqueue dequeue callback case |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/intel-Functional success Functional PASS
ci/github-robot: build success github build: passed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-compile-amd64-testing success Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-compile-arm64-testing success Testing PASS

Commit Message

Akhil Goyal May 23, 2024, 12:48 p.m. UTC
  The enqueue/dequeue callback test cases were using the
test_null_burst_operation() for doing enqueue/dequeue.
But this function is only designed to be run for NULL PMD.
Hence for other PMDs, the callback was not getting called.
Now, used a function test_AES_CBC_HMAC_SHA1_encrypt_digest()
which is normally supported by most of the PMDs.
Also added a check on a global static variable to verify
that the callback is actually called and fail the case if
it is not getting called.

Fixes: 5523a75af539 ("test/crypto: add case for enqueue/dequeue callbacks")
Cc: stable@dpdk.org

Signed-off-by: Akhil Goyal <gakhil@marvell.com>
---
 app/test/test_cryptodev.c | 48 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)
  

Comments

Kundapura, Ganapati May 23, 2024, 5:30 p.m. UTC | #1
Hi,

> -----Original Message-----
> From: Akhil Goyal <gakhil@marvell.com>
> Sent: Thursday, May 23, 2024 6:19 PM
> To: dev@dpdk.org
> Cc: Kundapura, Ganapati <ganapati.kundapura@intel.com>; Gujjar,
> Abhinandan S <abhinandan.gujjar@intel.com>; fanzhang.oss@gmail.com;
> anoobj@marvell.com; Akhil Goyal <gakhil@marvell.com>; stable@dpdk.org
> Subject: [PATCH v2] test/crypto: fix enqueue dequeue callback case
> 
> The enqueue/dequeue callback test cases were using the
> test_null_burst_operation() for doing enqueue/dequeue.
> But this function is only designed to be run for NULL PMD.
> Hence for other PMDs, the callback was not getting called.
> Now, used a function test_AES_CBC_HMAC_SHA1_encrypt_digest()
> which is normally supported by most of the PMDs.
> Also added a check on a global static variable to verify that the callback is
> actually called and fail the case if it is not getting called.
> 
> Fixes: 5523a75af539 ("test/crypto: add case for enqueue/dequeue callbacks")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> ---
>  app/test/test_cryptodev.c | 48
> ++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 47 insertions(+), 1 deletion(-)
> 
> diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c index
> 1703ebccf1..87ffde6a8b 100644
> --- a/app/test/test_cryptodev.c
> +++ b/app/test/test_cryptodev.c
> @@ -199,6 +199,8 @@ post_process_raw_dp_op(void *user_data,
> 	uint32_t index __rte_unused,
>  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 bool enq_cb_called;
> +static bool deq_cb_called;
> 
>  int
>  process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id, @@ -14556,6
> +14558,7 @@ test_enq_callback(uint16_t dev_id, uint16_t qp_id, struct
> rte_crypto_op **ops,
>  	RTE_SET_USED(ops);
>  	RTE_SET_USED(user_param);
> 
> +	enq_cb_called = true;
>  	printf("crypto enqueue callback called\n");
>  	return nb_ops;
>  }
> @@ -14569,6 +14572,7 @@ test_deq_callback(uint16_t dev_id, uint16_t
> qp_id, struct rte_crypto_op **ops,
>  	RTE_SET_USED(ops);
>  	RTE_SET_USED(user_param);
> 
> +	deq_cb_called = true;
>  	printf("crypto dequeue callback called\n");
>  	return nb_ops;
>  }
> @@ -14583,7 +14587,7 @@ test_enqdeq_callback_thread(void *arg)
>  	/* DP thread calls rte_cryptodev_enqueue_burst()/
>  	 * rte_cryptodev_dequeue_burst() and invokes callback.
>  	 */
> -	test_null_burst_operation();
> +	test_AES_CBC_HMAC_SHA1_encrypt_digest();
With this change cryptodev_null_autotest is skipping test_enq_callback_setup and test_deq_callback_setup tests as NULL PMD doesn't support 
RTE_CRYPTO_SYM_XFORM_AUTH and RTE_CRYPTO_AUTH_SHA1_HMAC capabilities.
Would be better if it works for both NULL PMD and other PMD's.

>  	return 0;
>  }
> 
> @@ -14591,6 +14595,7 @@ static int
>  test_enq_callback_setup(void)
>  {
>  	struct crypto_testsuite_params *ts_params = &testsuite_params;
> +	struct rte_cryptodev_sym_capability_idx cap_idx;
>  	struct rte_cryptodev_info dev_info;
>  	struct rte_cryptodev_qp_conf qp_conf = {
>  		.nb_descriptors = MAX_NUM_OPS_INFLIGHT @@ -14598,6
> +14603,19 @@ test_enq_callback_setup(void)
> 
>  	struct rte_cryptodev_cb *cb;
>  	uint16_t qp_id = 0;
> +	int j = 0;
> +
> +	/* Verify the crypto capabilities for which enqueue/dequeue is done.
> */
> +	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
> +	cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA1_HMAC;
> +	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
> +			&cap_idx) == NULL)
> +		return TEST_SKIPPED;
> +	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
> +	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC;
> +	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
> +			&cap_idx) == NULL)
> +		return TEST_SKIPPED;
> 
>  	/* Stop the device in case it's started so it can be configured */
>  	rte_cryptodev_stop(ts_params->valid_devs[0]);
> @@ -14621,6 +14639,7 @@ test_enq_callback_setup(void)
>  			qp_conf.nb_descriptors, qp_id,
>  			ts_params->valid_devs[0]);
> 
> +	enq_cb_called = false;
>  	/* Test with invalid crypto device */
>  	cb = rte_cryptodev_add_enq_callback(RTE_CRYPTO_MAX_DEVS,
>  			qp_id, test_enq_callback, NULL);
> @@ -14660,6 +14679,10 @@ test_enq_callback_setup(void)
>  	/* Wait until reader exited. */
>  	rte_eal_mp_wait_lcore();
> 
> +	/* Wait until callback not called. */
> +	while (!enq_cb_called && (j++ < 10))
> +		rte_delay_ms(10);
> +
>  	/* Test with invalid crypto device */
>  	TEST_ASSERT_FAIL(rte_cryptodev_remove_enq_callback(
>  			RTE_CRYPTO_MAX_DEVS, qp_id, cb),
> @@ -14683,6 +14706,8 @@ test_enq_callback_setup(void)
>  			"qp %u on cryptodev %u",
>  			qp_id, ts_params->valid_devs[0]);
> 
> +	TEST_ASSERT(enq_cb_called == true, "Crypto enqueue callback not
> +called");
> +
>  	return TEST_SUCCESS;
>  }
> 
> @@ -14690,6 +14715,7 @@ static int
>  test_deq_callback_setup(void)
>  {
>  	struct crypto_testsuite_params *ts_params = &testsuite_params;
> +	struct rte_cryptodev_sym_capability_idx cap_idx;
>  	struct rte_cryptodev_info dev_info;
>  	struct rte_cryptodev_qp_conf qp_conf = {
>  		.nb_descriptors = MAX_NUM_OPS_INFLIGHT @@ -14697,6
> +14723,19 @@ test_deq_callback_setup(void)
> 
>  	struct rte_cryptodev_cb *cb;
>  	uint16_t qp_id = 0;
> +	int j = 0;
> +
> +	/* Verify the crypto capabilities for which enqueue/dequeue is done.
> */
> +	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
> +	cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA1_HMAC;
> +	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
> +			&cap_idx) == NULL)
> +		return TEST_SKIPPED;
> +	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
> +	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC;
> +	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
> +			&cap_idx) == NULL)
> +		return TEST_SKIPPED;
> 
>  	/* Stop the device in case it's started so it can be configured */
>  	rte_cryptodev_stop(ts_params->valid_devs[0]);
> @@ -14720,6 +14759,7 @@ test_deq_callback_setup(void)
>  			qp_conf.nb_descriptors, qp_id,
>  			ts_params->valid_devs[0]);
> 
> +	deq_cb_called = false;
>  	/* Test with invalid crypto device */
>  	cb = rte_cryptodev_add_deq_callback(RTE_CRYPTO_MAX_DEVS,
>  			qp_id, test_deq_callback, NULL);
> @@ -14759,6 +14799,10 @@ test_deq_callback_setup(void)
>  	/* Wait until reader exited. */
>  	rte_eal_mp_wait_lcore();
> 
> +	/* Wait until callback not called. */
> +	while (!deq_cb_called && (j++ < 10))
> +		rte_delay_ms(10);
> +
>  	/* Test with invalid crypto device */
>  	TEST_ASSERT_FAIL(rte_cryptodev_remove_deq_callback(
>  			RTE_CRYPTO_MAX_DEVS, qp_id, cb),
> @@ -14782,6 +14826,8 @@ test_deq_callback_setup(void)
>  			"qp %u on cryptodev %u",
>  			qp_id, ts_params->valid_devs[0]);
> 
> +	TEST_ASSERT(deq_cb_called == true, "Crypto dequeue callback not
> +called");
> +
>  	return TEST_SUCCESS;
>  }
> 
> --
> 2.25.1
  

Patch

diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index 1703ebccf1..87ffde6a8b 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -199,6 +199,8 @@  post_process_raw_dp_op(void *user_data,	uint32_t index __rte_unused,
 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 bool enq_cb_called;
+static bool deq_cb_called;
 
 int
 process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
@@ -14556,6 +14558,7 @@  test_enq_callback(uint16_t dev_id, uint16_t qp_id, struct rte_crypto_op **ops,
 	RTE_SET_USED(ops);
 	RTE_SET_USED(user_param);
 
+	enq_cb_called = true;
 	printf("crypto enqueue callback called\n");
 	return nb_ops;
 }
@@ -14569,6 +14572,7 @@  test_deq_callback(uint16_t dev_id, uint16_t qp_id, struct rte_crypto_op **ops,
 	RTE_SET_USED(ops);
 	RTE_SET_USED(user_param);
 
+	deq_cb_called = true;
 	printf("crypto dequeue callback called\n");
 	return nb_ops;
 }
@@ -14583,7 +14587,7 @@  test_enqdeq_callback_thread(void *arg)
 	/* DP thread calls rte_cryptodev_enqueue_burst()/
 	 * rte_cryptodev_dequeue_burst() and invokes callback.
 	 */
-	test_null_burst_operation();
+	test_AES_CBC_HMAC_SHA1_encrypt_digest();
 	return 0;
 }
 
@@ -14591,6 +14595,7 @@  static int
 test_enq_callback_setup(void)
 {
 	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct rte_cryptodev_sym_capability_idx cap_idx;
 	struct rte_cryptodev_info dev_info;
 	struct rte_cryptodev_qp_conf qp_conf = {
 		.nb_descriptors = MAX_NUM_OPS_INFLIGHT
@@ -14598,6 +14603,19 @@  test_enq_callback_setup(void)
 
 	struct rte_cryptodev_cb *cb;
 	uint16_t qp_id = 0;
+	int j = 0;
+
+	/* Verify the crypto capabilities for which enqueue/dequeue is done. */
+	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+	cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA1_HMAC;
+	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
+			&cap_idx) == NULL)
+		return TEST_SKIPPED;
+	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC;
+	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
+			&cap_idx) == NULL)
+		return TEST_SKIPPED;
 
 	/* Stop the device in case it's started so it can be configured */
 	rte_cryptodev_stop(ts_params->valid_devs[0]);
@@ -14621,6 +14639,7 @@  test_enq_callback_setup(void)
 			qp_conf.nb_descriptors, qp_id,
 			ts_params->valid_devs[0]);
 
+	enq_cb_called = false;
 	/* Test with invalid crypto device */
 	cb = rte_cryptodev_add_enq_callback(RTE_CRYPTO_MAX_DEVS,
 			qp_id, test_enq_callback, NULL);
@@ -14660,6 +14679,10 @@  test_enq_callback_setup(void)
 	/* Wait until reader exited. */
 	rte_eal_mp_wait_lcore();
 
+	/* Wait until callback not called. */
+	while (!enq_cb_called && (j++ < 10))
+		rte_delay_ms(10);
+
 	/* Test with invalid crypto device */
 	TEST_ASSERT_FAIL(rte_cryptodev_remove_enq_callback(
 			RTE_CRYPTO_MAX_DEVS, qp_id, cb),
@@ -14683,6 +14706,8 @@  test_enq_callback_setup(void)
 			"qp %u on cryptodev %u",
 			qp_id, ts_params->valid_devs[0]);
 
+	TEST_ASSERT(enq_cb_called == true, "Crypto enqueue callback not called");
+
 	return TEST_SUCCESS;
 }
 
@@ -14690,6 +14715,7 @@  static int
 test_deq_callback_setup(void)
 {
 	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct rte_cryptodev_sym_capability_idx cap_idx;
 	struct rte_cryptodev_info dev_info;
 	struct rte_cryptodev_qp_conf qp_conf = {
 		.nb_descriptors = MAX_NUM_OPS_INFLIGHT
@@ -14697,6 +14723,19 @@  test_deq_callback_setup(void)
 
 	struct rte_cryptodev_cb *cb;
 	uint16_t qp_id = 0;
+	int j = 0;
+
+	/* Verify the crypto capabilities for which enqueue/dequeue is done. */
+	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+	cap_idx.algo.auth = RTE_CRYPTO_AUTH_SHA1_HMAC;
+	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
+			&cap_idx) == NULL)
+		return TEST_SKIPPED;
+	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_AES_CBC;
+	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
+			&cap_idx) == NULL)
+		return TEST_SKIPPED;
 
 	/* Stop the device in case it's started so it can be configured */
 	rte_cryptodev_stop(ts_params->valid_devs[0]);
@@ -14720,6 +14759,7 @@  test_deq_callback_setup(void)
 			qp_conf.nb_descriptors, qp_id,
 			ts_params->valid_devs[0]);
 
+	deq_cb_called = false;
 	/* Test with invalid crypto device */
 	cb = rte_cryptodev_add_deq_callback(RTE_CRYPTO_MAX_DEVS,
 			qp_id, test_deq_callback, NULL);
@@ -14759,6 +14799,10 @@  test_deq_callback_setup(void)
 	/* Wait until reader exited. */
 	rte_eal_mp_wait_lcore();
 
+	/* Wait until callback not called. */
+	while (!deq_cb_called && (j++ < 10))
+		rte_delay_ms(10);
+
 	/* Test with invalid crypto device */
 	TEST_ASSERT_FAIL(rte_cryptodev_remove_deq_callback(
 			RTE_CRYPTO_MAX_DEVS, qp_id, cb),
@@ -14782,6 +14826,8 @@  test_deq_callback_setup(void)
 			"qp %u on cryptodev %u",
 			qp_id, ts_params->valid_devs[0]);
 
+	TEST_ASSERT(deq_cb_called == true, "Crypto dequeue callback not called");
+
 	return TEST_SUCCESS;
 }