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