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