xref: /dpdk/app/test/test_security.c (revision 10b71caecbe1cddcbb65c050ca775fba575e88db)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
3  */
4 
5 #include <rte_errno.h>
6 #include <rte_log.h>
7 #include <rte_memory.h>
8 #include <rte_mempool.h>
9 #include <rte_ether.h>
10 #include <rte_security.h>
11 #include <rte_security_driver.h>
12 
13 /* Before including rte_test.h file you can define
14  * RTE_TEST_TRACE_FAILURE(_file, _line, _func) macro to better trace/debug test
15  * failures. Mostly useful in development phase.
16  */
17 #ifndef RTE_TEST_TRACE_FAILURE
18 #define RTE_TEST_TRACE_FAILURE(_file, _line, _func) \
19 	RTE_LOG(DEBUG, EAL, "in %s:%d %s\n", _file, _line, _func)
20 #endif
21 
22 #include <rte_test.h>
23 #include "test.h"
24 
25 /**
26  * Security
27  * =======
28  *
29  * Basic unit tests of the librte_security API.
30  *
31  * Structure of the file:
32  * - macros for making tests more readable;
33  * - mockup structures and functions for rte_security_ops;
34  * - test suite and test cases setup and teardown functions;
35  * - tests functions;
36  * - declaration of testcases.
37  */
38 
39 
40 /**
41  * Macros
42  *
43  * Set of macros for making tests easier to read.
44  */
45 
46 /**
47  * Verify condition inside mocked up function.
48  * Mockup function cannot return a test error, so the failure
49  * of assertion increases counter and print logs.
50  * The counter can be verified later to check if test case should fail.
51  *
52  * @param   fail_counter	fail counter
53  * @param   cond	condition expected to be true
54  * @param   msg	printf style formatting string for custom message
55  */
56 #define MOCK_TEST_ASSERT(fail_counter, cond, msg, ...) do {		\
57 	if (!(cond)) {							\
58 		fail_counter++;						\
59 		RTE_LOG(DEBUG, EAL, "Test assert %s line %d failed: "	\
60 				msg "\n", __func__, __LINE__,		\
61 				 ##__VA_ARGS__);			\
62 		RTE_TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__);	\
63 	}								\
64 } while (0)
65 
66 /**
67  * Verify equality condition inside mocked up function.
68  * Mockup function cannot return a test error, so the failure
69  * of assertion increases counter and print logs.
70  * The counter can be verified later to check if test case should fail.
71  *
72  * @param   fail_counter	fail counter
73  * @param   a	first value of comparison
74  * @param   b	second value of comparison
75  * @param   msg	printf style formatting string for custom message
76  */
77 #define MOCK_TEST_ASSERT_EQUAL(fail_counter, a, b, msg, ...)	\
78 	MOCK_TEST_ASSERT(fail_counter, (a) == (b), msg, ##__VA_ARGS__)
79 
80 /**
81  * Verify not null condition inside mocked up function.
82  * Mockup function cannot return a test error, so the failure
83  * of assertion increases counter and print logs.
84  * The counter can be verified later to check if test case should fail.
85  *
86  * @param   fail_counter	fail counter
87  * @param   val	value expected not to be NULL
88  * @param   msg	printf style formatting string for custom message
89  */
90 #define MOCK_TEST_ASSERT_NOT_NULL(fail_counter, val, msg, ...)	\
91 	MOCK_TEST_ASSERT(fail_counter, (val) != NULL, msg, ##__VA_ARGS__)
92 
93 
94 /**
95  * Verify if parameter of the mocked up function matches expected value.
96  * The expected value is stored in data structure in the field matching
97  * parameter name.
98  *
99  * @param   data	structure with expected values
100  * @param   parameter	name of the parameter (both field and parameter name)
101  * @param   spec	printf style spec for parameter
102  */
103 #define MOCK_TEST_ASSERT_PARAMETER(data, parameter, spec)		\
104 	MOCK_TEST_ASSERT_EQUAL(data.failed, data.parameter, parameter,	\
105 			"Expecting parameter %s to be " spec		\
106 			" but it's " spec, RTE_STR(parameter),		\
107 			data.parameter, parameter)
108 
109 /**
110  * Wrap for MOCK_TEST_ASSERT_PARAMETER macro for pointer type parameters.
111  *
112  * @param   data	structure with expected values
113  * @param   parameter	name of the parameter (both field and parameter name)
114  */
115 #define MOCK_TEST_ASSERT_POINTER_PARAMETER(data, parameter)	\
116 	MOCK_TEST_ASSERT_PARAMETER(data, parameter, "%p")
117 
118 /**
119  * Wrap for MOCK_TEST_ASSERT_PARAMETER macro for uint64_t type parameters.
120  *
121  * @param   data	structure with expected values
122  * @param   parameter	name of the parameter (both field and parameter name)
123  */
124 #define MOCK_TEST_ASSERT_U64_PARAMETER(data, parameter)	\
125 	MOCK_TEST_ASSERT_PARAMETER(data, parameter, "%" PRIu64)
126 
127 /**
128  * Verify number of calls of the mocked up function
129  * and check if there were any fails during execution.
130  * The fails statistics inside mocked up functions are collected
131  * as "failed" field in mockup structures.
132  *
133  * @param   mock_data	structure with statistics (called, failed)
134  * @param   exp_calls	expected number of mockup function calls
135  */
136 #define TEST_ASSERT_MOCK_CALLS(mock_data, exp_calls) do {		\
137 	TEST_ASSERT_EQUAL(exp_calls, mock_data.called,			\
138 			"Expecting sub op to be called %d times, "	\
139 			"but it's called %d times",			\
140 			exp_calls, mock_data.called);			\
141 	TEST_ASSERT_EQUAL(0, mock_data.failed,				\
142 			"Expecting sub op asserts not to fail, "	\
143 			"but they're failed %d times",			\
144 			mock_data.failed);				\
145 } while (0)
146 
147 /**
148  * Assert tested function result match expected value
149  *
150  * @param   f_name	name of tested function
151  * @param   f_ret	value returned by the function
152  * @param   exp_ret	expected returned value
153  * @param   fmt		printf style format for returned value
154  */
155 #define TEST_ASSERT_MOCK_FUNCTION_CALL_RET(f_name, f_ret, exp_ret, fmt)	\
156 	TEST_ASSERT_EQUAL(exp_ret, f_ret, "Expecting " RTE_STR(f_name)	\
157 			" to return " fmt ", but it returned " fmt	\
158 			"\n", exp_ret, f_ret)
159 
160 /**
161  * Assert tested function result is not NULL
162  *
163  * @param   f_name	name of tested function
164  * @param   f_ret	value returned by the function
165  */
166 #define TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(f_name, f_ret)		\
167 	TEST_ASSERT_NOT_NULL(f_ret, "Expecting " RTE_STR(f_name)	\
168 			" to return not NULL\n")
169 
170 /**
171  * Verify that sess_cnt counter value matches expected
172  *
173  * @param   expected_sessions_count	expected counter value
174  */
175 #define TEST_ASSERT_SESSION_COUNT(expected_sessions_count) do {		\
176 	struct security_unittest_params *ut_params = &unittest_params;	\
177 	TEST_ASSERT_EQUAL(expected_sessions_count,			\
178 			ut_params->ctx.sess_cnt,			\
179 			"Expecting session counter to be %u,"		\
180 			" but it's %u",	expected_sessions_count,	\
181 			ut_params->ctx.sess_cnt);			\
182 } while (0)
183 
184 /**
185  * Verify usage of mempool by checking if number of allocated objects matches
186  * expectations. The mempool is used to manage objects for sessions data.
187  * A single object is acquired from mempool during session_create
188  * and put back in session_destroy.
189  *
190  * @param   expected_mempool_usage	expected number of used mempool objects
191  */
192 #define TEST_ASSERT_MEMPOOL_USAGE(expected_mempool_usage) do {		\
193 	struct security_testsuite_params *ts_params = &testsuite_params;\
194 	unsigned int mempool_usage;					\
195 	mempool_usage = rte_mempool_in_use_count(			\
196 			ts_params->session_mpool);			\
197 	TEST_ASSERT_EQUAL(expected_mempool_usage, mempool_usage,	\
198 			"Expecting %u mempool allocations, "		\
199 			"but there are %u allocated objects",		\
200 			expected_mempool_usage, mempool_usage);		\
201 } while (0)
202 
203 
204 /**
205  * Mockup structures and functions for rte_security_ops;
206  *
207  * Set of structures for controlling mockup functions calls.
208  * Every mockup function X has its corresponding X_data structure
209  * and an instance of that structure X_exp.
210  * Structure contains parameters that a mockup function is expected
211  * to be called with, a value to return (.ret) and 2 statistics:
212  * .called (number of times the mockup function was called)
213  * and .failed (number of assertion fails during mockup function call).
214  *
215  * Mockup functions verify that the parameters they are called with match
216  * expected values. The expected values should be stored in corresponding
217  * structures prior to mockup functions call. Every failure of such
218  * verification increases .failed counter. Every call of mockup function
219  * increases .called counter. Function returns value stored in .ret field
220  * of the structure.
221  * In case of some parameters in some functions the expected value is unknown
222  * and cannot be detrmined prior to call. Such parameters are stored
223  * in structure and can be compared or analyzed later in test case code.
224  *
225  * Below structures and functions follow the rules just described.
226  * Additional remarks and exceptions are added in comments.
227  */
228 
229 /**
230  * session_create mockup
231  *
232  * Verified parameters: device, conf, mp.
233  * Saved, not verified parameters: sess.
234  */
235 static struct mock_session_create_data {
236 	void *device;
237 	struct rte_security_session_conf *conf;
238 	struct rte_security_session *sess;
239 	struct rte_mempool *mp;
240 
241 	int ret;
242 
243 	int called;
244 	int failed;
245 } mock_session_create_exp = {NULL, NULL, NULL, NULL, 0, 0, 0};
246 
247 static int
248 mock_session_create(void *device,
249 		struct rte_security_session_conf *conf,
250 		struct rte_security_session *sess,
251 		struct rte_mempool *mp)
252 {
253 	mock_session_create_exp.called++;
254 
255 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, device);
256 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, conf);
257 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, mp);
258 
259 	mock_session_create_exp.sess = sess;
260 
261 	return mock_session_create_exp.ret;
262 }
263 
264 /**
265  * session_update mockup
266  *
267  * Verified parameters: device, sess, conf.
268  */
269 static struct mock_session_update_data {
270 	void *device;
271 	struct rte_security_session *sess;
272 	struct rte_security_session_conf *conf;
273 
274 	int ret;
275 
276 	int called;
277 	int failed;
278 } mock_session_update_exp = {NULL, NULL, NULL, 0, 0, 0};
279 
280 static int
281 mock_session_update(void *device,
282 		struct rte_security_session *sess,
283 		struct rte_security_session_conf *conf)
284 {
285 	mock_session_update_exp.called++;
286 
287 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, device);
288 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, sess);
289 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, conf);
290 
291 	return mock_session_update_exp.ret;
292 }
293 
294 /**
295  * session_get_size mockup
296  *
297  * Verified parameters: device.
298  */
299 static struct mock_session_get_size_data {
300 	void *device;
301 
302 	unsigned int ret;
303 
304 	int called;
305 	int failed;
306 } mock_session_get_size_exp = {NULL, 0U, 0, 0};
307 
308 static unsigned int
309 mock_session_get_size(void *device)
310 {
311 	mock_session_get_size_exp.called++;
312 
313 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_get_size_exp, device);
314 
315 	return mock_session_get_size_exp.ret;
316 }
317 
318 /**
319  * session_stats_get mockup
320  *
321  * Verified parameters: device, sess, stats.
322  */
323 static struct mock_session_stats_get_data {
324 	void *device;
325 	struct rte_security_session *sess;
326 	struct rte_security_stats *stats;
327 
328 	int ret;
329 
330 	int called;
331 	int failed;
332 } mock_session_stats_get_exp = {NULL, NULL, NULL, 0, 0, 0};
333 
334 static int
335 mock_session_stats_get(void *device,
336 		struct rte_security_session *sess,
337 		struct rte_security_stats *stats)
338 {
339 	mock_session_stats_get_exp.called++;
340 
341 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, device);
342 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, sess);
343 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, stats);
344 
345 	return mock_session_stats_get_exp.ret;
346 }
347 
348 /**
349  * session_destroy mockup
350  *
351  * Verified parameters: device, sess.
352  */
353 static struct mock_session_destroy_data {
354 	void *device;
355 	struct rte_security_session *sess;
356 
357 	int ret;
358 
359 	int called;
360 	int failed;
361 } mock_session_destroy_exp = {NULL, NULL, 0, 0, 0};
362 
363 static int
364 mock_session_destroy(void *device, struct rte_security_session *sess)
365 {
366 	mock_session_destroy_exp.called++;
367 
368 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_destroy_exp, device);
369 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_destroy_exp, sess);
370 
371 	return mock_session_destroy_exp.ret;
372 }
373 
374 /**
375  * set_pkt_metadata mockup
376  *
377  * Verified parameters: device, sess, m, params.
378  */
379 static struct mock_set_pkt_metadata_data {
380 	void *device;
381 	struct rte_security_session *sess;
382 	struct rte_mbuf *m;
383 	void *params;
384 
385 	int ret;
386 
387 	int called;
388 	int failed;
389 } mock_set_pkt_metadata_exp = {NULL, NULL, NULL, NULL, 0, 0, 0};
390 
391 static int
392 mock_set_pkt_metadata(void *device,
393 		struct rte_security_session *sess,
394 		struct rte_mbuf *m,
395 		void *params)
396 {
397 	mock_set_pkt_metadata_exp.called++;
398 
399 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, device);
400 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, sess);
401 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, m);
402 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, params);
403 
404 	return mock_set_pkt_metadata_exp.ret;
405 }
406 
407 /**
408  * get_userdata mockup
409  *
410  * Verified parameters: device, md.
411  * The userdata parameter works as an output parameter, so a passed address
412  * is verified not to be NULL and filled with userdata stored in structure.
413  */
414 static struct mock_get_userdata_data {
415 	void *device;
416 	uint64_t md;
417 	void *userdata;
418 
419 	int ret;
420 
421 	int called;
422 	int failed;
423 } mock_get_userdata_exp = {NULL, 0UL, NULL, 0, 0, 0};
424 
425 static int
426 mock_get_userdata(void *device,
427 		uint64_t md,
428 		void **userdata)
429 {
430 	mock_get_userdata_exp.called++;
431 
432 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_get_userdata_exp, device);
433 	MOCK_TEST_ASSERT_U64_PARAMETER(mock_get_userdata_exp, md);
434 
435 	MOCK_TEST_ASSERT_NOT_NULL(mock_get_userdata_exp.failed,
436 			userdata,
437 			"Expecting parameter userdata not to be NULL but it's %p",
438 			userdata);
439 	*userdata = mock_get_userdata_exp.userdata;
440 
441 	return mock_get_userdata_exp.ret;
442 }
443 
444 /**
445  * capabilities_get mockup
446  *
447  * Verified parameters: device.
448  */
449 static struct mock_capabilities_get_data {
450 	void *device;
451 
452 	struct rte_security_capability *ret;
453 
454 	int called;
455 	int failed;
456 } mock_capabilities_get_exp = {NULL, NULL, 0, 0};
457 
458 static const struct rte_security_capability *
459 mock_capabilities_get(void *device)
460 {
461 	mock_capabilities_get_exp.called++;
462 
463 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_capabilities_get_exp, device);
464 
465 	return mock_capabilities_get_exp.ret;
466 }
467 
468 /**
469  * empty_ops
470  *
471  * is an empty security operations set (all function pointers set to NULL)
472  */
473 struct rte_security_ops empty_ops = { NULL };
474 
475 /**
476  * mock_ops
477  *
478  * is a security operations set using mockup functions
479  */
480 struct rte_security_ops mock_ops = {
481 	.session_create = mock_session_create,
482 	.session_update = mock_session_update,
483 	.session_get_size = mock_session_get_size,
484 	.session_stats_get = mock_session_stats_get,
485 	.session_destroy = mock_session_destroy,
486 	.set_pkt_metadata = mock_set_pkt_metadata,
487 	.get_userdata = mock_get_userdata,
488 	.capabilities_get = mock_capabilities_get,
489 };
490 
491 
492 /**
493  * Test suite and test cases setup and teardown functions.
494  */
495 
496 /**
497  * struct security_testsuite_params defines parameters initialized once
498  * for whole tests suite.
499  * Currently the only stored parameter is session_mpool a mempool created
500  * once in testsuite_setup and released in testsuite_teardown.
501  * The instance of this structure is stored in testsuite_params variable.
502  */
503 static struct security_testsuite_params {
504 	struct rte_mempool *session_mpool;
505 } testsuite_params = { NULL };
506 
507 /**
508  * struct security_unittest_params defines parameters initialized
509  * for every test case. The parameters are initialized in ut_setup
510  * or ut_setup_with_session (depending on the testcase)
511  * and released in ut_teardown.
512  * The instance of this structure is stored in unittest_params variable.
513  */
514 static struct security_unittest_params {
515 	struct rte_security_ctx ctx;
516 	struct rte_security_session_conf conf;
517 	struct rte_security_session *sess;
518 } unittest_params = {
519 	.ctx = {
520 		.device = NULL,
521 		.ops = &mock_ops,
522 		.sess_cnt = 0,
523 	},
524 	.sess = NULL,
525 };
526 
527 #define SECURITY_TEST_MEMPOOL_NAME "SecurityTestsMempoolName"
528 #define SECURITY_TEST_MEMPOOL_SIZE 15
529 #define SECURITY_TEST_SESSION_OBJECT_SIZE sizeof(struct rte_security_session)
530 
531 /**
532  * testsuite_setup initializes whole test suite parameters.
533  * It creates a new mempool used in all test cases
534  * and verifies if it properly created.
535  */
536 static int
537 testsuite_setup(void)
538 {
539 	struct security_testsuite_params *ts_params = &testsuite_params;
540 	ts_params->session_mpool = rte_mempool_create(
541 			SECURITY_TEST_MEMPOOL_NAME,
542 			SECURITY_TEST_MEMPOOL_SIZE,
543 			SECURITY_TEST_SESSION_OBJECT_SIZE,
544 			0, 0, NULL, NULL, NULL, NULL,
545 			SOCKET_ID_ANY, 0);
546 	TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
547 			"Cannot create mempool %s\n", rte_strerror(rte_errno));
548 	return TEST_SUCCESS;
549 }
550 
551 /**
552  * testsuite_teardown releases test suite wide parameters.
553  */
554 static void
555 testsuite_teardown(void)
556 {
557 	struct security_testsuite_params *ts_params = &testsuite_params;
558 	if (ts_params->session_mpool) {
559 		rte_mempool_free(ts_params->session_mpool);
560 		ts_params->session_mpool = NULL;
561 	}
562 }
563 
564 /**
565  * ut_setup initializes test case parameters to default values.
566  * It resets also any .called and .failed statistics of mockup functions
567  * usage.
568  */
569 static int
570 ut_setup(void)
571 {
572 	struct security_unittest_params *ut_params = &unittest_params;
573 	ut_params->ctx.device = NULL;
574 	ut_params->ctx.ops = &mock_ops;
575 	ut_params->ctx.sess_cnt = 0;
576 	ut_params->sess = NULL;
577 
578 	mock_session_create_exp.called = 0;
579 	mock_session_update_exp.called = 0;
580 	mock_session_get_size_exp.called = 0;
581 	mock_session_stats_get_exp.called = 0;
582 	mock_session_destroy_exp.called = 0;
583 	mock_set_pkt_metadata_exp.called = 0;
584 	mock_get_userdata_exp.called = 0;
585 	mock_capabilities_get_exp.called = 0;
586 
587 	mock_session_create_exp.failed = 0;
588 	mock_session_update_exp.failed = 0;
589 	mock_session_get_size_exp.failed = 0;
590 	mock_session_stats_get_exp.failed = 0;
591 	mock_session_destroy_exp.failed = 0;
592 	mock_set_pkt_metadata_exp.failed = 0;
593 	mock_get_userdata_exp.failed = 0;
594 	mock_capabilities_get_exp.failed = 0;
595 
596 	return TEST_SUCCESS;
597 }
598 
599 /**
600  * destroy_session_with_check is a helper function releasing session
601  * created with rte_security_session_create and stored in test case parameters.
602  * It's used both to release sessions created in test cases' bodies
603  * which are assigned to ut_params->sess
604  * as well as sessions created in ut_setup_with_session.
605  */
606 static int
607 destroy_session_with_check(void)
608 {
609 	struct security_unittest_params *ut_params = &unittest_params;
610 	if (ut_params->sess != NULL) {
611 		/* Assure that mockup function for destroy operation is set. */
612 		ut_params->ctx.ops = &mock_ops;
613 
614 		mock_session_destroy_exp.device = NULL;
615 		mock_session_destroy_exp.sess = ut_params->sess;
616 		mock_session_destroy_exp.ret = 0;
617 		mock_session_destroy_exp.called = 0;
618 		mock_session_destroy_exp.failed = 0;
619 
620 		int ret = rte_security_session_destroy(&ut_params->ctx,
621 				ut_params->sess);
622 		TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
623 				ret, 0, "%d");
624 		TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
625 
626 		ut_params->sess = NULL;
627 	}
628 	return TEST_SUCCESS;
629 }
630 
631 /**
632  * ut_teardown releases test case parameters.
633  */
634 static void
635 ut_teardown(void)
636 {
637 	destroy_session_with_check();
638 }
639 
640 /**
641  * ut_setup_with_session initializes test case parameters by
642  * - calling standard ut_setup,
643  * - creating a session that can be used in test case.
644  */
645 static int
646 ut_setup_with_session(void)
647 {
648 	struct security_unittest_params *ut_params = &unittest_params;
649 	struct security_testsuite_params *ts_params = &testsuite_params;
650 	struct rte_security_session *sess;
651 
652 	int ret = ut_setup();
653 	if (ret != TEST_SUCCESS)
654 		return ret;
655 
656 	mock_session_create_exp.device = NULL;
657 	mock_session_create_exp.conf = &ut_params->conf;
658 	mock_session_create_exp.mp = ts_params->session_mpool;
659 	mock_session_create_exp.ret = 0;
660 
661 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
662 			ts_params->session_mpool);
663 	TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(rte_security_session_create,
664 			sess);
665 	TEST_ASSERT_EQUAL(sess, mock_session_create_exp.sess,
666 			"Expecting session_create to be called with %p sess"
667 			" parameter, but it's called %p sess parameter",
668 			sess, mock_session_create_exp.sess);
669 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
670 
671 	/*
672 	 * Store created session in test case parameters, so it can be released
673 	 * after test case in ut_teardown by destroy_session_with_check.
674 	 */
675 	ut_params->sess = sess;
676 
677 	return TEST_SUCCESS;
678 }
679 
680 
681 /**
682  * Test functions
683  *
684  * Each test function is related to a single test case.
685  * They are arranged by tested rte_security API function
686  * and by rte_security execution paths sequence in code.
687  */
688 
689 /**
690  * rte_security_session_create tests
691  */
692 
693 /**
694  * Test execution of rte_security_session_create with NULL instance
695  */
696 static int
697 test_session_create_inv_context(void)
698 {
699 	struct security_testsuite_params *ts_params = &testsuite_params;
700 	struct security_unittest_params *ut_params = &unittest_params;
701 	struct rte_security_session *sess;
702 
703 	sess = rte_security_session_create(NULL, &ut_params->conf,
704 			ts_params->session_mpool);
705 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
706 			sess, NULL, "%p");
707 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
708 	TEST_ASSERT_MEMPOOL_USAGE(0);
709 	TEST_ASSERT_SESSION_COUNT(0);
710 
711 	return TEST_SUCCESS;
712 }
713 
714 /**
715  * Test execution of rte_security_session_create with invalid
716  * security operations structure (NULL)
717  */
718 static int
719 test_session_create_inv_context_ops(void)
720 {
721 	struct security_testsuite_params *ts_params = &testsuite_params;
722 	struct security_unittest_params *ut_params = &unittest_params;
723 	struct rte_security_session *sess;
724 
725 	ut_params->ctx.ops = NULL;
726 
727 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
728 			ts_params->session_mpool);
729 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
730 			sess, NULL, "%p");
731 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
732 	TEST_ASSERT_MEMPOOL_USAGE(0);
733 	TEST_ASSERT_SESSION_COUNT(0);
734 
735 	return TEST_SUCCESS;
736 }
737 
738 /**
739  * Test execution of rte_security_session_create with empty
740  * security operations
741  */
742 static int
743 test_session_create_inv_context_ops_fun(void)
744 {
745 	struct security_testsuite_params *ts_params = &testsuite_params;
746 	struct security_unittest_params *ut_params = &unittest_params;
747 	struct rte_security_session *sess;
748 
749 	ut_params->ctx.ops = &empty_ops;
750 
751 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
752 			ts_params->session_mpool);
753 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
754 			sess, NULL, "%p");
755 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
756 	TEST_ASSERT_MEMPOOL_USAGE(0);
757 	TEST_ASSERT_SESSION_COUNT(0);
758 
759 	return TEST_SUCCESS;
760 }
761 
762 /**
763  * Test execution of rte_security_session_create with NULL conf parameter
764  */
765 static int
766 test_session_create_inv_configuration(void)
767 {
768 	struct security_testsuite_params *ts_params = &testsuite_params;
769 	struct security_unittest_params *ut_params = &unittest_params;
770 	struct rte_security_session *sess;
771 
772 	sess = rte_security_session_create(&ut_params->ctx, NULL,
773 			ts_params->session_mpool);
774 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
775 			sess, NULL, "%p");
776 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
777 	TEST_ASSERT_MEMPOOL_USAGE(0);
778 	TEST_ASSERT_SESSION_COUNT(0);
779 
780 	return TEST_SUCCESS;
781 }
782 
783 /**
784  * Test execution of rte_security_session_create with NULL mp parameter
785  */
786 static int
787 test_session_create_inv_mempool(void)
788 {
789 	struct security_unittest_params *ut_params = &unittest_params;
790 	struct rte_security_session *sess;
791 
792 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
793 			NULL);
794 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
795 			sess, NULL, "%p");
796 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
797 	TEST_ASSERT_MEMPOOL_USAGE(0);
798 	TEST_ASSERT_SESSION_COUNT(0);
799 
800 	return TEST_SUCCESS;
801 }
802 
803 /**
804  * Test execution of rte_security_session_create in case when mempool
805  * is fully used and no object can be got from it
806  */
807 static int
808 test_session_create_mempool_empty(void)
809 {
810 	struct security_testsuite_params *ts_params = &testsuite_params;
811 	struct security_unittest_params *ut_params = &unittest_params;
812 	struct rte_security_session *tmp[SECURITY_TEST_MEMPOOL_SIZE];
813 	struct rte_security_session *sess;
814 
815 	/* Get all available objects from mempool. */
816 	int i, ret;
817 	for (i = 0; i < SECURITY_TEST_MEMPOOL_SIZE; ++i) {
818 		ret = rte_mempool_get(ts_params->session_mpool,
819 				(void **)(&tmp[i]));
820 		TEST_ASSERT_EQUAL(0, ret,
821 				"Expect getting %d object from mempool"
822 				" to succeed", i);
823 	}
824 	TEST_ASSERT_MEMPOOL_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
825 
826 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
827 			ts_params->session_mpool);
828 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
829 			sess, NULL, "%p");
830 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
831 	TEST_ASSERT_MEMPOOL_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
832 	TEST_ASSERT_SESSION_COUNT(0);
833 
834 	/* Put objects back to the pool. */
835 	for (i = 0; i < SECURITY_TEST_MEMPOOL_SIZE; ++i)
836 		rte_mempool_put(ts_params->session_mpool, (void *)(tmp[i]));
837 	TEST_ASSERT_MEMPOOL_USAGE(0);
838 
839 	return TEST_SUCCESS;
840 }
841 
842 /**
843  * Test execution of rte_security_session_create when session_create
844  * security operation fails
845  */
846 static int
847 test_session_create_ops_failure(void)
848 {
849 	struct security_testsuite_params *ts_params = &testsuite_params;
850 	struct security_unittest_params *ut_params = &unittest_params;
851 	struct rte_security_session *sess;
852 
853 	mock_session_create_exp.device = NULL;
854 	mock_session_create_exp.conf = &ut_params->conf;
855 	mock_session_create_exp.mp = ts_params->session_mpool;
856 	mock_session_create_exp.ret = -1;	/* Return failure status. */
857 
858 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
859 			ts_params->session_mpool);
860 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
861 			sess, NULL, "%p");
862 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
863 	TEST_ASSERT_MEMPOOL_USAGE(0);
864 	TEST_ASSERT_SESSION_COUNT(0);
865 
866 	return TEST_SUCCESS;
867 }
868 
869 /**
870  * Test execution of rte_security_session_create in successful execution path
871  */
872 static int
873 test_session_create_success(void)
874 {
875 	struct security_testsuite_params *ts_params = &testsuite_params;
876 	struct security_unittest_params *ut_params = &unittest_params;
877 	struct rte_security_session *sess;
878 
879 	mock_session_create_exp.device = NULL;
880 	mock_session_create_exp.conf = &ut_params->conf;
881 	mock_session_create_exp.mp = ts_params->session_mpool;
882 	mock_session_create_exp.ret = 0;	/* Return success status. */
883 
884 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
885 			ts_params->session_mpool);
886 	TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(rte_security_session_create,
887 			sess);
888 	TEST_ASSERT_EQUAL(sess, mock_session_create_exp.sess,
889 			"Expecting session_create to be called with %p sess"
890 			" parameter, but it's called %p sess parameter",
891 			sess, mock_session_create_exp.sess);
892 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
893 	TEST_ASSERT_MEMPOOL_USAGE(1);
894 	TEST_ASSERT_SESSION_COUNT(1);
895 
896 	/*
897 	 * Store created session in test case parameters, so it can be released
898 	 * after test case in ut_teardown by destroy_session_with_check.
899 	 */
900 	ut_params->sess = sess;
901 
902 	return TEST_SUCCESS;
903 }
904 
905 
906 /**
907  * rte_security_session_update tests
908  */
909 
910 /**
911  * Test execution of rte_security_session_update with NULL instance
912  */
913 static int
914 test_session_update_inv_context(void)
915 {
916 	struct security_unittest_params *ut_params = &unittest_params;
917 
918 	int ret = rte_security_session_update(NULL, ut_params->sess,
919 			&ut_params->conf);
920 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
921 			ret, -EINVAL, "%d");
922 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
923 
924 	return TEST_SUCCESS;
925 }
926 
927 /**
928  * Test execution of rte_security_session_update with invalid
929  * security operations structure (NULL)
930  */
931 static int
932 test_session_update_inv_context_ops(void)
933 {
934 	struct security_unittest_params *ut_params = &unittest_params;
935 	ut_params->ctx.ops = NULL;
936 
937 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
938 			&ut_params->conf);
939 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
940 			ret, -EINVAL, "%d");
941 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
942 
943 	return TEST_SUCCESS;
944 }
945 
946 /**
947  * Test execution of rte_security_session_update with empty
948  * security operations
949  */
950 static int
951 test_session_update_inv_context_ops_fun(void)
952 {
953 	struct security_unittest_params *ut_params = &unittest_params;
954 	ut_params->ctx.ops = &empty_ops;
955 
956 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
957 			&ut_params->conf);
958 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
959 			ret, -ENOTSUP, "%d");
960 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
961 
962 	return TEST_SUCCESS;
963 }
964 
965 /**
966  * Test execution of rte_security_session_update with NULL conf parameter
967  */
968 static int
969 test_session_update_inv_configuration(void)
970 {
971 	struct security_unittest_params *ut_params = &unittest_params;
972 
973 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
974 			NULL);
975 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
976 			ret, -EINVAL, "%d");
977 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
978 
979 	return TEST_SUCCESS;
980 }
981 
982 /**
983  * Test execution of rte_security_session_update with NULL sess parameter
984  */
985 static int
986 test_session_update_inv_session(void)
987 {
988 	struct security_unittest_params *ut_params = &unittest_params;
989 
990 	int ret = rte_security_session_update(&ut_params->ctx, NULL,
991 			&ut_params->conf);
992 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
993 			ret, -EINVAL, "%d");
994 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
995 
996 	return TEST_SUCCESS;
997 }
998 
999 /**
1000  * Test execution of rte_security_session_update when session_update
1001  * security operation fails
1002  */
1003 static int
1004 test_session_update_ops_failure(void)
1005 {
1006 	struct security_unittest_params *ut_params = &unittest_params;
1007 
1008 	mock_session_update_exp.device = NULL;
1009 	mock_session_update_exp.sess = ut_params->sess;
1010 	mock_session_update_exp.conf = &ut_params->conf;
1011 	mock_session_update_exp.ret = -1;	/* Return failure status. */
1012 
1013 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
1014 			&ut_params->conf);
1015 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
1016 			ret, -1, "%d");
1017 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 1);
1018 
1019 	return TEST_SUCCESS;
1020 }
1021 
1022 /**
1023  * Test execution of rte_security_session_update in successful execution path
1024  */
1025 static int
1026 test_session_update_success(void)
1027 {
1028 	struct security_unittest_params *ut_params = &unittest_params;
1029 
1030 	mock_session_update_exp.device = NULL;
1031 	mock_session_update_exp.sess = ut_params->sess;
1032 	mock_session_update_exp.conf = &ut_params->conf;
1033 	mock_session_update_exp.ret = 0;	/* Return success status. */
1034 
1035 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
1036 			&ut_params->conf);
1037 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
1038 			ret, 0, "%d");
1039 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 1);
1040 
1041 	return TEST_SUCCESS;
1042 }
1043 
1044 
1045 /**
1046  * rte_security_session_get_size tests
1047  */
1048 
1049 /**
1050  * Test execution of rte_security_session_get_size with NULL instance
1051  */
1052 static int
1053 test_session_get_size_inv_context(void)
1054 {
1055 	unsigned int ret = rte_security_session_get_size(NULL);
1056 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1057 			ret, 0, "%u");
1058 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
1059 
1060 	return TEST_SUCCESS;
1061 }
1062 
1063 /**
1064  * Test execution of rte_security_session_get_size with invalid
1065  * security operations structure (NULL)
1066  */
1067 static int
1068 test_session_get_size_inv_context_ops(void)
1069 {
1070 	struct security_unittest_params *ut_params = &unittest_params;
1071 	ut_params->ctx.ops = NULL;
1072 
1073 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1074 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1075 			ret, 0, "%u");
1076 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
1077 
1078 	return TEST_SUCCESS;
1079 }
1080 
1081 /**
1082  * Test execution of rte_security_session_get_size with empty
1083  * security operations
1084  */
1085 static int
1086 test_session_get_size_inv_context_ops_fun(void)
1087 {
1088 	struct security_unittest_params *ut_params = &unittest_params;
1089 	ut_params->ctx.ops = &empty_ops;
1090 
1091 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1092 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1093 			ret, 0, "%u");
1094 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
1095 
1096 	return TEST_SUCCESS;
1097 }
1098 
1099 /**
1100  * Test execution of rte_security_session_get_size when session_get_size
1101  * security operation fails
1102  */
1103 static int
1104 test_session_get_size_ops_failure(void)
1105 {
1106 	struct security_unittest_params *ut_params = &unittest_params;
1107 
1108 	mock_session_get_size_exp.device = NULL;
1109 	mock_session_get_size_exp.ret = 0;
1110 
1111 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1112 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1113 			ret, 0, "%u");
1114 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
1115 
1116 	return TEST_SUCCESS;
1117 }
1118 
1119 /**
1120  * Test execution of rte_security_session_get_size in successful execution path
1121  */
1122 static int
1123 test_session_get_size_success(void)
1124 {
1125 	struct security_unittest_params *ut_params = &unittest_params;
1126 
1127 	mock_session_get_size_exp.device = NULL;
1128 	mock_session_get_size_exp.ret = 1024;
1129 
1130 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1131 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1132 			ret, 1024U, "%u");
1133 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
1134 
1135 	return TEST_SUCCESS;
1136 }
1137 
1138 
1139 /**
1140  * rte_security_session_stats_get tests
1141  */
1142 
1143 /**
1144  * Test execution of rte_security_session_stats_get with NULL instance
1145  */
1146 static int
1147 test_session_stats_get_inv_context(void)
1148 {
1149 	struct security_unittest_params *ut_params = &unittest_params;
1150 	struct rte_security_stats stats;
1151 
1152 	int ret = rte_security_session_stats_get(NULL, ut_params->sess, &stats);
1153 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1154 			ret, -EINVAL, "%d");
1155 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
1156 
1157 	return TEST_SUCCESS;
1158 }
1159 
1160 /**
1161  * Test execution of rte_security_session_stats_get with invalid
1162  * security operations structure (NULL)
1163  */
1164 static int
1165 test_session_stats_get_inv_context_ops(void)
1166 {
1167 	struct security_unittest_params *ut_params = &unittest_params;
1168 	struct rte_security_stats stats;
1169 	ut_params->ctx.ops = NULL;
1170 
1171 	int ret = rte_security_session_stats_get(&ut_params->ctx,
1172 			ut_params->sess, &stats);
1173 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1174 			ret, -EINVAL, "%d");
1175 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
1176 
1177 	return TEST_SUCCESS;
1178 }
1179 
1180 /**
1181  * Test execution of rte_security_session_stats_get with empty
1182  * security operations
1183  */
1184 static int
1185 test_session_stats_get_inv_context_ops_fun(void)
1186 {
1187 	struct security_unittest_params *ut_params = &unittest_params;
1188 	struct rte_security_stats stats;
1189 	ut_params->ctx.ops = &empty_ops;
1190 
1191 	int ret = rte_security_session_stats_get(&ut_params->ctx,
1192 			ut_params->sess, &stats);
1193 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1194 			ret, -ENOTSUP, "%d");
1195 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
1196 
1197 	return TEST_SUCCESS;
1198 }
1199 
1200 /**
1201  * Test execution of rte_security_session_stats_get with NULL stats parameter
1202  */
1203 static int
1204 test_session_stats_get_inv_stats(void)
1205 {
1206 	struct security_unittest_params *ut_params = &unittest_params;
1207 
1208 	int ret = rte_security_session_stats_get(&ut_params->ctx,
1209 			ut_params->sess, NULL);
1210 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1211 			ret, -EINVAL, "%d");
1212 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
1213 
1214 	return TEST_SUCCESS;
1215 }
1216 
1217 /**
1218  * Test execution of rte_security_session_stats_get when session_stats_get
1219  * security operation fails
1220  */
1221 static int
1222 test_session_stats_get_ops_failure(void)
1223 {
1224 	struct security_unittest_params *ut_params = &unittest_params;
1225 	struct rte_security_stats stats;
1226 
1227 	mock_session_stats_get_exp.device = NULL;
1228 	mock_session_stats_get_exp.sess = ut_params->sess;
1229 	mock_session_stats_get_exp.stats = &stats;
1230 	mock_session_stats_get_exp.ret = -1;
1231 
1232 	int ret = rte_security_session_stats_get(&ut_params->ctx,
1233 			ut_params->sess, &stats);
1234 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1235 			ret, -1, "%d");
1236 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 1);
1237 
1238 	return TEST_SUCCESS;
1239 }
1240 
1241 /**
1242  * Test execution of rte_security_session_stats_get in successful execution
1243  * path
1244  */
1245 static int
1246 test_session_stats_get_success(void)
1247 {
1248 	struct security_unittest_params *ut_params = &unittest_params;
1249 	struct rte_security_stats stats;
1250 
1251 	mock_session_stats_get_exp.device = NULL;
1252 	mock_session_stats_get_exp.sess = ut_params->sess;
1253 	mock_session_stats_get_exp.stats = &stats;
1254 	mock_session_stats_get_exp.ret = 0;
1255 
1256 	int ret = rte_security_session_stats_get(&ut_params->ctx,
1257 			ut_params->sess, &stats);
1258 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
1259 			ret, 0, "%d");
1260 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 1);
1261 
1262 	return TEST_SUCCESS;
1263 }
1264 
1265 
1266 /**
1267  * rte_security_session_destroy tests
1268  */
1269 
1270 /**
1271  * Test execution of rte_security_session_destroy with NULL instance
1272  */
1273 static int
1274 test_session_destroy_inv_context(void)
1275 {
1276 	struct security_unittest_params *ut_params = &unittest_params;
1277 
1278 	TEST_ASSERT_MEMPOOL_USAGE(1);
1279 	TEST_ASSERT_SESSION_COUNT(1);
1280 
1281 	int ret = rte_security_session_destroy(NULL, ut_params->sess);
1282 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
1283 			ret, -EINVAL, "%d");
1284 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
1285 	TEST_ASSERT_MEMPOOL_USAGE(1);
1286 	TEST_ASSERT_SESSION_COUNT(1);
1287 
1288 	return TEST_SUCCESS;
1289 }
1290 
1291 /**
1292  * Test execution of rte_security_session_destroy with invalid
1293  * security operations structure (NULL)
1294  */
1295 static int
1296 test_session_destroy_inv_context_ops(void)
1297 {
1298 	struct security_unittest_params *ut_params = &unittest_params;
1299 	ut_params->ctx.ops = NULL;
1300 
1301 	TEST_ASSERT_MEMPOOL_USAGE(1);
1302 	TEST_ASSERT_SESSION_COUNT(1);
1303 
1304 	int ret = rte_security_session_destroy(&ut_params->ctx,
1305 			ut_params->sess);
1306 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
1307 			ret, -EINVAL, "%d");
1308 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
1309 	TEST_ASSERT_MEMPOOL_USAGE(1);
1310 	TEST_ASSERT_SESSION_COUNT(1);
1311 
1312 	return TEST_SUCCESS;
1313 }
1314 
1315 /**
1316  * Test execution of rte_security_session_destroy with empty
1317  * security operations
1318  */
1319 static int
1320 test_session_destroy_inv_context_ops_fun(void)
1321 {
1322 	struct security_unittest_params *ut_params = &unittest_params;
1323 	ut_params->ctx.ops = &empty_ops;
1324 
1325 	TEST_ASSERT_MEMPOOL_USAGE(1);
1326 	TEST_ASSERT_SESSION_COUNT(1);
1327 
1328 	int ret = rte_security_session_destroy(&ut_params->ctx,
1329 			ut_params->sess);
1330 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
1331 			ret, -ENOTSUP, "%d");
1332 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
1333 	TEST_ASSERT_MEMPOOL_USAGE(1);
1334 	TEST_ASSERT_SESSION_COUNT(1);
1335 
1336 	return TEST_SUCCESS;
1337 }
1338 
1339 /**
1340  * Test execution of rte_security_session_destroy with NULL sess parameter
1341  */
1342 static int
1343 test_session_destroy_inv_session(void)
1344 {
1345 	struct security_unittest_params *ut_params = &unittest_params;
1346 
1347 	TEST_ASSERT_MEMPOOL_USAGE(1);
1348 	TEST_ASSERT_SESSION_COUNT(1);
1349 
1350 	int ret = rte_security_session_destroy(&ut_params->ctx, NULL);
1351 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
1352 			ret, -EINVAL, "%d");
1353 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
1354 	TEST_ASSERT_MEMPOOL_USAGE(1);
1355 	TEST_ASSERT_SESSION_COUNT(1);
1356 
1357 	return TEST_SUCCESS;
1358 }
1359 
1360 /**
1361  * Test execution of rte_security_session_destroy when session_destroy
1362  * security operation fails
1363  */
1364 static int
1365 test_session_destroy_ops_failure(void)
1366 {
1367 	struct security_unittest_params *ut_params = &unittest_params;
1368 
1369 	mock_session_destroy_exp.device = NULL;
1370 	mock_session_destroy_exp.sess = ut_params->sess;
1371 	mock_session_destroy_exp.ret = -1;
1372 
1373 	TEST_ASSERT_MEMPOOL_USAGE(1);
1374 	TEST_ASSERT_SESSION_COUNT(1);
1375 
1376 	int ret = rte_security_session_destroy(&ut_params->ctx,
1377 			ut_params->sess);
1378 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
1379 			ret, -1, "%d");
1380 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
1381 	TEST_ASSERT_MEMPOOL_USAGE(1);
1382 	TEST_ASSERT_SESSION_COUNT(1);
1383 
1384 	return TEST_SUCCESS;
1385 }
1386 
1387 /**
1388  * Test execution of rte_security_session_destroy in successful execution path
1389  */
1390 static int
1391 test_session_destroy_success(void)
1392 {
1393 	struct security_unittest_params *ut_params = &unittest_params;
1394 
1395 	mock_session_destroy_exp.device = NULL;
1396 	mock_session_destroy_exp.sess = ut_params->sess;
1397 	mock_session_destroy_exp.ret = 0;
1398 	TEST_ASSERT_MEMPOOL_USAGE(1);
1399 	TEST_ASSERT_SESSION_COUNT(1);
1400 
1401 	int ret = rte_security_session_destroy(&ut_params->ctx,
1402 			ut_params->sess);
1403 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
1404 			ret, 0, "%d");
1405 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
1406 	TEST_ASSERT_MEMPOOL_USAGE(0);
1407 	TEST_ASSERT_SESSION_COUNT(0);
1408 
1409 	/*
1410 	 * Remove session from test case parameters, so it won't be destroyed
1411 	 * during test case teardown.
1412 	 */
1413 	ut_params->sess = NULL;
1414 
1415 	return TEST_SUCCESS;
1416 }
1417 
1418 
1419 /**
1420  * rte_security_set_pkt_metadata tests
1421  */
1422 
1423 /**
1424  * Test execution of rte_security_set_pkt_metadata with NULL instance
1425  */
1426 static int
1427 test_set_pkt_metadata_inv_context(void)
1428 {
1429 #ifdef RTE_DEBUG
1430 	struct security_unittest_params *ut_params = &unittest_params;
1431 	struct rte_mbuf m;
1432 	int params;
1433 
1434 	int ret = rte_security_set_pkt_metadata(NULL, ut_params->sess, &m,
1435 			&params);
1436 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1437 			ret, -EINVAL, "%d");
1438 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1439 
1440 	return TEST_SUCCESS;
1441 #else
1442 	return TEST_SKIPPED;
1443 #endif
1444 }
1445 
1446 /**
1447  * Test execution of rte_security_set_pkt_metadata with invalid
1448  * security operations structure (NULL)
1449  */
1450 static int
1451 test_set_pkt_metadata_inv_context_ops(void)
1452 {
1453 #ifdef RTE_DEBUG
1454 	struct security_unittest_params *ut_params = &unittest_params;
1455 	struct rte_mbuf m;
1456 	int params;
1457 	ut_params->ctx.ops = NULL;
1458 
1459 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1460 			ut_params->sess, &m, &params);
1461 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1462 			ret, -EINVAL, "%d");
1463 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1464 
1465 	return TEST_SUCCESS;
1466 #else
1467 	return TEST_SKIPPED;
1468 #endif
1469 }
1470 
1471 /**
1472  * Test execution of rte_security_set_pkt_metadata with empty
1473  * security operations
1474  */
1475 static int
1476 test_set_pkt_metadata_inv_context_ops_fun(void)
1477 {
1478 	struct security_unittest_params *ut_params = &unittest_params;
1479 	struct rte_mbuf m;
1480 	int params;
1481 	ut_params->ctx.ops = &empty_ops;
1482 
1483 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1484 			ut_params->sess, &m, &params);
1485 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1486 			ret, -ENOTSUP, "%d");
1487 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1488 
1489 	return TEST_SUCCESS;
1490 }
1491 
1492 /**
1493  * Test execution of rte_security_set_pkt_metadata with NULL sess parameter
1494  */
1495 static int
1496 test_set_pkt_metadata_inv_session(void)
1497 {
1498 #ifdef RTE_DEBUG
1499 	struct security_unittest_params *ut_params = &unittest_params;
1500 	struct rte_mbuf m;
1501 	int params;
1502 
1503 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx, NULL,
1504 			&m, &params);
1505 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1506 			ret, -EINVAL, "%d");
1507 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1508 
1509 	return TEST_SUCCESS;
1510 #else
1511 	return TEST_SKIPPED;
1512 #endif
1513 }
1514 
1515 /**
1516  * Test execution of rte_security_set_pkt_metadata when set_pkt_metadata
1517  * security operation fails
1518  */
1519 static int
1520 test_set_pkt_metadata_ops_failure(void)
1521 {
1522 	struct security_unittest_params *ut_params = &unittest_params;
1523 	struct rte_mbuf m;
1524 	int params;
1525 
1526 	mock_set_pkt_metadata_exp.device = NULL;
1527 	mock_set_pkt_metadata_exp.sess = ut_params->sess;
1528 	mock_set_pkt_metadata_exp.m = &m;
1529 	mock_set_pkt_metadata_exp.params = &params;
1530 	mock_set_pkt_metadata_exp.ret = -1;
1531 
1532 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1533 			ut_params->sess, &m, &params);
1534 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1535 			ret, -1, "%d");
1536 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 1);
1537 
1538 	return TEST_SUCCESS;
1539 }
1540 
1541 /**
1542  * Test execution of rte_security_set_pkt_metadata in successful execution path
1543  */
1544 static int
1545 test_set_pkt_metadata_success(void)
1546 {
1547 	struct security_unittest_params *ut_params = &unittest_params;
1548 	struct rte_mbuf m;
1549 	int params;
1550 
1551 	mock_set_pkt_metadata_exp.device = NULL;
1552 	mock_set_pkt_metadata_exp.sess = ut_params->sess;
1553 	mock_set_pkt_metadata_exp.m = &m;
1554 	mock_set_pkt_metadata_exp.params = &params;
1555 	mock_set_pkt_metadata_exp.ret = 0;
1556 
1557 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1558 			ut_params->sess, &m, &params);
1559 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1560 			ret, 0, "%d");
1561 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 1);
1562 
1563 	return TEST_SUCCESS;
1564 }
1565 
1566 
1567 /**
1568  * rte_security_get_userdata tests
1569  */
1570 
1571 /**
1572  * Test execution of rte_security_get_userdata with NULL instance
1573  */
1574 static int
1575 test_get_userdata_inv_context(void)
1576 {
1577 #ifdef RTE_DEBUG
1578 	uint64_t md = 0xDEADBEEF;
1579 
1580 	void *ret = rte_security_get_userdata(NULL, md);
1581 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
1582 			ret, NULL, "%p");
1583 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 0);
1584 
1585 	return TEST_SUCCESS;
1586 #else
1587 	return TEST_SKIPPED;
1588 #endif
1589 }
1590 
1591 /**
1592  * Test execution of rte_security_get_userdata with invalid
1593  * security operations structure (NULL)
1594  */
1595 static int
1596 test_get_userdata_inv_context_ops(void)
1597 {
1598 #ifdef RTE_DEBUG
1599 	struct security_unittest_params *ut_params = &unittest_params;
1600 	uint64_t md = 0xDEADBEEF;
1601 	ut_params->ctx.ops = NULL;
1602 
1603 	void *ret = rte_security_get_userdata(&ut_params->ctx, md);
1604 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
1605 			ret, NULL, "%p");
1606 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 0);
1607 
1608 	return TEST_SUCCESS;
1609 #else
1610 	return TEST_SKIPPED;
1611 #endif
1612 }
1613 
1614 /**
1615  * Test execution of rte_security_get_userdata with empty
1616  * security operations
1617  */
1618 static int
1619 test_get_userdata_inv_context_ops_fun(void)
1620 {
1621 	struct security_unittest_params *ut_params = &unittest_params;
1622 	uint64_t md = 0xDEADBEEF;
1623 	ut_params->ctx.ops = &empty_ops;
1624 
1625 	void *ret = rte_security_get_userdata(&ut_params->ctx, md);
1626 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
1627 			ret, NULL, "%p");
1628 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 0);
1629 
1630 	return TEST_SUCCESS;
1631 }
1632 
1633 /**
1634  * Test execution of rte_security_get_userdata when get_userdata
1635  * security operation fails
1636  */
1637 static int
1638 test_get_userdata_ops_failure(void)
1639 {
1640 	struct security_unittest_params *ut_params = &unittest_params;
1641 	uint64_t md = 0xDEADBEEF;
1642 	void *userdata = (void *)0x7E577E57;
1643 
1644 	mock_get_userdata_exp.device = NULL;
1645 	mock_get_userdata_exp.md = md;
1646 	mock_get_userdata_exp.userdata = userdata;
1647 	mock_get_userdata_exp.ret = -1;
1648 
1649 	void *ret = rte_security_get_userdata(&ut_params->ctx, md);
1650 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
1651 			ret, NULL, "%p");
1652 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 1);
1653 
1654 	return TEST_SUCCESS;
1655 }
1656 
1657 /**
1658  * Test execution of rte_security_get_userdata in successful execution path
1659  */
1660 static int
1661 test_get_userdata_success(void)
1662 {
1663 	struct security_unittest_params *ut_params = &unittest_params;
1664 	uint64_t md = 0xDEADBEEF;
1665 	void *userdata = (void *)0x7E577E57;
1666 
1667 	mock_get_userdata_exp.device = NULL;
1668 	mock_get_userdata_exp.md = md;
1669 	mock_get_userdata_exp.userdata = userdata;
1670 	mock_get_userdata_exp.ret = 0;
1671 
1672 	void *ret = rte_security_get_userdata(&ut_params->ctx, md);
1673 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
1674 			ret, userdata, "%p");
1675 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 1);
1676 
1677 	return TEST_SUCCESS;
1678 }
1679 
1680 
1681 /**
1682  * rte_security_capabilities_get tests
1683  */
1684 
1685 /**
1686  * Test execution of rte_security_capabilities_get with NULL instance
1687  */
1688 static int
1689 test_capabilities_get_inv_context(void)
1690 {
1691 	const struct rte_security_capability *ret;
1692 	ret = rte_security_capabilities_get(NULL);
1693 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
1694 			ret, NULL, "%p");
1695 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1696 
1697 	return TEST_SUCCESS;
1698 }
1699 
1700 /**
1701  * Test execution of rte_security_capabilities_get with invalid
1702  * security operations structure (NULL)
1703  */
1704 static int
1705 test_capabilities_get_inv_context_ops(void)
1706 {
1707 	struct security_unittest_params *ut_params = &unittest_params;
1708 	ut_params->ctx.ops = NULL;
1709 
1710 	const struct rte_security_capability *ret;
1711 	ret = rte_security_capabilities_get(&ut_params->ctx);
1712 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
1713 			ret, NULL, "%p");
1714 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1715 
1716 	return TEST_SUCCESS;
1717 }
1718 
1719 /**
1720  * Test execution of rte_security_capabilities_get with empty
1721  * security operations
1722  */
1723 static int
1724 test_capabilities_get_inv_context_ops_fun(void)
1725 {
1726 	struct security_unittest_params *ut_params = &unittest_params;
1727 	ut_params->ctx.ops = &empty_ops;
1728 
1729 	const struct rte_security_capability *ret;
1730 	ret = rte_security_capabilities_get(&ut_params->ctx);
1731 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
1732 			ret, NULL, "%p");
1733 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1734 
1735 	return TEST_SUCCESS;
1736 }
1737 
1738 /**
1739  * Test execution of rte_security_capabilities_get when capabilities_get
1740  * security operation fails
1741  */
1742 static int
1743 test_capabilities_get_ops_failure(void)
1744 {
1745 	struct security_unittest_params *ut_params = &unittest_params;
1746 
1747 	mock_capabilities_get_exp.device = NULL;
1748 	mock_capabilities_get_exp.ret = NULL;
1749 
1750 	const struct rte_security_capability *ret;
1751 	ret = rte_security_capabilities_get(&ut_params->ctx);
1752 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
1753 			ret, NULL, "%p");
1754 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1755 
1756 	return TEST_SUCCESS;
1757 }
1758 
1759 /**
1760  * Test execution of rte_security_capabilities_get in successful execution path
1761  */
1762 static int
1763 test_capabilities_get_success(void)
1764 {
1765 	struct security_unittest_params *ut_params = &unittest_params;
1766 	struct rte_security_capability capabilities;
1767 
1768 	mock_capabilities_get_exp.device = NULL;
1769 	mock_capabilities_get_exp.ret = &capabilities;
1770 
1771 	const struct rte_security_capability *ret;
1772 	ret = rte_security_capabilities_get(&ut_params->ctx);
1773 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
1774 			ret, &capabilities, "%p");
1775 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1776 
1777 	return TEST_SUCCESS;
1778 }
1779 
1780 
1781 /**
1782  * rte_security_capability_get tests
1783  */
1784 
1785 /**
1786  * Test execution of rte_security_capability_get with NULL instance
1787  */
1788 static int
1789 test_capability_get_inv_context(void)
1790 {
1791 	struct rte_security_capability_idx idx;
1792 
1793 	const struct rte_security_capability *ret;
1794 	ret = rte_security_capability_get(NULL, &idx);
1795 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1796 			ret, NULL, "%p");
1797 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1798 
1799 	return TEST_SUCCESS;
1800 }
1801 
1802 /**
1803  * Test execution of rte_security_capability_get with invalid
1804  * security operations structure (NULL)
1805  */
1806 static int
1807 test_capability_get_inv_context_ops(void)
1808 {
1809 	struct security_unittest_params *ut_params = &unittest_params;
1810 	struct rte_security_capability_idx idx;
1811 	ut_params->ctx.ops = NULL;
1812 
1813 	const struct rte_security_capability *ret;
1814 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1815 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1816 			ret, NULL, "%p");
1817 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1818 
1819 	return TEST_SUCCESS;
1820 }
1821 
1822 /**
1823  * Test execution of rte_security_capability_get with empty
1824  * security operations
1825  */
1826 static int
1827 test_capability_get_inv_context_ops_fun(void)
1828 {
1829 	struct security_unittest_params *ut_params = &unittest_params;
1830 	struct rte_security_capability_idx idx;
1831 	ut_params->ctx.ops = &empty_ops;
1832 
1833 	const struct rte_security_capability *ret;
1834 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1835 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1836 			ret, NULL, "%p");
1837 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1838 
1839 	return TEST_SUCCESS;
1840 }
1841 
1842 /**
1843  * Test execution of rte_security_capability_get with NULL idx parameter
1844  */
1845 static int
1846 test_capability_get_inv_idx(void)
1847 {
1848 	struct security_unittest_params *ut_params = &unittest_params;
1849 
1850 	const struct rte_security_capability *ret;
1851 	ret = rte_security_capability_get(&ut_params->ctx, NULL);
1852 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1853 			ret, NULL, "%p");
1854 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1855 
1856 	return TEST_SUCCESS;
1857 }
1858 
1859 /**
1860  * Test execution of rte_security_capability_get when capabilities_get
1861  * security operation fails
1862  */
1863 static int
1864 test_capability_get_ops_failure(void)
1865 {
1866 	struct security_unittest_params *ut_params = &unittest_params;
1867 	struct rte_security_capability_idx idx;
1868 
1869 	mock_capabilities_get_exp.device = NULL;
1870 	mock_capabilities_get_exp.ret = NULL;
1871 
1872 	const struct rte_security_capability *ret;
1873 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1874 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1875 			ret, NULL, "%p");
1876 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1877 
1878 	return TEST_SUCCESS;
1879 }
1880 
1881 /**
1882  * Test execution of rte_security_capability_get when capabilities table
1883  * is empty (contains only RTE_SECURITY_ACTION_TYPE_NONE ending entry)
1884  */
1885 static int
1886 test_capability_get_empty_table(void)
1887 {
1888 	struct security_unittest_params *ut_params = &unittest_params;
1889 	struct rte_security_capability_idx idx;
1890 	struct rte_security_capability capabilities[] = {
1891 		{
1892 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1893 		},
1894 	};
1895 
1896 	mock_capabilities_get_exp.device = NULL;
1897 	mock_capabilities_get_exp.ret = capabilities;
1898 
1899 	const struct rte_security_capability *ret;
1900 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1901 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1902 			ret, NULL, "%p");
1903 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1904 
1905 	return TEST_SUCCESS;
1906 }
1907 
1908 /**
1909  * Test execution of rte_security_capability_get when capabilities table
1910  * does not contain entry with matching action
1911  */
1912 static int
1913 test_capability_get_no_matching_action(void)
1914 {
1915 	struct security_unittest_params *ut_params = &unittest_params;
1916 	struct rte_security_capability_idx idx = {
1917 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1918 	};
1919 	struct rte_security_capability capabilities[] = {
1920 		{
1921 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
1922 		},
1923 		{
1924 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL,
1925 		},
1926 		{
1927 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1928 		},
1929 	};
1930 
1931 	mock_capabilities_get_exp.device = NULL;
1932 	mock_capabilities_get_exp.ret = capabilities;
1933 
1934 	const struct rte_security_capability *ret;
1935 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1936 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1937 			ret, NULL, "%p");
1938 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1939 
1940 	return TEST_SUCCESS;
1941 }
1942 
1943 /**
1944  * Test execution of rte_security_capability_get when capabilities table
1945  * does not contain entry with matching protocol
1946  */
1947 static int
1948 test_capability_get_no_matching_protocol(void)
1949 {
1950 	struct security_unittest_params *ut_params = &unittest_params;
1951 	struct rte_security_capability_idx idx = {
1952 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1953 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1954 	};
1955 	struct rte_security_capability capabilities[] = {
1956 		{
1957 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1958 			.protocol = RTE_SECURITY_PROTOCOL_MACSEC,
1959 		},
1960 		{
1961 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1962 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
1963 		},
1964 		{
1965 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1966 		},
1967 	};
1968 
1969 	mock_capabilities_get_exp.device = NULL;
1970 	mock_capabilities_get_exp.ret = capabilities;
1971 
1972 	const struct rte_security_capability *ret;
1973 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1974 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1975 			ret, NULL, "%p");
1976 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1977 
1978 	return TEST_SUCCESS;
1979 }
1980 
1981 /**
1982  * Test execution of rte_security_capability_get when macsec protocol
1983  * is searched and capabilities table contain proper entry.
1984  * However macsec records search is not supported in rte_security.
1985  */
1986 static int
1987 test_capability_get_no_support_for_macsec(void)
1988 {
1989 	struct security_unittest_params *ut_params = &unittest_params;
1990 	struct rte_security_capability_idx idx = {
1991 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1992 		.protocol = RTE_SECURITY_PROTOCOL_MACSEC,
1993 	};
1994 	struct rte_security_capability capabilities[] = {
1995 		{
1996 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1997 			.protocol = RTE_SECURITY_PROTOCOL_MACSEC,
1998 		},
1999 		{
2000 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2001 		},
2002 	};
2003 
2004 	mock_capabilities_get_exp.device = NULL;
2005 	mock_capabilities_get_exp.ret = capabilities;
2006 
2007 	const struct rte_security_capability *ret;
2008 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2009 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2010 			ret, NULL, "%p");
2011 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2012 
2013 	return TEST_SUCCESS;
2014 }
2015 
2016 /**
2017  * Test execution of rte_security_capability_get when capabilities table
2018  * does not contain entry with matching ipsec proto field
2019  */
2020 static int
2021 test_capability_get_ipsec_mismatch_proto(void)
2022 {
2023 	struct security_unittest_params *ut_params = &unittest_params;
2024 	struct rte_security_capability_idx idx = {
2025 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2026 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2027 		.ipsec = {
2028 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2029 		},
2030 	};
2031 	struct rte_security_capability capabilities[] = {
2032 		{
2033 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2034 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2035 			.ipsec = {
2036 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
2037 			},
2038 		},
2039 		{
2040 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2041 		},
2042 	};
2043 
2044 	mock_capabilities_get_exp.device = NULL;
2045 	mock_capabilities_get_exp.ret = capabilities;
2046 
2047 	const struct rte_security_capability *ret;
2048 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2049 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2050 			ret, NULL, "%p");
2051 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2052 
2053 	return TEST_SUCCESS;
2054 }
2055 
2056 /**
2057  * Test execution of rte_security_capability_get when capabilities table
2058  * does not contain entry with matching ipsec mode field
2059  */
2060 static int
2061 test_capability_get_ipsec_mismatch_mode(void)
2062 {
2063 	struct security_unittest_params *ut_params = &unittest_params;
2064 	struct rte_security_capability_idx idx = {
2065 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2066 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2067 		.ipsec = {
2068 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2069 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
2070 		},
2071 	};
2072 	struct rte_security_capability capabilities[] = {
2073 		{
2074 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2075 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2076 			.ipsec = {
2077 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2078 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2079 			},
2080 		},
2081 		{
2082 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2083 		},
2084 	};
2085 
2086 	mock_capabilities_get_exp.device = NULL;
2087 	mock_capabilities_get_exp.ret = capabilities;
2088 
2089 	const struct rte_security_capability *ret;
2090 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2091 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2092 			ret, NULL, "%p");
2093 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2094 
2095 	return TEST_SUCCESS;
2096 }
2097 
2098 /**
2099  * Test execution of rte_security_capability_get when capabilities table
2100  * does not contain entry with matching ipsec direction field
2101  */
2102 static int
2103 test_capability_get_ipsec_mismatch_dir(void)
2104 {
2105 	struct security_unittest_params *ut_params = &unittest_params;
2106 	struct rte_security_capability_idx idx = {
2107 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2108 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2109 		.ipsec = {
2110 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2111 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2112 			.direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
2113 		},
2114 	};
2115 	struct rte_security_capability capabilities[] = {
2116 		{
2117 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2118 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2119 			.ipsec = {
2120 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2121 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2122 				.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
2123 			},
2124 		},
2125 		{
2126 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2127 		},
2128 	};
2129 
2130 	mock_capabilities_get_exp.device = NULL;
2131 	mock_capabilities_get_exp.ret = capabilities;
2132 
2133 	const struct rte_security_capability *ret;
2134 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2135 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2136 			ret, NULL, "%p");
2137 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2138 
2139 	return TEST_SUCCESS;
2140 }
2141 
2142 /**
2143  * Test execution of rte_security_capability_get when capabilities table
2144  * contains matching ipsec entry
2145  */
2146 static int
2147 test_capability_get_ipsec_match(void)
2148 {
2149 	struct security_unittest_params *ut_params = &unittest_params;
2150 	struct rte_security_capability_idx idx = {
2151 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2152 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2153 		.ipsec = {
2154 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2155 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2156 			.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
2157 		},
2158 	};
2159 	struct rte_security_capability capabilities[] = {
2160 		{
2161 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2162 		},
2163 		{
2164 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2165 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2166 			.ipsec = {
2167 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2168 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2169 				.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
2170 			},
2171 		},
2172 		{
2173 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2174 		},
2175 	};
2176 
2177 	mock_capabilities_get_exp.device = NULL;
2178 	mock_capabilities_get_exp.ret = capabilities;
2179 
2180 	const struct rte_security_capability *ret;
2181 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2182 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2183 			ret, &capabilities[1], "%p");
2184 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2185 
2186 	return TEST_SUCCESS;
2187 }
2188 
2189 /**
2190  * Test execution of rte_security_capability_get when capabilities table
2191  * does not contain entry with matching pdcp domain field
2192  */
2193 static int
2194 test_capability_get_pdcp_mismatch_domain(void)
2195 {
2196 	struct security_unittest_params *ut_params = &unittest_params;
2197 	struct rte_security_capability_idx idx = {
2198 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2199 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2200 		.pdcp = {
2201 			.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2202 		},
2203 	};
2204 	struct rte_security_capability capabilities[] = {
2205 		{
2206 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2207 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2208 			.pdcp = {
2209 				.domain = RTE_SECURITY_PDCP_MODE_DATA,
2210 			},
2211 		},
2212 		{
2213 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2214 		},
2215 	};
2216 
2217 	mock_capabilities_get_exp.device = NULL;
2218 	mock_capabilities_get_exp.ret = capabilities;
2219 
2220 	const struct rte_security_capability *ret;
2221 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2222 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2223 			ret, NULL, "%p");
2224 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2225 
2226 	return TEST_SUCCESS;
2227 }
2228 
2229 /**
2230  * Test execution of rte_security_capability_get when capabilities table
2231  * contains matching pdcp entry
2232  */
2233 static int
2234 test_capability_get_pdcp_match(void)
2235 {
2236 	struct security_unittest_params *ut_params = &unittest_params;
2237 	struct rte_security_capability_idx idx = {
2238 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2239 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2240 		.pdcp = {
2241 			.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2242 		},
2243 	};
2244 	struct rte_security_capability capabilities[] = {
2245 		{
2246 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2247 		},
2248 		{
2249 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2250 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2251 			.pdcp = {
2252 				.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2253 			},
2254 		},
2255 		{
2256 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2257 		},
2258 	};
2259 
2260 	mock_capabilities_get_exp.device = NULL;
2261 	mock_capabilities_get_exp.ret = capabilities;
2262 
2263 	const struct rte_security_capability *ret;
2264 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2265 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2266 			ret, &capabilities[1], "%p");
2267 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2268 
2269 	return TEST_SUCCESS;
2270 }
2271 
2272 /**
2273  * Test execution of rte_security_capability_get when capabilities table
2274  * does not contain entry with matching DOCSIS direction field
2275  */
2276 static int
2277 test_capability_get_docsis_mismatch_direction(void)
2278 {
2279 	struct security_unittest_params *ut_params = &unittest_params;
2280 	struct rte_security_capability_idx idx = {
2281 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2282 		.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2283 		.docsis = {
2284 			.direction = RTE_SECURITY_DOCSIS_DOWNLINK
2285 		},
2286 	};
2287 	struct rte_security_capability capabilities[] = {
2288 		{
2289 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2290 			.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2291 			.docsis = {
2292 				.direction = RTE_SECURITY_DOCSIS_UPLINK
2293 			},
2294 		},
2295 		{
2296 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2297 		},
2298 	};
2299 
2300 	mock_capabilities_get_exp.device = NULL;
2301 	mock_capabilities_get_exp.ret = capabilities;
2302 
2303 	const struct rte_security_capability *ret;
2304 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2305 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2306 			ret, NULL, "%p");
2307 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2308 
2309 	return TEST_SUCCESS;
2310 }
2311 
2312 /**
2313  * Test execution of rte_security_capability_get when capabilities table
2314  * contains matching DOCSIS entry
2315  */
2316 static int
2317 test_capability_get_docsis_match(void)
2318 {
2319 	struct security_unittest_params *ut_params = &unittest_params;
2320 	struct rte_security_capability_idx idx = {
2321 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2322 		.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2323 		.docsis = {
2324 			.direction = RTE_SECURITY_DOCSIS_UPLINK
2325 		},
2326 	};
2327 	struct rte_security_capability capabilities[] = {
2328 		{
2329 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2330 		},
2331 		{
2332 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2333 			.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2334 			.docsis = {
2335 				.direction = RTE_SECURITY_DOCSIS_UPLINK
2336 			},
2337 		},
2338 		{
2339 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2340 		},
2341 	};
2342 
2343 	mock_capabilities_get_exp.device = NULL;
2344 	mock_capabilities_get_exp.ret = capabilities;
2345 
2346 	const struct rte_security_capability *ret;
2347 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2348 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2349 			ret, &capabilities[1], "%p");
2350 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2351 
2352 	return TEST_SUCCESS;
2353 }
2354 
2355 /**
2356  * Declaration of testcases
2357  */
2358 static struct unit_test_suite security_testsuite  = {
2359 	.suite_name = "generic security",
2360 	.setup = testsuite_setup,
2361 	.teardown = testsuite_teardown,
2362 	.unit_test_cases = {
2363 		TEST_CASE_ST(ut_setup, ut_teardown,
2364 				test_session_create_inv_context),
2365 		TEST_CASE_ST(ut_setup, ut_teardown,
2366 				test_session_create_inv_context_ops),
2367 		TEST_CASE_ST(ut_setup, ut_teardown,
2368 				test_session_create_inv_context_ops_fun),
2369 		TEST_CASE_ST(ut_setup, ut_teardown,
2370 				test_session_create_inv_configuration),
2371 		TEST_CASE_ST(ut_setup, ut_teardown,
2372 				test_session_create_inv_mempool),
2373 		TEST_CASE_ST(ut_setup, ut_teardown,
2374 				test_session_create_mempool_empty),
2375 		TEST_CASE_ST(ut_setup, ut_teardown,
2376 				test_session_create_ops_failure),
2377 		TEST_CASE_ST(ut_setup, ut_teardown,
2378 				test_session_create_success),
2379 
2380 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2381 				test_session_update_inv_context),
2382 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2383 				test_session_update_inv_context_ops),
2384 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2385 				test_session_update_inv_context_ops_fun),
2386 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2387 				test_session_update_inv_configuration),
2388 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2389 				test_session_update_inv_session),
2390 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2391 				test_session_update_ops_failure),
2392 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2393 				test_session_update_success),
2394 
2395 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2396 				test_session_get_size_inv_context),
2397 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2398 				test_session_get_size_inv_context_ops),
2399 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2400 				test_session_get_size_inv_context_ops_fun),
2401 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2402 				test_session_get_size_ops_failure),
2403 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2404 				test_session_get_size_success),
2405 
2406 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2407 				test_session_stats_get_inv_context),
2408 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2409 				test_session_stats_get_inv_context_ops),
2410 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2411 				test_session_stats_get_inv_context_ops_fun),
2412 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2413 				test_session_stats_get_inv_stats),
2414 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2415 				test_session_stats_get_ops_failure),
2416 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2417 				test_session_stats_get_success),
2418 
2419 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2420 				test_session_destroy_inv_context),
2421 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2422 				test_session_destroy_inv_context_ops),
2423 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2424 				test_session_destroy_inv_context_ops_fun),
2425 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2426 				test_session_destroy_inv_session),
2427 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2428 				test_session_destroy_ops_failure),
2429 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2430 				test_session_destroy_success),
2431 
2432 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2433 				test_set_pkt_metadata_inv_context),
2434 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2435 				test_set_pkt_metadata_inv_context_ops),
2436 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2437 				test_set_pkt_metadata_inv_context_ops_fun),
2438 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2439 				test_set_pkt_metadata_inv_session),
2440 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2441 				test_set_pkt_metadata_ops_failure),
2442 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2443 				test_set_pkt_metadata_success),
2444 
2445 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2446 				test_get_userdata_inv_context),
2447 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2448 				test_get_userdata_inv_context_ops),
2449 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2450 				test_get_userdata_inv_context_ops_fun),
2451 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2452 				test_get_userdata_ops_failure),
2453 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2454 				test_get_userdata_success),
2455 
2456 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2457 				test_capabilities_get_inv_context),
2458 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2459 				test_capabilities_get_inv_context_ops),
2460 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2461 				test_capabilities_get_inv_context_ops_fun),
2462 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2463 				test_capabilities_get_ops_failure),
2464 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2465 				test_capabilities_get_success),
2466 
2467 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2468 				test_capability_get_inv_context),
2469 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2470 				test_capability_get_inv_context_ops),
2471 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2472 				test_capability_get_inv_context_ops_fun),
2473 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2474 				test_capability_get_inv_idx),
2475 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2476 				test_capability_get_ops_failure),
2477 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2478 				test_capability_get_empty_table),
2479 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2480 				test_capability_get_no_matching_action),
2481 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2482 				test_capability_get_no_matching_protocol),
2483 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2484 				test_capability_get_no_support_for_macsec),
2485 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2486 				test_capability_get_ipsec_mismatch_proto),
2487 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2488 				test_capability_get_ipsec_mismatch_mode),
2489 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2490 				test_capability_get_ipsec_mismatch_dir),
2491 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2492 				test_capability_get_ipsec_match),
2493 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2494 				test_capability_get_pdcp_mismatch_domain),
2495 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2496 				test_capability_get_pdcp_match),
2497 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2498 				test_capability_get_docsis_mismatch_direction),
2499 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2500 				test_capability_get_docsis_match),
2501 
2502 		TEST_CASES_END() /**< NULL terminate unit test array */
2503 	}
2504 };
2505 
2506 static int
2507 test_security(void)
2508 {
2509 	rte_log_set_global_level(RTE_LOG_DEBUG);
2510 	rte_log_set_level(RTE_LOGTYPE_EAL, RTE_LOG_DEBUG);
2511 
2512 	return unit_test_suite_runner(&security_testsuite);
2513 }
2514 
2515 REGISTER_TEST_COMMAND(security_autotest, test_security);
2516