1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
7 #include <rte_memory.h>
8 #include <rte_mempool.h>
9 #include <rte_security.h>
10 #include <rte_security_driver.h>
12 /* Before including rte_test.h file you can define
13 * RTE_TEST_TRACE_FAILURE(_file, _line, _func) macro to better trace/debug test
14 * failures. Mostly useful in development phase.
16 #ifndef RTE_TEST_TRACE_FAILURE
17 #define RTE_TEST_TRACE_FAILURE(_file, _line, _func) \
18 RTE_LOG(DEBUG, EAL, "in %s:%d %s\n", _file, _line, _func)
28 * Basic unit tests of the librte_security API.
30 * Structure of the file:
31 * - macros for making tests more readable;
32 * - mockup structures and functions for rte_security_ops;
33 * - test suite and test cases setup and teardown functions;
35 * - declaration of testcases.
42 * Set of macros for making tests easier to read.
46 * Verify condition inside mocked up function.
47 * Mockup function cannot return a test error, so the failure
48 * of assertion increases counter and print logs.
49 * The counter can be verified later to check if test case should fail.
51 * @param fail_counter fail counter
52 * @param cond condition expected to be true
53 * @param msg printf style formatting string for custom message
55 #define MOCK_TEST_ASSERT(fail_counter, cond, msg, ...) do { \
58 RTE_LOG(DEBUG, EAL, "Test assert %s line %d failed: " \
59 msg "\n", __func__, __LINE__, \
61 RTE_TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
66 * Verify equality condition inside mocked up function.
67 * Mockup function cannot return a test error, so the failure
68 * of assertion increases counter and print logs.
69 * The counter can be verified later to check if test case should fail.
71 * @param fail_counter fail counter
72 * @param a first value of comparison
73 * @param b second value of comparison
74 * @param msg printf style formatting string for custom message
76 #define MOCK_TEST_ASSERT_EQUAL(fail_counter, a, b, msg, ...) \
77 MOCK_TEST_ASSERT(fail_counter, (a) == (b), msg, ##__VA_ARGS__)
81 * Verify if parameter of the mocked up function matches expected value.
82 * The expected value is stored in data structure in the field matching
85 * @param data structure with expected values
86 * @param parameter name of the parameter (both field and parameter name)
87 * @param spec printf style spec for parameter
89 #define MOCK_TEST_ASSERT_PARAMETER(data, parameter, spec) \
90 MOCK_TEST_ASSERT_EQUAL(data.failed, data.parameter, parameter, \
91 "Expecting parameter %s to be " spec \
92 " but it's " spec, RTE_STR(parameter), \
93 data.parameter, parameter)
96 * Wrap for MOCK_TEST_ASSERT_PARAMETER macro for pointer type parameters.
98 * @param data structure with expected values
99 * @param parameter name of the parameter (both field and parameter name)
101 #define MOCK_TEST_ASSERT_POINTER_PARAMETER(data, parameter) \
102 MOCK_TEST_ASSERT_PARAMETER(data, parameter, "%p")
105 * Verify number of calls of the mocked up function
106 * and check if there were any fails during execution.
107 * The fails statistics inside mocked up functions are collected
108 * as "failed" field in mockup structures.
110 * @param mock_data structure with statistics (called, failed)
111 * @param exp_calls expected number of mockup function calls
113 #define TEST_ASSERT_MOCK_CALLS(mock_data, exp_calls) do { \
114 TEST_ASSERT_EQUAL(exp_calls, mock_data.called, \
115 "Expecting sub op to be called %d times, " \
116 "but it's called %d times", \
117 exp_calls, mock_data.called); \
118 TEST_ASSERT_EQUAL(0, mock_data.failed, \
119 "Expecting sub op asserts not to fail, " \
120 "but they're failed %d times", \
125 * Assert tested function result match expected value
127 * @param f_name name of tested function
128 * @param f_ret value returned by the function
129 * @param exp_ret expected returned value
130 * @param fmt printf style format for returned value
132 #define TEST_ASSERT_MOCK_FUNCTION_CALL_RET(f_name, f_ret, exp_ret, fmt) \
133 TEST_ASSERT_EQUAL(exp_ret, f_ret, "Expecting " RTE_STR(f_name) \
134 " to return " fmt ", but it returned " fmt \
135 "\n", exp_ret, f_ret)
138 * Assert tested function result is not NULL
140 * @param f_name name of tested function
141 * @param f_ret value returned by the function
143 #define TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(f_name, f_ret) \
144 TEST_ASSERT_NOT_NULL(f_ret, "Expecting " RTE_STR(f_name) \
145 " to return not NULL\n")
148 * Verify that sess_cnt counter value matches expected
150 * @param expected_sessions_count expected counter value
152 #define TEST_ASSERT_SESSION_COUNT(expected_sessions_count) do { \
153 struct security_unittest_params *ut_params = &unittest_params; \
154 TEST_ASSERT_EQUAL(expected_sessions_count, \
155 ut_params->ctx.sess_cnt, \
156 "Expecting session counter to be %u," \
157 " but it's %u", expected_sessions_count, \
158 ut_params->ctx.sess_cnt); \
162 * Verify usage of mempool by checking if number of allocated objects matches
163 * expectations. The mempool is used to manage objects for sessions data.
164 * A single object is acquired from mempool during session_create
165 * and put back in session_destroy.
167 * @param expected_mempool_usage expected number of used mempool objects
169 #define TEST_ASSERT_MEMPOOL_USAGE(expected_mempool_usage) do { \
170 struct security_testsuite_params *ts_params = &testsuite_params;\
171 unsigned int mempool_usage; \
172 mempool_usage = rte_mempool_in_use_count( \
173 ts_params->session_mpool); \
174 TEST_ASSERT_EQUAL(expected_mempool_usage, mempool_usage, \
175 "Expecting %u mempool allocations, " \
176 "but there are %u allocated objects", \
177 expected_mempool_usage, mempool_usage); \
182 * Mockup structures and functions for rte_security_ops;
184 * Set of structures for controlling mockup functions calls.
185 * Every mockup function X has its corresponding X_data structure
186 * and an instance of that structure X_exp.
187 * Structure contains parameters that a mockup function is expected
188 * to be called with, a value to return (.ret) and 2 statistics:
189 * .called (number of times the mockup function was called)
190 * and .failed (number of assertion fails during mockup function call).
192 * Mockup functions verify that the parameters they are called with match
193 * expected values. The expected values should be stored in corresponding
194 * structures prior to mockup functions call. Every failure of such
195 * verification increases .failed counter. Every call of mockup function
196 * increases .called counter. Function returns value stored in .ret field
198 * In case of some parameters in some functions the expected value is unknown
199 * and cannot be detrmined prior to call. Such parameters are stored
200 * in structure and can be compared or analyzed later in test case code.
202 * Below structures and functions follow the rules just described.
203 * Additional remarks and exceptions are added in comments.
207 * session_create mockup
209 * Verified parameters: device, conf, mp.
210 * Saved, not verified parameters: sess.
212 static struct mock_session_create_data {
214 struct rte_security_session_conf *conf;
215 struct rte_security_session *sess;
216 struct rte_mempool *mp;
222 } mock_session_create_exp = {NULL, NULL, NULL, NULL, 0, 0, 0};
225 mock_session_create(void *device,
226 struct rte_security_session_conf *conf,
227 struct rte_security_session *sess,
228 struct rte_mempool *mp)
230 mock_session_create_exp.called++;
232 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, device);
233 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, conf);
234 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, mp);
236 mock_session_create_exp.sess = sess;
238 return mock_session_create_exp.ret;
242 * session_update mockup
244 * Verified parameters: device, sess, conf.
246 static struct mock_session_update_data {
248 struct rte_security_session *sess;
249 struct rte_security_session_conf *conf;
255 } mock_session_update_exp = {NULL, NULL, NULL, 0, 0, 0};
258 mock_session_update(void *device,
259 struct rte_security_session *sess,
260 struct rte_security_session_conf *conf)
262 mock_session_update_exp.called++;
264 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, device);
265 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, sess);
266 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, conf);
268 return mock_session_update_exp.ret;
272 * session_get_size mockup
274 * Verified parameters: device.
276 static struct mock_session_get_size_data {
283 } mock_session_get_size_exp = {NULL, 0U, 0, 0};
286 mock_session_get_size(void *device)
288 mock_session_get_size_exp.called++;
290 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_get_size_exp, device);
292 return mock_session_get_size_exp.ret;
296 * session_stats_get mockup
298 * Verified parameters: device, sess, stats.
300 static struct mock_session_stats_get_data {
302 struct rte_security_session *sess;
303 struct rte_security_stats *stats;
309 } mock_session_stats_get_exp = {NULL, NULL, NULL, 0, 0, 0};
312 mock_session_stats_get(void *device,
313 struct rte_security_session *sess,
314 struct rte_security_stats *stats)
316 mock_session_stats_get_exp.called++;
318 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, device);
319 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, sess);
320 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, stats);
322 return mock_session_stats_get_exp.ret;
326 * session_destroy mockup
328 * Verified parameters: device, sess.
330 static struct mock_session_destroy_data {
332 struct rte_security_session *sess;
338 } mock_session_destroy_exp = {NULL, NULL, 0, 0, 0};
341 mock_session_destroy(void *device, struct rte_security_session *sess)
343 mock_session_destroy_exp.called++;
345 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_destroy_exp, device);
346 MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_destroy_exp, sess);
348 return mock_session_destroy_exp.ret;
354 * is an empty security operations set (all function pointers set to NULL)
356 struct rte_security_ops empty_ops = { NULL };
361 * is a security operations set using mockup functions
363 struct rte_security_ops mock_ops = {
364 .session_create = mock_session_create,
365 .session_update = mock_session_update,
366 .session_get_size = mock_session_get_size,
367 .session_stats_get = mock_session_stats_get,
368 .session_destroy = mock_session_destroy,
373 * Test suite and test cases setup and teardown functions.
377 * struct security_testsuite_params defines parameters initialized once
378 * for whole tests suite.
379 * Currently the only stored parameter is session_mpool a mempool created
380 * once in testsuite_setup and released in testsuite_teardown.
381 * The instance of this structure is stored in testsuite_params variable.
383 static struct security_testsuite_params {
384 struct rte_mempool *session_mpool;
385 } testsuite_params = { NULL };
388 * struct security_unittest_params defines parameters initialized
389 * for every test case. The parameters are initialized in ut_setup
390 * or ut_setup_with_session (depending on the testcase)
391 * and released in ut_teardown.
392 * The instance of this structure is stored in unittest_params variable.
394 static struct security_unittest_params {
395 struct rte_security_ctx ctx;
396 struct rte_security_session_conf conf;
397 struct rte_security_session *sess;
398 } unittest_params = {
407 #define SECURITY_TEST_MEMPOOL_NAME "SecurityTestsMempoolName"
408 #define SECURITY_TEST_MEMPOOL_SIZE 15
409 #define SECURITY_TEST_SESSION_OBJECT_SIZE sizeof(struct rte_security_session)
412 * testsuite_setup initializes whole test suite parameters.
413 * It creates a new mempool used in all test cases
414 * and verifies if it properly created.
417 testsuite_setup(void)
419 struct security_testsuite_params *ts_params = &testsuite_params;
420 ts_params->session_mpool = rte_mempool_create(
421 SECURITY_TEST_MEMPOOL_NAME,
422 SECURITY_TEST_MEMPOOL_SIZE,
423 SECURITY_TEST_SESSION_OBJECT_SIZE,
424 0, 0, NULL, NULL, NULL, NULL,
426 TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
427 "Cannot create mempool %s\n", rte_strerror(rte_errno));
432 * testsuite_teardown releases test suite wide parameters.
435 testsuite_teardown(void)
437 struct security_testsuite_params *ts_params = &testsuite_params;
438 if (ts_params->session_mpool) {
439 rte_mempool_free(ts_params->session_mpool);
440 ts_params->session_mpool = NULL;
445 * ut_setup initializes test case parameters to default values.
446 * It resets also any .called and .failed statistics of mockup functions
452 struct security_unittest_params *ut_params = &unittest_params;
453 ut_params->ctx.device = NULL;
454 ut_params->ctx.ops = &mock_ops;
455 ut_params->ctx.sess_cnt = 0;
456 ut_params->sess = NULL;
458 mock_session_create_exp.called = 0;
459 mock_session_update_exp.called = 0;
460 mock_session_get_size_exp.called = 0;
461 mock_session_stats_get_exp.called = 0;
462 mock_session_destroy_exp.called = 0;
464 mock_session_create_exp.failed = 0;
465 mock_session_update_exp.failed = 0;
466 mock_session_get_size_exp.failed = 0;
467 mock_session_stats_get_exp.failed = 0;
468 mock_session_destroy_exp.failed = 0;
474 * destroy_session_with_check is a helper function releasing session
475 * created with rte_security_session_create and stored in test case parameters.
476 * It's used both to release sessions created in test cases' bodies
477 * which are assigned to ut_params->sess
478 * as well as sessions created in ut_setup_with_session.
481 destroy_session_with_check(void)
483 struct security_unittest_params *ut_params = &unittest_params;
484 if (ut_params->sess != NULL) {
485 /* Assure that mockup function for destroy operation is set. */
486 ut_params->ctx.ops = &mock_ops;
488 mock_session_destroy_exp.device = NULL;
489 mock_session_destroy_exp.sess = ut_params->sess;
490 mock_session_destroy_exp.ret = 0;
491 mock_session_destroy_exp.called = 0;
492 mock_session_destroy_exp.failed = 0;
494 int ret = rte_security_session_destroy(&ut_params->ctx,
496 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
498 TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
500 ut_params->sess = NULL;
506 * ut_teardown releases test case parameters.
511 destroy_session_with_check();
515 * ut_setup_with_session initializes test case parameters by
516 * - calling standard ut_setup,
517 * - creating a session that can be used in test case.
520 ut_setup_with_session(void)
522 struct security_unittest_params *ut_params = &unittest_params;
523 struct security_testsuite_params *ts_params = &testsuite_params;
524 struct rte_security_session *sess;
526 int ret = ut_setup();
527 if (ret != TEST_SUCCESS)
530 mock_session_create_exp.device = NULL;
531 mock_session_create_exp.conf = &ut_params->conf;
532 mock_session_create_exp.mp = ts_params->session_mpool;
533 mock_session_create_exp.ret = 0;
535 sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
536 ts_params->session_mpool);
537 TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(rte_security_session_create,
539 TEST_ASSERT_EQUAL(sess, mock_session_create_exp.sess,
540 "Expecting session_create to be called with %p sess"
541 " parameter, but it's called %p sess parameter",
542 sess, mock_session_create_exp.sess);
543 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
546 * Store created session in test case parameters, so it can be released
547 * after test case in ut_teardown by destroy_session_with_check.
549 ut_params->sess = sess;
558 * Each test function is related to a single test case.
559 * They are arranged by tested rte_security API function
560 * and by rte_security execution paths sequence in code.
564 * rte_security_session_create tests
568 * Test execution of rte_security_session_create with NULL instance
571 test_session_create_inv_context(void)
573 struct security_testsuite_params *ts_params = &testsuite_params;
574 struct security_unittest_params *ut_params = &unittest_params;
575 struct rte_security_session *sess;
577 sess = rte_security_session_create(NULL, &ut_params->conf,
578 ts_params->session_mpool);
579 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
581 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
582 TEST_ASSERT_MEMPOOL_USAGE(0);
583 TEST_ASSERT_SESSION_COUNT(0);
589 * Test execution of rte_security_session_create with invalid
590 * security operations structure (NULL)
593 test_session_create_inv_context_ops(void)
595 struct security_testsuite_params *ts_params = &testsuite_params;
596 struct security_unittest_params *ut_params = &unittest_params;
597 struct rte_security_session *sess;
599 ut_params->ctx.ops = NULL;
601 sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
602 ts_params->session_mpool);
603 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
605 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
606 TEST_ASSERT_MEMPOOL_USAGE(0);
607 TEST_ASSERT_SESSION_COUNT(0);
613 * Test execution of rte_security_session_create with empty
614 * security operations
617 test_session_create_inv_context_ops_fun(void)
619 struct security_testsuite_params *ts_params = &testsuite_params;
620 struct security_unittest_params *ut_params = &unittest_params;
621 struct rte_security_session *sess;
623 ut_params->ctx.ops = &empty_ops;
625 sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
626 ts_params->session_mpool);
627 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
629 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
630 TEST_ASSERT_MEMPOOL_USAGE(0);
631 TEST_ASSERT_SESSION_COUNT(0);
637 * Test execution of rte_security_session_create with NULL conf parameter
640 test_session_create_inv_configuration(void)
642 struct security_testsuite_params *ts_params = &testsuite_params;
643 struct security_unittest_params *ut_params = &unittest_params;
644 struct rte_security_session *sess;
646 sess = rte_security_session_create(&ut_params->ctx, NULL,
647 ts_params->session_mpool);
648 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
650 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
651 TEST_ASSERT_MEMPOOL_USAGE(0);
652 TEST_ASSERT_SESSION_COUNT(0);
658 * Test execution of rte_security_session_create with NULL mp parameter
661 test_session_create_inv_mempool(void)
663 struct security_unittest_params *ut_params = &unittest_params;
664 struct rte_security_session *sess;
666 sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
668 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
670 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
671 TEST_ASSERT_MEMPOOL_USAGE(0);
672 TEST_ASSERT_SESSION_COUNT(0);
678 * Test execution of rte_security_session_create in case when mempool
679 * is fully used and no object can be got from it
682 test_session_create_mempool_empty(void)
684 struct security_testsuite_params *ts_params = &testsuite_params;
685 struct security_unittest_params *ut_params = &unittest_params;
686 struct rte_security_session *tmp[SECURITY_TEST_MEMPOOL_SIZE];
687 struct rte_security_session *sess;
689 /* Get all available objects from mempool. */
691 for (i = 0; i < SECURITY_TEST_MEMPOOL_SIZE; ++i) {
692 ret = rte_mempool_get(ts_params->session_mpool,
694 TEST_ASSERT_EQUAL(0, ret,
695 "Expect getting %d object from mempool"
698 TEST_ASSERT_MEMPOOL_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
700 sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
701 ts_params->session_mpool);
702 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
704 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
705 TEST_ASSERT_MEMPOOL_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
706 TEST_ASSERT_SESSION_COUNT(0);
708 /* Put objects back to the pool. */
709 for (i = 0; i < SECURITY_TEST_MEMPOOL_SIZE; ++i)
710 rte_mempool_put(ts_params->session_mpool, (void *)(tmp[i]));
711 TEST_ASSERT_MEMPOOL_USAGE(0);
717 * Test execution of rte_security_session_create when session_create
718 * security operation fails
721 test_session_create_ops_failure(void)
723 struct security_testsuite_params *ts_params = &testsuite_params;
724 struct security_unittest_params *ut_params = &unittest_params;
725 struct rte_security_session *sess;
727 mock_session_create_exp.device = NULL;
728 mock_session_create_exp.conf = &ut_params->conf;
729 mock_session_create_exp.mp = ts_params->session_mpool;
730 mock_session_create_exp.ret = -1; /* Return failure status. */
732 sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
733 ts_params->session_mpool);
734 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
736 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
737 TEST_ASSERT_MEMPOOL_USAGE(0);
738 TEST_ASSERT_SESSION_COUNT(0);
744 * Test execution of rte_security_session_create in successful execution path
747 test_session_create_success(void)
749 struct security_testsuite_params *ts_params = &testsuite_params;
750 struct security_unittest_params *ut_params = &unittest_params;
751 struct rte_security_session *sess;
753 mock_session_create_exp.device = NULL;
754 mock_session_create_exp.conf = &ut_params->conf;
755 mock_session_create_exp.mp = ts_params->session_mpool;
756 mock_session_create_exp.ret = 0; /* Return success status. */
758 sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
759 ts_params->session_mpool);
760 TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(rte_security_session_create,
762 TEST_ASSERT_EQUAL(sess, mock_session_create_exp.sess,
763 "Expecting session_create to be called with %p sess"
764 " parameter, but it's called %p sess parameter",
765 sess, mock_session_create_exp.sess);
766 TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
767 TEST_ASSERT_MEMPOOL_USAGE(1);
768 TEST_ASSERT_SESSION_COUNT(1);
771 * Store created session in test case parameters, so it can be released
772 * after test case in ut_teardown by destroy_session_with_check.
774 ut_params->sess = sess;
781 * rte_security_session_update tests
785 * Test execution of rte_security_session_update with NULL instance
788 test_session_update_inv_context(void)
790 struct security_unittest_params *ut_params = &unittest_params;
792 int ret = rte_security_session_update(NULL, ut_params->sess,
794 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
796 TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
802 * Test execution of rte_security_session_update with invalid
803 * security operations structure (NULL)
806 test_session_update_inv_context_ops(void)
808 struct security_unittest_params *ut_params = &unittest_params;
809 ut_params->ctx.ops = NULL;
811 int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
813 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
815 TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
821 * Test execution of rte_security_session_update with empty
822 * security operations
825 test_session_update_inv_context_ops_fun(void)
827 struct security_unittest_params *ut_params = &unittest_params;
828 ut_params->ctx.ops = &empty_ops;
830 int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
832 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
833 ret, -ENOTSUP, "%d");
834 TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
840 * Test execution of rte_security_session_update with NULL conf parameter
843 test_session_update_inv_configuration(void)
845 struct security_unittest_params *ut_params = &unittest_params;
847 int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
849 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
851 TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
857 * Test execution of rte_security_session_update with NULL sess parameter
860 test_session_update_inv_session(void)
862 struct security_unittest_params *ut_params = &unittest_params;
864 int ret = rte_security_session_update(&ut_params->ctx, NULL,
866 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
868 TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
874 * Test execution of rte_security_session_update when session_update
875 * security operation fails
878 test_session_update_ops_failure(void)
880 struct security_unittest_params *ut_params = &unittest_params;
882 mock_session_update_exp.device = NULL;
883 mock_session_update_exp.sess = ut_params->sess;
884 mock_session_update_exp.conf = &ut_params->conf;
885 mock_session_update_exp.ret = -1; /* Return failure status. */
887 int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
889 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
891 TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 1);
897 * Test execution of rte_security_session_update in successful execution path
900 test_session_update_success(void)
902 struct security_unittest_params *ut_params = &unittest_params;
904 mock_session_update_exp.device = NULL;
905 mock_session_update_exp.sess = ut_params->sess;
906 mock_session_update_exp.conf = &ut_params->conf;
907 mock_session_update_exp.ret = 0; /* Return success status. */
909 int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
911 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
913 TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 1);
920 * rte_security_session_get_size tests
924 * Test execution of rte_security_session_get_size with NULL instance
927 test_session_get_size_inv_context(void)
929 unsigned int ret = rte_security_session_get_size(NULL);
930 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
932 TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
938 * Test execution of rte_security_session_get_size with invalid
939 * security operations structure (NULL)
942 test_session_get_size_inv_context_ops(void)
944 struct security_unittest_params *ut_params = &unittest_params;
945 ut_params->ctx.ops = NULL;
947 unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
948 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
950 TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
956 * Test execution of rte_security_session_get_size with empty
957 * security operations
960 test_session_get_size_inv_context_ops_fun(void)
962 struct security_unittest_params *ut_params = &unittest_params;
963 ut_params->ctx.ops = &empty_ops;
965 unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
966 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
968 TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
974 * Test execution of rte_security_session_get_size when session_get_size
975 * security operation fails
978 test_session_get_size_ops_failure(void)
980 struct security_unittest_params *ut_params = &unittest_params;
982 mock_session_get_size_exp.device = NULL;
983 mock_session_get_size_exp.ret = 0;
985 unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
986 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
988 TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
994 * Test execution of rte_security_session_get_size in successful execution path
997 test_session_get_size_success(void)
999 struct security_unittest_params *ut_params = &unittest_params;
1001 mock_session_get_size_exp.device = NULL;
1002 mock_session_get_size_exp.ret = 1024;
1004 unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1005 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1007 TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
1009 return TEST_SUCCESS;
1014 * rte_security_session_stats_get tests
1018 * Test execution of rte_security_session_stats_get with NULL instance
1021 test_session_stats_get_inv_context(void)
1023 struct security_unittest_params *ut_params = &unittest_params;
1024 struct rte_security_stats stats;
1026 int ret = rte_security_session_stats_get(NULL, ut_params->sess, &stats);
1027 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1028 ret, -EINVAL, "%d");
1029 TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
1031 return TEST_SUCCESS;
1035 * Test execution of rte_security_session_stats_get with invalid
1036 * security operations structure (NULL)
1039 test_session_stats_get_inv_context_ops(void)
1041 struct security_unittest_params *ut_params = &unittest_params;
1042 struct rte_security_stats stats;
1043 ut_params->ctx.ops = NULL;
1045 int ret = rte_security_session_stats_get(&ut_params->ctx,
1046 ut_params->sess, &stats);
1047 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1048 ret, -EINVAL, "%d");
1049 TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
1051 return TEST_SUCCESS;
1055 * Test execution of rte_security_session_stats_get with empty
1056 * security operations
1059 test_session_stats_get_inv_context_ops_fun(void)
1061 struct security_unittest_params *ut_params = &unittest_params;
1062 struct rte_security_stats stats;
1063 ut_params->ctx.ops = &empty_ops;
1065 int ret = rte_security_session_stats_get(&ut_params->ctx,
1066 ut_params->sess, &stats);
1067 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1068 ret, -ENOTSUP, "%d");
1069 TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
1071 return TEST_SUCCESS;
1075 * Test execution of rte_security_session_stats_get with NULL stats parameter
1078 test_session_stats_get_inv_stats(void)
1080 struct security_unittest_params *ut_params = &unittest_params;
1082 int ret = rte_security_session_stats_get(&ut_params->ctx,
1083 ut_params->sess, NULL);
1084 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1085 ret, -EINVAL, "%d");
1086 TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
1088 return TEST_SUCCESS;
1092 * Test execution of rte_security_session_stats_get when session_stats_get
1093 * security operation fails
1096 test_session_stats_get_ops_failure(void)
1098 struct security_unittest_params *ut_params = &unittest_params;
1099 struct rte_security_stats stats;
1101 mock_session_stats_get_exp.device = NULL;
1102 mock_session_stats_get_exp.sess = ut_params->sess;
1103 mock_session_stats_get_exp.stats = &stats;
1104 mock_session_stats_get_exp.ret = -1;
1106 int ret = rte_security_session_stats_get(&ut_params->ctx,
1107 ut_params->sess, &stats);
1108 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1110 TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 1);
1112 return TEST_SUCCESS;
1116 * Test execution of rte_security_session_stats_get in successful execution
1120 test_session_stats_get_success(void)
1122 struct security_unittest_params *ut_params = &unittest_params;
1123 struct rte_security_stats stats;
1125 mock_session_stats_get_exp.device = NULL;
1126 mock_session_stats_get_exp.sess = ut_params->sess;
1127 mock_session_stats_get_exp.stats = &stats;
1128 mock_session_stats_get_exp.ret = 0;
1130 int ret = rte_security_session_stats_get(&ut_params->ctx,
1131 ut_params->sess, &stats);
1132 TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1134 TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 1);
1136 return TEST_SUCCESS;
1141 * Declaration of testcases
1143 static struct unit_test_suite security_testsuite = {
1144 .suite_name = "generic security",
1145 .setup = testsuite_setup,
1146 .teardown = testsuite_teardown,
1147 .unit_test_cases = {
1148 TEST_CASE_ST(ut_setup, ut_teardown,
1149 test_session_create_inv_context),
1150 TEST_CASE_ST(ut_setup, ut_teardown,
1151 test_session_create_inv_context_ops),
1152 TEST_CASE_ST(ut_setup, ut_teardown,
1153 test_session_create_inv_context_ops_fun),
1154 TEST_CASE_ST(ut_setup, ut_teardown,
1155 test_session_create_inv_configuration),
1156 TEST_CASE_ST(ut_setup, ut_teardown,
1157 test_session_create_inv_mempool),
1158 TEST_CASE_ST(ut_setup, ut_teardown,
1159 test_session_create_mempool_empty),
1160 TEST_CASE_ST(ut_setup, ut_teardown,
1161 test_session_create_ops_failure),
1162 TEST_CASE_ST(ut_setup, ut_teardown,
1163 test_session_create_success),
1165 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1166 test_session_update_inv_context),
1167 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1168 test_session_update_inv_context_ops),
1169 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1170 test_session_update_inv_context_ops_fun),
1171 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1172 test_session_update_inv_configuration),
1173 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1174 test_session_update_inv_session),
1175 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1176 test_session_update_ops_failure),
1177 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1178 test_session_update_success),
1180 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1181 test_session_get_size_inv_context),
1182 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1183 test_session_get_size_inv_context_ops),
1184 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1185 test_session_get_size_inv_context_ops_fun),
1186 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1187 test_session_get_size_ops_failure),
1188 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1189 test_session_get_size_success),
1191 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1192 test_session_stats_get_inv_context),
1193 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1194 test_session_stats_get_inv_context_ops),
1195 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1196 test_session_stats_get_inv_context_ops_fun),
1197 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1198 test_session_stats_get_inv_stats),
1199 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1200 test_session_stats_get_ops_failure),
1201 TEST_CASE_ST(ut_setup_with_session, ut_teardown,
1202 test_session_stats_get_success),
1204 TEST_CASES_END() /**< NULL terminate unit test array */
1211 rte_log_set_global_level(RTE_LOG_DEBUG);
1212 rte_log_set_level(RTE_LOGTYPE_EAL, RTE_LOG_DEBUG);
1214 return unit_test_suite_runner(&security_testsuite);
1217 REGISTER_TEST_COMMAND(security_autotest, test_security);