xref: /dpdk/app/test/test_security.c (revision 7be78d02)
14849e8e4SLukasz Wojciechowski /* SPDX-License-Identifier: BSD-3-Clause
24849e8e4SLukasz Wojciechowski  * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
34849e8e4SLukasz Wojciechowski  */
44849e8e4SLukasz Wojciechowski 
54849e8e4SLukasz Wojciechowski #include <rte_errno.h>
64849e8e4SLukasz Wojciechowski #include <rte_log.h>
74849e8e4SLukasz Wojciechowski #include <rte_memory.h>
84849e8e4SLukasz Wojciechowski #include <rte_mempool.h>
9c6478fd5SDavid Coyle #include <rte_ether.h>
104849e8e4SLukasz Wojciechowski #include <rte_security.h>
114849e8e4SLukasz Wojciechowski #include <rte_security_driver.h>
124849e8e4SLukasz Wojciechowski 
134849e8e4SLukasz Wojciechowski /* Before including rte_test.h file you can define
144849e8e4SLukasz Wojciechowski  * RTE_TEST_TRACE_FAILURE(_file, _line, _func) macro to better trace/debug test
154849e8e4SLukasz Wojciechowski  * failures. Mostly useful in development phase.
164849e8e4SLukasz Wojciechowski  */
174849e8e4SLukasz Wojciechowski #ifndef RTE_TEST_TRACE_FAILURE
184849e8e4SLukasz Wojciechowski #define RTE_TEST_TRACE_FAILURE(_file, _line, _func) \
194849e8e4SLukasz Wojciechowski 	RTE_LOG(DEBUG, EAL, "in %s:%d %s\n", _file, _line, _func)
204849e8e4SLukasz Wojciechowski #endif
214849e8e4SLukasz Wojciechowski 
224849e8e4SLukasz Wojciechowski #include <rte_test.h>
234849e8e4SLukasz Wojciechowski #include "test.h"
244849e8e4SLukasz Wojciechowski 
254849e8e4SLukasz Wojciechowski /**
264849e8e4SLukasz Wojciechowski  * Security
274849e8e4SLukasz Wojciechowski  * =======
284849e8e4SLukasz Wojciechowski  *
294849e8e4SLukasz Wojciechowski  * Basic unit tests of the librte_security API.
304849e8e4SLukasz Wojciechowski  *
314849e8e4SLukasz Wojciechowski  * Structure of the file:
324849e8e4SLukasz Wojciechowski  * - macros for making tests more readable;
334849e8e4SLukasz Wojciechowski  * - mockup structures and functions for rte_security_ops;
344849e8e4SLukasz Wojciechowski  * - test suite and test cases setup and teardown functions;
354849e8e4SLukasz Wojciechowski  * - tests functions;
364849e8e4SLukasz Wojciechowski  * - declaration of testcases.
374849e8e4SLukasz Wojciechowski  */
384849e8e4SLukasz Wojciechowski 
394849e8e4SLukasz Wojciechowski 
404849e8e4SLukasz Wojciechowski /**
414849e8e4SLukasz Wojciechowski  * Macros
424849e8e4SLukasz Wojciechowski  *
434849e8e4SLukasz Wojciechowski  * Set of macros for making tests easier to read.
444849e8e4SLukasz Wojciechowski  */
454849e8e4SLukasz Wojciechowski 
464849e8e4SLukasz Wojciechowski /**
474849e8e4SLukasz Wojciechowski  * Verify condition inside mocked up function.
484849e8e4SLukasz Wojciechowski  * Mockup function cannot return a test error, so the failure
494849e8e4SLukasz Wojciechowski  * of assertion increases counter and print logs.
504849e8e4SLukasz Wojciechowski  * The counter can be verified later to check if test case should fail.
514849e8e4SLukasz Wojciechowski  *
524849e8e4SLukasz Wojciechowski  * @param   fail_counter	fail counter
534849e8e4SLukasz Wojciechowski  * @param   cond	condition expected to be true
544849e8e4SLukasz Wojciechowski  * @param   msg	printf style formatting string for custom message
554849e8e4SLukasz Wojciechowski  */
564849e8e4SLukasz Wojciechowski #define MOCK_TEST_ASSERT(fail_counter, cond, msg, ...) do {		\
574849e8e4SLukasz Wojciechowski 	if (!(cond)) {							\
584849e8e4SLukasz Wojciechowski 		fail_counter++;						\
594849e8e4SLukasz Wojciechowski 		RTE_LOG(DEBUG, EAL, "Test assert %s line %d failed: "	\
604849e8e4SLukasz Wojciechowski 				msg "\n", __func__, __LINE__,		\
614849e8e4SLukasz Wojciechowski 				 ##__VA_ARGS__);			\
624849e8e4SLukasz Wojciechowski 		RTE_TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__);	\
634849e8e4SLukasz Wojciechowski 	}								\
644849e8e4SLukasz Wojciechowski } while (0)
654849e8e4SLukasz Wojciechowski 
664849e8e4SLukasz Wojciechowski /**
674849e8e4SLukasz Wojciechowski  * Verify equality condition inside mocked up function.
684849e8e4SLukasz Wojciechowski  * Mockup function cannot return a test error, so the failure
694849e8e4SLukasz Wojciechowski  * of assertion increases counter and print logs.
704849e8e4SLukasz Wojciechowski  * The counter can be verified later to check if test case should fail.
714849e8e4SLukasz Wojciechowski  *
724849e8e4SLukasz Wojciechowski  * @param   fail_counter	fail counter
734849e8e4SLukasz Wojciechowski  * @param   a	first value of comparison
744849e8e4SLukasz Wojciechowski  * @param   b	second value of comparison
754849e8e4SLukasz Wojciechowski  * @param   msg	printf style formatting string for custom message
764849e8e4SLukasz Wojciechowski  */
774849e8e4SLukasz Wojciechowski #define MOCK_TEST_ASSERT_EQUAL(fail_counter, a, b, msg, ...)	\
784849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT(fail_counter, (a) == (b), msg, ##__VA_ARGS__)
794849e8e4SLukasz Wojciechowski 
800cbd6711SLukasz Wojciechowski /**
810cbd6711SLukasz Wojciechowski  * Verify not null condition inside mocked up function.
820cbd6711SLukasz Wojciechowski  * Mockup function cannot return a test error, so the failure
830cbd6711SLukasz Wojciechowski  * of assertion increases counter and print logs.
840cbd6711SLukasz Wojciechowski  * The counter can be verified later to check if test case should fail.
850cbd6711SLukasz Wojciechowski  *
860cbd6711SLukasz Wojciechowski  * @param   fail_counter	fail counter
870cbd6711SLukasz Wojciechowski  * @param   val	value expected not to be NULL
880cbd6711SLukasz Wojciechowski  * @param   msg	printf style formatting string for custom message
890cbd6711SLukasz Wojciechowski  */
900cbd6711SLukasz Wojciechowski #define MOCK_TEST_ASSERT_NOT_NULL(fail_counter, val, msg, ...)	\
910cbd6711SLukasz Wojciechowski 	MOCK_TEST_ASSERT(fail_counter, (val) != NULL, msg, ##__VA_ARGS__)
920cbd6711SLukasz Wojciechowski 
934849e8e4SLukasz Wojciechowski 
944849e8e4SLukasz Wojciechowski /**
954849e8e4SLukasz Wojciechowski  * Verify if parameter of the mocked up function matches expected value.
964849e8e4SLukasz Wojciechowski  * The expected value is stored in data structure in the field matching
974849e8e4SLukasz Wojciechowski  * parameter name.
984849e8e4SLukasz Wojciechowski  *
994849e8e4SLukasz Wojciechowski  * @param   data	structure with expected values
1004849e8e4SLukasz Wojciechowski  * @param   parameter	name of the parameter (both field and parameter name)
1014849e8e4SLukasz Wojciechowski  * @param   spec	printf style spec for parameter
1024849e8e4SLukasz Wojciechowski  */
1034849e8e4SLukasz Wojciechowski #define MOCK_TEST_ASSERT_PARAMETER(data, parameter, spec)		\
1044849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_EQUAL(data.failed, data.parameter, parameter,	\
1054849e8e4SLukasz Wojciechowski 			"Expecting parameter %s to be " spec		\
1064849e8e4SLukasz Wojciechowski 			" but it's " spec, RTE_STR(parameter),		\
1074849e8e4SLukasz Wojciechowski 			data.parameter, parameter)
1084849e8e4SLukasz Wojciechowski 
1094849e8e4SLukasz Wojciechowski /**
1104849e8e4SLukasz Wojciechowski  * Wrap for MOCK_TEST_ASSERT_PARAMETER macro for pointer type parameters.
1114849e8e4SLukasz Wojciechowski  *
1124849e8e4SLukasz Wojciechowski  * @param   data	structure with expected values
1134849e8e4SLukasz Wojciechowski  * @param   parameter	name of the parameter (both field and parameter name)
1144849e8e4SLukasz Wojciechowski  */
1154849e8e4SLukasz Wojciechowski #define MOCK_TEST_ASSERT_POINTER_PARAMETER(data, parameter)	\
1164849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_PARAMETER(data, parameter, "%p")
1174849e8e4SLukasz Wojciechowski 
1184849e8e4SLukasz Wojciechowski /**
1190cbd6711SLukasz Wojciechowski  * Wrap for MOCK_TEST_ASSERT_PARAMETER macro for uint64_t type parameters.
1200cbd6711SLukasz Wojciechowski  *
1210cbd6711SLukasz Wojciechowski  * @param   data	structure with expected values
1220cbd6711SLukasz Wojciechowski  * @param   parameter	name of the parameter (both field and parameter name)
1230cbd6711SLukasz Wojciechowski  */
1240cbd6711SLukasz Wojciechowski #define MOCK_TEST_ASSERT_U64_PARAMETER(data, parameter)	\
1250cbd6711SLukasz Wojciechowski 	MOCK_TEST_ASSERT_PARAMETER(data, parameter, "%" PRIu64)
1260cbd6711SLukasz Wojciechowski 
1270cbd6711SLukasz Wojciechowski /**
1284849e8e4SLukasz Wojciechowski  * Verify number of calls of the mocked up function
1294849e8e4SLukasz Wojciechowski  * and check if there were any fails during execution.
1304849e8e4SLukasz Wojciechowski  * The fails statistics inside mocked up functions are collected
1314849e8e4SLukasz Wojciechowski  * as "failed" field in mockup structures.
1324849e8e4SLukasz Wojciechowski  *
1334849e8e4SLukasz Wojciechowski  * @param   mock_data	structure with statistics (called, failed)
1344849e8e4SLukasz Wojciechowski  * @param   exp_calls	expected number of mockup function calls
1354849e8e4SLukasz Wojciechowski  */
1364849e8e4SLukasz Wojciechowski #define TEST_ASSERT_MOCK_CALLS(mock_data, exp_calls) do {		\
1374849e8e4SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(exp_calls, mock_data.called,			\
1384849e8e4SLukasz Wojciechowski 			"Expecting sub op to be called %d times, "	\
1394849e8e4SLukasz Wojciechowski 			"but it's called %d times",			\
1404849e8e4SLukasz Wojciechowski 			exp_calls, mock_data.called);			\
1414849e8e4SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(0, mock_data.failed,				\
1424849e8e4SLukasz Wojciechowski 			"Expecting sub op asserts not to fail, "	\
1434849e8e4SLukasz Wojciechowski 			"but they're failed %d times",			\
1444849e8e4SLukasz Wojciechowski 			mock_data.failed);				\
1454849e8e4SLukasz Wojciechowski } while (0)
1464849e8e4SLukasz Wojciechowski 
1474849e8e4SLukasz Wojciechowski /**
1484849e8e4SLukasz Wojciechowski  * Assert tested function result match expected value
1494849e8e4SLukasz Wojciechowski  *
1504849e8e4SLukasz Wojciechowski  * @param   f_name	name of tested function
1514849e8e4SLukasz Wojciechowski  * @param   f_ret	value returned by the function
1524849e8e4SLukasz Wojciechowski  * @param   exp_ret	expected returned value
1534849e8e4SLukasz Wojciechowski  * @param   fmt		printf style format for returned value
1544849e8e4SLukasz Wojciechowski  */
1554849e8e4SLukasz Wojciechowski #define TEST_ASSERT_MOCK_FUNCTION_CALL_RET(f_name, f_ret, exp_ret, fmt)	\
1564849e8e4SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(exp_ret, f_ret, "Expecting " RTE_STR(f_name)	\
1574849e8e4SLukasz Wojciechowski 			" to return " fmt ", but it returned " fmt	\
1584849e8e4SLukasz Wojciechowski 			"\n", exp_ret, f_ret)
1594849e8e4SLukasz Wojciechowski 
1604849e8e4SLukasz Wojciechowski /**
1614849e8e4SLukasz Wojciechowski  * Assert tested function result is not NULL
1624849e8e4SLukasz Wojciechowski  *
1634849e8e4SLukasz Wojciechowski  * @param   f_name	name of tested function
1644849e8e4SLukasz Wojciechowski  * @param   f_ret	value returned by the function
1654849e8e4SLukasz Wojciechowski  */
1664849e8e4SLukasz Wojciechowski #define TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(f_name, f_ret)		\
1674849e8e4SLukasz Wojciechowski 	TEST_ASSERT_NOT_NULL(f_ret, "Expecting " RTE_STR(f_name)	\
1684849e8e4SLukasz Wojciechowski 			" to return not NULL\n")
1694849e8e4SLukasz Wojciechowski 
1704849e8e4SLukasz Wojciechowski /**
1714849e8e4SLukasz Wojciechowski  * Verify that sess_cnt counter value matches expected
1724849e8e4SLukasz Wojciechowski  *
1734849e8e4SLukasz Wojciechowski  * @param   expected_sessions_count	expected counter value
1744849e8e4SLukasz Wojciechowski  */
1754849e8e4SLukasz Wojciechowski #define TEST_ASSERT_SESSION_COUNT(expected_sessions_count) do {		\
1764849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;	\
1774849e8e4SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(expected_sessions_count,			\
1784849e8e4SLukasz Wojciechowski 			ut_params->ctx.sess_cnt,			\
1794849e8e4SLukasz Wojciechowski 			"Expecting session counter to be %u,"		\
1804849e8e4SLukasz Wojciechowski 			" but it's %u",	expected_sessions_count,	\
1814849e8e4SLukasz Wojciechowski 			ut_params->ctx.sess_cnt);			\
1824849e8e4SLukasz Wojciechowski } while (0)
1834849e8e4SLukasz Wojciechowski 
1844849e8e4SLukasz Wojciechowski /**
1854849e8e4SLukasz Wojciechowski  * Verify usage of mempool by checking if number of allocated objects matches
1864849e8e4SLukasz Wojciechowski  * expectations. The mempool is used to manage objects for sessions data.
1874849e8e4SLukasz Wojciechowski  * A single object is acquired from mempool during session_create
1884849e8e4SLukasz Wojciechowski  * and put back in session_destroy.
1894849e8e4SLukasz Wojciechowski  *
1904849e8e4SLukasz Wojciechowski  * @param   expected_mempool_usage	expected number of used mempool objects
1914849e8e4SLukasz Wojciechowski  */
1924849e8e4SLukasz Wojciechowski #define TEST_ASSERT_MEMPOOL_USAGE(expected_mempool_usage) do {		\
1934849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;\
1944849e8e4SLukasz Wojciechowski 	unsigned int mempool_usage;					\
1954849e8e4SLukasz Wojciechowski 	mempool_usage = rte_mempool_in_use_count(			\
1964849e8e4SLukasz Wojciechowski 			ts_params->session_mpool);			\
1974849e8e4SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(expected_mempool_usage, mempool_usage,	\
1984849e8e4SLukasz Wojciechowski 			"Expecting %u mempool allocations, "		\
1994849e8e4SLukasz Wojciechowski 			"but there are %u allocated objects",		\
2004849e8e4SLukasz Wojciechowski 			expected_mempool_usage, mempool_usage);		\
2014849e8e4SLukasz Wojciechowski } while (0)
2024849e8e4SLukasz Wojciechowski 
203e30b2833SAkhil Goyal /**
204e30b2833SAkhil Goyal  * Verify usage of mempool by checking if number of allocated objects matches
205e30b2833SAkhil Goyal  * expectations. The mempool is used to manage objects for sessions priv data.
206e30b2833SAkhil Goyal  * A single object is acquired from mempool during session_create
207e30b2833SAkhil Goyal  * and put back in session_destroy.
208e30b2833SAkhil Goyal  *
209e30b2833SAkhil Goyal  * @param   expected_priv_mp_usage	expected number of used priv mp objects
210e30b2833SAkhil Goyal  */
211e30b2833SAkhil Goyal #define TEST_ASSERT_PRIV_MP_USAGE(expected_priv_mp_usage) do {		\
212e30b2833SAkhil Goyal 	struct security_testsuite_params *ts_params = &testsuite_params;\
213e30b2833SAkhil Goyal 	unsigned int priv_mp_usage;					\
214e30b2833SAkhil Goyal 	priv_mp_usage = rte_mempool_in_use_count(			\
215e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);			\
216e30b2833SAkhil Goyal 	TEST_ASSERT_EQUAL(expected_priv_mp_usage, priv_mp_usage,	\
217e30b2833SAkhil Goyal 			"Expecting %u priv mempool allocations, "	\
218e30b2833SAkhil Goyal 			"but there are %u allocated objects",		\
219e30b2833SAkhil Goyal 			expected_priv_mp_usage, priv_mp_usage);		\
220e30b2833SAkhil Goyal } while (0)
2214849e8e4SLukasz Wojciechowski 
2224849e8e4SLukasz Wojciechowski /**
2234849e8e4SLukasz Wojciechowski  * Mockup structures and functions for rte_security_ops;
2244849e8e4SLukasz Wojciechowski  *
2254849e8e4SLukasz Wojciechowski  * Set of structures for controlling mockup functions calls.
2264849e8e4SLukasz Wojciechowski  * Every mockup function X has its corresponding X_data structure
2274849e8e4SLukasz Wojciechowski  * and an instance of that structure X_exp.
2284849e8e4SLukasz Wojciechowski  * Structure contains parameters that a mockup function is expected
2294849e8e4SLukasz Wojciechowski  * to be called with, a value to return (.ret) and 2 statistics:
2304849e8e4SLukasz Wojciechowski  * .called (number of times the mockup function was called)
2314849e8e4SLukasz Wojciechowski  * and .failed (number of assertion fails during mockup function call).
2324849e8e4SLukasz Wojciechowski  *
2334849e8e4SLukasz Wojciechowski  * Mockup functions verify that the parameters they are called with match
2344849e8e4SLukasz Wojciechowski  * expected values. The expected values should be stored in corresponding
2354849e8e4SLukasz Wojciechowski  * structures prior to mockup functions call. Every failure of such
2364849e8e4SLukasz Wojciechowski  * verification increases .failed counter. Every call of mockup function
2374849e8e4SLukasz Wojciechowski  * increases .called counter. Function returns value stored in .ret field
2384849e8e4SLukasz Wojciechowski  * of the structure.
2394849e8e4SLukasz Wojciechowski  * In case of some parameters in some functions the expected value is unknown
240*7be78d02SJosh Soref  * and cannot be determined prior to call. Such parameters are stored
2414849e8e4SLukasz Wojciechowski  * in structure and can be compared or analyzed later in test case code.
2424849e8e4SLukasz Wojciechowski  *
2434849e8e4SLukasz Wojciechowski  * Below structures and functions follow the rules just described.
2444849e8e4SLukasz Wojciechowski  * Additional remarks and exceptions are added in comments.
2454849e8e4SLukasz Wojciechowski  */
2464849e8e4SLukasz Wojciechowski 
2474849e8e4SLukasz Wojciechowski /**
2484849e8e4SLukasz Wojciechowski  * session_create mockup
2494849e8e4SLukasz Wojciechowski  *
2504849e8e4SLukasz Wojciechowski  * Verified parameters: device, conf, mp.
2514849e8e4SLukasz Wojciechowski  * Saved, not verified parameters: sess.
2524849e8e4SLukasz Wojciechowski  */
2534849e8e4SLukasz Wojciechowski static struct mock_session_create_data {
2544849e8e4SLukasz Wojciechowski 	void *device;
2554849e8e4SLukasz Wojciechowski 	struct rte_security_session_conf *conf;
2564849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
2574849e8e4SLukasz Wojciechowski 	struct rte_mempool *mp;
258e30b2833SAkhil Goyal 	struct rte_mempool *priv_mp;
2594849e8e4SLukasz Wojciechowski 
2604849e8e4SLukasz Wojciechowski 	int ret;
2614849e8e4SLukasz Wojciechowski 
2624849e8e4SLukasz Wojciechowski 	int called;
2634849e8e4SLukasz Wojciechowski 	int failed;
264e30b2833SAkhil Goyal } mock_session_create_exp = {NULL, NULL, NULL, NULL, NULL, 0, 0, 0};
2654849e8e4SLukasz Wojciechowski 
2664849e8e4SLukasz Wojciechowski static int
mock_session_create(void * device,struct rte_security_session_conf * conf,struct rte_security_session * sess,struct rte_mempool * priv_mp)2674849e8e4SLukasz Wojciechowski mock_session_create(void *device,
2684849e8e4SLukasz Wojciechowski 		struct rte_security_session_conf *conf,
2694849e8e4SLukasz Wojciechowski 		struct rte_security_session *sess,
270e30b2833SAkhil Goyal 		struct rte_mempool *priv_mp)
2714849e8e4SLukasz Wojciechowski {
272e30b2833SAkhil Goyal 	void *sess_priv;
273e30b2833SAkhil Goyal 	int ret;
274e30b2833SAkhil Goyal 
2754849e8e4SLukasz Wojciechowski 	mock_session_create_exp.called++;
2764849e8e4SLukasz Wojciechowski 
2774849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, device);
2784849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, conf);
279e30b2833SAkhil Goyal 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, priv_mp);
2804849e8e4SLukasz Wojciechowski 
281e30b2833SAkhil Goyal 	if (mock_session_create_exp.ret == 0) {
282e30b2833SAkhil Goyal 		ret = rte_mempool_get(priv_mp, &sess_priv);
283e30b2833SAkhil Goyal 		TEST_ASSERT_EQUAL(0, ret,
284e30b2833SAkhil Goyal 			"priv mempool does not have enough objects");
285e30b2833SAkhil Goyal 
286e30b2833SAkhil Goyal 		set_sec_session_private_data(sess, sess_priv);
2874849e8e4SLukasz Wojciechowski 		mock_session_create_exp.sess = sess;
288e30b2833SAkhil Goyal 	}
2894849e8e4SLukasz Wojciechowski 
2904849e8e4SLukasz Wojciechowski 	return mock_session_create_exp.ret;
2914849e8e4SLukasz Wojciechowski }
2924849e8e4SLukasz Wojciechowski 
2934849e8e4SLukasz Wojciechowski /**
2940b124e04SLukasz Wojciechowski  * session_update mockup
2950b124e04SLukasz Wojciechowski  *
2960b124e04SLukasz Wojciechowski  * Verified parameters: device, sess, conf.
2970b124e04SLukasz Wojciechowski  */
2980b124e04SLukasz Wojciechowski static struct mock_session_update_data {
2990b124e04SLukasz Wojciechowski 	void *device;
3000b124e04SLukasz Wojciechowski 	struct rte_security_session *sess;
3010b124e04SLukasz Wojciechowski 	struct rte_security_session_conf *conf;
3020b124e04SLukasz Wojciechowski 
3030b124e04SLukasz Wojciechowski 	int ret;
3040b124e04SLukasz Wojciechowski 
3050b124e04SLukasz Wojciechowski 	int called;
3060b124e04SLukasz Wojciechowski 	int failed;
3070b124e04SLukasz Wojciechowski } mock_session_update_exp = {NULL, NULL, NULL, 0, 0, 0};
3080b124e04SLukasz Wojciechowski 
3090b124e04SLukasz Wojciechowski static int
mock_session_update(void * device,struct rte_security_session * sess,struct rte_security_session_conf * conf)3100b124e04SLukasz Wojciechowski mock_session_update(void *device,
3110b124e04SLukasz Wojciechowski 		struct rte_security_session *sess,
3120b124e04SLukasz Wojciechowski 		struct rte_security_session_conf *conf)
3130b124e04SLukasz Wojciechowski {
3140b124e04SLukasz Wojciechowski 	mock_session_update_exp.called++;
3150b124e04SLukasz Wojciechowski 
3160b124e04SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, device);
3170b124e04SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, sess);
3180b124e04SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, conf);
3190b124e04SLukasz Wojciechowski 
3200b124e04SLukasz Wojciechowski 	return mock_session_update_exp.ret;
3210b124e04SLukasz Wojciechowski }
3220b124e04SLukasz Wojciechowski 
3230b124e04SLukasz Wojciechowski /**
324226430f4SLukasz Wojciechowski  * session_get_size mockup
325226430f4SLukasz Wojciechowski  *
326226430f4SLukasz Wojciechowski  * Verified parameters: device.
327226430f4SLukasz Wojciechowski  */
328226430f4SLukasz Wojciechowski static struct mock_session_get_size_data {
329226430f4SLukasz Wojciechowski 	void *device;
330226430f4SLukasz Wojciechowski 
331226430f4SLukasz Wojciechowski 	unsigned int ret;
332226430f4SLukasz Wojciechowski 
333226430f4SLukasz Wojciechowski 	int called;
334226430f4SLukasz Wojciechowski 	int failed;
335226430f4SLukasz Wojciechowski } mock_session_get_size_exp = {NULL, 0U, 0, 0};
336226430f4SLukasz Wojciechowski 
337226430f4SLukasz Wojciechowski static unsigned int
mock_session_get_size(void * device)338226430f4SLukasz Wojciechowski mock_session_get_size(void *device)
339226430f4SLukasz Wojciechowski {
340226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.called++;
341226430f4SLukasz Wojciechowski 
342226430f4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_get_size_exp, device);
343226430f4SLukasz Wojciechowski 
344226430f4SLukasz Wojciechowski 	return mock_session_get_size_exp.ret;
345226430f4SLukasz Wojciechowski }
346226430f4SLukasz Wojciechowski 
347226430f4SLukasz Wojciechowski /**
3481e1a0e49SLukasz Wojciechowski  * session_stats_get mockup
3491e1a0e49SLukasz Wojciechowski  *
3501e1a0e49SLukasz Wojciechowski  * Verified parameters: device, sess, stats.
3511e1a0e49SLukasz Wojciechowski  */
3521e1a0e49SLukasz Wojciechowski static struct mock_session_stats_get_data {
3531e1a0e49SLukasz Wojciechowski 	void *device;
3541e1a0e49SLukasz Wojciechowski 	struct rte_security_session *sess;
3551e1a0e49SLukasz Wojciechowski 	struct rte_security_stats *stats;
3561e1a0e49SLukasz Wojciechowski 
3571e1a0e49SLukasz Wojciechowski 	int ret;
3581e1a0e49SLukasz Wojciechowski 
3591e1a0e49SLukasz Wojciechowski 	int called;
3601e1a0e49SLukasz Wojciechowski 	int failed;
3611e1a0e49SLukasz Wojciechowski } mock_session_stats_get_exp = {NULL, NULL, NULL, 0, 0, 0};
3621e1a0e49SLukasz Wojciechowski 
3631e1a0e49SLukasz Wojciechowski static int
mock_session_stats_get(void * device,struct rte_security_session * sess,struct rte_security_stats * stats)3641e1a0e49SLukasz Wojciechowski mock_session_stats_get(void *device,
3651e1a0e49SLukasz Wojciechowski 		struct rte_security_session *sess,
3661e1a0e49SLukasz Wojciechowski 		struct rte_security_stats *stats)
3671e1a0e49SLukasz Wojciechowski {
3681e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.called++;
3691e1a0e49SLukasz Wojciechowski 
3701e1a0e49SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, device);
3711e1a0e49SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, sess);
3721e1a0e49SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, stats);
3731e1a0e49SLukasz Wojciechowski 
3741e1a0e49SLukasz Wojciechowski 	return mock_session_stats_get_exp.ret;
3751e1a0e49SLukasz Wojciechowski }
3761e1a0e49SLukasz Wojciechowski 
3771e1a0e49SLukasz Wojciechowski /**
3784849e8e4SLukasz Wojciechowski  * session_destroy mockup
3794849e8e4SLukasz Wojciechowski  *
3804849e8e4SLukasz Wojciechowski  * Verified parameters: device, sess.
3814849e8e4SLukasz Wojciechowski  */
3824849e8e4SLukasz Wojciechowski static struct mock_session_destroy_data {
3834849e8e4SLukasz Wojciechowski 	void *device;
3844849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
3854849e8e4SLukasz Wojciechowski 
3864849e8e4SLukasz Wojciechowski 	int ret;
3874849e8e4SLukasz Wojciechowski 
3884849e8e4SLukasz Wojciechowski 	int called;
3894849e8e4SLukasz Wojciechowski 	int failed;
3904849e8e4SLukasz Wojciechowski } mock_session_destroy_exp = {NULL, NULL, 0, 0, 0};
3914849e8e4SLukasz Wojciechowski 
3924849e8e4SLukasz Wojciechowski static int
mock_session_destroy(void * device,struct rte_security_session * sess)3934849e8e4SLukasz Wojciechowski mock_session_destroy(void *device, struct rte_security_session *sess)
3944849e8e4SLukasz Wojciechowski {
395e30b2833SAkhil Goyal 	void *sess_priv = get_sec_session_private_data(sess);
3964849e8e4SLukasz Wojciechowski 
397e30b2833SAkhil Goyal 	mock_session_destroy_exp.called++;
398e30b2833SAkhil Goyal 	if ((mock_session_destroy_exp.ret == 0) && (sess_priv != NULL)) {
399e30b2833SAkhil Goyal 		rte_mempool_put(rte_mempool_from_obj(sess_priv), sess_priv);
400e30b2833SAkhil Goyal 		set_sec_session_private_data(sess, NULL);
401e30b2833SAkhil Goyal 	}
4024849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_destroy_exp, device);
4034849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_destroy_exp, sess);
4044849e8e4SLukasz Wojciechowski 
4054849e8e4SLukasz Wojciechowski 	return mock_session_destroy_exp.ret;
4064849e8e4SLukasz Wojciechowski }
4074849e8e4SLukasz Wojciechowski 
4084849e8e4SLukasz Wojciechowski /**
409a9ff3522SLukasz Wojciechowski  * set_pkt_metadata mockup
410a9ff3522SLukasz Wojciechowski  *
411a9ff3522SLukasz Wojciechowski  * Verified parameters: device, sess, m, params.
412a9ff3522SLukasz Wojciechowski  */
413a9ff3522SLukasz Wojciechowski static struct mock_set_pkt_metadata_data {
414a9ff3522SLukasz Wojciechowski 	void *device;
415a9ff3522SLukasz Wojciechowski 	struct rte_security_session *sess;
416a9ff3522SLukasz Wojciechowski 	struct rte_mbuf *m;
417a9ff3522SLukasz Wojciechowski 	void *params;
418a9ff3522SLukasz Wojciechowski 
419a9ff3522SLukasz Wojciechowski 	int ret;
420a9ff3522SLukasz Wojciechowski 
421a9ff3522SLukasz Wojciechowski 	int called;
422a9ff3522SLukasz Wojciechowski 	int failed;
423a9ff3522SLukasz Wojciechowski } mock_set_pkt_metadata_exp = {NULL, NULL, NULL, NULL, 0, 0, 0};
424a9ff3522SLukasz Wojciechowski 
425a9ff3522SLukasz Wojciechowski static int
mock_set_pkt_metadata(void * device,struct rte_security_session * sess,struct rte_mbuf * m,void * params)426a9ff3522SLukasz Wojciechowski mock_set_pkt_metadata(void *device,
427a9ff3522SLukasz Wojciechowski 		struct rte_security_session *sess,
428a9ff3522SLukasz Wojciechowski 		struct rte_mbuf *m,
429a9ff3522SLukasz Wojciechowski 		void *params)
430a9ff3522SLukasz Wojciechowski {
431a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.called++;
432a9ff3522SLukasz Wojciechowski 
433a9ff3522SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, device);
434a9ff3522SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, sess);
435a9ff3522SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, m);
436a9ff3522SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, params);
437a9ff3522SLukasz Wojciechowski 
438a9ff3522SLukasz Wojciechowski 	return mock_set_pkt_metadata_exp.ret;
439a9ff3522SLukasz Wojciechowski }
440a9ff3522SLukasz Wojciechowski 
441a9ff3522SLukasz Wojciechowski /**
4420cbd6711SLukasz Wojciechowski  * get_userdata mockup
4430cbd6711SLukasz Wojciechowski  *
4440cbd6711SLukasz Wojciechowski  * Verified parameters: device, md.
4450cbd6711SLukasz Wojciechowski  * The userdata parameter works as an output parameter, so a passed address
4460cbd6711SLukasz Wojciechowski  * is verified not to be NULL and filled with userdata stored in structure.
4470cbd6711SLukasz Wojciechowski  */
4480cbd6711SLukasz Wojciechowski static struct mock_get_userdata_data {
4490cbd6711SLukasz Wojciechowski 	void *device;
4500cbd6711SLukasz Wojciechowski 	uint64_t md;
4510cbd6711SLukasz Wojciechowski 	void *userdata;
4520cbd6711SLukasz Wojciechowski 
4530cbd6711SLukasz Wojciechowski 	int ret;
4540cbd6711SLukasz Wojciechowski 
4550cbd6711SLukasz Wojciechowski 	int called;
4560cbd6711SLukasz Wojciechowski 	int failed;
4570cbd6711SLukasz Wojciechowski } mock_get_userdata_exp = {NULL, 0UL, NULL, 0, 0, 0};
4580cbd6711SLukasz Wojciechowski 
4590cbd6711SLukasz Wojciechowski static int
mock_get_userdata(void * device,uint64_t md,void ** userdata)4600cbd6711SLukasz Wojciechowski mock_get_userdata(void *device,
4610cbd6711SLukasz Wojciechowski 		uint64_t md,
4620cbd6711SLukasz Wojciechowski 		void **userdata)
4630cbd6711SLukasz Wojciechowski {
4640cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.called++;
4650cbd6711SLukasz Wojciechowski 
4660cbd6711SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_get_userdata_exp, device);
4670cbd6711SLukasz Wojciechowski 	MOCK_TEST_ASSERT_U64_PARAMETER(mock_get_userdata_exp, md);
4680cbd6711SLukasz Wojciechowski 
4690cbd6711SLukasz Wojciechowski 	MOCK_TEST_ASSERT_NOT_NULL(mock_get_userdata_exp.failed,
4700cbd6711SLukasz Wojciechowski 			userdata,
4710cbd6711SLukasz Wojciechowski 			"Expecting parameter userdata not to be NULL but it's %p",
4720cbd6711SLukasz Wojciechowski 			userdata);
4730cbd6711SLukasz Wojciechowski 	*userdata = mock_get_userdata_exp.userdata;
4740cbd6711SLukasz Wojciechowski 
4750cbd6711SLukasz Wojciechowski 	return mock_get_userdata_exp.ret;
4760cbd6711SLukasz Wojciechowski }
4770cbd6711SLukasz Wojciechowski 
4780cbd6711SLukasz Wojciechowski /**
4792242e701SLukasz Wojciechowski  * capabilities_get mockup
4802242e701SLukasz Wojciechowski  *
4812242e701SLukasz Wojciechowski  * Verified parameters: device.
4822242e701SLukasz Wojciechowski  */
4832242e701SLukasz Wojciechowski static struct mock_capabilities_get_data {
4842242e701SLukasz Wojciechowski 	void *device;
4852242e701SLukasz Wojciechowski 
4862242e701SLukasz Wojciechowski 	struct rte_security_capability *ret;
4872242e701SLukasz Wojciechowski 
4882242e701SLukasz Wojciechowski 	int called;
4892242e701SLukasz Wojciechowski 	int failed;
4902242e701SLukasz Wojciechowski } mock_capabilities_get_exp = {NULL, NULL, 0, 0};
4912242e701SLukasz Wojciechowski 
4922242e701SLukasz Wojciechowski static const struct rte_security_capability *
mock_capabilities_get(void * device)4932242e701SLukasz Wojciechowski mock_capabilities_get(void *device)
4942242e701SLukasz Wojciechowski {
4952242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.called++;
4962242e701SLukasz Wojciechowski 
4972242e701SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_capabilities_get_exp, device);
4982242e701SLukasz Wojciechowski 
4992242e701SLukasz Wojciechowski 	return mock_capabilities_get_exp.ret;
5002242e701SLukasz Wojciechowski }
5012242e701SLukasz Wojciechowski 
5022242e701SLukasz Wojciechowski /**
5034849e8e4SLukasz Wojciechowski  * empty_ops
5044849e8e4SLukasz Wojciechowski  *
5054849e8e4SLukasz Wojciechowski  * is an empty security operations set (all function pointers set to NULL)
5064849e8e4SLukasz Wojciechowski  */
5074849e8e4SLukasz Wojciechowski struct rte_security_ops empty_ops = { NULL };
5084849e8e4SLukasz Wojciechowski 
5094849e8e4SLukasz Wojciechowski /**
5104849e8e4SLukasz Wojciechowski  * mock_ops
5114849e8e4SLukasz Wojciechowski  *
5124849e8e4SLukasz Wojciechowski  * is a security operations set using mockup functions
5134849e8e4SLukasz Wojciechowski  */
5144849e8e4SLukasz Wojciechowski struct rte_security_ops mock_ops = {
5154849e8e4SLukasz Wojciechowski 	.session_create = mock_session_create,
5160b124e04SLukasz Wojciechowski 	.session_update = mock_session_update,
517226430f4SLukasz Wojciechowski 	.session_get_size = mock_session_get_size,
5181e1a0e49SLukasz Wojciechowski 	.session_stats_get = mock_session_stats_get,
5194849e8e4SLukasz Wojciechowski 	.session_destroy = mock_session_destroy,
520a9ff3522SLukasz Wojciechowski 	.set_pkt_metadata = mock_set_pkt_metadata,
5210cbd6711SLukasz Wojciechowski 	.get_userdata = mock_get_userdata,
5222242e701SLukasz Wojciechowski 	.capabilities_get = mock_capabilities_get,
5234849e8e4SLukasz Wojciechowski };
5244849e8e4SLukasz Wojciechowski 
5254849e8e4SLukasz Wojciechowski 
5264849e8e4SLukasz Wojciechowski /**
5274849e8e4SLukasz Wojciechowski  * Test suite and test cases setup and teardown functions.
5284849e8e4SLukasz Wojciechowski  */
5294849e8e4SLukasz Wojciechowski 
5304849e8e4SLukasz Wojciechowski /**
5314849e8e4SLukasz Wojciechowski  * struct security_testsuite_params defines parameters initialized once
5324849e8e4SLukasz Wojciechowski  * for whole tests suite.
5334849e8e4SLukasz Wojciechowski  * Currently the only stored parameter is session_mpool a mempool created
5344849e8e4SLukasz Wojciechowski  * once in testsuite_setup and released in testsuite_teardown.
5354849e8e4SLukasz Wojciechowski  * The instance of this structure is stored in testsuite_params variable.
5364849e8e4SLukasz Wojciechowski  */
5374849e8e4SLukasz Wojciechowski static struct security_testsuite_params {
5384849e8e4SLukasz Wojciechowski 	struct rte_mempool *session_mpool;
539e30b2833SAkhil Goyal 	struct rte_mempool *session_priv_mpool;
5404849e8e4SLukasz Wojciechowski } testsuite_params = { NULL };
5414849e8e4SLukasz Wojciechowski 
5424849e8e4SLukasz Wojciechowski /**
5434849e8e4SLukasz Wojciechowski  * struct security_unittest_params defines parameters initialized
5444849e8e4SLukasz Wojciechowski  * for every test case. The parameters are initialized in ut_setup
5450b124e04SLukasz Wojciechowski  * or ut_setup_with_session (depending on the testcase)
5464849e8e4SLukasz Wojciechowski  * and released in ut_teardown.
5474849e8e4SLukasz Wojciechowski  * The instance of this structure is stored in unittest_params variable.
5484849e8e4SLukasz Wojciechowski  */
5494849e8e4SLukasz Wojciechowski static struct security_unittest_params {
5504849e8e4SLukasz Wojciechowski 	struct rte_security_ctx ctx;
5514849e8e4SLukasz Wojciechowski 	struct rte_security_session_conf conf;
5524849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
5534849e8e4SLukasz Wojciechowski } unittest_params = {
5544849e8e4SLukasz Wojciechowski 	.ctx = {
5554849e8e4SLukasz Wojciechowski 		.device = NULL,
5564849e8e4SLukasz Wojciechowski 		.ops = &mock_ops,
5574849e8e4SLukasz Wojciechowski 		.sess_cnt = 0,
5584849e8e4SLukasz Wojciechowski 	},
5594849e8e4SLukasz Wojciechowski 	.sess = NULL,
5604849e8e4SLukasz Wojciechowski };
5614849e8e4SLukasz Wojciechowski 
562e30b2833SAkhil Goyal #define SECURITY_TEST_MEMPOOL_NAME "SecurityTestMp"
563e30b2833SAkhil Goyal #define SECURITY_TEST_PRIV_MEMPOOL_NAME "SecurityTestPrivMp"
5644849e8e4SLukasz Wojciechowski #define SECURITY_TEST_MEMPOOL_SIZE 15
565e30b2833SAkhil Goyal #define SECURITY_TEST_SESSION_OBJ_SZ sizeof(struct rte_security_session)
566e30b2833SAkhil Goyal #define SECURITY_TEST_SESSION_PRIV_OBJ_SZ 64
5674849e8e4SLukasz Wojciechowski 
5684849e8e4SLukasz Wojciechowski /**
5694849e8e4SLukasz Wojciechowski  * testsuite_setup initializes whole test suite parameters.
5704849e8e4SLukasz Wojciechowski  * It creates a new mempool used in all test cases
5714849e8e4SLukasz Wojciechowski  * and verifies if it properly created.
5724849e8e4SLukasz Wojciechowski  */
5734849e8e4SLukasz Wojciechowski static int
testsuite_setup(void)5744849e8e4SLukasz Wojciechowski testsuite_setup(void)
5754849e8e4SLukasz Wojciechowski {
5764849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
5774849e8e4SLukasz Wojciechowski 	ts_params->session_mpool = rte_mempool_create(
5784849e8e4SLukasz Wojciechowski 			SECURITY_TEST_MEMPOOL_NAME,
5794849e8e4SLukasz Wojciechowski 			SECURITY_TEST_MEMPOOL_SIZE,
580e30b2833SAkhil Goyal 			SECURITY_TEST_SESSION_OBJ_SZ,
5814849e8e4SLukasz Wojciechowski 			0, 0, NULL, NULL, NULL, NULL,
5824849e8e4SLukasz Wojciechowski 			SOCKET_ID_ANY, 0);
5834849e8e4SLukasz Wojciechowski 	TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
5844849e8e4SLukasz Wojciechowski 			"Cannot create mempool %s\n", rte_strerror(rte_errno));
585e30b2833SAkhil Goyal 
586e30b2833SAkhil Goyal 	ts_params->session_priv_mpool = rte_mempool_create(
587e30b2833SAkhil Goyal 			SECURITY_TEST_PRIV_MEMPOOL_NAME,
588e30b2833SAkhil Goyal 			SECURITY_TEST_MEMPOOL_SIZE,
589e30b2833SAkhil Goyal 			SECURITY_TEST_SESSION_PRIV_OBJ_SZ,
590e30b2833SAkhil Goyal 			0, 0, NULL, NULL, NULL, NULL,
591e30b2833SAkhil Goyal 			SOCKET_ID_ANY, 0);
592e30b2833SAkhil Goyal 	if (ts_params->session_priv_mpool == NULL) {
593e30b2833SAkhil Goyal 		RTE_LOG(ERR, USER1, "TestCase %s() line %d failed (null): "
594e30b2833SAkhil Goyal 				"Cannot create priv mempool %s\n",
595e30b2833SAkhil Goyal 				__func__, __LINE__, rte_strerror(rte_errno));
596e30b2833SAkhil Goyal 		rte_mempool_free(ts_params->session_mpool);
597e30b2833SAkhil Goyal 		ts_params->session_mpool = NULL;
598e30b2833SAkhil Goyal 		return TEST_FAILED;
599e30b2833SAkhil Goyal 	}
600e30b2833SAkhil Goyal 
6014849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
6024849e8e4SLukasz Wojciechowski }
6034849e8e4SLukasz Wojciechowski 
6044849e8e4SLukasz Wojciechowski /**
6054849e8e4SLukasz Wojciechowski  * testsuite_teardown releases test suite wide parameters.
6064849e8e4SLukasz Wojciechowski  */
6074849e8e4SLukasz Wojciechowski static void
testsuite_teardown(void)6084849e8e4SLukasz Wojciechowski testsuite_teardown(void)
6094849e8e4SLukasz Wojciechowski {
6104849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
6114849e8e4SLukasz Wojciechowski 	if (ts_params->session_mpool) {
6124849e8e4SLukasz Wojciechowski 		rte_mempool_free(ts_params->session_mpool);
6134849e8e4SLukasz Wojciechowski 		ts_params->session_mpool = NULL;
6144849e8e4SLukasz Wojciechowski 	}
615e30b2833SAkhil Goyal 	if (ts_params->session_priv_mpool) {
616e30b2833SAkhil Goyal 		rte_mempool_free(ts_params->session_priv_mpool);
617e30b2833SAkhil Goyal 		ts_params->session_priv_mpool = NULL;
618e30b2833SAkhil Goyal 	}
6194849e8e4SLukasz Wojciechowski }
6204849e8e4SLukasz Wojciechowski 
6214849e8e4SLukasz Wojciechowski /**
6224849e8e4SLukasz Wojciechowski  * ut_setup initializes test case parameters to default values.
6234849e8e4SLukasz Wojciechowski  * It resets also any .called and .failed statistics of mockup functions
6244849e8e4SLukasz Wojciechowski  * usage.
6254849e8e4SLukasz Wojciechowski  */
6264849e8e4SLukasz Wojciechowski static int
ut_setup(void)6274849e8e4SLukasz Wojciechowski ut_setup(void)
6284849e8e4SLukasz Wojciechowski {
6294849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
6304849e8e4SLukasz Wojciechowski 	ut_params->ctx.device = NULL;
6314849e8e4SLukasz Wojciechowski 	ut_params->ctx.ops = &mock_ops;
6324849e8e4SLukasz Wojciechowski 	ut_params->ctx.sess_cnt = 0;
6334849e8e4SLukasz Wojciechowski 	ut_params->sess = NULL;
6344849e8e4SLukasz Wojciechowski 
6354849e8e4SLukasz Wojciechowski 	mock_session_create_exp.called = 0;
6360b124e04SLukasz Wojciechowski 	mock_session_update_exp.called = 0;
637226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.called = 0;
6381e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.called = 0;
6394849e8e4SLukasz Wojciechowski 	mock_session_destroy_exp.called = 0;
640a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.called = 0;
6410cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.called = 0;
6422242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.called = 0;
6434849e8e4SLukasz Wojciechowski 
6444849e8e4SLukasz Wojciechowski 	mock_session_create_exp.failed = 0;
6450b124e04SLukasz Wojciechowski 	mock_session_update_exp.failed = 0;
646226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.failed = 0;
6471e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.failed = 0;
6484849e8e4SLukasz Wojciechowski 	mock_session_destroy_exp.failed = 0;
649a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.failed = 0;
6500cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.failed = 0;
6512242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.failed = 0;
6524849e8e4SLukasz Wojciechowski 
6534849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
6544849e8e4SLukasz Wojciechowski }
6554849e8e4SLukasz Wojciechowski 
6564849e8e4SLukasz Wojciechowski /**
6574849e8e4SLukasz Wojciechowski  * destroy_session_with_check is a helper function releasing session
6584849e8e4SLukasz Wojciechowski  * created with rte_security_session_create and stored in test case parameters.
6594849e8e4SLukasz Wojciechowski  * It's used both to release sessions created in test cases' bodies
6604849e8e4SLukasz Wojciechowski  * which are assigned to ut_params->sess
6610b124e04SLukasz Wojciechowski  * as well as sessions created in ut_setup_with_session.
6624849e8e4SLukasz Wojciechowski  */
6634849e8e4SLukasz Wojciechowski static int
destroy_session_with_check(void)6644849e8e4SLukasz Wojciechowski destroy_session_with_check(void)
6654849e8e4SLukasz Wojciechowski {
6664849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
6674849e8e4SLukasz Wojciechowski 	if (ut_params->sess != NULL) {
6684849e8e4SLukasz Wojciechowski 		/* Assure that mockup function for destroy operation is set. */
6694849e8e4SLukasz Wojciechowski 		ut_params->ctx.ops = &mock_ops;
6704849e8e4SLukasz Wojciechowski 
6714849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.device = NULL;
6724849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.sess = ut_params->sess;
6734849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.ret = 0;
6744849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.called = 0;
6754849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.failed = 0;
6764849e8e4SLukasz Wojciechowski 
6774849e8e4SLukasz Wojciechowski 		int ret = rte_security_session_destroy(&ut_params->ctx,
6784849e8e4SLukasz Wojciechowski 				ut_params->sess);
6794849e8e4SLukasz Wojciechowski 		TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
6804849e8e4SLukasz Wojciechowski 				ret, 0, "%d");
6814849e8e4SLukasz Wojciechowski 		TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
6824849e8e4SLukasz Wojciechowski 
6834849e8e4SLukasz Wojciechowski 		ut_params->sess = NULL;
6844849e8e4SLukasz Wojciechowski 	}
6854849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
6864849e8e4SLukasz Wojciechowski }
6874849e8e4SLukasz Wojciechowski 
6884849e8e4SLukasz Wojciechowski /**
6894849e8e4SLukasz Wojciechowski  * ut_teardown releases test case parameters.
6904849e8e4SLukasz Wojciechowski  */
6914849e8e4SLukasz Wojciechowski static void
ut_teardown(void)6924849e8e4SLukasz Wojciechowski ut_teardown(void)
6934849e8e4SLukasz Wojciechowski {
6944849e8e4SLukasz Wojciechowski 	destroy_session_with_check();
6954849e8e4SLukasz Wojciechowski }
6964849e8e4SLukasz Wojciechowski 
6970b124e04SLukasz Wojciechowski /**
6980b124e04SLukasz Wojciechowski  * ut_setup_with_session initializes test case parameters by
6990b124e04SLukasz Wojciechowski  * - calling standard ut_setup,
7000b124e04SLukasz Wojciechowski  * - creating a session that can be used in test case.
7010b124e04SLukasz Wojciechowski  */
7020b124e04SLukasz Wojciechowski static int
ut_setup_with_session(void)7030b124e04SLukasz Wojciechowski ut_setup_with_session(void)
7040b124e04SLukasz Wojciechowski {
7050b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
7060b124e04SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
7070b124e04SLukasz Wojciechowski 	struct rte_security_session *sess;
7080b124e04SLukasz Wojciechowski 
7090b124e04SLukasz Wojciechowski 	int ret = ut_setup();
7100b124e04SLukasz Wojciechowski 	if (ret != TEST_SUCCESS)
7110b124e04SLukasz Wojciechowski 		return ret;
7120b124e04SLukasz Wojciechowski 
7130b124e04SLukasz Wojciechowski 	mock_session_create_exp.device = NULL;
7140b124e04SLukasz Wojciechowski 	mock_session_create_exp.conf = &ut_params->conf;
7150b124e04SLukasz Wojciechowski 	mock_session_create_exp.mp = ts_params->session_mpool;
716e30b2833SAkhil Goyal 	mock_session_create_exp.priv_mp = ts_params->session_priv_mpool;
7170b124e04SLukasz Wojciechowski 	mock_session_create_exp.ret = 0;
7180b124e04SLukasz Wojciechowski 
7190b124e04SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
720e30b2833SAkhil Goyal 			ts_params->session_mpool,
721e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);
7220b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(rte_security_session_create,
7230b124e04SLukasz Wojciechowski 			sess);
7240b124e04SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(sess, mock_session_create_exp.sess,
7250b124e04SLukasz Wojciechowski 			"Expecting session_create to be called with %p sess"
7260b124e04SLukasz Wojciechowski 			" parameter, but it's called %p sess parameter",
7270b124e04SLukasz Wojciechowski 			sess, mock_session_create_exp.sess);
7280b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
7290b124e04SLukasz Wojciechowski 
7300b124e04SLukasz Wojciechowski 	/*
7310b124e04SLukasz Wojciechowski 	 * Store created session in test case parameters, so it can be released
7320b124e04SLukasz Wojciechowski 	 * after test case in ut_teardown by destroy_session_with_check.
7330b124e04SLukasz Wojciechowski 	 */
7340b124e04SLukasz Wojciechowski 	ut_params->sess = sess;
7350b124e04SLukasz Wojciechowski 
7360b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
7370b124e04SLukasz Wojciechowski }
7380b124e04SLukasz Wojciechowski 
7394849e8e4SLukasz Wojciechowski 
7404849e8e4SLukasz Wojciechowski /**
7414849e8e4SLukasz Wojciechowski  * Test functions
7424849e8e4SLukasz Wojciechowski  *
7434849e8e4SLukasz Wojciechowski  * Each test function is related to a single test case.
7444849e8e4SLukasz Wojciechowski  * They are arranged by tested rte_security API function
7454849e8e4SLukasz Wojciechowski  * and by rte_security execution paths sequence in code.
7464849e8e4SLukasz Wojciechowski  */
7474849e8e4SLukasz Wojciechowski 
7484849e8e4SLukasz Wojciechowski /**
7494849e8e4SLukasz Wojciechowski  * rte_security_session_create tests
7504849e8e4SLukasz Wojciechowski  */
7514849e8e4SLukasz Wojciechowski 
7524849e8e4SLukasz Wojciechowski /**
7534849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create with NULL instance
7544849e8e4SLukasz Wojciechowski  */
7554849e8e4SLukasz Wojciechowski static int
test_session_create_inv_context(void)7564849e8e4SLukasz Wojciechowski test_session_create_inv_context(void)
7574849e8e4SLukasz Wojciechowski {
7584849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
7594849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
7604849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
7614849e8e4SLukasz Wojciechowski 
7624849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(NULL, &ut_params->conf,
763e30b2833SAkhil Goyal 			ts_params->session_mpool,
764e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);
7654849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
7664849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
7674849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
7684849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
769e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
7704849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
7714849e8e4SLukasz Wojciechowski 
7724849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
7734849e8e4SLukasz Wojciechowski }
7744849e8e4SLukasz Wojciechowski 
7754849e8e4SLukasz Wojciechowski /**
7764849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create with invalid
7774849e8e4SLukasz Wojciechowski  * security operations structure (NULL)
7784849e8e4SLukasz Wojciechowski  */
7794849e8e4SLukasz Wojciechowski static int
test_session_create_inv_context_ops(void)7804849e8e4SLukasz Wojciechowski test_session_create_inv_context_ops(void)
7814849e8e4SLukasz Wojciechowski {
7824849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
7834849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
7844849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
7854849e8e4SLukasz Wojciechowski 
7864849e8e4SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
7874849e8e4SLukasz Wojciechowski 
7884849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
789e30b2833SAkhil Goyal 			ts_params->session_mpool,
790e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);
7914849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
7924849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
7934849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
7944849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
795e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
7964849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
7974849e8e4SLukasz Wojciechowski 
7984849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
7994849e8e4SLukasz Wojciechowski }
8004849e8e4SLukasz Wojciechowski 
8014849e8e4SLukasz Wojciechowski /**
8024849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create with empty
8034849e8e4SLukasz Wojciechowski  * security operations
8044849e8e4SLukasz Wojciechowski  */
8054849e8e4SLukasz Wojciechowski static int
test_session_create_inv_context_ops_fun(void)8064849e8e4SLukasz Wojciechowski test_session_create_inv_context_ops_fun(void)
8074849e8e4SLukasz Wojciechowski {
8084849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
8094849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
8104849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
8114849e8e4SLukasz Wojciechowski 
8124849e8e4SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
8134849e8e4SLukasz Wojciechowski 
8144849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
815e30b2833SAkhil Goyal 			ts_params->session_mpool,
816e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);
8174849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
8184849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
8194849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
8204849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
821e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
8224849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
8234849e8e4SLukasz Wojciechowski 
8244849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
8254849e8e4SLukasz Wojciechowski }
8264849e8e4SLukasz Wojciechowski 
8274849e8e4SLukasz Wojciechowski /**
8284849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create with NULL conf parameter
8294849e8e4SLukasz Wojciechowski  */
8304849e8e4SLukasz Wojciechowski static int
test_session_create_inv_configuration(void)8314849e8e4SLukasz Wojciechowski test_session_create_inv_configuration(void)
8324849e8e4SLukasz Wojciechowski {
8334849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
8344849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
8354849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
8364849e8e4SLukasz Wojciechowski 
8374849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, NULL,
838e30b2833SAkhil Goyal 			ts_params->session_mpool,
839e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);
8404849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
8414849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
8424849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
8434849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
844e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
8454849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
8464849e8e4SLukasz Wojciechowski 
8474849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
8484849e8e4SLukasz Wojciechowski }
8494849e8e4SLukasz Wojciechowski 
8504849e8e4SLukasz Wojciechowski /**
851e30b2833SAkhil Goyal  * Test execution of rte_security_session_create with NULL session
852e30b2833SAkhil Goyal  * mempool
8534849e8e4SLukasz Wojciechowski  */
8544849e8e4SLukasz Wojciechowski static int
test_session_create_inv_mempool(void)8554849e8e4SLukasz Wojciechowski test_session_create_inv_mempool(void)
8564849e8e4SLukasz Wojciechowski {
8574849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
858e30b2833SAkhil Goyal 	struct security_testsuite_params *ts_params = &testsuite_params;
8594849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
8604849e8e4SLukasz Wojciechowski 
8614849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
862e30b2833SAkhil Goyal 			NULL, ts_params->session_priv_mpool);
8634849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
8644849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
8654849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
8664849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
867e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
868e30b2833SAkhil Goyal 	TEST_ASSERT_SESSION_COUNT(0);
869e30b2833SAkhil Goyal 
870e30b2833SAkhil Goyal 	return TEST_SUCCESS;
871e30b2833SAkhil Goyal }
872e30b2833SAkhil Goyal 
873e30b2833SAkhil Goyal /**
874e30b2833SAkhil Goyal  * Test execution of rte_security_session_create with NULL session
875e30b2833SAkhil Goyal  * priv mempool
876e30b2833SAkhil Goyal  */
877e30b2833SAkhil Goyal static int
test_session_create_inv_sess_priv_mempool(void)878e30b2833SAkhil Goyal test_session_create_inv_sess_priv_mempool(void)
879e30b2833SAkhil Goyal {
880e30b2833SAkhil Goyal 	struct security_unittest_params *ut_params = &unittest_params;
881e30b2833SAkhil Goyal 	struct security_testsuite_params *ts_params = &testsuite_params;
882e30b2833SAkhil Goyal 	struct rte_security_session *sess;
883e30b2833SAkhil Goyal 
884e30b2833SAkhil Goyal 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
885e30b2833SAkhil Goyal 			ts_params->session_mpool, NULL);
886e30b2833SAkhil Goyal 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
887e30b2833SAkhil Goyal 			sess, NULL, "%p");
888e30b2833SAkhil Goyal 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
889e30b2833SAkhil Goyal 	TEST_ASSERT_MEMPOOL_USAGE(0);
890e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
8914849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
8924849e8e4SLukasz Wojciechowski 
8934849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
8944849e8e4SLukasz Wojciechowski }
8954849e8e4SLukasz Wojciechowski 
8964849e8e4SLukasz Wojciechowski /**
8974849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create in case when mempool
8984849e8e4SLukasz Wojciechowski  * is fully used and no object can be got from it
8994849e8e4SLukasz Wojciechowski  */
9004849e8e4SLukasz Wojciechowski static int
test_session_create_mempool_empty(void)9014849e8e4SLukasz Wojciechowski test_session_create_mempool_empty(void)
9024849e8e4SLukasz Wojciechowski {
9034849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
9044849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9054849e8e4SLukasz Wojciechowski 	struct rte_security_session *tmp[SECURITY_TEST_MEMPOOL_SIZE];
906e30b2833SAkhil Goyal 	void *tmp1[SECURITY_TEST_MEMPOOL_SIZE];
9074849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
9084849e8e4SLukasz Wojciechowski 
9094849e8e4SLukasz Wojciechowski 	/* Get all available objects from mempool. */
9104849e8e4SLukasz Wojciechowski 	int i, ret;
9114849e8e4SLukasz Wojciechowski 	for (i = 0; i < SECURITY_TEST_MEMPOOL_SIZE; ++i) {
9124849e8e4SLukasz Wojciechowski 		ret = rte_mempool_get(ts_params->session_mpool,
9134849e8e4SLukasz Wojciechowski 				(void **)(&tmp[i]));
9144849e8e4SLukasz Wojciechowski 		TEST_ASSERT_EQUAL(0, ret,
9154849e8e4SLukasz Wojciechowski 				"Expect getting %d object from mempool"
9164849e8e4SLukasz Wojciechowski 				" to succeed", i);
917e30b2833SAkhil Goyal 		ret = rte_mempool_get(ts_params->session_priv_mpool,
918e30b2833SAkhil Goyal 				(void **)(&tmp1[i]));
919e30b2833SAkhil Goyal 		TEST_ASSERT_EQUAL(0, ret,
920e30b2833SAkhil Goyal 				"Expect getting %d object from priv mempool"
921e30b2833SAkhil Goyal 				" to succeed", i);
9224849e8e4SLukasz Wojciechowski 	}
9234849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
924e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
9254849e8e4SLukasz Wojciechowski 
9264849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
927e30b2833SAkhil Goyal 			ts_params->session_mpool,
928e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);
9294849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
9304849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
9314849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
9324849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
933e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
9344849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
9354849e8e4SLukasz Wojciechowski 
9364849e8e4SLukasz Wojciechowski 	/* Put objects back to the pool. */
937e30b2833SAkhil Goyal 	for (i = 0; i < SECURITY_TEST_MEMPOOL_SIZE; ++i) {
938e30b2833SAkhil Goyal 		rte_mempool_put(ts_params->session_mpool,
939e30b2833SAkhil Goyal 				(void *)(tmp[i]));
940e30b2833SAkhil Goyal 		rte_mempool_put(ts_params->session_priv_mpool,
941e30b2833SAkhil Goyal 				(tmp1[i]));
942e30b2833SAkhil Goyal 	}
9434849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
944e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
9454849e8e4SLukasz Wojciechowski 
9464849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
9474849e8e4SLukasz Wojciechowski }
9484849e8e4SLukasz Wojciechowski 
9494849e8e4SLukasz Wojciechowski /**
9504849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create when session_create
9514849e8e4SLukasz Wojciechowski  * security operation fails
9524849e8e4SLukasz Wojciechowski  */
9534849e8e4SLukasz Wojciechowski static int
test_session_create_ops_failure(void)9544849e8e4SLukasz Wojciechowski test_session_create_ops_failure(void)
9554849e8e4SLukasz Wojciechowski {
9564849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
9574849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9584849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
9594849e8e4SLukasz Wojciechowski 
9604849e8e4SLukasz Wojciechowski 	mock_session_create_exp.device = NULL;
9614849e8e4SLukasz Wojciechowski 	mock_session_create_exp.conf = &ut_params->conf;
9624849e8e4SLukasz Wojciechowski 	mock_session_create_exp.mp = ts_params->session_mpool;
963e30b2833SAkhil Goyal 	mock_session_create_exp.priv_mp = ts_params->session_priv_mpool;
9644849e8e4SLukasz Wojciechowski 	mock_session_create_exp.ret = -1;	/* Return failure status. */
9654849e8e4SLukasz Wojciechowski 
9664849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
967e30b2833SAkhil Goyal 			ts_params->session_mpool,
968e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);
9694849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
9704849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
9714849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
9724849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
973e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
9744849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
9754849e8e4SLukasz Wojciechowski 
9764849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
9774849e8e4SLukasz Wojciechowski }
9784849e8e4SLukasz Wojciechowski 
9794849e8e4SLukasz Wojciechowski /**
9804849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create in successful execution path
9814849e8e4SLukasz Wojciechowski  */
9824849e8e4SLukasz Wojciechowski static int
test_session_create_success(void)9834849e8e4SLukasz Wojciechowski test_session_create_success(void)
9844849e8e4SLukasz Wojciechowski {
9854849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
9864849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9874849e8e4SLukasz Wojciechowski 	struct rte_security_session *sess;
9884849e8e4SLukasz Wojciechowski 
9894849e8e4SLukasz Wojciechowski 	mock_session_create_exp.device = NULL;
9904849e8e4SLukasz Wojciechowski 	mock_session_create_exp.conf = &ut_params->conf;
9914849e8e4SLukasz Wojciechowski 	mock_session_create_exp.mp = ts_params->session_mpool;
992e30b2833SAkhil Goyal 	mock_session_create_exp.priv_mp = ts_params->session_priv_mpool;
9934849e8e4SLukasz Wojciechowski 	mock_session_create_exp.ret = 0;	/* Return success status. */
9944849e8e4SLukasz Wojciechowski 
9954849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
996e30b2833SAkhil Goyal 			ts_params->session_mpool,
997e30b2833SAkhil Goyal 			ts_params->session_priv_mpool);
9984849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(rte_security_session_create,
9994849e8e4SLukasz Wojciechowski 			sess);
10004849e8e4SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(sess, mock_session_create_exp.sess,
10014849e8e4SLukasz Wojciechowski 			"Expecting session_create to be called with %p sess"
10024849e8e4SLukasz Wojciechowski 			" parameter, but it's called %p sess parameter",
10034849e8e4SLukasz Wojciechowski 			sess, mock_session_create_exp.sess);
10044849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
10054849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1006e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
10074849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
10084849e8e4SLukasz Wojciechowski 
10094849e8e4SLukasz Wojciechowski 	/*
10104849e8e4SLukasz Wojciechowski 	 * Store created session in test case parameters, so it can be released
10114849e8e4SLukasz Wojciechowski 	 * after test case in ut_teardown by destroy_session_with_check.
10124849e8e4SLukasz Wojciechowski 	 */
10134849e8e4SLukasz Wojciechowski 	ut_params->sess = sess;
10144849e8e4SLukasz Wojciechowski 
10154849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
10164849e8e4SLukasz Wojciechowski }
10174849e8e4SLukasz Wojciechowski 
10184849e8e4SLukasz Wojciechowski 
10194849e8e4SLukasz Wojciechowski /**
10200b124e04SLukasz Wojciechowski  * rte_security_session_update tests
10210b124e04SLukasz Wojciechowski  */
10220b124e04SLukasz Wojciechowski 
10230b124e04SLukasz Wojciechowski /**
10240b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with NULL instance
10250b124e04SLukasz Wojciechowski  */
10260b124e04SLukasz Wojciechowski static int
test_session_update_inv_context(void)10270b124e04SLukasz Wojciechowski test_session_update_inv_context(void)
10280b124e04SLukasz Wojciechowski {
10290b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
10300b124e04SLukasz Wojciechowski 
10310b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(NULL, ut_params->sess,
10320b124e04SLukasz Wojciechowski 			&ut_params->conf);
10330b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
10340b124e04SLukasz Wojciechowski 			ret, -EINVAL, "%d");
10350b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
10360b124e04SLukasz Wojciechowski 
10370b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
10380b124e04SLukasz Wojciechowski }
10390b124e04SLukasz Wojciechowski 
10400b124e04SLukasz Wojciechowski /**
10410b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with invalid
10420b124e04SLukasz Wojciechowski  * security operations structure (NULL)
10430b124e04SLukasz Wojciechowski  */
10440b124e04SLukasz Wojciechowski static int
test_session_update_inv_context_ops(void)10450b124e04SLukasz Wojciechowski test_session_update_inv_context_ops(void)
10460b124e04SLukasz Wojciechowski {
10470b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
10480b124e04SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
10490b124e04SLukasz Wojciechowski 
10500b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
10510b124e04SLukasz Wojciechowski 			&ut_params->conf);
10520b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
10530b124e04SLukasz Wojciechowski 			ret, -EINVAL, "%d");
10540b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
10550b124e04SLukasz Wojciechowski 
10560b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
10570b124e04SLukasz Wojciechowski }
10580b124e04SLukasz Wojciechowski 
10590b124e04SLukasz Wojciechowski /**
10600b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with empty
10610b124e04SLukasz Wojciechowski  * security operations
10620b124e04SLukasz Wojciechowski  */
10630b124e04SLukasz Wojciechowski static int
test_session_update_inv_context_ops_fun(void)10640b124e04SLukasz Wojciechowski test_session_update_inv_context_ops_fun(void)
10650b124e04SLukasz Wojciechowski {
10660b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
10670b124e04SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
10680b124e04SLukasz Wojciechowski 
10690b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
10700b124e04SLukasz Wojciechowski 			&ut_params->conf);
10710b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
10720b124e04SLukasz Wojciechowski 			ret, -ENOTSUP, "%d");
10730b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
10740b124e04SLukasz Wojciechowski 
10750b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
10760b124e04SLukasz Wojciechowski }
10770b124e04SLukasz Wojciechowski 
10780b124e04SLukasz Wojciechowski /**
10790b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with NULL conf parameter
10800b124e04SLukasz Wojciechowski  */
10810b124e04SLukasz Wojciechowski static int
test_session_update_inv_configuration(void)10820b124e04SLukasz Wojciechowski test_session_update_inv_configuration(void)
10830b124e04SLukasz Wojciechowski {
10840b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
10850b124e04SLukasz Wojciechowski 
10860b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
10870b124e04SLukasz Wojciechowski 			NULL);
10880b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
10890b124e04SLukasz Wojciechowski 			ret, -EINVAL, "%d");
10900b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
10910b124e04SLukasz Wojciechowski 
10920b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
10930b124e04SLukasz Wojciechowski }
10940b124e04SLukasz Wojciechowski 
10950b124e04SLukasz Wojciechowski /**
10960b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with NULL sess parameter
10970b124e04SLukasz Wojciechowski  */
10980b124e04SLukasz Wojciechowski static int
test_session_update_inv_session(void)10990b124e04SLukasz Wojciechowski test_session_update_inv_session(void)
11000b124e04SLukasz Wojciechowski {
11010b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
11020b124e04SLukasz Wojciechowski 
11030b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, NULL,
11040b124e04SLukasz Wojciechowski 			&ut_params->conf);
11050b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
11060b124e04SLukasz Wojciechowski 			ret, -EINVAL, "%d");
11070b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
11080b124e04SLukasz Wojciechowski 
11090b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
11100b124e04SLukasz Wojciechowski }
11110b124e04SLukasz Wojciechowski 
11120b124e04SLukasz Wojciechowski /**
11130b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update when session_update
11140b124e04SLukasz Wojciechowski  * security operation fails
11150b124e04SLukasz Wojciechowski  */
11160b124e04SLukasz Wojciechowski static int
test_session_update_ops_failure(void)11170b124e04SLukasz Wojciechowski test_session_update_ops_failure(void)
11180b124e04SLukasz Wojciechowski {
11190b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
11200b124e04SLukasz Wojciechowski 
11210b124e04SLukasz Wojciechowski 	mock_session_update_exp.device = NULL;
11220b124e04SLukasz Wojciechowski 	mock_session_update_exp.sess = ut_params->sess;
11230b124e04SLukasz Wojciechowski 	mock_session_update_exp.conf = &ut_params->conf;
11240b124e04SLukasz Wojciechowski 	mock_session_update_exp.ret = -1;	/* Return failure status. */
11250b124e04SLukasz Wojciechowski 
11260b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
11270b124e04SLukasz Wojciechowski 			&ut_params->conf);
11280b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
11290b124e04SLukasz Wojciechowski 			ret, -1, "%d");
11300b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 1);
11310b124e04SLukasz Wojciechowski 
11320b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
11330b124e04SLukasz Wojciechowski }
11340b124e04SLukasz Wojciechowski 
11350b124e04SLukasz Wojciechowski /**
11360b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update in successful execution path
11370b124e04SLukasz Wojciechowski  */
11380b124e04SLukasz Wojciechowski static int
test_session_update_success(void)11390b124e04SLukasz Wojciechowski test_session_update_success(void)
11400b124e04SLukasz Wojciechowski {
11410b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
11420b124e04SLukasz Wojciechowski 
11430b124e04SLukasz Wojciechowski 	mock_session_update_exp.device = NULL;
11440b124e04SLukasz Wojciechowski 	mock_session_update_exp.sess = ut_params->sess;
11450b124e04SLukasz Wojciechowski 	mock_session_update_exp.conf = &ut_params->conf;
11460b124e04SLukasz Wojciechowski 	mock_session_update_exp.ret = 0;	/* Return success status. */
11470b124e04SLukasz Wojciechowski 
11480b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
11490b124e04SLukasz Wojciechowski 			&ut_params->conf);
11500b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
11510b124e04SLukasz Wojciechowski 			ret, 0, "%d");
11520b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 1);
11530b124e04SLukasz Wojciechowski 
11540b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
11550b124e04SLukasz Wojciechowski }
11560b124e04SLukasz Wojciechowski 
11570b124e04SLukasz Wojciechowski 
11580b124e04SLukasz Wojciechowski /**
1159226430f4SLukasz Wojciechowski  * rte_security_session_get_size tests
1160226430f4SLukasz Wojciechowski  */
1161226430f4SLukasz Wojciechowski 
1162226430f4SLukasz Wojciechowski /**
1163226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size with NULL instance
1164226430f4SLukasz Wojciechowski  */
1165226430f4SLukasz Wojciechowski static int
test_session_get_size_inv_context(void)1166226430f4SLukasz Wojciechowski test_session_get_size_inv_context(void)
1167226430f4SLukasz Wojciechowski {
1168226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(NULL);
1169226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1170226430f4SLukasz Wojciechowski 			ret, 0, "%u");
1171226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
1172226430f4SLukasz Wojciechowski 
1173226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1174226430f4SLukasz Wojciechowski }
1175226430f4SLukasz Wojciechowski 
1176226430f4SLukasz Wojciechowski /**
1177226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size with invalid
1178226430f4SLukasz Wojciechowski  * security operations structure (NULL)
1179226430f4SLukasz Wojciechowski  */
1180226430f4SLukasz Wojciechowski static int
test_session_get_size_inv_context_ops(void)1181226430f4SLukasz Wojciechowski test_session_get_size_inv_context_ops(void)
1182226430f4SLukasz Wojciechowski {
1183226430f4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1184226430f4SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
1185226430f4SLukasz Wojciechowski 
1186226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1187226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1188226430f4SLukasz Wojciechowski 			ret, 0, "%u");
1189226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
1190226430f4SLukasz Wojciechowski 
1191226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1192226430f4SLukasz Wojciechowski }
1193226430f4SLukasz Wojciechowski 
1194226430f4SLukasz Wojciechowski /**
1195226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size with empty
1196226430f4SLukasz Wojciechowski  * security operations
1197226430f4SLukasz Wojciechowski  */
1198226430f4SLukasz Wojciechowski static int
test_session_get_size_inv_context_ops_fun(void)1199226430f4SLukasz Wojciechowski test_session_get_size_inv_context_ops_fun(void)
1200226430f4SLukasz Wojciechowski {
1201226430f4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1202226430f4SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
1203226430f4SLukasz Wojciechowski 
1204226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1205226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1206226430f4SLukasz Wojciechowski 			ret, 0, "%u");
1207226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 0);
1208226430f4SLukasz Wojciechowski 
1209226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1210226430f4SLukasz Wojciechowski }
1211226430f4SLukasz Wojciechowski 
1212226430f4SLukasz Wojciechowski /**
1213226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size when session_get_size
1214226430f4SLukasz Wojciechowski  * security operation fails
1215226430f4SLukasz Wojciechowski  */
1216226430f4SLukasz Wojciechowski static int
test_session_get_size_ops_failure(void)1217226430f4SLukasz Wojciechowski test_session_get_size_ops_failure(void)
1218226430f4SLukasz Wojciechowski {
1219226430f4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1220226430f4SLukasz Wojciechowski 
1221226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.device = NULL;
1222226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.ret = 0;
1223226430f4SLukasz Wojciechowski 
1224226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1225226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1226226430f4SLukasz Wojciechowski 			ret, 0, "%u");
1227226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
1228226430f4SLukasz Wojciechowski 
1229226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1230226430f4SLukasz Wojciechowski }
1231226430f4SLukasz Wojciechowski 
1232226430f4SLukasz Wojciechowski /**
1233226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size in successful execution path
1234226430f4SLukasz Wojciechowski  */
1235226430f4SLukasz Wojciechowski static int
test_session_get_size_success(void)1236226430f4SLukasz Wojciechowski test_session_get_size_success(void)
1237226430f4SLukasz Wojciechowski {
1238226430f4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1239226430f4SLukasz Wojciechowski 
1240226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.device = NULL;
1241226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.ret = 1024;
1242226430f4SLukasz Wojciechowski 
1243226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1244226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1245226430f4SLukasz Wojciechowski 			ret, 1024U, "%u");
1246226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
1247226430f4SLukasz Wojciechowski 
1248226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1249226430f4SLukasz Wojciechowski }
1250226430f4SLukasz Wojciechowski 
1251226430f4SLukasz Wojciechowski 
1252226430f4SLukasz Wojciechowski /**
12531e1a0e49SLukasz Wojciechowski  * rte_security_session_stats_get tests
12541e1a0e49SLukasz Wojciechowski  */
12551e1a0e49SLukasz Wojciechowski 
12561e1a0e49SLukasz Wojciechowski /**
12571e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get with NULL instance
12581e1a0e49SLukasz Wojciechowski  */
12591e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_inv_context(void)12601e1a0e49SLukasz Wojciechowski test_session_stats_get_inv_context(void)
12611e1a0e49SLukasz Wojciechowski {
12621e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
12631e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
12641e1a0e49SLukasz Wojciechowski 
12651e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(NULL, ut_params->sess, &stats);
12661e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
12671e1a0e49SLukasz Wojciechowski 			ret, -EINVAL, "%d");
12681e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
12691e1a0e49SLukasz Wojciechowski 
12701e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
12711e1a0e49SLukasz Wojciechowski }
12721e1a0e49SLukasz Wojciechowski 
12731e1a0e49SLukasz Wojciechowski /**
12741e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get with invalid
12751e1a0e49SLukasz Wojciechowski  * security operations structure (NULL)
12761e1a0e49SLukasz Wojciechowski  */
12771e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_inv_context_ops(void)12781e1a0e49SLukasz Wojciechowski test_session_stats_get_inv_context_ops(void)
12791e1a0e49SLukasz Wojciechowski {
12801e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
12811e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
12821e1a0e49SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
12831e1a0e49SLukasz Wojciechowski 
12841e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
12851e1a0e49SLukasz Wojciechowski 			ut_params->sess, &stats);
12861e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
12871e1a0e49SLukasz Wojciechowski 			ret, -EINVAL, "%d");
12881e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
12891e1a0e49SLukasz Wojciechowski 
12901e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
12911e1a0e49SLukasz Wojciechowski }
12921e1a0e49SLukasz Wojciechowski 
12931e1a0e49SLukasz Wojciechowski /**
12941e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get with empty
12951e1a0e49SLukasz Wojciechowski  * security operations
12961e1a0e49SLukasz Wojciechowski  */
12971e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_inv_context_ops_fun(void)12981e1a0e49SLukasz Wojciechowski test_session_stats_get_inv_context_ops_fun(void)
12991e1a0e49SLukasz Wojciechowski {
13001e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
13011e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
13021e1a0e49SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
13031e1a0e49SLukasz Wojciechowski 
13041e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
13051e1a0e49SLukasz Wojciechowski 			ut_params->sess, &stats);
13061e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
13071e1a0e49SLukasz Wojciechowski 			ret, -ENOTSUP, "%d");
13081e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
13091e1a0e49SLukasz Wojciechowski 
13101e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
13111e1a0e49SLukasz Wojciechowski }
13121e1a0e49SLukasz Wojciechowski 
13131e1a0e49SLukasz Wojciechowski /**
13141e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get with NULL stats parameter
13151e1a0e49SLukasz Wojciechowski  */
13161e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_inv_stats(void)13171e1a0e49SLukasz Wojciechowski test_session_stats_get_inv_stats(void)
13181e1a0e49SLukasz Wojciechowski {
13191e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
13201e1a0e49SLukasz Wojciechowski 
13211e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
13221e1a0e49SLukasz Wojciechowski 			ut_params->sess, NULL);
13231e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
13241e1a0e49SLukasz Wojciechowski 			ret, -EINVAL, "%d");
13251e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
13261e1a0e49SLukasz Wojciechowski 
13271e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
13281e1a0e49SLukasz Wojciechowski }
13291e1a0e49SLukasz Wojciechowski 
13301e1a0e49SLukasz Wojciechowski /**
13311e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get when session_stats_get
13321e1a0e49SLukasz Wojciechowski  * security operation fails
13331e1a0e49SLukasz Wojciechowski  */
13341e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_ops_failure(void)13351e1a0e49SLukasz Wojciechowski test_session_stats_get_ops_failure(void)
13361e1a0e49SLukasz Wojciechowski {
13371e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
13381e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
13391e1a0e49SLukasz Wojciechowski 
13401e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.device = NULL;
13411e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.sess = ut_params->sess;
13421e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.stats = &stats;
13431e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.ret = -1;
13441e1a0e49SLukasz Wojciechowski 
13451e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
13461e1a0e49SLukasz Wojciechowski 			ut_params->sess, &stats);
13471e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
13481e1a0e49SLukasz Wojciechowski 			ret, -1, "%d");
13491e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 1);
13501e1a0e49SLukasz Wojciechowski 
13511e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
13521e1a0e49SLukasz Wojciechowski }
13531e1a0e49SLukasz Wojciechowski 
13541e1a0e49SLukasz Wojciechowski /**
13551e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get in successful execution
13561e1a0e49SLukasz Wojciechowski  * path
13571e1a0e49SLukasz Wojciechowski  */
13581e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_success(void)13591e1a0e49SLukasz Wojciechowski test_session_stats_get_success(void)
13601e1a0e49SLukasz Wojciechowski {
13611e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
13621e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
13631e1a0e49SLukasz Wojciechowski 
13641e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.device = NULL;
13651e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.sess = ut_params->sess;
13661e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.stats = &stats;
13671e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.ret = 0;
13681e1a0e49SLukasz Wojciechowski 
13691e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
13701e1a0e49SLukasz Wojciechowski 			ut_params->sess, &stats);
13711e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
13721e1a0e49SLukasz Wojciechowski 			ret, 0, "%d");
13731e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 1);
13741e1a0e49SLukasz Wojciechowski 
13751e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
13761e1a0e49SLukasz Wojciechowski }
13771e1a0e49SLukasz Wojciechowski 
13781e1a0e49SLukasz Wojciechowski 
13791e1a0e49SLukasz Wojciechowski /**
138004631dafSLukasz Wojciechowski  * rte_security_session_destroy tests
138104631dafSLukasz Wojciechowski  */
138204631dafSLukasz Wojciechowski 
138304631dafSLukasz Wojciechowski /**
138404631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy with NULL instance
138504631dafSLukasz Wojciechowski  */
138604631dafSLukasz Wojciechowski static int
test_session_destroy_inv_context(void)138704631dafSLukasz Wojciechowski test_session_destroy_inv_context(void)
138804631dafSLukasz Wojciechowski {
138904631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
139004631dafSLukasz Wojciechowski 
139104631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1392e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
139304631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
139404631dafSLukasz Wojciechowski 
139504631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(NULL, ut_params->sess);
139604631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
139704631dafSLukasz Wojciechowski 			ret, -EINVAL, "%d");
139804631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
139904631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1400e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
140104631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
140204631dafSLukasz Wojciechowski 
140304631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
140404631dafSLukasz Wojciechowski }
140504631dafSLukasz Wojciechowski 
140604631dafSLukasz Wojciechowski /**
140704631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy with invalid
140804631dafSLukasz Wojciechowski  * security operations structure (NULL)
140904631dafSLukasz Wojciechowski  */
141004631dafSLukasz Wojciechowski static int
test_session_destroy_inv_context_ops(void)141104631dafSLukasz Wojciechowski test_session_destroy_inv_context_ops(void)
141204631dafSLukasz Wojciechowski {
141304631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
141404631dafSLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
141504631dafSLukasz Wojciechowski 
141604631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1417e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
141804631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
141904631dafSLukasz Wojciechowski 
142004631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx,
142104631dafSLukasz Wojciechowski 			ut_params->sess);
142204631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
142304631dafSLukasz Wojciechowski 			ret, -EINVAL, "%d");
142404631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
142504631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1426e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
142704631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
142804631dafSLukasz Wojciechowski 
142904631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
143004631dafSLukasz Wojciechowski }
143104631dafSLukasz Wojciechowski 
143204631dafSLukasz Wojciechowski /**
143304631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy with empty
143404631dafSLukasz Wojciechowski  * security operations
143504631dafSLukasz Wojciechowski  */
143604631dafSLukasz Wojciechowski static int
test_session_destroy_inv_context_ops_fun(void)143704631dafSLukasz Wojciechowski test_session_destroy_inv_context_ops_fun(void)
143804631dafSLukasz Wojciechowski {
143904631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
144004631dafSLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
144104631dafSLukasz Wojciechowski 
144204631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1443e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
144404631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
144504631dafSLukasz Wojciechowski 
144604631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx,
144704631dafSLukasz Wojciechowski 			ut_params->sess);
144804631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
144904631dafSLukasz Wojciechowski 			ret, -ENOTSUP, "%d");
145004631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
145104631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1452e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
145304631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
145404631dafSLukasz Wojciechowski 
145504631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
145604631dafSLukasz Wojciechowski }
145704631dafSLukasz Wojciechowski 
145804631dafSLukasz Wojciechowski /**
145904631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy with NULL sess parameter
146004631dafSLukasz Wojciechowski  */
146104631dafSLukasz Wojciechowski static int
test_session_destroy_inv_session(void)146204631dafSLukasz Wojciechowski test_session_destroy_inv_session(void)
146304631dafSLukasz Wojciechowski {
146404631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
146504631dafSLukasz Wojciechowski 
146604631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1467e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
146804631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
146904631dafSLukasz Wojciechowski 
147004631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx, NULL);
147104631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
147204631dafSLukasz Wojciechowski 			ret, -EINVAL, "%d");
147304631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
147404631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1475e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
147604631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
147704631dafSLukasz Wojciechowski 
147804631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
147904631dafSLukasz Wojciechowski }
148004631dafSLukasz Wojciechowski 
148104631dafSLukasz Wojciechowski /**
148204631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy when session_destroy
148304631dafSLukasz Wojciechowski  * security operation fails
148404631dafSLukasz Wojciechowski  */
148504631dafSLukasz Wojciechowski static int
test_session_destroy_ops_failure(void)148604631dafSLukasz Wojciechowski test_session_destroy_ops_failure(void)
148704631dafSLukasz Wojciechowski {
148804631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
148904631dafSLukasz Wojciechowski 
149004631dafSLukasz Wojciechowski 	mock_session_destroy_exp.device = NULL;
149104631dafSLukasz Wojciechowski 	mock_session_destroy_exp.sess = ut_params->sess;
149204631dafSLukasz Wojciechowski 	mock_session_destroy_exp.ret = -1;
149304631dafSLukasz Wojciechowski 
149404631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1495e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
149604631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
149704631dafSLukasz Wojciechowski 
149804631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx,
149904631dafSLukasz Wojciechowski 			ut_params->sess);
150004631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
150104631dafSLukasz Wojciechowski 			ret, -1, "%d");
150204631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
150304631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1504e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
150504631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
150604631dafSLukasz Wojciechowski 
150704631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
150804631dafSLukasz Wojciechowski }
150904631dafSLukasz Wojciechowski 
151004631dafSLukasz Wojciechowski /**
151104631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy in successful execution path
151204631dafSLukasz Wojciechowski  */
151304631dafSLukasz Wojciechowski static int
test_session_destroy_success(void)151404631dafSLukasz Wojciechowski test_session_destroy_success(void)
151504631dafSLukasz Wojciechowski {
151604631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
151704631dafSLukasz Wojciechowski 
151804631dafSLukasz Wojciechowski 	mock_session_destroy_exp.device = NULL;
151904631dafSLukasz Wojciechowski 	mock_session_destroy_exp.sess = ut_params->sess;
152004631dafSLukasz Wojciechowski 	mock_session_destroy_exp.ret = 0;
152104631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
1522e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(1);
152304631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
152404631dafSLukasz Wojciechowski 
152504631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx,
152604631dafSLukasz Wojciechowski 			ut_params->sess);
152704631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
152804631dafSLukasz Wojciechowski 			ret, 0, "%d");
152904631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
153004631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
1531e30b2833SAkhil Goyal 	TEST_ASSERT_PRIV_MP_USAGE(0);
153204631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
153304631dafSLukasz Wojciechowski 
153404631dafSLukasz Wojciechowski 	/*
153504631dafSLukasz Wojciechowski 	 * Remove session from test case parameters, so it won't be destroyed
153604631dafSLukasz Wojciechowski 	 * during test case teardown.
153704631dafSLukasz Wojciechowski 	 */
153804631dafSLukasz Wojciechowski 	ut_params->sess = NULL;
153904631dafSLukasz Wojciechowski 
154004631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
154104631dafSLukasz Wojciechowski }
154204631dafSLukasz Wojciechowski 
154304631dafSLukasz Wojciechowski 
154404631dafSLukasz Wojciechowski /**
1545a9ff3522SLukasz Wojciechowski  * rte_security_set_pkt_metadata tests
1546a9ff3522SLukasz Wojciechowski  */
1547a9ff3522SLukasz Wojciechowski 
1548a9ff3522SLukasz Wojciechowski /**
1549a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata with NULL instance
1550a9ff3522SLukasz Wojciechowski  */
1551a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_inv_context(void)1552a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_inv_context(void)
1553a9ff3522SLukasz Wojciechowski {
1554a9ff3522SLukasz Wojciechowski #ifdef RTE_DEBUG
1555a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1556a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1557a9ff3522SLukasz Wojciechowski 	int params;
1558a9ff3522SLukasz Wojciechowski 
1559a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(NULL, ut_params->sess, &m,
1560a9ff3522SLukasz Wojciechowski 			&params);
1561a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1562a9ff3522SLukasz Wojciechowski 			ret, -EINVAL, "%d");
1563a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1564a9ff3522SLukasz Wojciechowski 
1565a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1566a9ff3522SLukasz Wojciechowski #else
1567a9ff3522SLukasz Wojciechowski 	return TEST_SKIPPED;
1568a9ff3522SLukasz Wojciechowski #endif
1569a9ff3522SLukasz Wojciechowski }
1570a9ff3522SLukasz Wojciechowski 
1571a9ff3522SLukasz Wojciechowski /**
1572a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata with invalid
1573a9ff3522SLukasz Wojciechowski  * security operations structure (NULL)
1574a9ff3522SLukasz Wojciechowski  */
1575a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_inv_context_ops(void)1576a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_inv_context_ops(void)
1577a9ff3522SLukasz Wojciechowski {
1578a9ff3522SLukasz Wojciechowski #ifdef RTE_DEBUG
1579a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1580a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1581a9ff3522SLukasz Wojciechowski 	int params;
1582a9ff3522SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
1583a9ff3522SLukasz Wojciechowski 
1584a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1585a9ff3522SLukasz Wojciechowski 			ut_params->sess, &m, &params);
1586a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1587a9ff3522SLukasz Wojciechowski 			ret, -EINVAL, "%d");
1588a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1589a9ff3522SLukasz Wojciechowski 
1590a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1591a9ff3522SLukasz Wojciechowski #else
1592a9ff3522SLukasz Wojciechowski 	return TEST_SKIPPED;
1593a9ff3522SLukasz Wojciechowski #endif
1594a9ff3522SLukasz Wojciechowski }
1595a9ff3522SLukasz Wojciechowski 
1596a9ff3522SLukasz Wojciechowski /**
1597a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata with empty
1598a9ff3522SLukasz Wojciechowski  * security operations
1599a9ff3522SLukasz Wojciechowski  */
1600a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_inv_context_ops_fun(void)1601a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_inv_context_ops_fun(void)
1602a9ff3522SLukasz Wojciechowski {
1603a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1604a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1605a9ff3522SLukasz Wojciechowski 	int params;
1606a9ff3522SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
1607a9ff3522SLukasz Wojciechowski 
1608a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1609a9ff3522SLukasz Wojciechowski 			ut_params->sess, &m, &params);
1610a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1611a9ff3522SLukasz Wojciechowski 			ret, -ENOTSUP, "%d");
1612a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1613a9ff3522SLukasz Wojciechowski 
1614a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1615a9ff3522SLukasz Wojciechowski }
1616a9ff3522SLukasz Wojciechowski 
1617a9ff3522SLukasz Wojciechowski /**
1618a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata with NULL sess parameter
1619a9ff3522SLukasz Wojciechowski  */
1620a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_inv_session(void)1621a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_inv_session(void)
1622a9ff3522SLukasz Wojciechowski {
1623a9ff3522SLukasz Wojciechowski #ifdef RTE_DEBUG
1624a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1625a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1626a9ff3522SLukasz Wojciechowski 	int params;
1627a9ff3522SLukasz Wojciechowski 
1628a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx, NULL,
1629a9ff3522SLukasz Wojciechowski 			&m, &params);
1630a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1631a9ff3522SLukasz Wojciechowski 			ret, -EINVAL, "%d");
1632a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1633a9ff3522SLukasz Wojciechowski 
1634a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1635a9ff3522SLukasz Wojciechowski #else
1636a9ff3522SLukasz Wojciechowski 	return TEST_SKIPPED;
1637a9ff3522SLukasz Wojciechowski #endif
1638a9ff3522SLukasz Wojciechowski }
1639a9ff3522SLukasz Wojciechowski 
1640a9ff3522SLukasz Wojciechowski /**
1641a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata when set_pkt_metadata
1642a9ff3522SLukasz Wojciechowski  * security operation fails
1643a9ff3522SLukasz Wojciechowski  */
1644a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_ops_failure(void)1645a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_ops_failure(void)
1646a9ff3522SLukasz Wojciechowski {
1647a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1648a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1649a9ff3522SLukasz Wojciechowski 	int params;
1650a9ff3522SLukasz Wojciechowski 
1651a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.device = NULL;
1652a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.sess = ut_params->sess;
1653a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.m = &m;
1654a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.params = &params;
1655a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.ret = -1;
1656a9ff3522SLukasz Wojciechowski 
1657a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1658a9ff3522SLukasz Wojciechowski 			ut_params->sess, &m, &params);
1659a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1660a9ff3522SLukasz Wojciechowski 			ret, -1, "%d");
1661a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 1);
1662a9ff3522SLukasz Wojciechowski 
1663a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1664a9ff3522SLukasz Wojciechowski }
1665a9ff3522SLukasz Wojciechowski 
1666a9ff3522SLukasz Wojciechowski /**
1667a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata in successful execution path
1668a9ff3522SLukasz Wojciechowski  */
1669a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_success(void)1670a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_success(void)
1671a9ff3522SLukasz Wojciechowski {
1672a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1673a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1674a9ff3522SLukasz Wojciechowski 	int params;
1675a9ff3522SLukasz Wojciechowski 
1676a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.device = NULL;
1677a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.sess = ut_params->sess;
1678a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.m = &m;
1679a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.params = &params;
1680a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.ret = 0;
1681a9ff3522SLukasz Wojciechowski 
1682a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1683a9ff3522SLukasz Wojciechowski 			ut_params->sess, &m, &params);
1684a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1685a9ff3522SLukasz Wojciechowski 			ret, 0, "%d");
1686a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 1);
1687a9ff3522SLukasz Wojciechowski 
1688a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1689a9ff3522SLukasz Wojciechowski }
1690a9ff3522SLukasz Wojciechowski 
1691a9ff3522SLukasz Wojciechowski 
1692a9ff3522SLukasz Wojciechowski /**
16930cbd6711SLukasz Wojciechowski  * rte_security_get_userdata tests
16940cbd6711SLukasz Wojciechowski  */
16950cbd6711SLukasz Wojciechowski 
16960cbd6711SLukasz Wojciechowski /**
16970cbd6711SLukasz Wojciechowski  * Test execution of rte_security_get_userdata with NULL instance
16980cbd6711SLukasz Wojciechowski  */
16990cbd6711SLukasz Wojciechowski static int
test_get_userdata_inv_context(void)17000cbd6711SLukasz Wojciechowski test_get_userdata_inv_context(void)
17010cbd6711SLukasz Wojciechowski {
17020cbd6711SLukasz Wojciechowski #ifdef RTE_DEBUG
17030cbd6711SLukasz Wojciechowski 	uint64_t md = 0xDEADBEEF;
17040cbd6711SLukasz Wojciechowski 
17050cbd6711SLukasz Wojciechowski 	void *ret = rte_security_get_userdata(NULL, md);
17060cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
17070cbd6711SLukasz Wojciechowski 			ret, NULL, "%p");
17080cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 0);
17090cbd6711SLukasz Wojciechowski 
17100cbd6711SLukasz Wojciechowski 	return TEST_SUCCESS;
17110cbd6711SLukasz Wojciechowski #else
17120cbd6711SLukasz Wojciechowski 	return TEST_SKIPPED;
17130cbd6711SLukasz Wojciechowski #endif
17140cbd6711SLukasz Wojciechowski }
17150cbd6711SLukasz Wojciechowski 
17160cbd6711SLukasz Wojciechowski /**
17170cbd6711SLukasz Wojciechowski  * Test execution of rte_security_get_userdata with invalid
17180cbd6711SLukasz Wojciechowski  * security operations structure (NULL)
17190cbd6711SLukasz Wojciechowski  */
17200cbd6711SLukasz Wojciechowski static int
test_get_userdata_inv_context_ops(void)17210cbd6711SLukasz Wojciechowski test_get_userdata_inv_context_ops(void)
17220cbd6711SLukasz Wojciechowski {
17230cbd6711SLukasz Wojciechowski #ifdef RTE_DEBUG
17240cbd6711SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
17250cbd6711SLukasz Wojciechowski 	uint64_t md = 0xDEADBEEF;
17260cbd6711SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
17270cbd6711SLukasz Wojciechowski 
17280cbd6711SLukasz Wojciechowski 	void *ret = rte_security_get_userdata(&ut_params->ctx, md);
17290cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
17300cbd6711SLukasz Wojciechowski 			ret, NULL, "%p");
17310cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 0);
17320cbd6711SLukasz Wojciechowski 
17330cbd6711SLukasz Wojciechowski 	return TEST_SUCCESS;
17340cbd6711SLukasz Wojciechowski #else
17350cbd6711SLukasz Wojciechowski 	return TEST_SKIPPED;
17360cbd6711SLukasz Wojciechowski #endif
17370cbd6711SLukasz Wojciechowski }
17380cbd6711SLukasz Wojciechowski 
17390cbd6711SLukasz Wojciechowski /**
17400cbd6711SLukasz Wojciechowski  * Test execution of rte_security_get_userdata with empty
17410cbd6711SLukasz Wojciechowski  * security operations
17420cbd6711SLukasz Wojciechowski  */
17430cbd6711SLukasz Wojciechowski static int
test_get_userdata_inv_context_ops_fun(void)17440cbd6711SLukasz Wojciechowski test_get_userdata_inv_context_ops_fun(void)
17450cbd6711SLukasz Wojciechowski {
17460cbd6711SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
17470cbd6711SLukasz Wojciechowski 	uint64_t md = 0xDEADBEEF;
17480cbd6711SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
17490cbd6711SLukasz Wojciechowski 
17500cbd6711SLukasz Wojciechowski 	void *ret = rte_security_get_userdata(&ut_params->ctx, md);
17510cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
17520cbd6711SLukasz Wojciechowski 			ret, NULL, "%p");
17530cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 0);
17540cbd6711SLukasz Wojciechowski 
17550cbd6711SLukasz Wojciechowski 	return TEST_SUCCESS;
17560cbd6711SLukasz Wojciechowski }
17570cbd6711SLukasz Wojciechowski 
17580cbd6711SLukasz Wojciechowski /**
17590cbd6711SLukasz Wojciechowski  * Test execution of rte_security_get_userdata when get_userdata
17600cbd6711SLukasz Wojciechowski  * security operation fails
17610cbd6711SLukasz Wojciechowski  */
17620cbd6711SLukasz Wojciechowski static int
test_get_userdata_ops_failure(void)17630cbd6711SLukasz Wojciechowski test_get_userdata_ops_failure(void)
17640cbd6711SLukasz Wojciechowski {
17650cbd6711SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
17660cbd6711SLukasz Wojciechowski 	uint64_t md = 0xDEADBEEF;
17670cbd6711SLukasz Wojciechowski 	void *userdata = (void *)0x7E577E57;
17680cbd6711SLukasz Wojciechowski 
17690cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.device = NULL;
17700cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.md = md;
17710cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.userdata = userdata;
17720cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.ret = -1;
17730cbd6711SLukasz Wojciechowski 
17740cbd6711SLukasz Wojciechowski 	void *ret = rte_security_get_userdata(&ut_params->ctx, md);
17750cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
17760cbd6711SLukasz Wojciechowski 			ret, NULL, "%p");
17770cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 1);
17780cbd6711SLukasz Wojciechowski 
17790cbd6711SLukasz Wojciechowski 	return TEST_SUCCESS;
17800cbd6711SLukasz Wojciechowski }
17810cbd6711SLukasz Wojciechowski 
17820cbd6711SLukasz Wojciechowski /**
17830cbd6711SLukasz Wojciechowski  * Test execution of rte_security_get_userdata in successful execution path
17840cbd6711SLukasz Wojciechowski  */
17850cbd6711SLukasz Wojciechowski static int
test_get_userdata_success(void)17860cbd6711SLukasz Wojciechowski test_get_userdata_success(void)
17870cbd6711SLukasz Wojciechowski {
17880cbd6711SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
17890cbd6711SLukasz Wojciechowski 	uint64_t md = 0xDEADBEEF;
17900cbd6711SLukasz Wojciechowski 	void *userdata = (void *)0x7E577E57;
17910cbd6711SLukasz Wojciechowski 
17920cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.device = NULL;
17930cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.md = md;
17940cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.userdata = userdata;
17950cbd6711SLukasz Wojciechowski 	mock_get_userdata_exp.ret = 0;
17960cbd6711SLukasz Wojciechowski 
17970cbd6711SLukasz Wojciechowski 	void *ret = rte_security_get_userdata(&ut_params->ctx, md);
17980cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_get_userdata,
17990cbd6711SLukasz Wojciechowski 			ret, userdata, "%p");
18000cbd6711SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_get_userdata_exp, 1);
18010cbd6711SLukasz Wojciechowski 
18020cbd6711SLukasz Wojciechowski 	return TEST_SUCCESS;
18030cbd6711SLukasz Wojciechowski }
18040cbd6711SLukasz Wojciechowski 
18050cbd6711SLukasz Wojciechowski 
18060cbd6711SLukasz Wojciechowski /**
18072242e701SLukasz Wojciechowski  * rte_security_capabilities_get tests
18082242e701SLukasz Wojciechowski  */
18092242e701SLukasz Wojciechowski 
18102242e701SLukasz Wojciechowski /**
18112242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get with NULL instance
18122242e701SLukasz Wojciechowski  */
18132242e701SLukasz Wojciechowski static int
test_capabilities_get_inv_context(void)18142242e701SLukasz Wojciechowski test_capabilities_get_inv_context(void)
18152242e701SLukasz Wojciechowski {
18162242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
18172242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(NULL);
18182242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
18192242e701SLukasz Wojciechowski 			ret, NULL, "%p");
18202242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
18212242e701SLukasz Wojciechowski 
18222242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
18232242e701SLukasz Wojciechowski }
18242242e701SLukasz Wojciechowski 
18252242e701SLukasz Wojciechowski /**
18262242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get with invalid
18272242e701SLukasz Wojciechowski  * security operations structure (NULL)
18282242e701SLukasz Wojciechowski  */
18292242e701SLukasz Wojciechowski static int
test_capabilities_get_inv_context_ops(void)18302242e701SLukasz Wojciechowski test_capabilities_get_inv_context_ops(void)
18312242e701SLukasz Wojciechowski {
18322242e701SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
18332242e701SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
18342242e701SLukasz Wojciechowski 
18352242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
18362242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(&ut_params->ctx);
18372242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
18382242e701SLukasz Wojciechowski 			ret, NULL, "%p");
18392242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
18402242e701SLukasz Wojciechowski 
18412242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
18422242e701SLukasz Wojciechowski }
18432242e701SLukasz Wojciechowski 
18442242e701SLukasz Wojciechowski /**
18452242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get with empty
18462242e701SLukasz Wojciechowski  * security operations
18472242e701SLukasz Wojciechowski  */
18482242e701SLukasz Wojciechowski static int
test_capabilities_get_inv_context_ops_fun(void)18492242e701SLukasz Wojciechowski test_capabilities_get_inv_context_ops_fun(void)
18502242e701SLukasz Wojciechowski {
18512242e701SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
18522242e701SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
18532242e701SLukasz Wojciechowski 
18542242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
18552242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(&ut_params->ctx);
18562242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
18572242e701SLukasz Wojciechowski 			ret, NULL, "%p");
18582242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
18592242e701SLukasz Wojciechowski 
18602242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
18612242e701SLukasz Wojciechowski }
18622242e701SLukasz Wojciechowski 
18632242e701SLukasz Wojciechowski /**
18642242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get when capabilities_get
18652242e701SLukasz Wojciechowski  * security operation fails
18662242e701SLukasz Wojciechowski  */
18672242e701SLukasz Wojciechowski static int
test_capabilities_get_ops_failure(void)18682242e701SLukasz Wojciechowski test_capabilities_get_ops_failure(void)
18692242e701SLukasz Wojciechowski {
18702242e701SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
18712242e701SLukasz Wojciechowski 
18722242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
18732242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = NULL;
18742242e701SLukasz Wojciechowski 
18752242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
18762242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(&ut_params->ctx);
18772242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
18782242e701SLukasz Wojciechowski 			ret, NULL, "%p");
18792242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
18802242e701SLukasz Wojciechowski 
18812242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
18822242e701SLukasz Wojciechowski }
18832242e701SLukasz Wojciechowski 
18842242e701SLukasz Wojciechowski /**
18852242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get in successful execution path
18862242e701SLukasz Wojciechowski  */
18872242e701SLukasz Wojciechowski static int
test_capabilities_get_success(void)18882242e701SLukasz Wojciechowski test_capabilities_get_success(void)
18892242e701SLukasz Wojciechowski {
18902242e701SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
18912242e701SLukasz Wojciechowski 	struct rte_security_capability capabilities;
18922242e701SLukasz Wojciechowski 
18932242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
18942242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = &capabilities;
18952242e701SLukasz Wojciechowski 
18962242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
18972242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(&ut_params->ctx);
18982242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
18992242e701SLukasz Wojciechowski 			ret, &capabilities, "%p");
19002242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
19012242e701SLukasz Wojciechowski 
19022242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
19032242e701SLukasz Wojciechowski }
19042242e701SLukasz Wojciechowski 
19052242e701SLukasz Wojciechowski 
19062242e701SLukasz Wojciechowski /**
1907cca3eda1SLukasz Wojciechowski  * rte_security_capability_get tests
1908cca3eda1SLukasz Wojciechowski  */
1909cca3eda1SLukasz Wojciechowski 
1910cca3eda1SLukasz Wojciechowski /**
1911cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get with NULL instance
1912cca3eda1SLukasz Wojciechowski  */
1913cca3eda1SLukasz Wojciechowski static int
test_capability_get_inv_context(void)1914cca3eda1SLukasz Wojciechowski test_capability_get_inv_context(void)
1915cca3eda1SLukasz Wojciechowski {
1916cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1917cca3eda1SLukasz Wojciechowski 
1918cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1919cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(NULL, &idx);
1920cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1921cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1922cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1923cca3eda1SLukasz Wojciechowski 
1924cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1925cca3eda1SLukasz Wojciechowski }
1926cca3eda1SLukasz Wojciechowski 
1927cca3eda1SLukasz Wojciechowski /**
1928cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get with invalid
1929cca3eda1SLukasz Wojciechowski  * security operations structure (NULL)
1930cca3eda1SLukasz Wojciechowski  */
1931cca3eda1SLukasz Wojciechowski static int
test_capability_get_inv_context_ops(void)1932cca3eda1SLukasz Wojciechowski test_capability_get_inv_context_ops(void)
1933cca3eda1SLukasz Wojciechowski {
1934cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1935cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1936cca3eda1SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
1937cca3eda1SLukasz Wojciechowski 
1938cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1939cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1940cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1941cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1942cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1943cca3eda1SLukasz Wojciechowski 
1944cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1945cca3eda1SLukasz Wojciechowski }
1946cca3eda1SLukasz Wojciechowski 
1947cca3eda1SLukasz Wojciechowski /**
1948cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get with empty
1949cca3eda1SLukasz Wojciechowski  * security operations
1950cca3eda1SLukasz Wojciechowski  */
1951cca3eda1SLukasz Wojciechowski static int
test_capability_get_inv_context_ops_fun(void)1952cca3eda1SLukasz Wojciechowski test_capability_get_inv_context_ops_fun(void)
1953cca3eda1SLukasz Wojciechowski {
1954cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1955cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1956cca3eda1SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
1957cca3eda1SLukasz Wojciechowski 
1958cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1959cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1960cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1961cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1962cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1963cca3eda1SLukasz Wojciechowski 
1964cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1965cca3eda1SLukasz Wojciechowski }
1966cca3eda1SLukasz Wojciechowski 
1967cca3eda1SLukasz Wojciechowski /**
1968cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get with NULL idx parameter
1969cca3eda1SLukasz Wojciechowski  */
1970cca3eda1SLukasz Wojciechowski static int
test_capability_get_inv_idx(void)1971cca3eda1SLukasz Wojciechowski test_capability_get_inv_idx(void)
1972cca3eda1SLukasz Wojciechowski {
1973cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1974cca3eda1SLukasz Wojciechowski 
1975cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1976cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, NULL);
1977cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1978cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1979cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1980cca3eda1SLukasz Wojciechowski 
1981cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1982cca3eda1SLukasz Wojciechowski }
1983cca3eda1SLukasz Wojciechowski 
1984cca3eda1SLukasz Wojciechowski /**
1985cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities_get
1986cca3eda1SLukasz Wojciechowski  * security operation fails
1987cca3eda1SLukasz Wojciechowski  */
1988cca3eda1SLukasz Wojciechowski static int
test_capability_get_ops_failure(void)1989cca3eda1SLukasz Wojciechowski test_capability_get_ops_failure(void)
1990cca3eda1SLukasz Wojciechowski {
1991cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1992cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1993cca3eda1SLukasz Wojciechowski 
1994cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1995cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = NULL;
1996cca3eda1SLukasz Wojciechowski 
1997cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1998cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1999cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2000cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2001cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2002cca3eda1SLukasz Wojciechowski 
2003cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2004cca3eda1SLukasz Wojciechowski }
2005cca3eda1SLukasz Wojciechowski 
2006cca3eda1SLukasz Wojciechowski /**
2007cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2008cca3eda1SLukasz Wojciechowski  * is empty (contains only RTE_SECURITY_ACTION_TYPE_NONE ending entry)
2009cca3eda1SLukasz Wojciechowski  */
2010cca3eda1SLukasz Wojciechowski static int
test_capability_get_empty_table(void)2011cca3eda1SLukasz Wojciechowski test_capability_get_empty_table(void)
2012cca3eda1SLukasz Wojciechowski {
2013cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2014cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
2015cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2016cca3eda1SLukasz Wojciechowski 		{
2017cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2018cca3eda1SLukasz Wojciechowski 		},
2019cca3eda1SLukasz Wojciechowski 	};
2020cca3eda1SLukasz Wojciechowski 
2021cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2022cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2023cca3eda1SLukasz Wojciechowski 
2024cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2025cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2026cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2027cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2028cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2029cca3eda1SLukasz Wojciechowski 
2030cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2031cca3eda1SLukasz Wojciechowski }
2032cca3eda1SLukasz Wojciechowski 
2033cca3eda1SLukasz Wojciechowski /**
2034cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2035cca3eda1SLukasz Wojciechowski  * does not contain entry with matching action
2036cca3eda1SLukasz Wojciechowski  */
2037cca3eda1SLukasz Wojciechowski static int
test_capability_get_no_matching_action(void)2038cca3eda1SLukasz Wojciechowski test_capability_get_no_matching_action(void)
2039cca3eda1SLukasz Wojciechowski {
2040cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2041cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2042cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2043cca3eda1SLukasz Wojciechowski 	};
2044cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2045cca3eda1SLukasz Wojciechowski 		{
2046cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2047cca3eda1SLukasz Wojciechowski 		},
2048cca3eda1SLukasz Wojciechowski 		{
2049cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL,
2050cca3eda1SLukasz Wojciechowski 		},
2051cca3eda1SLukasz Wojciechowski 		{
2052cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2053cca3eda1SLukasz Wojciechowski 		},
2054cca3eda1SLukasz Wojciechowski 	};
2055cca3eda1SLukasz Wojciechowski 
2056cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2057cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2058cca3eda1SLukasz Wojciechowski 
2059cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2060cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2061cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2062cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2063cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2064cca3eda1SLukasz Wojciechowski 
2065cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2066cca3eda1SLukasz Wojciechowski }
2067cca3eda1SLukasz Wojciechowski 
2068cca3eda1SLukasz Wojciechowski /**
2069cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2070cca3eda1SLukasz Wojciechowski  * does not contain entry with matching protocol
2071cca3eda1SLukasz Wojciechowski  */
2072cca3eda1SLukasz Wojciechowski static int
test_capability_get_no_matching_protocol(void)2073cca3eda1SLukasz Wojciechowski test_capability_get_no_matching_protocol(void)
2074cca3eda1SLukasz Wojciechowski {
2075cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2076cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2077cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2078cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2079cca3eda1SLukasz Wojciechowski 	};
2080cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2081cca3eda1SLukasz Wojciechowski 		{
2082cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2083cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_MACSEC,
2084cca3eda1SLukasz Wojciechowski 		},
2085cca3eda1SLukasz Wojciechowski 		{
2086cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2087cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2088cca3eda1SLukasz Wojciechowski 		},
2089cca3eda1SLukasz Wojciechowski 		{
2090cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2091cca3eda1SLukasz Wojciechowski 		},
2092cca3eda1SLukasz Wojciechowski 	};
2093cca3eda1SLukasz Wojciechowski 
2094cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2095cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2096cca3eda1SLukasz Wojciechowski 
2097cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2098cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2099cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2100cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2101cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2102cca3eda1SLukasz Wojciechowski 
2103cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2104cca3eda1SLukasz Wojciechowski }
2105cca3eda1SLukasz Wojciechowski 
2106cca3eda1SLukasz Wojciechowski /**
2107cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when macsec protocol
2108cca3eda1SLukasz Wojciechowski  * is searched and capabilities table contain proper entry.
2109cca3eda1SLukasz Wojciechowski  * However macsec records search is not supported in rte_security.
2110cca3eda1SLukasz Wojciechowski  */
2111cca3eda1SLukasz Wojciechowski static int
test_capability_get_no_support_for_macsec(void)2112cca3eda1SLukasz Wojciechowski test_capability_get_no_support_for_macsec(void)
2113cca3eda1SLukasz Wojciechowski {
2114cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2115cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2116cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2117cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_MACSEC,
2118cca3eda1SLukasz Wojciechowski 	};
2119cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2120cca3eda1SLukasz Wojciechowski 		{
2121cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2122cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_MACSEC,
2123cca3eda1SLukasz Wojciechowski 		},
2124cca3eda1SLukasz Wojciechowski 		{
2125cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2126cca3eda1SLukasz Wojciechowski 		},
2127cca3eda1SLukasz Wojciechowski 	};
2128cca3eda1SLukasz Wojciechowski 
2129cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2130cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2131cca3eda1SLukasz Wojciechowski 
2132cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2133cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2134cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2135cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2136cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2137cca3eda1SLukasz Wojciechowski 
2138cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2139cca3eda1SLukasz Wojciechowski }
2140cca3eda1SLukasz Wojciechowski 
2141cca3eda1SLukasz Wojciechowski /**
2142cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2143cca3eda1SLukasz Wojciechowski  * does not contain entry with matching ipsec proto field
2144cca3eda1SLukasz Wojciechowski  */
2145cca3eda1SLukasz Wojciechowski static int
test_capability_get_ipsec_mismatch_proto(void)2146cca3eda1SLukasz Wojciechowski test_capability_get_ipsec_mismatch_proto(void)
2147cca3eda1SLukasz Wojciechowski {
2148cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2149cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2150cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2151cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2152cca3eda1SLukasz Wojciechowski 		.ipsec = {
2153cca3eda1SLukasz Wojciechowski 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2154cca3eda1SLukasz Wojciechowski 		},
2155cca3eda1SLukasz Wojciechowski 	};
2156cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2157cca3eda1SLukasz Wojciechowski 		{
2158cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2159cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2160cca3eda1SLukasz Wojciechowski 			.ipsec = {
2161cca3eda1SLukasz Wojciechowski 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
2162cca3eda1SLukasz Wojciechowski 			},
2163cca3eda1SLukasz Wojciechowski 		},
2164cca3eda1SLukasz Wojciechowski 		{
2165cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2166cca3eda1SLukasz Wojciechowski 		},
2167cca3eda1SLukasz Wojciechowski 	};
2168cca3eda1SLukasz Wojciechowski 
2169cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2170cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2171cca3eda1SLukasz Wojciechowski 
2172cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2173cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2174cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2175cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2176cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2177cca3eda1SLukasz Wojciechowski 
2178cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2179cca3eda1SLukasz Wojciechowski }
2180cca3eda1SLukasz Wojciechowski 
2181cca3eda1SLukasz Wojciechowski /**
2182cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2183cca3eda1SLukasz Wojciechowski  * does not contain entry with matching ipsec mode field
2184cca3eda1SLukasz Wojciechowski  */
2185cca3eda1SLukasz Wojciechowski static int
test_capability_get_ipsec_mismatch_mode(void)2186cca3eda1SLukasz Wojciechowski test_capability_get_ipsec_mismatch_mode(void)
2187cca3eda1SLukasz Wojciechowski {
2188cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2189cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2190cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2191cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2192cca3eda1SLukasz Wojciechowski 		.ipsec = {
2193cca3eda1SLukasz Wojciechowski 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2194cca3eda1SLukasz Wojciechowski 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
2195cca3eda1SLukasz Wojciechowski 		},
2196cca3eda1SLukasz Wojciechowski 	};
2197cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2198cca3eda1SLukasz Wojciechowski 		{
2199cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2200cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2201cca3eda1SLukasz Wojciechowski 			.ipsec = {
2202cca3eda1SLukasz Wojciechowski 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2203cca3eda1SLukasz Wojciechowski 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2204cca3eda1SLukasz Wojciechowski 			},
2205cca3eda1SLukasz Wojciechowski 		},
2206cca3eda1SLukasz Wojciechowski 		{
2207cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2208cca3eda1SLukasz Wojciechowski 		},
2209cca3eda1SLukasz Wojciechowski 	};
2210cca3eda1SLukasz Wojciechowski 
2211cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2212cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2213cca3eda1SLukasz Wojciechowski 
2214cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2215cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2216cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2217cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2218cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2219cca3eda1SLukasz Wojciechowski 
2220cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2221cca3eda1SLukasz Wojciechowski }
2222cca3eda1SLukasz Wojciechowski 
2223cca3eda1SLukasz Wojciechowski /**
2224cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2225cca3eda1SLukasz Wojciechowski  * does not contain entry with matching ipsec direction field
2226cca3eda1SLukasz Wojciechowski  */
2227cca3eda1SLukasz Wojciechowski static int
test_capability_get_ipsec_mismatch_dir(void)2228cca3eda1SLukasz Wojciechowski test_capability_get_ipsec_mismatch_dir(void)
2229cca3eda1SLukasz Wojciechowski {
2230cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2231cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2232cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2233cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2234cca3eda1SLukasz Wojciechowski 		.ipsec = {
2235cca3eda1SLukasz Wojciechowski 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2236cca3eda1SLukasz Wojciechowski 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2237cca3eda1SLukasz Wojciechowski 			.direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
2238cca3eda1SLukasz Wojciechowski 		},
2239cca3eda1SLukasz Wojciechowski 	};
2240cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2241cca3eda1SLukasz Wojciechowski 		{
2242cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2243cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2244cca3eda1SLukasz Wojciechowski 			.ipsec = {
2245cca3eda1SLukasz Wojciechowski 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2246cca3eda1SLukasz Wojciechowski 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2247cca3eda1SLukasz Wojciechowski 				.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
2248cca3eda1SLukasz Wojciechowski 			},
2249cca3eda1SLukasz Wojciechowski 		},
2250cca3eda1SLukasz Wojciechowski 		{
2251cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2252cca3eda1SLukasz Wojciechowski 		},
2253cca3eda1SLukasz Wojciechowski 	};
2254cca3eda1SLukasz Wojciechowski 
2255cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2256cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2257cca3eda1SLukasz Wojciechowski 
2258cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2259cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2260cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2261cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2262cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2263cca3eda1SLukasz Wojciechowski 
2264cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2265cca3eda1SLukasz Wojciechowski }
2266cca3eda1SLukasz Wojciechowski 
2267cca3eda1SLukasz Wojciechowski /**
2268cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2269cca3eda1SLukasz Wojciechowski  * contains matching ipsec entry
2270cca3eda1SLukasz Wojciechowski  */
2271cca3eda1SLukasz Wojciechowski static int
test_capability_get_ipsec_match(void)2272cca3eda1SLukasz Wojciechowski test_capability_get_ipsec_match(void)
2273cca3eda1SLukasz Wojciechowski {
2274cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2275cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2276cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2277cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2278cca3eda1SLukasz Wojciechowski 		.ipsec = {
2279cca3eda1SLukasz Wojciechowski 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2280cca3eda1SLukasz Wojciechowski 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2281cca3eda1SLukasz Wojciechowski 			.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
2282cca3eda1SLukasz Wojciechowski 		},
2283cca3eda1SLukasz Wojciechowski 	};
2284cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2285cca3eda1SLukasz Wojciechowski 		{
2286cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2287cca3eda1SLukasz Wojciechowski 		},
2288cca3eda1SLukasz Wojciechowski 		{
2289cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2290cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
2291cca3eda1SLukasz Wojciechowski 			.ipsec = {
2292cca3eda1SLukasz Wojciechowski 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
2293cca3eda1SLukasz Wojciechowski 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
2294cca3eda1SLukasz Wojciechowski 				.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
2295cca3eda1SLukasz Wojciechowski 			},
2296cca3eda1SLukasz Wojciechowski 		},
2297cca3eda1SLukasz Wojciechowski 		{
2298cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2299cca3eda1SLukasz Wojciechowski 		},
2300cca3eda1SLukasz Wojciechowski 	};
2301cca3eda1SLukasz Wojciechowski 
2302cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2303cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2304cca3eda1SLukasz Wojciechowski 
2305cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2306cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2307cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2308cca3eda1SLukasz Wojciechowski 			ret, &capabilities[1], "%p");
2309cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2310cca3eda1SLukasz Wojciechowski 
2311cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2312cca3eda1SLukasz Wojciechowski }
2313cca3eda1SLukasz Wojciechowski 
2314cca3eda1SLukasz Wojciechowski /**
2315cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2316cca3eda1SLukasz Wojciechowski  * does not contain entry with matching pdcp domain field
2317cca3eda1SLukasz Wojciechowski  */
2318cca3eda1SLukasz Wojciechowski static int
test_capability_get_pdcp_mismatch_domain(void)2319cca3eda1SLukasz Wojciechowski test_capability_get_pdcp_mismatch_domain(void)
2320cca3eda1SLukasz Wojciechowski {
2321cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2322cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2323cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2324cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2325cca3eda1SLukasz Wojciechowski 		.pdcp = {
2326cca3eda1SLukasz Wojciechowski 			.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2327cca3eda1SLukasz Wojciechowski 		},
2328cca3eda1SLukasz Wojciechowski 	};
2329cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2330cca3eda1SLukasz Wojciechowski 		{
2331cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2332cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2333cca3eda1SLukasz Wojciechowski 			.pdcp = {
2334cca3eda1SLukasz Wojciechowski 				.domain = RTE_SECURITY_PDCP_MODE_DATA,
2335cca3eda1SLukasz Wojciechowski 			},
2336cca3eda1SLukasz Wojciechowski 		},
2337cca3eda1SLukasz Wojciechowski 		{
2338cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2339cca3eda1SLukasz Wojciechowski 		},
2340cca3eda1SLukasz Wojciechowski 	};
2341cca3eda1SLukasz Wojciechowski 
2342cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2343cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2344cca3eda1SLukasz Wojciechowski 
2345cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2346cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2347cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2348cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2349cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2350cca3eda1SLukasz Wojciechowski 
2351cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2352cca3eda1SLukasz Wojciechowski }
2353cca3eda1SLukasz Wojciechowski 
2354cca3eda1SLukasz Wojciechowski /**
2355cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2356cca3eda1SLukasz Wojciechowski  * contains matching pdcp entry
2357cca3eda1SLukasz Wojciechowski  */
2358cca3eda1SLukasz Wojciechowski static int
test_capability_get_pdcp_match(void)2359cca3eda1SLukasz Wojciechowski test_capability_get_pdcp_match(void)
2360cca3eda1SLukasz Wojciechowski {
2361cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2362cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2363cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2364cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2365cca3eda1SLukasz Wojciechowski 		.pdcp = {
2366cca3eda1SLukasz Wojciechowski 			.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2367cca3eda1SLukasz Wojciechowski 		},
2368cca3eda1SLukasz Wojciechowski 	};
2369cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2370cca3eda1SLukasz Wojciechowski 		{
2371cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2372cca3eda1SLukasz Wojciechowski 		},
2373cca3eda1SLukasz Wojciechowski 		{
2374cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2375cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2376cca3eda1SLukasz Wojciechowski 			.pdcp = {
2377cca3eda1SLukasz Wojciechowski 				.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2378cca3eda1SLukasz Wojciechowski 			},
2379cca3eda1SLukasz Wojciechowski 		},
2380cca3eda1SLukasz Wojciechowski 		{
2381cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2382cca3eda1SLukasz Wojciechowski 		},
2383cca3eda1SLukasz Wojciechowski 	};
2384cca3eda1SLukasz Wojciechowski 
2385cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2386cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2387cca3eda1SLukasz Wojciechowski 
2388cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2389cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2390cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2391cca3eda1SLukasz Wojciechowski 			ret, &capabilities[1], "%p");
2392cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2393cca3eda1SLukasz Wojciechowski 
2394cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2395cca3eda1SLukasz Wojciechowski }
2396cca3eda1SLukasz Wojciechowski 
2397cca3eda1SLukasz Wojciechowski /**
2398c6478fd5SDavid Coyle  * Test execution of rte_security_capability_get when capabilities table
2399c6478fd5SDavid Coyle  * does not contain entry with matching DOCSIS direction field
2400c6478fd5SDavid Coyle  */
2401c6478fd5SDavid Coyle static int
test_capability_get_docsis_mismatch_direction(void)2402c6478fd5SDavid Coyle test_capability_get_docsis_mismatch_direction(void)
2403c6478fd5SDavid Coyle {
2404c6478fd5SDavid Coyle 	struct security_unittest_params *ut_params = &unittest_params;
2405c6478fd5SDavid Coyle 	struct rte_security_capability_idx idx = {
2406c6478fd5SDavid Coyle 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2407c6478fd5SDavid Coyle 		.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2408c6478fd5SDavid Coyle 		.docsis = {
2409c6478fd5SDavid Coyle 			.direction = RTE_SECURITY_DOCSIS_DOWNLINK
2410c6478fd5SDavid Coyle 		},
2411c6478fd5SDavid Coyle 	};
2412c6478fd5SDavid Coyle 	struct rte_security_capability capabilities[] = {
2413c6478fd5SDavid Coyle 		{
2414c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2415c6478fd5SDavid Coyle 			.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2416c6478fd5SDavid Coyle 			.docsis = {
2417c6478fd5SDavid Coyle 				.direction = RTE_SECURITY_DOCSIS_UPLINK
2418c6478fd5SDavid Coyle 			},
2419c6478fd5SDavid Coyle 		},
2420c6478fd5SDavid Coyle 		{
2421c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2422c6478fd5SDavid Coyle 		},
2423c6478fd5SDavid Coyle 	};
2424c6478fd5SDavid Coyle 
2425c6478fd5SDavid Coyle 	mock_capabilities_get_exp.device = NULL;
2426c6478fd5SDavid Coyle 	mock_capabilities_get_exp.ret = capabilities;
2427c6478fd5SDavid Coyle 
2428c6478fd5SDavid Coyle 	const struct rte_security_capability *ret;
2429c6478fd5SDavid Coyle 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2430c6478fd5SDavid Coyle 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2431c6478fd5SDavid Coyle 			ret, NULL, "%p");
2432c6478fd5SDavid Coyle 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2433c6478fd5SDavid Coyle 
2434c6478fd5SDavid Coyle 	return TEST_SUCCESS;
2435c6478fd5SDavid Coyle }
2436c6478fd5SDavid Coyle 
2437c6478fd5SDavid Coyle /**
2438c6478fd5SDavid Coyle  * Test execution of rte_security_capability_get when capabilities table
2439c6478fd5SDavid Coyle  * contains matching DOCSIS entry
2440c6478fd5SDavid Coyle  */
2441c6478fd5SDavid Coyle static int
test_capability_get_docsis_match(void)2442c6478fd5SDavid Coyle test_capability_get_docsis_match(void)
2443c6478fd5SDavid Coyle {
2444c6478fd5SDavid Coyle 	struct security_unittest_params *ut_params = &unittest_params;
2445c6478fd5SDavid Coyle 	struct rte_security_capability_idx idx = {
2446c6478fd5SDavid Coyle 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2447c6478fd5SDavid Coyle 		.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2448c6478fd5SDavid Coyle 		.docsis = {
2449c6478fd5SDavid Coyle 			.direction = RTE_SECURITY_DOCSIS_UPLINK
2450c6478fd5SDavid Coyle 		},
2451c6478fd5SDavid Coyle 	};
2452c6478fd5SDavid Coyle 	struct rte_security_capability capabilities[] = {
2453c6478fd5SDavid Coyle 		{
2454c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2455c6478fd5SDavid Coyle 		},
2456c6478fd5SDavid Coyle 		{
2457c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2458c6478fd5SDavid Coyle 			.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2459c6478fd5SDavid Coyle 			.docsis = {
2460c6478fd5SDavid Coyle 				.direction = RTE_SECURITY_DOCSIS_UPLINK
2461c6478fd5SDavid Coyle 			},
2462c6478fd5SDavid Coyle 		},
2463c6478fd5SDavid Coyle 		{
2464c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2465c6478fd5SDavid Coyle 		},
2466c6478fd5SDavid Coyle 	};
2467c6478fd5SDavid Coyle 
2468c6478fd5SDavid Coyle 	mock_capabilities_get_exp.device = NULL;
2469c6478fd5SDavid Coyle 	mock_capabilities_get_exp.ret = capabilities;
2470c6478fd5SDavid Coyle 
2471c6478fd5SDavid Coyle 	const struct rte_security_capability *ret;
2472c6478fd5SDavid Coyle 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2473c6478fd5SDavid Coyle 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2474c6478fd5SDavid Coyle 			ret, &capabilities[1], "%p");
2475c6478fd5SDavid Coyle 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2476c6478fd5SDavid Coyle 
2477c6478fd5SDavid Coyle 	return TEST_SUCCESS;
2478c6478fd5SDavid Coyle }
2479c6478fd5SDavid Coyle 
2480c6478fd5SDavid Coyle /**
24814849e8e4SLukasz Wojciechowski  * Declaration of testcases
24824849e8e4SLukasz Wojciechowski  */
24834849e8e4SLukasz Wojciechowski static struct unit_test_suite security_testsuite  = {
24844849e8e4SLukasz Wojciechowski 	.suite_name = "generic security",
24854849e8e4SLukasz Wojciechowski 	.setup = testsuite_setup,
24864849e8e4SLukasz Wojciechowski 	.teardown = testsuite_teardown,
24874849e8e4SLukasz Wojciechowski 	.unit_test_cases = {
24884849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
24894849e8e4SLukasz Wojciechowski 				test_session_create_inv_context),
24904849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
24914849e8e4SLukasz Wojciechowski 				test_session_create_inv_context_ops),
24924849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
24934849e8e4SLukasz Wojciechowski 				test_session_create_inv_context_ops_fun),
24944849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
24954849e8e4SLukasz Wojciechowski 				test_session_create_inv_configuration),
24964849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
24974849e8e4SLukasz Wojciechowski 				test_session_create_inv_mempool),
24984849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
2499e30b2833SAkhil Goyal 				test_session_create_inv_sess_priv_mempool),
2500e30b2833SAkhil Goyal 		TEST_CASE_ST(ut_setup, ut_teardown,
25014849e8e4SLukasz Wojciechowski 				test_session_create_mempool_empty),
25024849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
25034849e8e4SLukasz Wojciechowski 				test_session_create_ops_failure),
25044849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
25054849e8e4SLukasz Wojciechowski 				test_session_create_success),
25064849e8e4SLukasz Wojciechowski 
25070b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25080b124e04SLukasz Wojciechowski 				test_session_update_inv_context),
25090b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25100b124e04SLukasz Wojciechowski 				test_session_update_inv_context_ops),
25110b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25120b124e04SLukasz Wojciechowski 				test_session_update_inv_context_ops_fun),
25130b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25140b124e04SLukasz Wojciechowski 				test_session_update_inv_configuration),
25150b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25160b124e04SLukasz Wojciechowski 				test_session_update_inv_session),
25170b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25180b124e04SLukasz Wojciechowski 				test_session_update_ops_failure),
25190b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25200b124e04SLukasz Wojciechowski 				test_session_update_success),
25210b124e04SLukasz Wojciechowski 
2522226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2523226430f4SLukasz Wojciechowski 				test_session_get_size_inv_context),
2524226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2525226430f4SLukasz Wojciechowski 				test_session_get_size_inv_context_ops),
2526226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2527226430f4SLukasz Wojciechowski 				test_session_get_size_inv_context_ops_fun),
2528226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2529226430f4SLukasz Wojciechowski 				test_session_get_size_ops_failure),
2530226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2531226430f4SLukasz Wojciechowski 				test_session_get_size_success),
2532226430f4SLukasz Wojciechowski 
25331e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25341e1a0e49SLukasz Wojciechowski 				test_session_stats_get_inv_context),
25351e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25361e1a0e49SLukasz Wojciechowski 				test_session_stats_get_inv_context_ops),
25371e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25381e1a0e49SLukasz Wojciechowski 				test_session_stats_get_inv_context_ops_fun),
25391e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25401e1a0e49SLukasz Wojciechowski 				test_session_stats_get_inv_stats),
25411e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25421e1a0e49SLukasz Wojciechowski 				test_session_stats_get_ops_failure),
25431e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25441e1a0e49SLukasz Wojciechowski 				test_session_stats_get_success),
25451e1a0e49SLukasz Wojciechowski 
254604631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
254704631dafSLukasz Wojciechowski 				test_session_destroy_inv_context),
254804631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
254904631dafSLukasz Wojciechowski 				test_session_destroy_inv_context_ops),
255004631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
255104631dafSLukasz Wojciechowski 				test_session_destroy_inv_context_ops_fun),
255204631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
255304631dafSLukasz Wojciechowski 				test_session_destroy_inv_session),
255404631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
255504631dafSLukasz Wojciechowski 				test_session_destroy_ops_failure),
255604631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
255704631dafSLukasz Wojciechowski 				test_session_destroy_success),
255804631dafSLukasz Wojciechowski 
2559a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2560a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_inv_context),
2561a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2562a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_inv_context_ops),
2563a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2564a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_inv_context_ops_fun),
2565a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2566a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_inv_session),
2567a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2568a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_ops_failure),
2569a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2570a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_success),
2571a9ff3522SLukasz Wojciechowski 
25720cbd6711SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25730cbd6711SLukasz Wojciechowski 				test_get_userdata_inv_context),
25740cbd6711SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25750cbd6711SLukasz Wojciechowski 				test_get_userdata_inv_context_ops),
25760cbd6711SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25770cbd6711SLukasz Wojciechowski 				test_get_userdata_inv_context_ops_fun),
25780cbd6711SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25790cbd6711SLukasz Wojciechowski 				test_get_userdata_ops_failure),
25800cbd6711SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25810cbd6711SLukasz Wojciechowski 				test_get_userdata_success),
25820cbd6711SLukasz Wojciechowski 
25832242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25842242e701SLukasz Wojciechowski 				test_capabilities_get_inv_context),
25852242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25862242e701SLukasz Wojciechowski 				test_capabilities_get_inv_context_ops),
25872242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25882242e701SLukasz Wojciechowski 				test_capabilities_get_inv_context_ops_fun),
25892242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25902242e701SLukasz Wojciechowski 				test_capabilities_get_ops_failure),
25912242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
25922242e701SLukasz Wojciechowski 				test_capabilities_get_success),
25932242e701SLukasz Wojciechowski 
2594cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2595cca3eda1SLukasz Wojciechowski 				test_capability_get_inv_context),
2596cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2597cca3eda1SLukasz Wojciechowski 				test_capability_get_inv_context_ops),
2598cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2599cca3eda1SLukasz Wojciechowski 				test_capability_get_inv_context_ops_fun),
2600cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2601cca3eda1SLukasz Wojciechowski 				test_capability_get_inv_idx),
2602cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2603cca3eda1SLukasz Wojciechowski 				test_capability_get_ops_failure),
2604cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2605cca3eda1SLukasz Wojciechowski 				test_capability_get_empty_table),
2606cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2607cca3eda1SLukasz Wojciechowski 				test_capability_get_no_matching_action),
2608cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2609cca3eda1SLukasz Wojciechowski 				test_capability_get_no_matching_protocol),
2610cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2611cca3eda1SLukasz Wojciechowski 				test_capability_get_no_support_for_macsec),
2612cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2613cca3eda1SLukasz Wojciechowski 				test_capability_get_ipsec_mismatch_proto),
2614cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2615cca3eda1SLukasz Wojciechowski 				test_capability_get_ipsec_mismatch_mode),
2616cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2617cca3eda1SLukasz Wojciechowski 				test_capability_get_ipsec_mismatch_dir),
2618cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2619cca3eda1SLukasz Wojciechowski 				test_capability_get_ipsec_match),
2620cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2621cca3eda1SLukasz Wojciechowski 				test_capability_get_pdcp_mismatch_domain),
2622cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2623cca3eda1SLukasz Wojciechowski 				test_capability_get_pdcp_match),
2624c6478fd5SDavid Coyle 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2625c6478fd5SDavid Coyle 				test_capability_get_docsis_mismatch_direction),
2626c6478fd5SDavid Coyle 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2627c6478fd5SDavid Coyle 				test_capability_get_docsis_match),
2628cca3eda1SLukasz Wojciechowski 
26294849e8e4SLukasz Wojciechowski 		TEST_CASES_END() /**< NULL terminate unit test array */
26304849e8e4SLukasz Wojciechowski 	}
26314849e8e4SLukasz Wojciechowski };
26324849e8e4SLukasz Wojciechowski 
26334849e8e4SLukasz Wojciechowski static int
test_security(void)26344849e8e4SLukasz Wojciechowski test_security(void)
26354849e8e4SLukasz Wojciechowski {
26364849e8e4SLukasz Wojciechowski 	rte_log_set_global_level(RTE_LOG_DEBUG);
26374849e8e4SLukasz Wojciechowski 	rte_log_set_level(RTE_LOGTYPE_EAL, RTE_LOG_DEBUG);
26384849e8e4SLukasz Wojciechowski 
26394849e8e4SLukasz Wojciechowski 	return unit_test_suite_runner(&security_testsuite);
26404849e8e4SLukasz Wojciechowski }
26414849e8e4SLukasz Wojciechowski 
26424849e8e4SLukasz Wojciechowski REGISTER_TEST_COMMAND(security_autotest, test_security);
2643