xref: /dpdk/app/test/test_security.c (revision e0a8442ccd15bafbb7eb150c35331c8e3b828c53)
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 /**
2044849e8e4SLukasz Wojciechowski  * Mockup structures and functions for rte_security_ops;
2054849e8e4SLukasz Wojciechowski  *
2064849e8e4SLukasz Wojciechowski  * Set of structures for controlling mockup functions calls.
2074849e8e4SLukasz Wojciechowski  * Every mockup function X has its corresponding X_data structure
2084849e8e4SLukasz Wojciechowski  * and an instance of that structure X_exp.
2094849e8e4SLukasz Wojciechowski  * Structure contains parameters that a mockup function is expected
2104849e8e4SLukasz Wojciechowski  * to be called with, a value to return (.ret) and 2 statistics:
2114849e8e4SLukasz Wojciechowski  * .called (number of times the mockup function was called)
2124849e8e4SLukasz Wojciechowski  * and .failed (number of assertion fails during mockup function call).
2134849e8e4SLukasz Wojciechowski  *
2144849e8e4SLukasz Wojciechowski  * Mockup functions verify that the parameters they are called with match
2154849e8e4SLukasz Wojciechowski  * expected values. The expected values should be stored in corresponding
2164849e8e4SLukasz Wojciechowski  * structures prior to mockup functions call. Every failure of such
2174849e8e4SLukasz Wojciechowski  * verification increases .failed counter. Every call of mockup function
2184849e8e4SLukasz Wojciechowski  * increases .called counter. Function returns value stored in .ret field
2194849e8e4SLukasz Wojciechowski  * of the structure.
2204849e8e4SLukasz Wojciechowski  * In case of some parameters in some functions the expected value is unknown
2217be78d02SJosh Soref  * and cannot be determined prior to call. Such parameters are stored
2224849e8e4SLukasz Wojciechowski  * in structure and can be compared or analyzed later in test case code.
2234849e8e4SLukasz Wojciechowski  *
2244849e8e4SLukasz Wojciechowski  * Below structures and functions follow the rules just described.
2254849e8e4SLukasz Wojciechowski  * Additional remarks and exceptions are added in comments.
2264849e8e4SLukasz Wojciechowski  */
2274849e8e4SLukasz Wojciechowski 
2284849e8e4SLukasz Wojciechowski /**
2294849e8e4SLukasz Wojciechowski  * session_create mockup
2304849e8e4SLukasz Wojciechowski  *
2314849e8e4SLukasz Wojciechowski  * Verified parameters: device, conf, mp.
2324849e8e4SLukasz Wojciechowski  * Saved, not verified parameters: sess.
2334849e8e4SLukasz Wojciechowski  */
2344849e8e4SLukasz Wojciechowski static struct mock_session_create_data {
2354849e8e4SLukasz Wojciechowski 	void *device;
2364849e8e4SLukasz Wojciechowski 	struct rte_security_session_conf *conf;
2372973dbf9SAkhil Goyal 	void *sess;
2384849e8e4SLukasz Wojciechowski 	struct rte_mempool *mp;
239e30b2833SAkhil Goyal 	struct rte_mempool *priv_mp;
2404849e8e4SLukasz Wojciechowski 
2414849e8e4SLukasz Wojciechowski 	int ret;
2424849e8e4SLukasz Wojciechowski 
2434849e8e4SLukasz Wojciechowski 	int called;
2444849e8e4SLukasz Wojciechowski 	int failed;
245e30b2833SAkhil Goyal } mock_session_create_exp = {NULL, NULL, NULL, NULL, NULL, 0, 0, 0};
2464849e8e4SLukasz Wojciechowski 
2474849e8e4SLukasz Wojciechowski static int
mock_session_create(void * device,struct rte_security_session_conf * conf,struct rte_security_session * sess)2484849e8e4SLukasz Wojciechowski mock_session_create(void *device,
2494849e8e4SLukasz Wojciechowski 		struct rte_security_session_conf *conf,
2503f3fc330SAkhil Goyal 		struct rte_security_session *sess)
2514849e8e4SLukasz Wojciechowski {
2524849e8e4SLukasz Wojciechowski 	mock_session_create_exp.called++;
2534849e8e4SLukasz Wojciechowski 
2544849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, device);
2554849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_create_exp, conf);
2564849e8e4SLukasz Wojciechowski 
257e30b2833SAkhil Goyal 	if (mock_session_create_exp.ret == 0) {
2584849e8e4SLukasz Wojciechowski 		mock_session_create_exp.sess = sess;
259e30b2833SAkhil Goyal 	}
2604849e8e4SLukasz Wojciechowski 
2614849e8e4SLukasz Wojciechowski 	return mock_session_create_exp.ret;
2624849e8e4SLukasz Wojciechowski }
2634849e8e4SLukasz Wojciechowski 
2644849e8e4SLukasz Wojciechowski /**
2650b124e04SLukasz Wojciechowski  * session_update mockup
2660b124e04SLukasz Wojciechowski  *
2670b124e04SLukasz Wojciechowski  * Verified parameters: device, sess, conf.
2680b124e04SLukasz Wojciechowski  */
2690b124e04SLukasz Wojciechowski static struct mock_session_update_data {
2700b124e04SLukasz Wojciechowski 	void *device;
2712973dbf9SAkhil Goyal 	void *sess;
2720b124e04SLukasz Wojciechowski 	struct rte_security_session_conf *conf;
2730b124e04SLukasz Wojciechowski 
2740b124e04SLukasz Wojciechowski 	int ret;
2750b124e04SLukasz Wojciechowski 
2760b124e04SLukasz Wojciechowski 	int called;
2770b124e04SLukasz Wojciechowski 	int failed;
2780b124e04SLukasz Wojciechowski } mock_session_update_exp = {NULL, NULL, NULL, 0, 0, 0};
2790b124e04SLukasz Wojciechowski 
2800b124e04SLukasz Wojciechowski static int
mock_session_update(void * device,struct rte_security_session * sess,struct rte_security_session_conf * conf)2810b124e04SLukasz Wojciechowski mock_session_update(void *device,
2820b124e04SLukasz Wojciechowski 		struct rte_security_session *sess,
2830b124e04SLukasz Wojciechowski 		struct rte_security_session_conf *conf)
2840b124e04SLukasz Wojciechowski {
2850b124e04SLukasz Wojciechowski 	mock_session_update_exp.called++;
2860b124e04SLukasz Wojciechowski 
2870b124e04SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, device);
2880b124e04SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, sess);
2890b124e04SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_update_exp, conf);
2900b124e04SLukasz Wojciechowski 
2910b124e04SLukasz Wojciechowski 	return mock_session_update_exp.ret;
2920b124e04SLukasz Wojciechowski }
2930b124e04SLukasz Wojciechowski 
2940b124e04SLukasz Wojciechowski /**
295226430f4SLukasz Wojciechowski  * session_get_size mockup
296226430f4SLukasz Wojciechowski  *
297226430f4SLukasz Wojciechowski  * Verified parameters: device.
298226430f4SLukasz Wojciechowski  */
299226430f4SLukasz Wojciechowski static struct mock_session_get_size_data {
300226430f4SLukasz Wojciechowski 	void *device;
301226430f4SLukasz Wojciechowski 
302226430f4SLukasz Wojciechowski 	unsigned int ret;
303226430f4SLukasz Wojciechowski 
304226430f4SLukasz Wojciechowski 	int called;
305226430f4SLukasz Wojciechowski 	int failed;
306226430f4SLukasz Wojciechowski } mock_session_get_size_exp = {NULL, 0U, 0, 0};
307226430f4SLukasz Wojciechowski 
308226430f4SLukasz Wojciechowski static unsigned int
mock_session_get_size(void * device)309226430f4SLukasz Wojciechowski mock_session_get_size(void *device)
310226430f4SLukasz Wojciechowski {
311226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.called++;
312226430f4SLukasz Wojciechowski 
313226430f4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_get_size_exp, device);
314226430f4SLukasz Wojciechowski 
315226430f4SLukasz Wojciechowski 	return mock_session_get_size_exp.ret;
316226430f4SLukasz Wojciechowski }
317226430f4SLukasz Wojciechowski 
318226430f4SLukasz Wojciechowski /**
3191e1a0e49SLukasz Wojciechowski  * session_stats_get mockup
3201e1a0e49SLukasz Wojciechowski  *
3211e1a0e49SLukasz Wojciechowski  * Verified parameters: device, sess, stats.
3221e1a0e49SLukasz Wojciechowski  */
3231e1a0e49SLukasz Wojciechowski static struct mock_session_stats_get_data {
3241e1a0e49SLukasz Wojciechowski 	void *device;
3252973dbf9SAkhil Goyal 	void *sess;
3261e1a0e49SLukasz Wojciechowski 	struct rte_security_stats *stats;
3271e1a0e49SLukasz Wojciechowski 
3281e1a0e49SLukasz Wojciechowski 	int ret;
3291e1a0e49SLukasz Wojciechowski 
3301e1a0e49SLukasz Wojciechowski 	int called;
3311e1a0e49SLukasz Wojciechowski 	int failed;
3321e1a0e49SLukasz Wojciechowski } mock_session_stats_get_exp = {NULL, NULL, NULL, 0, 0, 0};
3331e1a0e49SLukasz Wojciechowski 
3341e1a0e49SLukasz Wojciechowski static int
mock_session_stats_get(void * device,struct rte_security_session * sess,struct rte_security_stats * stats)3351e1a0e49SLukasz Wojciechowski mock_session_stats_get(void *device,
3361e1a0e49SLukasz Wojciechowski 		struct rte_security_session *sess,
3371e1a0e49SLukasz Wojciechowski 		struct rte_security_stats *stats)
3381e1a0e49SLukasz Wojciechowski {
3391e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.called++;
3401e1a0e49SLukasz Wojciechowski 
3411e1a0e49SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, device);
3421e1a0e49SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, sess);
3431e1a0e49SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_stats_get_exp, stats);
3441e1a0e49SLukasz Wojciechowski 
3451e1a0e49SLukasz Wojciechowski 	return mock_session_stats_get_exp.ret;
3461e1a0e49SLukasz Wojciechowski }
3471e1a0e49SLukasz Wojciechowski 
3481e1a0e49SLukasz Wojciechowski /**
3494849e8e4SLukasz Wojciechowski  * session_destroy mockup
3504849e8e4SLukasz Wojciechowski  *
3514849e8e4SLukasz Wojciechowski  * Verified parameters: device, sess.
3524849e8e4SLukasz Wojciechowski  */
3534849e8e4SLukasz Wojciechowski static struct mock_session_destroy_data {
3544849e8e4SLukasz Wojciechowski 	void *device;
3552973dbf9SAkhil Goyal 	void *sess;
3564849e8e4SLukasz Wojciechowski 
3574849e8e4SLukasz Wojciechowski 	int ret;
3584849e8e4SLukasz Wojciechowski 
3594849e8e4SLukasz Wojciechowski 	int called;
3604849e8e4SLukasz Wojciechowski 	int failed;
3614849e8e4SLukasz Wojciechowski } mock_session_destroy_exp = {NULL, NULL, 0, 0, 0};
3624849e8e4SLukasz Wojciechowski 
3634849e8e4SLukasz Wojciechowski static int
mock_session_destroy(void * device,struct rte_security_session * sess)3644849e8e4SLukasz Wojciechowski mock_session_destroy(void *device, struct rte_security_session *sess)
3654849e8e4SLukasz Wojciechowski {
366e30b2833SAkhil Goyal 	mock_session_destroy_exp.called++;
3674849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_destroy_exp, device);
3684849e8e4SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_session_destroy_exp, sess);
3694849e8e4SLukasz Wojciechowski 
3704849e8e4SLukasz Wojciechowski 	return mock_session_destroy_exp.ret;
3714849e8e4SLukasz Wojciechowski }
3724849e8e4SLukasz Wojciechowski 
3734849e8e4SLukasz Wojciechowski /**
374a9ff3522SLukasz Wojciechowski  * set_pkt_metadata mockup
375a9ff3522SLukasz Wojciechowski  *
376a9ff3522SLukasz Wojciechowski  * Verified parameters: device, sess, m, params.
377a9ff3522SLukasz Wojciechowski  */
378a9ff3522SLukasz Wojciechowski static struct mock_set_pkt_metadata_data {
379a9ff3522SLukasz Wojciechowski 	void *device;
3802973dbf9SAkhil Goyal 	void *sess;
381a9ff3522SLukasz Wojciechowski 	struct rte_mbuf *m;
382a9ff3522SLukasz Wojciechowski 	void *params;
383a9ff3522SLukasz Wojciechowski 
384a9ff3522SLukasz Wojciechowski 	int ret;
385a9ff3522SLukasz Wojciechowski 
386a9ff3522SLukasz Wojciechowski 	int called;
387a9ff3522SLukasz Wojciechowski 	int failed;
388a9ff3522SLukasz Wojciechowski } mock_set_pkt_metadata_exp = {NULL, NULL, NULL, NULL, 0, 0, 0};
389a9ff3522SLukasz Wojciechowski 
390a9ff3522SLukasz Wojciechowski static int
mock_set_pkt_metadata(void * device,struct rte_security_session * sess,struct rte_mbuf * m,void * params)391a9ff3522SLukasz Wojciechowski mock_set_pkt_metadata(void *device,
392a9ff3522SLukasz Wojciechowski 		struct rte_security_session *sess,
393a9ff3522SLukasz Wojciechowski 		struct rte_mbuf *m,
394a9ff3522SLukasz Wojciechowski 		void *params)
395a9ff3522SLukasz Wojciechowski {
396a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.called++;
397a9ff3522SLukasz Wojciechowski 
398a9ff3522SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, device);
399a9ff3522SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, sess);
400a9ff3522SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, m);
401a9ff3522SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_set_pkt_metadata_exp, params);
402a9ff3522SLukasz Wojciechowski 
403a9ff3522SLukasz Wojciechowski 	return mock_set_pkt_metadata_exp.ret;
404a9ff3522SLukasz Wojciechowski }
405a9ff3522SLukasz Wojciechowski 
406a9ff3522SLukasz Wojciechowski /**
4072242e701SLukasz Wojciechowski  * capabilities_get mockup
4082242e701SLukasz Wojciechowski  *
4092242e701SLukasz Wojciechowski  * Verified parameters: device.
4102242e701SLukasz Wojciechowski  */
4112242e701SLukasz Wojciechowski static struct mock_capabilities_get_data {
4122242e701SLukasz Wojciechowski 	void *device;
4132242e701SLukasz Wojciechowski 
4142242e701SLukasz Wojciechowski 	struct rte_security_capability *ret;
4152242e701SLukasz Wojciechowski 
4162242e701SLukasz Wojciechowski 	int called;
4172242e701SLukasz Wojciechowski 	int failed;
4182242e701SLukasz Wojciechowski } mock_capabilities_get_exp = {NULL, NULL, 0, 0};
4192242e701SLukasz Wojciechowski 
4202242e701SLukasz Wojciechowski static const struct rte_security_capability *
mock_capabilities_get(void * device)4212242e701SLukasz Wojciechowski mock_capabilities_get(void *device)
4222242e701SLukasz Wojciechowski {
4232242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.called++;
4242242e701SLukasz Wojciechowski 
4252242e701SLukasz Wojciechowski 	MOCK_TEST_ASSERT_POINTER_PARAMETER(mock_capabilities_get_exp, device);
4262242e701SLukasz Wojciechowski 
4272242e701SLukasz Wojciechowski 	return mock_capabilities_get_exp.ret;
4282242e701SLukasz Wojciechowski }
4292242e701SLukasz Wojciechowski 
4302242e701SLukasz Wojciechowski /**
4314849e8e4SLukasz Wojciechowski  * empty_ops
4324849e8e4SLukasz Wojciechowski  *
4334849e8e4SLukasz Wojciechowski  * is an empty security operations set (all function pointers set to NULL)
4344849e8e4SLukasz Wojciechowski  */
4354849e8e4SLukasz Wojciechowski struct rte_security_ops empty_ops = { NULL };
4364849e8e4SLukasz Wojciechowski 
4374849e8e4SLukasz Wojciechowski /**
4384849e8e4SLukasz Wojciechowski  * mock_ops
4394849e8e4SLukasz Wojciechowski  *
4404849e8e4SLukasz Wojciechowski  * is a security operations set using mockup functions
4414849e8e4SLukasz Wojciechowski  */
4424849e8e4SLukasz Wojciechowski struct rte_security_ops mock_ops = {
4434849e8e4SLukasz Wojciechowski 	.session_create = mock_session_create,
4440b124e04SLukasz Wojciechowski 	.session_update = mock_session_update,
445226430f4SLukasz Wojciechowski 	.session_get_size = mock_session_get_size,
4461e1a0e49SLukasz Wojciechowski 	.session_stats_get = mock_session_stats_get,
4474849e8e4SLukasz Wojciechowski 	.session_destroy = mock_session_destroy,
448a9ff3522SLukasz Wojciechowski 	.set_pkt_metadata = mock_set_pkt_metadata,
4492242e701SLukasz Wojciechowski 	.capabilities_get = mock_capabilities_get,
4504849e8e4SLukasz Wojciechowski };
4514849e8e4SLukasz Wojciechowski 
4524849e8e4SLukasz Wojciechowski 
4534849e8e4SLukasz Wojciechowski /**
4544849e8e4SLukasz Wojciechowski  * Test suite and test cases setup and teardown functions.
4554849e8e4SLukasz Wojciechowski  */
4564849e8e4SLukasz Wojciechowski 
4574849e8e4SLukasz Wojciechowski /**
4584849e8e4SLukasz Wojciechowski  * struct security_testsuite_params defines parameters initialized once
4594849e8e4SLukasz Wojciechowski  * for whole tests suite.
4604849e8e4SLukasz Wojciechowski  * Currently the only stored parameter is session_mpool a mempool created
4614849e8e4SLukasz Wojciechowski  * once in testsuite_setup and released in testsuite_teardown.
4624849e8e4SLukasz Wojciechowski  * The instance of this structure is stored in testsuite_params variable.
4634849e8e4SLukasz Wojciechowski  */
4644849e8e4SLukasz Wojciechowski static struct security_testsuite_params {
4654849e8e4SLukasz Wojciechowski 	struct rte_mempool *session_mpool;
4664849e8e4SLukasz Wojciechowski } testsuite_params = { NULL };
4674849e8e4SLukasz Wojciechowski 
4684849e8e4SLukasz Wojciechowski /**
4694849e8e4SLukasz Wojciechowski  * struct security_unittest_params defines parameters initialized
4704849e8e4SLukasz Wojciechowski  * for every test case. The parameters are initialized in ut_setup
4710b124e04SLukasz Wojciechowski  * or ut_setup_with_session (depending on the testcase)
4724849e8e4SLukasz Wojciechowski  * and released in ut_teardown.
4734849e8e4SLukasz Wojciechowski  * The instance of this structure is stored in unittest_params variable.
4744849e8e4SLukasz Wojciechowski  */
4754849e8e4SLukasz Wojciechowski static struct security_unittest_params {
4764849e8e4SLukasz Wojciechowski 	struct rte_security_ctx ctx;
4774849e8e4SLukasz Wojciechowski 	struct rte_security_session_conf conf;
4782973dbf9SAkhil Goyal 	void *sess;
4794849e8e4SLukasz Wojciechowski } unittest_params = {
4804849e8e4SLukasz Wojciechowski 	.ctx = {
4814849e8e4SLukasz Wojciechowski 		.device = NULL,
4824849e8e4SLukasz Wojciechowski 		.ops = &mock_ops,
4834849e8e4SLukasz Wojciechowski 		.sess_cnt = 0,
4844849e8e4SLukasz Wojciechowski 	},
4854849e8e4SLukasz Wojciechowski 	.sess = NULL,
4864849e8e4SLukasz Wojciechowski };
4874849e8e4SLukasz Wojciechowski 
488e30b2833SAkhil Goyal #define SECURITY_TEST_MEMPOOL_NAME "SecurityTestMp"
489e30b2833SAkhil Goyal #define SECURITY_TEST_PRIV_MEMPOOL_NAME "SecurityTestPrivMp"
4904849e8e4SLukasz Wojciechowski #define SECURITY_TEST_MEMPOOL_SIZE 15
491e30b2833SAkhil Goyal #define SECURITY_TEST_SESSION_PRIV_OBJ_SZ 64
4923f3fc330SAkhil Goyal #define SECURITY_TEST_SESSION_OBJ_SZ (sizeof(struct rte_security_session) + \
4933f3fc330SAkhil Goyal 					SECURITY_TEST_SESSION_PRIV_OBJ_SZ)
4944849e8e4SLukasz Wojciechowski 
4954849e8e4SLukasz Wojciechowski /**
4964849e8e4SLukasz Wojciechowski  * testsuite_setup initializes whole test suite parameters.
4974849e8e4SLukasz Wojciechowski  * It creates a new mempool used in all test cases
4984849e8e4SLukasz Wojciechowski  * and verifies if it properly created.
4994849e8e4SLukasz Wojciechowski  */
5004849e8e4SLukasz Wojciechowski static int
testsuite_setup(void)5014849e8e4SLukasz Wojciechowski testsuite_setup(void)
5024849e8e4SLukasz Wojciechowski {
5034849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
5044849e8e4SLukasz Wojciechowski 	ts_params->session_mpool = rte_mempool_create(
5054849e8e4SLukasz Wojciechowski 			SECURITY_TEST_MEMPOOL_NAME,
5064849e8e4SLukasz Wojciechowski 			SECURITY_TEST_MEMPOOL_SIZE,
507e30b2833SAkhil Goyal 			SECURITY_TEST_SESSION_OBJ_SZ,
5084849e8e4SLukasz Wojciechowski 			0, 0, NULL, NULL, NULL, NULL,
5094849e8e4SLukasz Wojciechowski 			SOCKET_ID_ANY, 0);
5104849e8e4SLukasz Wojciechowski 	TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
5114849e8e4SLukasz Wojciechowski 			"Cannot create mempool %s\n", rte_strerror(rte_errno));
512e30b2833SAkhil Goyal 
5134849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
5144849e8e4SLukasz Wojciechowski }
5154849e8e4SLukasz Wojciechowski 
5164849e8e4SLukasz Wojciechowski /**
5174849e8e4SLukasz Wojciechowski  * testsuite_teardown releases test suite wide parameters.
5184849e8e4SLukasz Wojciechowski  */
5194849e8e4SLukasz Wojciechowski static void
testsuite_teardown(void)5204849e8e4SLukasz Wojciechowski testsuite_teardown(void)
5214849e8e4SLukasz Wojciechowski {
5224849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
5234849e8e4SLukasz Wojciechowski 	if (ts_params->session_mpool) {
5244849e8e4SLukasz Wojciechowski 		rte_mempool_free(ts_params->session_mpool);
5254849e8e4SLukasz Wojciechowski 		ts_params->session_mpool = NULL;
5264849e8e4SLukasz Wojciechowski 	}
5274849e8e4SLukasz Wojciechowski }
5284849e8e4SLukasz Wojciechowski 
5294849e8e4SLukasz Wojciechowski /**
5304849e8e4SLukasz Wojciechowski  * ut_setup initializes test case parameters to default values.
5314849e8e4SLukasz Wojciechowski  * It resets also any .called and .failed statistics of mockup functions
5324849e8e4SLukasz Wojciechowski  * usage.
5334849e8e4SLukasz Wojciechowski  */
5344849e8e4SLukasz Wojciechowski static int
ut_setup(void)5354849e8e4SLukasz Wojciechowski ut_setup(void)
5364849e8e4SLukasz Wojciechowski {
5374849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
5384849e8e4SLukasz Wojciechowski 	ut_params->ctx.device = NULL;
5394849e8e4SLukasz Wojciechowski 	ut_params->ctx.ops = &mock_ops;
5404849e8e4SLukasz Wojciechowski 	ut_params->ctx.sess_cnt = 0;
5414849e8e4SLukasz Wojciechowski 	ut_params->sess = NULL;
5424849e8e4SLukasz Wojciechowski 
5434849e8e4SLukasz Wojciechowski 	mock_session_create_exp.called = 0;
5440b124e04SLukasz Wojciechowski 	mock_session_update_exp.called = 0;
545226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.called = 0;
5461e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.called = 0;
5474849e8e4SLukasz Wojciechowski 	mock_session_destroy_exp.called = 0;
548a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.called = 0;
5492242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.called = 0;
5504849e8e4SLukasz Wojciechowski 
5514849e8e4SLukasz Wojciechowski 	mock_session_create_exp.failed = 0;
5520b124e04SLukasz Wojciechowski 	mock_session_update_exp.failed = 0;
553226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.failed = 0;
5541e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.failed = 0;
5554849e8e4SLukasz Wojciechowski 	mock_session_destroy_exp.failed = 0;
556a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.failed = 0;
5572242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.failed = 0;
5584849e8e4SLukasz Wojciechowski 
5594849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
5604849e8e4SLukasz Wojciechowski }
5614849e8e4SLukasz Wojciechowski 
5624849e8e4SLukasz Wojciechowski /**
5634849e8e4SLukasz Wojciechowski  * destroy_session_with_check is a helper function releasing session
5644849e8e4SLukasz Wojciechowski  * created with rte_security_session_create and stored in test case parameters.
5654849e8e4SLukasz Wojciechowski  * It's used both to release sessions created in test cases' bodies
5664849e8e4SLukasz Wojciechowski  * which are assigned to ut_params->sess
5670b124e04SLukasz Wojciechowski  * as well as sessions created in ut_setup_with_session.
5684849e8e4SLukasz Wojciechowski  */
5694849e8e4SLukasz Wojciechowski static int
destroy_session_with_check(void)5704849e8e4SLukasz Wojciechowski destroy_session_with_check(void)
5714849e8e4SLukasz Wojciechowski {
5724849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
5734849e8e4SLukasz Wojciechowski 	if (ut_params->sess != NULL) {
5744849e8e4SLukasz Wojciechowski 		/* Assure that mockup function for destroy operation is set. */
5754849e8e4SLukasz Wojciechowski 		ut_params->ctx.ops = &mock_ops;
5764849e8e4SLukasz Wojciechowski 
5774849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.device = NULL;
5784849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.sess = ut_params->sess;
5794849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.ret = 0;
5804849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.called = 0;
5814849e8e4SLukasz Wojciechowski 		mock_session_destroy_exp.failed = 0;
5824849e8e4SLukasz Wojciechowski 
5834849e8e4SLukasz Wojciechowski 		int ret = rte_security_session_destroy(&ut_params->ctx,
5844849e8e4SLukasz Wojciechowski 				ut_params->sess);
5854849e8e4SLukasz Wojciechowski 		TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
5864849e8e4SLukasz Wojciechowski 				ret, 0, "%d");
5874849e8e4SLukasz Wojciechowski 		TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
5884849e8e4SLukasz Wojciechowski 
5894849e8e4SLukasz Wojciechowski 		ut_params->sess = NULL;
5904849e8e4SLukasz Wojciechowski 	}
5914849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
5924849e8e4SLukasz Wojciechowski }
5934849e8e4SLukasz Wojciechowski 
5944849e8e4SLukasz Wojciechowski /**
5954849e8e4SLukasz Wojciechowski  * ut_teardown releases test case parameters.
5964849e8e4SLukasz Wojciechowski  */
5974849e8e4SLukasz Wojciechowski static void
ut_teardown(void)5984849e8e4SLukasz Wojciechowski ut_teardown(void)
5994849e8e4SLukasz Wojciechowski {
6004849e8e4SLukasz Wojciechowski 	destroy_session_with_check();
6014849e8e4SLukasz Wojciechowski }
6024849e8e4SLukasz Wojciechowski 
6030b124e04SLukasz Wojciechowski /**
6040b124e04SLukasz Wojciechowski  * ut_setup_with_session initializes test case parameters by
6050b124e04SLukasz Wojciechowski  * - calling standard ut_setup,
6060b124e04SLukasz Wojciechowski  * - creating a session that can be used in test case.
6070b124e04SLukasz Wojciechowski  */
6080b124e04SLukasz Wojciechowski static int
ut_setup_with_session(void)6090b124e04SLukasz Wojciechowski ut_setup_with_session(void)
6100b124e04SLukasz Wojciechowski {
6110b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
6120b124e04SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
6132973dbf9SAkhil Goyal 	void *sess;
6140b124e04SLukasz Wojciechowski 
6150b124e04SLukasz Wojciechowski 	int ret = ut_setup();
6160b124e04SLukasz Wojciechowski 	if (ret != TEST_SUCCESS)
6170b124e04SLukasz Wojciechowski 		return ret;
6180b124e04SLukasz Wojciechowski 
6190b124e04SLukasz Wojciechowski 	mock_session_create_exp.device = NULL;
6200b124e04SLukasz Wojciechowski 	mock_session_create_exp.conf = &ut_params->conf;
6210b124e04SLukasz Wojciechowski 	mock_session_create_exp.mp = ts_params->session_mpool;
6220b124e04SLukasz Wojciechowski 	mock_session_create_exp.ret = 0;
6230b124e04SLukasz Wojciechowski 
6240b124e04SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
6253f3fc330SAkhil Goyal 			ts_params->session_mpool);
6260b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(rte_security_session_create,
6270b124e04SLukasz Wojciechowski 			sess);
6280b124e04SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(sess, mock_session_create_exp.sess,
6290b124e04SLukasz Wojciechowski 			"Expecting session_create to be called with %p sess"
6300b124e04SLukasz Wojciechowski 			" parameter, but it's called %p sess parameter",
6310b124e04SLukasz Wojciechowski 			sess, mock_session_create_exp.sess);
6320b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
6330b124e04SLukasz Wojciechowski 
6340b124e04SLukasz Wojciechowski 	/*
6350b124e04SLukasz Wojciechowski 	 * Store created session in test case parameters, so it can be released
6360b124e04SLukasz Wojciechowski 	 * after test case in ut_teardown by destroy_session_with_check.
6370b124e04SLukasz Wojciechowski 	 */
6380b124e04SLukasz Wojciechowski 	ut_params->sess = sess;
6390b124e04SLukasz Wojciechowski 
6400b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
6410b124e04SLukasz Wojciechowski }
6420b124e04SLukasz Wojciechowski 
6434849e8e4SLukasz Wojciechowski 
6444849e8e4SLukasz Wojciechowski /**
6454849e8e4SLukasz Wojciechowski  * Test functions
6464849e8e4SLukasz Wojciechowski  *
6474849e8e4SLukasz Wojciechowski  * Each test function is related to a single test case.
6484849e8e4SLukasz Wojciechowski  * They are arranged by tested rte_security API function
6494849e8e4SLukasz Wojciechowski  * and by rte_security execution paths sequence in code.
6504849e8e4SLukasz Wojciechowski  */
6514849e8e4SLukasz Wojciechowski 
6524849e8e4SLukasz Wojciechowski /**
6534849e8e4SLukasz Wojciechowski  * rte_security_session_create tests
6544849e8e4SLukasz Wojciechowski  */
6554849e8e4SLukasz Wojciechowski 
6564849e8e4SLukasz Wojciechowski /**
6574849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create with NULL instance
6584849e8e4SLukasz Wojciechowski  */
6594849e8e4SLukasz Wojciechowski static int
test_session_create_inv_context(void)6604849e8e4SLukasz Wojciechowski test_session_create_inv_context(void)
6614849e8e4SLukasz Wojciechowski {
6624849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
6634849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
6642973dbf9SAkhil Goyal 	void *sess;
6654849e8e4SLukasz Wojciechowski 
6664849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(NULL, &ut_params->conf,
6673f3fc330SAkhil Goyal 			ts_params->session_mpool);
6684849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
6694849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
6704849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
6714849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
6724849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
6734849e8e4SLukasz Wojciechowski 
6744849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
6754849e8e4SLukasz Wojciechowski }
6764849e8e4SLukasz Wojciechowski 
6774849e8e4SLukasz Wojciechowski /**
6784849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create with invalid
6794849e8e4SLukasz Wojciechowski  * security operations structure (NULL)
6804849e8e4SLukasz Wojciechowski  */
6814849e8e4SLukasz Wojciechowski static int
test_session_create_inv_context_ops(void)6824849e8e4SLukasz Wojciechowski test_session_create_inv_context_ops(void)
6834849e8e4SLukasz Wojciechowski {
6844849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
6854849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
6862973dbf9SAkhil Goyal 	void *sess;
6874849e8e4SLukasz Wojciechowski 
6884849e8e4SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
6894849e8e4SLukasz Wojciechowski 
6904849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
6913f3fc330SAkhil Goyal 			ts_params->session_mpool);
6924849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
6934849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
6944849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
6954849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
6964849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
6974849e8e4SLukasz Wojciechowski 
6984849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
6994849e8e4SLukasz Wojciechowski }
7004849e8e4SLukasz Wojciechowski 
7014849e8e4SLukasz Wojciechowski /**
7024849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create with empty
7034849e8e4SLukasz Wojciechowski  * security operations
7044849e8e4SLukasz Wojciechowski  */
7054849e8e4SLukasz Wojciechowski static int
test_session_create_inv_context_ops_fun(void)7064849e8e4SLukasz Wojciechowski test_session_create_inv_context_ops_fun(void)
7074849e8e4SLukasz Wojciechowski {
7084849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
7094849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
7102973dbf9SAkhil Goyal 	void *sess;
7114849e8e4SLukasz Wojciechowski 
7124849e8e4SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
7134849e8e4SLukasz Wojciechowski 
7144849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
7153f3fc330SAkhil Goyal 			ts_params->session_mpool);
7164849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
7174849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
7184849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
7194849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
7204849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
7214849e8e4SLukasz Wojciechowski 
7224849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
7234849e8e4SLukasz Wojciechowski }
7244849e8e4SLukasz Wojciechowski 
7254849e8e4SLukasz Wojciechowski /**
7264849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create with NULL conf parameter
7274849e8e4SLukasz Wojciechowski  */
7284849e8e4SLukasz Wojciechowski static int
test_session_create_inv_configuration(void)7294849e8e4SLukasz Wojciechowski test_session_create_inv_configuration(void)
7304849e8e4SLukasz Wojciechowski {
7314849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
7324849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
7332973dbf9SAkhil Goyal 	void *sess;
7344849e8e4SLukasz Wojciechowski 
7354849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, NULL,
7363f3fc330SAkhil Goyal 			ts_params->session_mpool);
7374849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
7384849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
7394849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
7404849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
7414849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
7424849e8e4SLukasz Wojciechowski 
7434849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
7444849e8e4SLukasz Wojciechowski }
7454849e8e4SLukasz Wojciechowski 
7464849e8e4SLukasz Wojciechowski /**
747e30b2833SAkhil Goyal  * Test execution of rte_security_session_create with NULL session
748e30b2833SAkhil Goyal  * mempool
7494849e8e4SLukasz Wojciechowski  */
7504849e8e4SLukasz Wojciechowski static int
test_session_create_inv_mempool(void)7514849e8e4SLukasz Wojciechowski test_session_create_inv_mempool(void)
7524849e8e4SLukasz Wojciechowski {
7534849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
7542973dbf9SAkhil Goyal 	void *sess;
7554849e8e4SLukasz Wojciechowski 
7563f3fc330SAkhil Goyal 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf, NULL);
7574849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
7584849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
7594849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 0);
7604849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
7614849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
7624849e8e4SLukasz Wojciechowski 
7634849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
7644849e8e4SLukasz Wojciechowski }
7654849e8e4SLukasz Wojciechowski 
7664849e8e4SLukasz Wojciechowski /**
7674849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create in case when mempool
7684849e8e4SLukasz Wojciechowski  * is fully used and no object can be got from it
7694849e8e4SLukasz Wojciechowski  */
7704849e8e4SLukasz Wojciechowski static int
test_session_create_mempool_empty(void)7714849e8e4SLukasz Wojciechowski test_session_create_mempool_empty(void)
7724849e8e4SLukasz Wojciechowski {
7734849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
7744849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
7752973dbf9SAkhil Goyal 	void *tmp[SECURITY_TEST_MEMPOOL_SIZE];
7762973dbf9SAkhil Goyal 	void *sess;
7774849e8e4SLukasz Wojciechowski 
7784849e8e4SLukasz Wojciechowski 	/* Get all available objects from mempool. */
7794849e8e4SLukasz Wojciechowski 	int i, ret;
7804849e8e4SLukasz Wojciechowski 	for (i = 0; i < SECURITY_TEST_MEMPOOL_SIZE; ++i) {
7814849e8e4SLukasz Wojciechowski 		ret = rte_mempool_get(ts_params->session_mpool,
7824849e8e4SLukasz Wojciechowski 				(void **)(&tmp[i]));
7834849e8e4SLukasz Wojciechowski 		TEST_ASSERT_EQUAL(0, ret,
7844849e8e4SLukasz Wojciechowski 				"Expect getting %d object from mempool"
7854849e8e4SLukasz Wojciechowski 				" to succeed", i);
7864849e8e4SLukasz Wojciechowski 	}
7874849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(SECURITY_TEST_MEMPOOL_SIZE);
7884849e8e4SLukasz Wojciechowski 
7894849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
7903f3fc330SAkhil Goyal 			ts_params->session_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(SECURITY_TEST_MEMPOOL_SIZE);
7954849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
7964849e8e4SLukasz Wojciechowski 
7974849e8e4SLukasz Wojciechowski 	/* Put objects back to the pool. */
798e30b2833SAkhil Goyal 	for (i = 0; i < SECURITY_TEST_MEMPOOL_SIZE; ++i) {
799e30b2833SAkhil Goyal 		rte_mempool_put(ts_params->session_mpool,
800e30b2833SAkhil Goyal 				(void *)(tmp[i]));
801e30b2833SAkhil Goyal 	}
8024849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
8034849e8e4SLukasz Wojciechowski 
8044849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
8054849e8e4SLukasz Wojciechowski }
8064849e8e4SLukasz Wojciechowski 
8074849e8e4SLukasz Wojciechowski /**
8084849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create when session_create
8094849e8e4SLukasz Wojciechowski  * security operation fails
8104849e8e4SLukasz Wojciechowski  */
8114849e8e4SLukasz Wojciechowski static int
test_session_create_ops_failure(void)8124849e8e4SLukasz Wojciechowski test_session_create_ops_failure(void)
8134849e8e4SLukasz Wojciechowski {
8144849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
8154849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
8162973dbf9SAkhil Goyal 	void *sess;
8174849e8e4SLukasz Wojciechowski 
8184849e8e4SLukasz Wojciechowski 	mock_session_create_exp.device = NULL;
8194849e8e4SLukasz Wojciechowski 	mock_session_create_exp.conf = &ut_params->conf;
8204849e8e4SLukasz Wojciechowski 	mock_session_create_exp.mp = ts_params->session_mpool;
8214849e8e4SLukasz Wojciechowski 	mock_session_create_exp.ret = -1;	/* Return failure status. */
8224849e8e4SLukasz Wojciechowski 
8234849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
8243f3fc330SAkhil Goyal 			ts_params->session_mpool);
8254849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_create,
8264849e8e4SLukasz Wojciechowski 			sess, NULL, "%p");
8274849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
8284849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
8294849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
8304849e8e4SLukasz Wojciechowski 
8314849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
8324849e8e4SLukasz Wojciechowski }
8334849e8e4SLukasz Wojciechowski 
8344849e8e4SLukasz Wojciechowski /**
8354849e8e4SLukasz Wojciechowski  * Test execution of rte_security_session_create in successful execution path
8364849e8e4SLukasz Wojciechowski  */
8374849e8e4SLukasz Wojciechowski static int
test_session_create_success(void)8384849e8e4SLukasz Wojciechowski test_session_create_success(void)
8394849e8e4SLukasz Wojciechowski {
8404849e8e4SLukasz Wojciechowski 	struct security_testsuite_params *ts_params = &testsuite_params;
8414849e8e4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
8422973dbf9SAkhil Goyal 	void *sess;
8434849e8e4SLukasz Wojciechowski 
8444849e8e4SLukasz Wojciechowski 	mock_session_create_exp.device = NULL;
8454849e8e4SLukasz Wojciechowski 	mock_session_create_exp.conf = &ut_params->conf;
8464849e8e4SLukasz Wojciechowski 	mock_session_create_exp.mp = ts_params->session_mpool;
8474849e8e4SLukasz Wojciechowski 	mock_session_create_exp.ret = 0;	/* Return success status. */
8484849e8e4SLukasz Wojciechowski 
8494849e8e4SLukasz Wojciechowski 	sess = rte_security_session_create(&ut_params->ctx, &ut_params->conf,
8503f3fc330SAkhil Goyal 			ts_params->session_mpool);
8514849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_NOT_NULL(rte_security_session_create,
8524849e8e4SLukasz Wojciechowski 			sess);
8534849e8e4SLukasz Wojciechowski 	TEST_ASSERT_EQUAL(sess, mock_session_create_exp.sess,
8544849e8e4SLukasz Wojciechowski 			"Expecting session_create to be called with %p sess"
8554849e8e4SLukasz Wojciechowski 			" parameter, but it's called %p sess parameter",
8564849e8e4SLukasz Wojciechowski 			sess, mock_session_create_exp.sess);
8574849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_create_exp, 1);
8584849e8e4SLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
8594849e8e4SLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
8604849e8e4SLukasz Wojciechowski 
8614849e8e4SLukasz Wojciechowski 	/*
8624849e8e4SLukasz Wojciechowski 	 * Store created session in test case parameters, so it can be released
8634849e8e4SLukasz Wojciechowski 	 * after test case in ut_teardown by destroy_session_with_check.
8644849e8e4SLukasz Wojciechowski 	 */
8654849e8e4SLukasz Wojciechowski 	ut_params->sess = sess;
8664849e8e4SLukasz Wojciechowski 
8674849e8e4SLukasz Wojciechowski 	return TEST_SUCCESS;
8684849e8e4SLukasz Wojciechowski }
8694849e8e4SLukasz Wojciechowski 
8704849e8e4SLukasz Wojciechowski 
8714849e8e4SLukasz Wojciechowski /**
8720b124e04SLukasz Wojciechowski  * rte_security_session_update tests
8730b124e04SLukasz Wojciechowski  */
8740b124e04SLukasz Wojciechowski 
8750b124e04SLukasz Wojciechowski /**
8760b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with NULL instance
8770b124e04SLukasz Wojciechowski  */
8780b124e04SLukasz Wojciechowski static int
test_session_update_inv_context(void)8790b124e04SLukasz Wojciechowski test_session_update_inv_context(void)
8800b124e04SLukasz Wojciechowski {
8810b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
8820b124e04SLukasz Wojciechowski 
8830b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(NULL, ut_params->sess,
8840b124e04SLukasz Wojciechowski 			&ut_params->conf);
8850b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
8860b124e04SLukasz Wojciechowski 			ret, -EINVAL, "%d");
8870b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
8880b124e04SLukasz Wojciechowski 
8890b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
8900b124e04SLukasz Wojciechowski }
8910b124e04SLukasz Wojciechowski 
8920b124e04SLukasz Wojciechowski /**
8930b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with invalid
8940b124e04SLukasz Wojciechowski  * security operations structure (NULL)
8950b124e04SLukasz Wojciechowski  */
8960b124e04SLukasz Wojciechowski static int
test_session_update_inv_context_ops(void)8970b124e04SLukasz Wojciechowski test_session_update_inv_context_ops(void)
8980b124e04SLukasz Wojciechowski {
8990b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9000b124e04SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
9010b124e04SLukasz Wojciechowski 
9020b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
9030b124e04SLukasz Wojciechowski 			&ut_params->conf);
9040b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
9050b124e04SLukasz Wojciechowski 			ret, -EINVAL, "%d");
9060b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
9070b124e04SLukasz Wojciechowski 
9080b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
9090b124e04SLukasz Wojciechowski }
9100b124e04SLukasz Wojciechowski 
9110b124e04SLukasz Wojciechowski /**
9120b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with empty
9130b124e04SLukasz Wojciechowski  * security operations
9140b124e04SLukasz Wojciechowski  */
9150b124e04SLukasz Wojciechowski static int
test_session_update_inv_context_ops_fun(void)9160b124e04SLukasz Wojciechowski test_session_update_inv_context_ops_fun(void)
9170b124e04SLukasz Wojciechowski {
9180b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9190b124e04SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
9200b124e04SLukasz Wojciechowski 
9210b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
9220b124e04SLukasz Wojciechowski 			&ut_params->conf);
9230b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
9240b124e04SLukasz Wojciechowski 			ret, -ENOTSUP, "%d");
9250b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
9260b124e04SLukasz Wojciechowski 
9270b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
9280b124e04SLukasz Wojciechowski }
9290b124e04SLukasz Wojciechowski 
9300b124e04SLukasz Wojciechowski /**
9310b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with NULL conf parameter
9320b124e04SLukasz Wojciechowski  */
9330b124e04SLukasz Wojciechowski static int
test_session_update_inv_configuration(void)9340b124e04SLukasz Wojciechowski test_session_update_inv_configuration(void)
9350b124e04SLukasz Wojciechowski {
9360b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9370b124e04SLukasz Wojciechowski 
9380b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
9390b124e04SLukasz Wojciechowski 			NULL);
9400b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
9410b124e04SLukasz Wojciechowski 			ret, -EINVAL, "%d");
9420b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
9430b124e04SLukasz Wojciechowski 
9440b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
9450b124e04SLukasz Wojciechowski }
9460b124e04SLukasz Wojciechowski 
9470b124e04SLukasz Wojciechowski /**
9480b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update with NULL sess parameter
9490b124e04SLukasz Wojciechowski  */
9500b124e04SLukasz Wojciechowski static int
test_session_update_inv_session(void)9510b124e04SLukasz Wojciechowski test_session_update_inv_session(void)
9520b124e04SLukasz Wojciechowski {
9530b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9540b124e04SLukasz Wojciechowski 
9550b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, NULL,
9560b124e04SLukasz Wojciechowski 			&ut_params->conf);
9570b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
9580b124e04SLukasz Wojciechowski 			ret, -EINVAL, "%d");
9590b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 0);
9600b124e04SLukasz Wojciechowski 
9610b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
9620b124e04SLukasz Wojciechowski }
9630b124e04SLukasz Wojciechowski 
9640b124e04SLukasz Wojciechowski /**
9650b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update when session_update
9660b124e04SLukasz Wojciechowski  * security operation fails
9670b124e04SLukasz Wojciechowski  */
9680b124e04SLukasz Wojciechowski static int
test_session_update_ops_failure(void)9690b124e04SLukasz Wojciechowski test_session_update_ops_failure(void)
9700b124e04SLukasz Wojciechowski {
9710b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9720b124e04SLukasz Wojciechowski 
9730b124e04SLukasz Wojciechowski 	mock_session_update_exp.device = NULL;
9740b124e04SLukasz Wojciechowski 	mock_session_update_exp.sess = ut_params->sess;
9750b124e04SLukasz Wojciechowski 	mock_session_update_exp.conf = &ut_params->conf;
9760b124e04SLukasz Wojciechowski 	mock_session_update_exp.ret = -1;	/* Return failure status. */
9770b124e04SLukasz Wojciechowski 
9780b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
9790b124e04SLukasz Wojciechowski 			&ut_params->conf);
9800b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
9810b124e04SLukasz Wojciechowski 			ret, -1, "%d");
9820b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 1);
9830b124e04SLukasz Wojciechowski 
9840b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
9850b124e04SLukasz Wojciechowski }
9860b124e04SLukasz Wojciechowski 
9870b124e04SLukasz Wojciechowski /**
9880b124e04SLukasz Wojciechowski  * Test execution of rte_security_session_update in successful execution path
9890b124e04SLukasz Wojciechowski  */
9900b124e04SLukasz Wojciechowski static int
test_session_update_success(void)9910b124e04SLukasz Wojciechowski test_session_update_success(void)
9920b124e04SLukasz Wojciechowski {
9930b124e04SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
9940b124e04SLukasz Wojciechowski 
9950b124e04SLukasz Wojciechowski 	mock_session_update_exp.device = NULL;
9960b124e04SLukasz Wojciechowski 	mock_session_update_exp.sess = ut_params->sess;
9970b124e04SLukasz Wojciechowski 	mock_session_update_exp.conf = &ut_params->conf;
9980b124e04SLukasz Wojciechowski 	mock_session_update_exp.ret = 0;	/* Return success status. */
9990b124e04SLukasz Wojciechowski 
10000b124e04SLukasz Wojciechowski 	int ret = rte_security_session_update(&ut_params->ctx, ut_params->sess,
10010b124e04SLukasz Wojciechowski 			&ut_params->conf);
10020b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_update,
10030b124e04SLukasz Wojciechowski 			ret, 0, "%d");
10040b124e04SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_update_exp, 1);
10050b124e04SLukasz Wojciechowski 
10060b124e04SLukasz Wojciechowski 	return TEST_SUCCESS;
10070b124e04SLukasz Wojciechowski }
10080b124e04SLukasz Wojciechowski 
10090b124e04SLukasz Wojciechowski 
10100b124e04SLukasz Wojciechowski /**
1011226430f4SLukasz Wojciechowski  * rte_security_session_get_size tests
1012226430f4SLukasz Wojciechowski  */
1013226430f4SLukasz Wojciechowski 
1014226430f4SLukasz Wojciechowski /**
1015226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size with NULL instance
1016226430f4SLukasz Wojciechowski  */
1017226430f4SLukasz Wojciechowski static int
test_session_get_size_inv_context(void)1018226430f4SLukasz Wojciechowski test_session_get_size_inv_context(void)
1019226430f4SLukasz Wojciechowski {
1020226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(NULL);
1021226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1022226430f4SLukasz Wojciechowski 			ret, 0, "%u");
10233f3fc330SAkhil Goyal 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
1024226430f4SLukasz Wojciechowski 
1025226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1026226430f4SLukasz Wojciechowski }
1027226430f4SLukasz Wojciechowski 
1028226430f4SLukasz Wojciechowski /**
1029226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size with invalid
1030226430f4SLukasz Wojciechowski  * security operations structure (NULL)
1031226430f4SLukasz Wojciechowski  */
1032226430f4SLukasz Wojciechowski static int
test_session_get_size_inv_context_ops(void)1033226430f4SLukasz Wojciechowski test_session_get_size_inv_context_ops(void)
1034226430f4SLukasz Wojciechowski {
1035226430f4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1036226430f4SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
1037226430f4SLukasz Wojciechowski 
1038226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1039226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1040226430f4SLukasz Wojciechowski 			ret, 0, "%u");
10413f3fc330SAkhil Goyal 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
1042226430f4SLukasz Wojciechowski 
1043226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1044226430f4SLukasz Wojciechowski }
1045226430f4SLukasz Wojciechowski 
1046226430f4SLukasz Wojciechowski /**
1047226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size with empty
1048226430f4SLukasz Wojciechowski  * security operations
1049226430f4SLukasz Wojciechowski  */
1050226430f4SLukasz Wojciechowski static int
test_session_get_size_inv_context_ops_fun(void)1051226430f4SLukasz Wojciechowski test_session_get_size_inv_context_ops_fun(void)
1052226430f4SLukasz Wojciechowski {
1053226430f4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1054226430f4SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
1055226430f4SLukasz Wojciechowski 
1056226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1057226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
1058226430f4SLukasz Wojciechowski 			ret, 0, "%u");
10593f3fc330SAkhil Goyal 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 1);
1060226430f4SLukasz Wojciechowski 
1061226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1062226430f4SLukasz Wojciechowski }
1063226430f4SLukasz Wojciechowski 
1064226430f4SLukasz Wojciechowski /**
1065226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size when session_get_size
1066226430f4SLukasz Wojciechowski  * security operation fails
1067226430f4SLukasz Wojciechowski  */
1068226430f4SLukasz Wojciechowski static int
test_session_get_size_ops_failure(void)1069226430f4SLukasz Wojciechowski test_session_get_size_ops_failure(void)
1070226430f4SLukasz Wojciechowski {
1071226430f4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1072226430f4SLukasz Wojciechowski 
1073226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.device = NULL;
1074226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.ret = 0;
1075226430f4SLukasz Wojciechowski 
1076226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1077226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
10783f3fc330SAkhil Goyal 			ret, 64, "%u");
10793f3fc330SAkhil Goyal 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 2);
1080226430f4SLukasz Wojciechowski 
1081226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1082226430f4SLukasz Wojciechowski }
1083226430f4SLukasz Wojciechowski 
1084226430f4SLukasz Wojciechowski /**
1085226430f4SLukasz Wojciechowski  * Test execution of rte_security_session_get_size in successful execution path
1086226430f4SLukasz Wojciechowski  */
1087226430f4SLukasz Wojciechowski static int
test_session_get_size_success(void)1088226430f4SLukasz Wojciechowski test_session_get_size_success(void)
1089226430f4SLukasz Wojciechowski {
1090226430f4SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1091226430f4SLukasz Wojciechowski 
1092226430f4SLukasz Wojciechowski 	mock_session_get_size_exp.device = NULL;
10933f3fc330SAkhil Goyal 	mock_session_get_size_exp.ret = 64;
1094226430f4SLukasz Wojciechowski 
1095226430f4SLukasz Wojciechowski 	unsigned int ret = rte_security_session_get_size(&ut_params->ctx);
1096226430f4SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_get_size,
10973f3fc330SAkhil Goyal 			ret, 128U, "%u");
10983f3fc330SAkhil Goyal 	TEST_ASSERT_MOCK_CALLS(mock_session_get_size_exp, 2);
1099226430f4SLukasz Wojciechowski 
1100226430f4SLukasz Wojciechowski 	return TEST_SUCCESS;
1101226430f4SLukasz Wojciechowski }
1102226430f4SLukasz Wojciechowski 
1103226430f4SLukasz Wojciechowski 
1104226430f4SLukasz Wojciechowski /**
11051e1a0e49SLukasz Wojciechowski  * rte_security_session_stats_get tests
11061e1a0e49SLukasz Wojciechowski  */
11071e1a0e49SLukasz Wojciechowski 
11081e1a0e49SLukasz Wojciechowski /**
11091e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get with NULL instance
11101e1a0e49SLukasz Wojciechowski  */
11111e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_inv_context(void)11121e1a0e49SLukasz Wojciechowski test_session_stats_get_inv_context(void)
11131e1a0e49SLukasz Wojciechowski {
11141e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
11151e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
11161e1a0e49SLukasz Wojciechowski 
11171e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(NULL, ut_params->sess, &stats);
11181e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
11191e1a0e49SLukasz Wojciechowski 			ret, -EINVAL, "%d");
11201e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
11211e1a0e49SLukasz Wojciechowski 
11221e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
11231e1a0e49SLukasz Wojciechowski }
11241e1a0e49SLukasz Wojciechowski 
11251e1a0e49SLukasz Wojciechowski /**
11261e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get with invalid
11271e1a0e49SLukasz Wojciechowski  * security operations structure (NULL)
11281e1a0e49SLukasz Wojciechowski  */
11291e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_inv_context_ops(void)11301e1a0e49SLukasz Wojciechowski test_session_stats_get_inv_context_ops(void)
11311e1a0e49SLukasz Wojciechowski {
11321e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
11331e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
11341e1a0e49SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
11351e1a0e49SLukasz Wojciechowski 
11361e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
11371e1a0e49SLukasz Wojciechowski 			ut_params->sess, &stats);
11381e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
11391e1a0e49SLukasz Wojciechowski 			ret, -EINVAL, "%d");
11401e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
11411e1a0e49SLukasz Wojciechowski 
11421e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
11431e1a0e49SLukasz Wojciechowski }
11441e1a0e49SLukasz Wojciechowski 
11451e1a0e49SLukasz Wojciechowski /**
11461e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get with empty
11471e1a0e49SLukasz Wojciechowski  * security operations
11481e1a0e49SLukasz Wojciechowski  */
11491e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_inv_context_ops_fun(void)11501e1a0e49SLukasz Wojciechowski test_session_stats_get_inv_context_ops_fun(void)
11511e1a0e49SLukasz Wojciechowski {
11521e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
11531e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
11541e1a0e49SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
11551e1a0e49SLukasz Wojciechowski 
11561e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
11571e1a0e49SLukasz Wojciechowski 			ut_params->sess, &stats);
11581e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
11591e1a0e49SLukasz Wojciechowski 			ret, -ENOTSUP, "%d");
11601e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
11611e1a0e49SLukasz Wojciechowski 
11621e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
11631e1a0e49SLukasz Wojciechowski }
11641e1a0e49SLukasz Wojciechowski 
11651e1a0e49SLukasz Wojciechowski /**
11661e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get with NULL stats parameter
11671e1a0e49SLukasz Wojciechowski  */
11681e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_inv_stats(void)11691e1a0e49SLukasz Wojciechowski test_session_stats_get_inv_stats(void)
11701e1a0e49SLukasz Wojciechowski {
11711e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
11721e1a0e49SLukasz Wojciechowski 
11731e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
11741e1a0e49SLukasz Wojciechowski 			ut_params->sess, NULL);
11751e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
11761e1a0e49SLukasz Wojciechowski 			ret, -EINVAL, "%d");
11771e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 0);
11781e1a0e49SLukasz Wojciechowski 
11791e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
11801e1a0e49SLukasz Wojciechowski }
11811e1a0e49SLukasz Wojciechowski 
11821e1a0e49SLukasz Wojciechowski /**
11831e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get when session_stats_get
11841e1a0e49SLukasz Wojciechowski  * security operation fails
11851e1a0e49SLukasz Wojciechowski  */
11861e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_ops_failure(void)11871e1a0e49SLukasz Wojciechowski test_session_stats_get_ops_failure(void)
11881e1a0e49SLukasz Wojciechowski {
11891e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
11901e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
11911e1a0e49SLukasz Wojciechowski 
11921e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.device = NULL;
11931e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.sess = ut_params->sess;
11941e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.stats = &stats;
11951e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.ret = -1;
11961e1a0e49SLukasz Wojciechowski 
11971e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
11981e1a0e49SLukasz Wojciechowski 			ut_params->sess, &stats);
11991e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
12001e1a0e49SLukasz Wojciechowski 			ret, -1, "%d");
12011e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 1);
12021e1a0e49SLukasz Wojciechowski 
12031e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
12041e1a0e49SLukasz Wojciechowski }
12051e1a0e49SLukasz Wojciechowski 
12061e1a0e49SLukasz Wojciechowski /**
12071e1a0e49SLukasz Wojciechowski  * Test execution of rte_security_session_stats_get in successful execution
12081e1a0e49SLukasz Wojciechowski  * path
12091e1a0e49SLukasz Wojciechowski  */
12101e1a0e49SLukasz Wojciechowski static int
test_session_stats_get_success(void)12111e1a0e49SLukasz Wojciechowski test_session_stats_get_success(void)
12121e1a0e49SLukasz Wojciechowski {
12131e1a0e49SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
12141e1a0e49SLukasz Wojciechowski 	struct rte_security_stats stats;
12151e1a0e49SLukasz Wojciechowski 
12161e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.device = NULL;
12171e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.sess = ut_params->sess;
12181e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.stats = &stats;
12191e1a0e49SLukasz Wojciechowski 	mock_session_stats_get_exp.ret = 0;
12201e1a0e49SLukasz Wojciechowski 
12211e1a0e49SLukasz Wojciechowski 	int ret = rte_security_session_stats_get(&ut_params->ctx,
12221e1a0e49SLukasz Wojciechowski 			ut_params->sess, &stats);
12231e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_stats_get,
12241e1a0e49SLukasz Wojciechowski 			ret, 0, "%d");
12251e1a0e49SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_stats_get_exp, 1);
12261e1a0e49SLukasz Wojciechowski 
12271e1a0e49SLukasz Wojciechowski 	return TEST_SUCCESS;
12281e1a0e49SLukasz Wojciechowski }
12291e1a0e49SLukasz Wojciechowski 
12301e1a0e49SLukasz Wojciechowski 
12311e1a0e49SLukasz Wojciechowski /**
123204631dafSLukasz Wojciechowski  * rte_security_session_destroy tests
123304631dafSLukasz Wojciechowski  */
123404631dafSLukasz Wojciechowski 
123504631dafSLukasz Wojciechowski /**
123604631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy with NULL instance
123704631dafSLukasz Wojciechowski  */
123804631dafSLukasz Wojciechowski static int
test_session_destroy_inv_context(void)123904631dafSLukasz Wojciechowski test_session_destroy_inv_context(void)
124004631dafSLukasz Wojciechowski {
124104631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
124204631dafSLukasz Wojciechowski 
124304631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
124404631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
124504631dafSLukasz Wojciechowski 
124604631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(NULL, ut_params->sess);
124704631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
124804631dafSLukasz Wojciechowski 			ret, -EINVAL, "%d");
124904631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
125004631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
125104631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
125204631dafSLukasz Wojciechowski 
125304631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
125404631dafSLukasz Wojciechowski }
125504631dafSLukasz Wojciechowski 
125604631dafSLukasz Wojciechowski /**
125704631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy with invalid
125804631dafSLukasz Wojciechowski  * security operations structure (NULL)
125904631dafSLukasz Wojciechowski  */
126004631dafSLukasz Wojciechowski static int
test_session_destroy_inv_context_ops(void)126104631dafSLukasz Wojciechowski test_session_destroy_inv_context_ops(void)
126204631dafSLukasz Wojciechowski {
126304631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
126404631dafSLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
126504631dafSLukasz Wojciechowski 
126604631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
126704631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
126804631dafSLukasz Wojciechowski 
126904631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx,
127004631dafSLukasz Wojciechowski 			ut_params->sess);
127104631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
127204631dafSLukasz Wojciechowski 			ret, -EINVAL, "%d");
127304631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
127404631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
127504631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
127604631dafSLukasz Wojciechowski 
127704631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
127804631dafSLukasz Wojciechowski }
127904631dafSLukasz Wojciechowski 
128004631dafSLukasz Wojciechowski /**
128104631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy with empty
128204631dafSLukasz Wojciechowski  * security operations
128304631dafSLukasz Wojciechowski  */
128404631dafSLukasz Wojciechowski static int
test_session_destroy_inv_context_ops_fun(void)128504631dafSLukasz Wojciechowski test_session_destroy_inv_context_ops_fun(void)
128604631dafSLukasz Wojciechowski {
128704631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
128804631dafSLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
128904631dafSLukasz Wojciechowski 
129004631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
129104631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
129204631dafSLukasz Wojciechowski 
129304631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx,
129404631dafSLukasz Wojciechowski 			ut_params->sess);
129504631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
129604631dafSLukasz Wojciechowski 			ret, -ENOTSUP, "%d");
129704631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
129804631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
129904631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
130004631dafSLukasz Wojciechowski 
130104631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
130204631dafSLukasz Wojciechowski }
130304631dafSLukasz Wojciechowski 
130404631dafSLukasz Wojciechowski /**
130504631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy with NULL sess parameter
130604631dafSLukasz Wojciechowski  */
130704631dafSLukasz Wojciechowski static int
test_session_destroy_inv_session(void)130804631dafSLukasz Wojciechowski test_session_destroy_inv_session(void)
130904631dafSLukasz Wojciechowski {
131004631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
131104631dafSLukasz Wojciechowski 
131204631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
131304631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
131404631dafSLukasz Wojciechowski 
131504631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx, NULL);
131604631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
131704631dafSLukasz Wojciechowski 			ret, -EINVAL, "%d");
131804631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 0);
131904631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
132004631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
132104631dafSLukasz Wojciechowski 
132204631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
132304631dafSLukasz Wojciechowski }
132404631dafSLukasz Wojciechowski 
132504631dafSLukasz Wojciechowski /**
132604631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy when session_destroy
132704631dafSLukasz Wojciechowski  * security operation fails
132804631dafSLukasz Wojciechowski  */
132904631dafSLukasz Wojciechowski static int
test_session_destroy_ops_failure(void)133004631dafSLukasz Wojciechowski test_session_destroy_ops_failure(void)
133104631dafSLukasz Wojciechowski {
133204631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
133304631dafSLukasz Wojciechowski 
133404631dafSLukasz Wojciechowski 	mock_session_destroy_exp.device = NULL;
133504631dafSLukasz Wojciechowski 	mock_session_destroy_exp.sess = ut_params->sess;
133604631dafSLukasz Wojciechowski 	mock_session_destroy_exp.ret = -1;
133704631dafSLukasz Wojciechowski 
133804631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
133904631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
134004631dafSLukasz Wojciechowski 
134104631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx,
134204631dafSLukasz Wojciechowski 			ut_params->sess);
134304631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
134404631dafSLukasz Wojciechowski 			ret, -1, "%d");
134504631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
134604631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
134704631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
134804631dafSLukasz Wojciechowski 
134904631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
135004631dafSLukasz Wojciechowski }
135104631dafSLukasz Wojciechowski 
135204631dafSLukasz Wojciechowski /**
135304631dafSLukasz Wojciechowski  * Test execution of rte_security_session_destroy in successful execution path
135404631dafSLukasz Wojciechowski  */
135504631dafSLukasz Wojciechowski static int
test_session_destroy_success(void)135604631dafSLukasz Wojciechowski test_session_destroy_success(void)
135704631dafSLukasz Wojciechowski {
135804631dafSLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
135904631dafSLukasz Wojciechowski 
136004631dafSLukasz Wojciechowski 	mock_session_destroy_exp.device = NULL;
136104631dafSLukasz Wojciechowski 	mock_session_destroy_exp.sess = ut_params->sess;
136204631dafSLukasz Wojciechowski 	mock_session_destroy_exp.ret = 0;
136304631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(1);
136404631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(1);
136504631dafSLukasz Wojciechowski 
136604631dafSLukasz Wojciechowski 	int ret = rte_security_session_destroy(&ut_params->ctx,
136704631dafSLukasz Wojciechowski 			ut_params->sess);
136804631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_session_destroy,
136904631dafSLukasz Wojciechowski 			ret, 0, "%d");
137004631dafSLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_session_destroy_exp, 1);
137104631dafSLukasz Wojciechowski 	TEST_ASSERT_MEMPOOL_USAGE(0);
137204631dafSLukasz Wojciechowski 	TEST_ASSERT_SESSION_COUNT(0);
137304631dafSLukasz Wojciechowski 
137404631dafSLukasz Wojciechowski 	/*
137504631dafSLukasz Wojciechowski 	 * Remove session from test case parameters, so it won't be destroyed
137604631dafSLukasz Wojciechowski 	 * during test case teardown.
137704631dafSLukasz Wojciechowski 	 */
137804631dafSLukasz Wojciechowski 	ut_params->sess = NULL;
137904631dafSLukasz Wojciechowski 
138004631dafSLukasz Wojciechowski 	return TEST_SUCCESS;
138104631dafSLukasz Wojciechowski }
138204631dafSLukasz Wojciechowski 
138304631dafSLukasz Wojciechowski 
138404631dafSLukasz Wojciechowski /**
1385a9ff3522SLukasz Wojciechowski  * rte_security_set_pkt_metadata tests
1386a9ff3522SLukasz Wojciechowski  */
1387a9ff3522SLukasz Wojciechowski 
1388a9ff3522SLukasz Wojciechowski /**
1389a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata with NULL instance
1390a9ff3522SLukasz Wojciechowski  */
1391a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_inv_context(void)1392a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_inv_context(void)
1393a9ff3522SLukasz Wojciechowski {
1394a9ff3522SLukasz Wojciechowski #ifdef RTE_DEBUG
1395a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1396a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1397a9ff3522SLukasz Wojciechowski 	int params;
1398a9ff3522SLukasz Wojciechowski 
1399a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(NULL, ut_params->sess, &m,
1400a9ff3522SLukasz Wojciechowski 			&params);
1401a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1402a9ff3522SLukasz Wojciechowski 			ret, -EINVAL, "%d");
1403a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1404a9ff3522SLukasz Wojciechowski 
1405a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1406a9ff3522SLukasz Wojciechowski #else
1407a9ff3522SLukasz Wojciechowski 	return TEST_SKIPPED;
1408a9ff3522SLukasz Wojciechowski #endif
1409a9ff3522SLukasz Wojciechowski }
1410a9ff3522SLukasz Wojciechowski 
1411a9ff3522SLukasz Wojciechowski /**
1412a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata with invalid
1413a9ff3522SLukasz Wojciechowski  * security operations structure (NULL)
1414a9ff3522SLukasz Wojciechowski  */
1415a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_inv_context_ops(void)1416a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_inv_context_ops(void)
1417a9ff3522SLukasz Wojciechowski {
1418a9ff3522SLukasz Wojciechowski #ifdef RTE_DEBUG
1419a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1420a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1421a9ff3522SLukasz Wojciechowski 	int params;
1422a9ff3522SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
1423a9ff3522SLukasz Wojciechowski 
1424a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1425a9ff3522SLukasz Wojciechowski 			ut_params->sess, &m, &params);
1426a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1427a9ff3522SLukasz Wojciechowski 			ret, -EINVAL, "%d");
1428a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1429a9ff3522SLukasz Wojciechowski 
1430a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1431a9ff3522SLukasz Wojciechowski #else
1432a9ff3522SLukasz Wojciechowski 	return TEST_SKIPPED;
1433a9ff3522SLukasz Wojciechowski #endif
1434a9ff3522SLukasz Wojciechowski }
1435a9ff3522SLukasz Wojciechowski 
1436a9ff3522SLukasz Wojciechowski /**
1437a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata with empty
1438a9ff3522SLukasz Wojciechowski  * security operations
1439a9ff3522SLukasz Wojciechowski  */
1440a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_inv_context_ops_fun(void)1441a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_inv_context_ops_fun(void)
1442a9ff3522SLukasz Wojciechowski {
1443a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1444a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1445a9ff3522SLukasz Wojciechowski 	int params;
1446a9ff3522SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
1447a9ff3522SLukasz Wojciechowski 
1448a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1449a9ff3522SLukasz Wojciechowski 			ut_params->sess, &m, &params);
1450a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1451a9ff3522SLukasz Wojciechowski 			ret, -ENOTSUP, "%d");
1452a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1453a9ff3522SLukasz Wojciechowski 
1454a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1455a9ff3522SLukasz Wojciechowski }
1456a9ff3522SLukasz Wojciechowski 
1457a9ff3522SLukasz Wojciechowski /**
1458a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata with NULL sess parameter
1459a9ff3522SLukasz Wojciechowski  */
1460a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_inv_session(void)1461a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_inv_session(void)
1462a9ff3522SLukasz Wojciechowski {
1463a9ff3522SLukasz Wojciechowski #ifdef RTE_DEBUG
1464a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1465a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1466a9ff3522SLukasz Wojciechowski 	int params;
1467a9ff3522SLukasz Wojciechowski 
1468a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx, NULL,
1469a9ff3522SLukasz Wojciechowski 			&m, &params);
1470a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1471a9ff3522SLukasz Wojciechowski 			ret, -EINVAL, "%d");
1472a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 0);
1473a9ff3522SLukasz Wojciechowski 
1474a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1475a9ff3522SLukasz Wojciechowski #else
1476a9ff3522SLukasz Wojciechowski 	return TEST_SKIPPED;
1477a9ff3522SLukasz Wojciechowski #endif
1478a9ff3522SLukasz Wojciechowski }
1479a9ff3522SLukasz Wojciechowski 
1480a9ff3522SLukasz Wojciechowski /**
1481a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata when set_pkt_metadata
1482a9ff3522SLukasz Wojciechowski  * security operation fails
1483a9ff3522SLukasz Wojciechowski  */
1484a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_ops_failure(void)1485a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_ops_failure(void)
1486a9ff3522SLukasz Wojciechowski {
1487a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1488a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1489a9ff3522SLukasz Wojciechowski 	int params;
1490a9ff3522SLukasz Wojciechowski 
1491a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.device = NULL;
1492a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.sess = ut_params->sess;
1493a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.m = &m;
1494a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.params = &params;
1495a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.ret = -1;
1496a9ff3522SLukasz Wojciechowski 
1497a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1498a9ff3522SLukasz Wojciechowski 			ut_params->sess, &m, &params);
1499a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1500a9ff3522SLukasz Wojciechowski 			ret, -1, "%d");
1501a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 1);
1502a9ff3522SLukasz Wojciechowski 
1503a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1504a9ff3522SLukasz Wojciechowski }
1505a9ff3522SLukasz Wojciechowski 
1506a9ff3522SLukasz Wojciechowski /**
1507a9ff3522SLukasz Wojciechowski  * Test execution of rte_security_set_pkt_metadata in successful execution path
1508a9ff3522SLukasz Wojciechowski  */
1509a9ff3522SLukasz Wojciechowski static int
test_set_pkt_metadata_success(void)1510a9ff3522SLukasz Wojciechowski test_set_pkt_metadata_success(void)
1511a9ff3522SLukasz Wojciechowski {
1512a9ff3522SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1513a9ff3522SLukasz Wojciechowski 	struct rte_mbuf m;
1514a9ff3522SLukasz Wojciechowski 	int params;
1515a9ff3522SLukasz Wojciechowski 
1516a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.device = NULL;
1517a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.sess = ut_params->sess;
1518a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.m = &m;
1519a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.params = &params;
1520a9ff3522SLukasz Wojciechowski 	mock_set_pkt_metadata_exp.ret = 0;
1521a9ff3522SLukasz Wojciechowski 
1522a9ff3522SLukasz Wojciechowski 	int ret = rte_security_set_pkt_metadata(&ut_params->ctx,
1523a9ff3522SLukasz Wojciechowski 			ut_params->sess, &m, &params);
1524a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_set_pkt_metadata,
1525a9ff3522SLukasz Wojciechowski 			ret, 0, "%d");
1526a9ff3522SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_set_pkt_metadata_exp, 1);
1527a9ff3522SLukasz Wojciechowski 
1528a9ff3522SLukasz Wojciechowski 	return TEST_SUCCESS;
1529a9ff3522SLukasz Wojciechowski }
1530a9ff3522SLukasz Wojciechowski 
15310cbd6711SLukasz Wojciechowski /**
15322242e701SLukasz Wojciechowski  * rte_security_capabilities_get tests
15332242e701SLukasz Wojciechowski  */
15342242e701SLukasz Wojciechowski 
15352242e701SLukasz Wojciechowski /**
15362242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get with NULL instance
15372242e701SLukasz Wojciechowski  */
15382242e701SLukasz Wojciechowski static int
test_capabilities_get_inv_context(void)15392242e701SLukasz Wojciechowski test_capabilities_get_inv_context(void)
15402242e701SLukasz Wojciechowski {
15412242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
15422242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(NULL);
15432242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
15442242e701SLukasz Wojciechowski 			ret, NULL, "%p");
15452242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
15462242e701SLukasz Wojciechowski 
15472242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
15482242e701SLukasz Wojciechowski }
15492242e701SLukasz Wojciechowski 
15502242e701SLukasz Wojciechowski /**
15512242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get with invalid
15522242e701SLukasz Wojciechowski  * security operations structure (NULL)
15532242e701SLukasz Wojciechowski  */
15542242e701SLukasz Wojciechowski static int
test_capabilities_get_inv_context_ops(void)15552242e701SLukasz Wojciechowski test_capabilities_get_inv_context_ops(void)
15562242e701SLukasz Wojciechowski {
15572242e701SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
15582242e701SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
15592242e701SLukasz Wojciechowski 
15602242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
15612242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(&ut_params->ctx);
15622242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
15632242e701SLukasz Wojciechowski 			ret, NULL, "%p");
15642242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
15652242e701SLukasz Wojciechowski 
15662242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
15672242e701SLukasz Wojciechowski }
15682242e701SLukasz Wojciechowski 
15692242e701SLukasz Wojciechowski /**
15702242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get with empty
15712242e701SLukasz Wojciechowski  * security operations
15722242e701SLukasz Wojciechowski  */
15732242e701SLukasz Wojciechowski static int
test_capabilities_get_inv_context_ops_fun(void)15742242e701SLukasz Wojciechowski test_capabilities_get_inv_context_ops_fun(void)
15752242e701SLukasz Wojciechowski {
15762242e701SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
15772242e701SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
15782242e701SLukasz Wojciechowski 
15792242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
15802242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(&ut_params->ctx);
15812242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
15822242e701SLukasz Wojciechowski 			ret, NULL, "%p");
15832242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
15842242e701SLukasz Wojciechowski 
15852242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
15862242e701SLukasz Wojciechowski }
15872242e701SLukasz Wojciechowski 
15882242e701SLukasz Wojciechowski /**
15892242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get when capabilities_get
15902242e701SLukasz Wojciechowski  * security operation fails
15912242e701SLukasz Wojciechowski  */
15922242e701SLukasz Wojciechowski static int
test_capabilities_get_ops_failure(void)15932242e701SLukasz Wojciechowski test_capabilities_get_ops_failure(void)
15942242e701SLukasz Wojciechowski {
15952242e701SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
15962242e701SLukasz Wojciechowski 
15972242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
15982242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = NULL;
15992242e701SLukasz Wojciechowski 
16002242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
16012242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(&ut_params->ctx);
16022242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
16032242e701SLukasz Wojciechowski 			ret, NULL, "%p");
16042242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
16052242e701SLukasz Wojciechowski 
16062242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
16072242e701SLukasz Wojciechowski }
16082242e701SLukasz Wojciechowski 
16092242e701SLukasz Wojciechowski /**
16102242e701SLukasz Wojciechowski  * Test execution of rte_security_capabilities_get in successful execution path
16112242e701SLukasz Wojciechowski  */
16122242e701SLukasz Wojciechowski static int
test_capabilities_get_success(void)16132242e701SLukasz Wojciechowski test_capabilities_get_success(void)
16142242e701SLukasz Wojciechowski {
16152242e701SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
16162242e701SLukasz Wojciechowski 	struct rte_security_capability capabilities;
16172242e701SLukasz Wojciechowski 
16182242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
16192242e701SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = &capabilities;
16202242e701SLukasz Wojciechowski 
16212242e701SLukasz Wojciechowski 	const struct rte_security_capability *ret;
16222242e701SLukasz Wojciechowski 	ret = rte_security_capabilities_get(&ut_params->ctx);
16232242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capabilities_get,
16242242e701SLukasz Wojciechowski 			ret, &capabilities, "%p");
16252242e701SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
16262242e701SLukasz Wojciechowski 
16272242e701SLukasz Wojciechowski 	return TEST_SUCCESS;
16282242e701SLukasz Wojciechowski }
16292242e701SLukasz Wojciechowski 
16302242e701SLukasz Wojciechowski 
16312242e701SLukasz Wojciechowski /**
1632cca3eda1SLukasz Wojciechowski  * rte_security_capability_get tests
1633cca3eda1SLukasz Wojciechowski  */
1634cca3eda1SLukasz Wojciechowski 
1635cca3eda1SLukasz Wojciechowski /**
1636cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get with NULL instance
1637cca3eda1SLukasz Wojciechowski  */
1638cca3eda1SLukasz Wojciechowski static int
test_capability_get_inv_context(void)1639cca3eda1SLukasz Wojciechowski test_capability_get_inv_context(void)
1640cca3eda1SLukasz Wojciechowski {
1641cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1642cca3eda1SLukasz Wojciechowski 
1643cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1644cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(NULL, &idx);
1645cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1646cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1647cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1648cca3eda1SLukasz Wojciechowski 
1649cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1650cca3eda1SLukasz Wojciechowski }
1651cca3eda1SLukasz Wojciechowski 
1652cca3eda1SLukasz Wojciechowski /**
1653cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get with invalid
1654cca3eda1SLukasz Wojciechowski  * security operations structure (NULL)
1655cca3eda1SLukasz Wojciechowski  */
1656cca3eda1SLukasz Wojciechowski static int
test_capability_get_inv_context_ops(void)1657cca3eda1SLukasz Wojciechowski test_capability_get_inv_context_ops(void)
1658cca3eda1SLukasz Wojciechowski {
1659cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1660cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1661cca3eda1SLukasz Wojciechowski 	ut_params->ctx.ops = NULL;
1662cca3eda1SLukasz Wojciechowski 
1663cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1664cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1665cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1666cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1667cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1668cca3eda1SLukasz Wojciechowski 
1669cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1670cca3eda1SLukasz Wojciechowski }
1671cca3eda1SLukasz Wojciechowski 
1672cca3eda1SLukasz Wojciechowski /**
1673cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get with empty
1674cca3eda1SLukasz Wojciechowski  * security operations
1675cca3eda1SLukasz Wojciechowski  */
1676cca3eda1SLukasz Wojciechowski static int
test_capability_get_inv_context_ops_fun(void)1677cca3eda1SLukasz Wojciechowski test_capability_get_inv_context_ops_fun(void)
1678cca3eda1SLukasz Wojciechowski {
1679cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1680cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1681cca3eda1SLukasz Wojciechowski 	ut_params->ctx.ops = &empty_ops;
1682cca3eda1SLukasz Wojciechowski 
1683cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1684cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1685cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1686cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1687cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1688cca3eda1SLukasz Wojciechowski 
1689cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1690cca3eda1SLukasz Wojciechowski }
1691cca3eda1SLukasz Wojciechowski 
1692cca3eda1SLukasz Wojciechowski /**
1693cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get with NULL idx parameter
1694cca3eda1SLukasz Wojciechowski  */
1695cca3eda1SLukasz Wojciechowski static int
test_capability_get_inv_idx(void)1696cca3eda1SLukasz Wojciechowski test_capability_get_inv_idx(void)
1697cca3eda1SLukasz Wojciechowski {
1698cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1699cca3eda1SLukasz Wojciechowski 
1700cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1701cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, NULL);
1702cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1703cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1704cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 0);
1705cca3eda1SLukasz Wojciechowski 
1706cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1707cca3eda1SLukasz Wojciechowski }
1708cca3eda1SLukasz Wojciechowski 
1709cca3eda1SLukasz Wojciechowski /**
1710cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities_get
1711cca3eda1SLukasz Wojciechowski  * security operation fails
1712cca3eda1SLukasz Wojciechowski  */
1713cca3eda1SLukasz Wojciechowski static int
test_capability_get_ops_failure(void)1714cca3eda1SLukasz Wojciechowski test_capability_get_ops_failure(void)
1715cca3eda1SLukasz Wojciechowski {
1716cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1717cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1718cca3eda1SLukasz Wojciechowski 
1719cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1720cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = NULL;
1721cca3eda1SLukasz Wojciechowski 
1722cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1723cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1724cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1725cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1726cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1727cca3eda1SLukasz Wojciechowski 
1728cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1729cca3eda1SLukasz Wojciechowski }
1730cca3eda1SLukasz Wojciechowski 
1731cca3eda1SLukasz Wojciechowski /**
1732cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
1733cca3eda1SLukasz Wojciechowski  * is empty (contains only RTE_SECURITY_ACTION_TYPE_NONE ending entry)
1734cca3eda1SLukasz Wojciechowski  */
1735cca3eda1SLukasz Wojciechowski static int
test_capability_get_empty_table(void)1736cca3eda1SLukasz Wojciechowski test_capability_get_empty_table(void)
1737cca3eda1SLukasz Wojciechowski {
1738cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1739cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx;
1740cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
1741cca3eda1SLukasz Wojciechowski 		{
1742cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1743cca3eda1SLukasz Wojciechowski 		},
1744cca3eda1SLukasz Wojciechowski 	};
1745cca3eda1SLukasz Wojciechowski 
1746cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1747cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
1748cca3eda1SLukasz Wojciechowski 
1749cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1750cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1751cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1752cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1753cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1754cca3eda1SLukasz Wojciechowski 
1755cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1756cca3eda1SLukasz Wojciechowski }
1757cca3eda1SLukasz Wojciechowski 
1758cca3eda1SLukasz Wojciechowski /**
1759cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
1760cca3eda1SLukasz Wojciechowski  * does not contain entry with matching action
1761cca3eda1SLukasz Wojciechowski  */
1762cca3eda1SLukasz Wojciechowski static int
test_capability_get_no_matching_action(void)1763cca3eda1SLukasz Wojciechowski test_capability_get_no_matching_action(void)
1764cca3eda1SLukasz Wojciechowski {
1765cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1766cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
1767cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1768cca3eda1SLukasz Wojciechowski 	};
1769cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
1770cca3eda1SLukasz Wojciechowski 		{
1771cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
1772cca3eda1SLukasz Wojciechowski 		},
1773cca3eda1SLukasz Wojciechowski 		{
1774cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL,
1775cca3eda1SLukasz Wojciechowski 		},
1776cca3eda1SLukasz Wojciechowski 		{
1777cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1778cca3eda1SLukasz Wojciechowski 		},
1779cca3eda1SLukasz Wojciechowski 	};
1780cca3eda1SLukasz Wojciechowski 
1781cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1782cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
1783cca3eda1SLukasz Wojciechowski 
1784cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1785cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1786cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1787cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1788cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1789cca3eda1SLukasz Wojciechowski 
1790cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1791cca3eda1SLukasz Wojciechowski }
1792cca3eda1SLukasz Wojciechowski 
1793cca3eda1SLukasz Wojciechowski /**
1794cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
1795cca3eda1SLukasz Wojciechowski  * does not contain entry with matching protocol
1796cca3eda1SLukasz Wojciechowski  */
1797cca3eda1SLukasz Wojciechowski static int
test_capability_get_no_matching_protocol(void)1798cca3eda1SLukasz Wojciechowski test_capability_get_no_matching_protocol(void)
1799cca3eda1SLukasz Wojciechowski {
1800cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1801cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
1802cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1803cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1804cca3eda1SLukasz Wojciechowski 	};
1805cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
1806cca3eda1SLukasz Wojciechowski 		{
1807cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1808cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_MACSEC,
1809cca3eda1SLukasz Wojciechowski 		},
1810cca3eda1SLukasz Wojciechowski 		{
1811cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1812cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
1813cca3eda1SLukasz Wojciechowski 		},
1814cca3eda1SLukasz Wojciechowski 		{
1815cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1816cca3eda1SLukasz Wojciechowski 		},
1817cca3eda1SLukasz Wojciechowski 	};
1818cca3eda1SLukasz Wojciechowski 
1819cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1820cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
1821cca3eda1SLukasz Wojciechowski 
1822cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1823cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1824cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1825cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1826cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1827cca3eda1SLukasz Wojciechowski 
1828cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1829cca3eda1SLukasz Wojciechowski }
1830cca3eda1SLukasz Wojciechowski 
1831cca3eda1SLukasz Wojciechowski /**
1832cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
1833cca3eda1SLukasz Wojciechowski  * does not contain entry with matching ipsec proto field
1834cca3eda1SLukasz Wojciechowski  */
1835cca3eda1SLukasz Wojciechowski static int
test_capability_get_ipsec_mismatch_proto(void)1836cca3eda1SLukasz Wojciechowski test_capability_get_ipsec_mismatch_proto(void)
1837cca3eda1SLukasz Wojciechowski {
1838cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1839cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
1840cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1841cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1842cca3eda1SLukasz Wojciechowski 		.ipsec = {
1843cca3eda1SLukasz Wojciechowski 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1844cca3eda1SLukasz Wojciechowski 		},
1845cca3eda1SLukasz Wojciechowski 	};
1846cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
1847cca3eda1SLukasz Wojciechowski 		{
1848cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1849cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1850cca3eda1SLukasz Wojciechowski 			.ipsec = {
1851cca3eda1SLukasz Wojciechowski 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1852cca3eda1SLukasz Wojciechowski 			},
1853cca3eda1SLukasz Wojciechowski 		},
1854cca3eda1SLukasz Wojciechowski 		{
1855cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1856cca3eda1SLukasz Wojciechowski 		},
1857cca3eda1SLukasz Wojciechowski 	};
1858cca3eda1SLukasz Wojciechowski 
1859cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1860cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
1861cca3eda1SLukasz Wojciechowski 
1862cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1863cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1864cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1865cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1866cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1867cca3eda1SLukasz Wojciechowski 
1868cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1869cca3eda1SLukasz Wojciechowski }
1870cca3eda1SLukasz Wojciechowski 
1871cca3eda1SLukasz Wojciechowski /**
1872cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
1873cca3eda1SLukasz Wojciechowski  * does not contain entry with matching ipsec mode field
1874cca3eda1SLukasz Wojciechowski  */
1875cca3eda1SLukasz Wojciechowski static int
test_capability_get_ipsec_mismatch_mode(void)1876cca3eda1SLukasz Wojciechowski test_capability_get_ipsec_mismatch_mode(void)
1877cca3eda1SLukasz Wojciechowski {
1878cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1879cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
1880cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1881cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1882cca3eda1SLukasz Wojciechowski 		.ipsec = {
1883cca3eda1SLukasz Wojciechowski 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1884cca3eda1SLukasz Wojciechowski 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1885cca3eda1SLukasz Wojciechowski 		},
1886cca3eda1SLukasz Wojciechowski 	};
1887cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
1888cca3eda1SLukasz Wojciechowski 		{
1889cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1890cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1891cca3eda1SLukasz Wojciechowski 			.ipsec = {
1892cca3eda1SLukasz Wojciechowski 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1893cca3eda1SLukasz Wojciechowski 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1894cca3eda1SLukasz Wojciechowski 			},
1895cca3eda1SLukasz Wojciechowski 		},
1896cca3eda1SLukasz Wojciechowski 		{
1897cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1898cca3eda1SLukasz Wojciechowski 		},
1899cca3eda1SLukasz Wojciechowski 	};
1900cca3eda1SLukasz Wojciechowski 
1901cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1902cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
1903cca3eda1SLukasz Wojciechowski 
1904cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1905cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1906cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1907cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1908cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1909cca3eda1SLukasz Wojciechowski 
1910cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1911cca3eda1SLukasz Wojciechowski }
1912cca3eda1SLukasz Wojciechowski 
1913cca3eda1SLukasz Wojciechowski /**
1914cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
1915cca3eda1SLukasz Wojciechowski  * does not contain entry with matching ipsec direction field
1916cca3eda1SLukasz Wojciechowski  */
1917cca3eda1SLukasz Wojciechowski static int
test_capability_get_ipsec_mismatch_dir(void)1918cca3eda1SLukasz Wojciechowski test_capability_get_ipsec_mismatch_dir(void)
1919cca3eda1SLukasz Wojciechowski {
1920cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1921cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
1922cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1923cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1924cca3eda1SLukasz Wojciechowski 		.ipsec = {
1925cca3eda1SLukasz Wojciechowski 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1926cca3eda1SLukasz Wojciechowski 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1927cca3eda1SLukasz Wojciechowski 			.direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1928cca3eda1SLukasz Wojciechowski 		},
1929cca3eda1SLukasz Wojciechowski 	};
1930cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
1931cca3eda1SLukasz Wojciechowski 		{
1932cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1933cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1934cca3eda1SLukasz Wojciechowski 			.ipsec = {
1935cca3eda1SLukasz Wojciechowski 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1936cca3eda1SLukasz Wojciechowski 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1937cca3eda1SLukasz Wojciechowski 				.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1938cca3eda1SLukasz Wojciechowski 			},
1939cca3eda1SLukasz Wojciechowski 		},
1940cca3eda1SLukasz Wojciechowski 		{
1941cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1942cca3eda1SLukasz Wojciechowski 		},
1943cca3eda1SLukasz Wojciechowski 	};
1944cca3eda1SLukasz Wojciechowski 
1945cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1946cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
1947cca3eda1SLukasz Wojciechowski 
1948cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1949cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1950cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1951cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
1952cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
1953cca3eda1SLukasz Wojciechowski 
1954cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
1955cca3eda1SLukasz Wojciechowski }
1956cca3eda1SLukasz Wojciechowski 
1957cca3eda1SLukasz Wojciechowski /**
1958cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
1959cca3eda1SLukasz Wojciechowski  * contains matching ipsec entry
1960cca3eda1SLukasz Wojciechowski  */
1961cca3eda1SLukasz Wojciechowski static int
test_capability_get_ipsec_match(void)1962cca3eda1SLukasz Wojciechowski test_capability_get_ipsec_match(void)
1963cca3eda1SLukasz Wojciechowski {
1964cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
1965cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
1966cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1967cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1968cca3eda1SLukasz Wojciechowski 		.ipsec = {
1969cca3eda1SLukasz Wojciechowski 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1970cca3eda1SLukasz Wojciechowski 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1971cca3eda1SLukasz Wojciechowski 			.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1972cca3eda1SLukasz Wojciechowski 		},
1973cca3eda1SLukasz Wojciechowski 	};
1974cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
1975cca3eda1SLukasz Wojciechowski 		{
1976cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
1977cca3eda1SLukasz Wojciechowski 		},
1978cca3eda1SLukasz Wojciechowski 		{
1979cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1980cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1981cca3eda1SLukasz Wojciechowski 			.ipsec = {
1982cca3eda1SLukasz Wojciechowski 				.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1983cca3eda1SLukasz Wojciechowski 				.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1984cca3eda1SLukasz Wojciechowski 				.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1985cca3eda1SLukasz Wojciechowski 			},
1986cca3eda1SLukasz Wojciechowski 		},
1987cca3eda1SLukasz Wojciechowski 		{
1988cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
1989cca3eda1SLukasz Wojciechowski 		},
1990cca3eda1SLukasz Wojciechowski 	};
1991cca3eda1SLukasz Wojciechowski 
1992cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
1993cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
1994cca3eda1SLukasz Wojciechowski 
1995cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
1996cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
1997cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
1998cca3eda1SLukasz Wojciechowski 			ret, &capabilities[1], "%p");
1999cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2000cca3eda1SLukasz Wojciechowski 
2001cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2002cca3eda1SLukasz Wojciechowski }
2003cca3eda1SLukasz Wojciechowski 
2004cca3eda1SLukasz Wojciechowski /**
2005cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2006cca3eda1SLukasz Wojciechowski  * does not contain entry with matching pdcp domain field
2007cca3eda1SLukasz Wojciechowski  */
2008cca3eda1SLukasz Wojciechowski static int
test_capability_get_pdcp_mismatch_domain(void)2009cca3eda1SLukasz Wojciechowski test_capability_get_pdcp_mismatch_domain(void)
2010cca3eda1SLukasz Wojciechowski {
2011cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2012cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2013cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2014cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2015cca3eda1SLukasz Wojciechowski 		.pdcp = {
2016cca3eda1SLukasz Wojciechowski 			.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2017cca3eda1SLukasz Wojciechowski 		},
2018cca3eda1SLukasz Wojciechowski 	};
2019cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2020cca3eda1SLukasz Wojciechowski 		{
2021cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2022cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2023cca3eda1SLukasz Wojciechowski 			.pdcp = {
2024cca3eda1SLukasz Wojciechowski 				.domain = RTE_SECURITY_PDCP_MODE_DATA,
2025cca3eda1SLukasz Wojciechowski 			},
2026cca3eda1SLukasz Wojciechowski 		},
2027cca3eda1SLukasz Wojciechowski 		{
2028cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2029cca3eda1SLukasz Wojciechowski 		},
2030cca3eda1SLukasz Wojciechowski 	};
2031cca3eda1SLukasz Wojciechowski 
2032cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2033cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2034cca3eda1SLukasz Wojciechowski 
2035cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2036cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2037cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2038cca3eda1SLukasz Wojciechowski 			ret, NULL, "%p");
2039cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2040cca3eda1SLukasz Wojciechowski 
2041cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2042cca3eda1SLukasz Wojciechowski }
2043cca3eda1SLukasz Wojciechowski 
2044cca3eda1SLukasz Wojciechowski /**
2045cca3eda1SLukasz Wojciechowski  * Test execution of rte_security_capability_get when capabilities table
2046cca3eda1SLukasz Wojciechowski  * contains matching pdcp entry
2047cca3eda1SLukasz Wojciechowski  */
2048cca3eda1SLukasz Wojciechowski static int
test_capability_get_pdcp_match(void)2049cca3eda1SLukasz Wojciechowski test_capability_get_pdcp_match(void)
2050cca3eda1SLukasz Wojciechowski {
2051cca3eda1SLukasz Wojciechowski 	struct security_unittest_params *ut_params = &unittest_params;
2052cca3eda1SLukasz Wojciechowski 	struct rte_security_capability_idx idx = {
2053cca3eda1SLukasz Wojciechowski 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2054cca3eda1SLukasz Wojciechowski 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2055cca3eda1SLukasz Wojciechowski 		.pdcp = {
2056cca3eda1SLukasz Wojciechowski 			.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2057cca3eda1SLukasz Wojciechowski 		},
2058cca3eda1SLukasz Wojciechowski 	};
2059cca3eda1SLukasz Wojciechowski 	struct rte_security_capability capabilities[] = {
2060cca3eda1SLukasz Wojciechowski 		{
2061cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2062cca3eda1SLukasz Wojciechowski 		},
2063cca3eda1SLukasz Wojciechowski 		{
2064cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2065cca3eda1SLukasz Wojciechowski 			.protocol = RTE_SECURITY_PROTOCOL_PDCP,
2066cca3eda1SLukasz Wojciechowski 			.pdcp = {
2067cca3eda1SLukasz Wojciechowski 				.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
2068cca3eda1SLukasz Wojciechowski 			},
2069cca3eda1SLukasz Wojciechowski 		},
2070cca3eda1SLukasz Wojciechowski 		{
2071cca3eda1SLukasz Wojciechowski 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2072cca3eda1SLukasz Wojciechowski 		},
2073cca3eda1SLukasz Wojciechowski 	};
2074cca3eda1SLukasz Wojciechowski 
2075cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.device = NULL;
2076cca3eda1SLukasz Wojciechowski 	mock_capabilities_get_exp.ret = capabilities;
2077cca3eda1SLukasz Wojciechowski 
2078cca3eda1SLukasz Wojciechowski 	const struct rte_security_capability *ret;
2079cca3eda1SLukasz Wojciechowski 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2080cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2081cca3eda1SLukasz Wojciechowski 			ret, &capabilities[1], "%p");
2082cca3eda1SLukasz Wojciechowski 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2083cca3eda1SLukasz Wojciechowski 
2084cca3eda1SLukasz Wojciechowski 	return TEST_SUCCESS;
2085cca3eda1SLukasz Wojciechowski }
2086cca3eda1SLukasz Wojciechowski 
2087cca3eda1SLukasz Wojciechowski /**
2088c6478fd5SDavid Coyle  * Test execution of rte_security_capability_get when capabilities table
2089c6478fd5SDavid Coyle  * does not contain entry with matching DOCSIS direction field
2090c6478fd5SDavid Coyle  */
2091c6478fd5SDavid Coyle static int
test_capability_get_docsis_mismatch_direction(void)2092c6478fd5SDavid Coyle test_capability_get_docsis_mismatch_direction(void)
2093c6478fd5SDavid Coyle {
2094c6478fd5SDavid Coyle 	struct security_unittest_params *ut_params = &unittest_params;
2095c6478fd5SDavid Coyle 	struct rte_security_capability_idx idx = {
2096c6478fd5SDavid Coyle 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2097c6478fd5SDavid Coyle 		.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2098c6478fd5SDavid Coyle 		.docsis = {
2099c6478fd5SDavid Coyle 			.direction = RTE_SECURITY_DOCSIS_DOWNLINK
2100c6478fd5SDavid Coyle 		},
2101c6478fd5SDavid Coyle 	};
2102c6478fd5SDavid Coyle 	struct rte_security_capability capabilities[] = {
2103c6478fd5SDavid Coyle 		{
2104c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2105c6478fd5SDavid Coyle 			.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2106c6478fd5SDavid Coyle 			.docsis = {
2107c6478fd5SDavid Coyle 				.direction = RTE_SECURITY_DOCSIS_UPLINK
2108c6478fd5SDavid Coyle 			},
2109c6478fd5SDavid Coyle 		},
2110c6478fd5SDavid Coyle 		{
2111c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2112c6478fd5SDavid Coyle 		},
2113c6478fd5SDavid Coyle 	};
2114c6478fd5SDavid Coyle 
2115c6478fd5SDavid Coyle 	mock_capabilities_get_exp.device = NULL;
2116c6478fd5SDavid Coyle 	mock_capabilities_get_exp.ret = capabilities;
2117c6478fd5SDavid Coyle 
2118c6478fd5SDavid Coyle 	const struct rte_security_capability *ret;
2119c6478fd5SDavid Coyle 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2120c6478fd5SDavid Coyle 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2121c6478fd5SDavid Coyle 			ret, NULL, "%p");
2122c6478fd5SDavid Coyle 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2123c6478fd5SDavid Coyle 
2124c6478fd5SDavid Coyle 	return TEST_SUCCESS;
2125c6478fd5SDavid Coyle }
2126c6478fd5SDavid Coyle 
2127c6478fd5SDavid Coyle /**
2128c6478fd5SDavid Coyle  * Test execution of rte_security_capability_get when capabilities table
2129c6478fd5SDavid Coyle  * contains matching DOCSIS entry
2130c6478fd5SDavid Coyle  */
2131c6478fd5SDavid Coyle static int
test_capability_get_docsis_match(void)2132c6478fd5SDavid Coyle test_capability_get_docsis_match(void)
2133c6478fd5SDavid Coyle {
2134c6478fd5SDavid Coyle 	struct security_unittest_params *ut_params = &unittest_params;
2135c6478fd5SDavid Coyle 	struct rte_security_capability_idx idx = {
2136c6478fd5SDavid Coyle 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2137c6478fd5SDavid Coyle 		.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2138c6478fd5SDavid Coyle 		.docsis = {
2139c6478fd5SDavid Coyle 			.direction = RTE_SECURITY_DOCSIS_UPLINK
2140c6478fd5SDavid Coyle 		},
2141c6478fd5SDavid Coyle 	};
2142c6478fd5SDavid Coyle 	struct rte_security_capability capabilities[] = {
2143c6478fd5SDavid Coyle 		{
2144c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO,
2145c6478fd5SDavid Coyle 		},
2146c6478fd5SDavid Coyle 		{
2147c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
2148c6478fd5SDavid Coyle 			.protocol = RTE_SECURITY_PROTOCOL_DOCSIS,
2149c6478fd5SDavid Coyle 			.docsis = {
2150c6478fd5SDavid Coyle 				.direction = RTE_SECURITY_DOCSIS_UPLINK
2151c6478fd5SDavid Coyle 			},
2152c6478fd5SDavid Coyle 		},
2153c6478fd5SDavid Coyle 		{
2154c6478fd5SDavid Coyle 			.action = RTE_SECURITY_ACTION_TYPE_NONE,
2155c6478fd5SDavid Coyle 		},
2156c6478fd5SDavid Coyle 	};
2157c6478fd5SDavid Coyle 
2158c6478fd5SDavid Coyle 	mock_capabilities_get_exp.device = NULL;
2159c6478fd5SDavid Coyle 	mock_capabilities_get_exp.ret = capabilities;
2160c6478fd5SDavid Coyle 
2161c6478fd5SDavid Coyle 	const struct rte_security_capability *ret;
2162c6478fd5SDavid Coyle 	ret = rte_security_capability_get(&ut_params->ctx, &idx);
2163c6478fd5SDavid Coyle 	TEST_ASSERT_MOCK_FUNCTION_CALL_RET(rte_security_capability_get,
2164c6478fd5SDavid Coyle 			ret, &capabilities[1], "%p");
2165c6478fd5SDavid Coyle 	TEST_ASSERT_MOCK_CALLS(mock_capabilities_get_exp, 1);
2166c6478fd5SDavid Coyle 
2167c6478fd5SDavid Coyle 	return TEST_SUCCESS;
2168c6478fd5SDavid Coyle }
2169c6478fd5SDavid Coyle 
2170c6478fd5SDavid Coyle /**
21714849e8e4SLukasz Wojciechowski  * Declaration of testcases
21724849e8e4SLukasz Wojciechowski  */
21734849e8e4SLukasz Wojciechowski static struct unit_test_suite security_testsuite  = {
21744849e8e4SLukasz Wojciechowski 	.suite_name = "generic security",
21754849e8e4SLukasz Wojciechowski 	.setup = testsuite_setup,
21764849e8e4SLukasz Wojciechowski 	.teardown = testsuite_teardown,
21774849e8e4SLukasz Wojciechowski 	.unit_test_cases = {
21784849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
21794849e8e4SLukasz Wojciechowski 				test_session_create_inv_context),
21804849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
21814849e8e4SLukasz Wojciechowski 				test_session_create_inv_context_ops),
21824849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
21834849e8e4SLukasz Wojciechowski 				test_session_create_inv_context_ops_fun),
21844849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
21854849e8e4SLukasz Wojciechowski 				test_session_create_inv_configuration),
21864849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
21874849e8e4SLukasz Wojciechowski 				test_session_create_inv_mempool),
21884849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
21894849e8e4SLukasz Wojciechowski 				test_session_create_mempool_empty),
21904849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
21914849e8e4SLukasz Wojciechowski 				test_session_create_ops_failure),
21924849e8e4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup, ut_teardown,
21934849e8e4SLukasz Wojciechowski 				test_session_create_success),
21944849e8e4SLukasz Wojciechowski 
21950b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
21960b124e04SLukasz Wojciechowski 				test_session_update_inv_context),
21970b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
21980b124e04SLukasz Wojciechowski 				test_session_update_inv_context_ops),
21990b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22000b124e04SLukasz Wojciechowski 				test_session_update_inv_context_ops_fun),
22010b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22020b124e04SLukasz Wojciechowski 				test_session_update_inv_configuration),
22030b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22040b124e04SLukasz Wojciechowski 				test_session_update_inv_session),
22050b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22060b124e04SLukasz Wojciechowski 				test_session_update_ops_failure),
22070b124e04SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22080b124e04SLukasz Wojciechowski 				test_session_update_success),
22090b124e04SLukasz Wojciechowski 
2210226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2211226430f4SLukasz Wojciechowski 				test_session_get_size_inv_context),
2212226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2213226430f4SLukasz Wojciechowski 				test_session_get_size_inv_context_ops),
2214226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2215226430f4SLukasz Wojciechowski 				test_session_get_size_inv_context_ops_fun),
2216226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2217226430f4SLukasz Wojciechowski 				test_session_get_size_ops_failure),
2218226430f4SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2219226430f4SLukasz Wojciechowski 				test_session_get_size_success),
2220226430f4SLukasz Wojciechowski 
22211e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22221e1a0e49SLukasz Wojciechowski 				test_session_stats_get_inv_context),
22231e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22241e1a0e49SLukasz Wojciechowski 				test_session_stats_get_inv_context_ops),
22251e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22261e1a0e49SLukasz Wojciechowski 				test_session_stats_get_inv_context_ops_fun),
22271e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22281e1a0e49SLukasz Wojciechowski 				test_session_stats_get_inv_stats),
22291e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22301e1a0e49SLukasz Wojciechowski 				test_session_stats_get_ops_failure),
22311e1a0e49SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22321e1a0e49SLukasz Wojciechowski 				test_session_stats_get_success),
22331e1a0e49SLukasz Wojciechowski 
223404631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
223504631dafSLukasz Wojciechowski 				test_session_destroy_inv_context),
223604631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
223704631dafSLukasz Wojciechowski 				test_session_destroy_inv_context_ops),
223804631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
223904631dafSLukasz Wojciechowski 				test_session_destroy_inv_context_ops_fun),
224004631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
224104631dafSLukasz Wojciechowski 				test_session_destroy_inv_session),
224204631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
224304631dafSLukasz Wojciechowski 				test_session_destroy_ops_failure),
224404631dafSLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
224504631dafSLukasz Wojciechowski 				test_session_destroy_success),
224604631dafSLukasz Wojciechowski 
2247a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2248a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_inv_context),
2249a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2250a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_inv_context_ops),
2251a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2252a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_inv_context_ops_fun),
2253a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2254a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_inv_session),
2255a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2256a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_ops_failure),
2257a9ff3522SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2258a9ff3522SLukasz Wojciechowski 				test_set_pkt_metadata_success),
2259a9ff3522SLukasz Wojciechowski 
22600cbd6711SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22612242e701SLukasz Wojciechowski 				test_capabilities_get_inv_context),
22622242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22632242e701SLukasz Wojciechowski 				test_capabilities_get_inv_context_ops),
22642242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22652242e701SLukasz Wojciechowski 				test_capabilities_get_inv_context_ops_fun),
22662242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22672242e701SLukasz Wojciechowski 				test_capabilities_get_ops_failure),
22682242e701SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
22692242e701SLukasz Wojciechowski 				test_capabilities_get_success),
22702242e701SLukasz Wojciechowski 
2271cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2272cca3eda1SLukasz Wojciechowski 				test_capability_get_inv_context),
2273cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2274cca3eda1SLukasz Wojciechowski 				test_capability_get_inv_context_ops),
2275cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2276cca3eda1SLukasz Wojciechowski 				test_capability_get_inv_context_ops_fun),
2277cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2278cca3eda1SLukasz Wojciechowski 				test_capability_get_inv_idx),
2279cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2280cca3eda1SLukasz Wojciechowski 				test_capability_get_ops_failure),
2281cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2282cca3eda1SLukasz Wojciechowski 				test_capability_get_empty_table),
2283cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2284cca3eda1SLukasz Wojciechowski 				test_capability_get_no_matching_action),
2285cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2286cca3eda1SLukasz Wojciechowski 				test_capability_get_no_matching_protocol),
2287cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2288cca3eda1SLukasz Wojciechowski 				test_capability_get_ipsec_mismatch_proto),
2289cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2290cca3eda1SLukasz Wojciechowski 				test_capability_get_ipsec_mismatch_mode),
2291cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2292cca3eda1SLukasz Wojciechowski 				test_capability_get_ipsec_mismatch_dir),
2293cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2294cca3eda1SLukasz Wojciechowski 				test_capability_get_ipsec_match),
2295cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2296cca3eda1SLukasz Wojciechowski 				test_capability_get_pdcp_mismatch_domain),
2297cca3eda1SLukasz Wojciechowski 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2298cca3eda1SLukasz Wojciechowski 				test_capability_get_pdcp_match),
2299c6478fd5SDavid Coyle 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2300c6478fd5SDavid Coyle 				test_capability_get_docsis_mismatch_direction),
2301c6478fd5SDavid Coyle 		TEST_CASE_ST(ut_setup_with_session, ut_teardown,
2302c6478fd5SDavid Coyle 				test_capability_get_docsis_match),
2303cca3eda1SLukasz Wojciechowski 
23044849e8e4SLukasz Wojciechowski 		TEST_CASES_END() /**< NULL terminate unit test array */
23054849e8e4SLukasz Wojciechowski 	}
23064849e8e4SLukasz Wojciechowski };
23074849e8e4SLukasz Wojciechowski 
23084849e8e4SLukasz Wojciechowski static int
test_security(void)23094849e8e4SLukasz Wojciechowski test_security(void)
23104849e8e4SLukasz Wojciechowski {
23114849e8e4SLukasz Wojciechowski 	rte_log_set_global_level(RTE_LOG_DEBUG);
23124849e8e4SLukasz Wojciechowski 	rte_log_set_level(RTE_LOGTYPE_EAL, RTE_LOG_DEBUG);
23134849e8e4SLukasz Wojciechowski 
23144849e8e4SLukasz Wojciechowski 	return unit_test_suite_runner(&security_testsuite);
23154849e8e4SLukasz Wojciechowski }
23164849e8e4SLukasz Wojciechowski 
2317*e0a8442cSBruce Richardson REGISTER_FAST_TEST(security_autotest, false, true, test_security);
2318