Skip to content

Commit

Permalink
test/crypto: fix enqueue dequeue callback case
Browse files Browse the repository at this point in the history
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: 5523a75 ("test/crypto: add case for enqueue/dequeue callbacks")
Cc: stable@dpdk.org

Signed-off-by: Akhil Goyal <gakhil@marvell.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
  • Loading branch information
Akhil Goyal authored and ovsrobot committed May 23, 2024
1 parent 6f80df8 commit ffb0e5e
Showing 1 changed file with 47 additions and 1 deletion.
48 changes: 47 additions & 1 deletion app/test/test_cryptodev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand All @@ -14583,21 +14587,35 @@ 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;
}

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
};

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]);
Expand All @@ -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);
Expand Down Expand Up @@ -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),
Expand All @@ -14683,20 +14706,36 @@ 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;
}

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
};

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]);
Expand All @@ -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);
Expand Down Expand Up @@ -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),
Expand All @@ -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;
}

Expand Down

0 comments on commit ffb0e5e

Please sign in to comment.