/* * Copyright (c) 2023 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ /* test_conn_impl is separated into its own file specifically in order to test that * CONN_MGR_CONN_DECLARE_PUBLIC functions as expected. */ #ifndef ZEPHYR_INCLUDE_TEST_CONN_IMPL_H_ #define ZEPHYR_INCLUDE_TEST_CONN_IMPL_H_ #include #include #ifdef __cplusplus extern "C" { #endif #define TEST_CONN_OPT_X 0 #define TEST_CONN_OPT_Y 1 #define TEST_CONN_DATA_LEN 50 struct test_conn_data { /* The number of times an A-implementation API func has been called (other than init) */ int call_cnt_a; /* The number of times a B-implementation API func has been called (other than init) */ int call_cnt_b; /* Increases on each connect call, decreases on each disconnect call */ int conn_bal; /* The number of times A-implementation init was called (should always be 1) */ int init_calls_a; /* The number of times B-implementation init was called (should always be 1) */ int init_calls_b; /* If nonzero, an error code the APIs should return. */ int api_err; /* If true, the implementation should time out on connect. */ bool timeout; /* If nonzero, the implementation should fail to connect and raise this fatal error. */ int fatal_error; /* Places to store data from set_opt calls */ char data_x[TEST_CONN_DATA_LEN + 1]; char data_y[TEST_CONN_DATA_LEN + 1]; }; /* Create test L2 connectivity implementations A and B * * A and B share generic connect/disconnect implementations that differ only in which call counter * they increment. * * Additionally, A has conn_opt callbacks, whereas B does not. */ #define TEST_L2_CONN_IMPL_A_CTX_TYPE struct test_conn_data CONN_MGR_CONN_DECLARE_PUBLIC(TEST_L2_CONN_IMPL_A); #define TEST_L2_CONN_IMPL_B_CTX_TYPE struct test_conn_data CONN_MGR_CONN_DECLARE_PUBLIC(TEST_L2_CONN_IMPL_B); /* Create an invalid L2 connectivity implementation with NULL API */ #define TEST_L2_CONN_IMPL_N_CTX_TYPE struct test_conn_data CONN_MGR_CONN_DECLARE_PUBLIC(TEST_L2_CONN_IMPL_N); /* Create an L2 connectivity implementation without the optional init */ #define TEST_L2_CONN_IMPL_NI_CTX_TYPE struct test_conn_data CONN_MGR_CONN_DECLARE_PUBLIC(TEST_L2_CONN_IMPL_NI); #define SIMULATED_EVENT_DELAY_MS 100 #define SIMULATED_EVENT_DELAY_TIME K_MSEC(SIMULATED_EVENT_DELAY_MS) #define SIMULATED_EVENT_WAIT_TIME K_MSEC(SIMULATED_EVENT_DELAY_MS + 10) /* Helper API for controlling implementations from tests */ /** * @brief Simulate a connection loss on the target iface. * * @param target - iface to simulate connection loss on. */ void simulate_connection_loss(struct net_if *target); /** * @brief Simulate a fatal error on the target iface * * Please do not simulate events on more than one iface at a time. * * @param target - iface to simulate fatal error on. * @param reason - Reason to be given for the fatal error. */ void simulate_fatal_error(struct net_if *target, int reason); #ifdef __cplusplus } #endif #endif /* ZEPHYR_INCLUDE_TEST_CONN_IMPL_H_ */