@@ -65,6 +65,20 @@ static int mock_getsockopt_int_callback(int socket, int level, int option_name,
6565 return 0 ;
6666}
6767
68+ static int mock_getsockopt_tcp_srv_sesstimeo_callback (int socket , int level , int option_name ,
69+ void * option_value , net_socklen_t * option_len ,
70+ int num_calls )
71+ {
72+ int * value = (int * )option_value ;
73+
74+ /* Return 135 on first call, 0 on second call for SO_TCP_SRV_SESSTIMEO */
75+ if (* option_len >= sizeof (int )) {
76+ * value = (num_calls == 0 ) ? 135 : 0 ;
77+ * option_len = sizeof (int );
78+ }
79+ return 0 ;
80+ }
81+
6882static int mock_getsockopt_hostname_callback (int socket , int level , int option_name ,
6983 void * option_value , net_socklen_t * option_len ,
7084 int num_calls )
@@ -80,6 +94,30 @@ static int mock_getsockopt_hostname_callback(int socket, int level, int option_n
8094 return 0 ;
8195}
8296
97+ static char * mock_zsock_inet_ntop_192_168_0_100_callback (
98+ net_sa_family_t af , const void * src , char * dst , net_socklen_t size , int num_calls )
99+ {
100+ strcpy (dst , "192.168.0.100" );
101+ return dst ;
102+ }
103+
104+ static int mock_nrf_accept_with_peer_callback (int socket , struct nrf_sockaddr * restrict address ,
105+ nrf_socklen_t * restrict address_len , int num_calls )
106+ {
107+ /* Populate the address structure with peer information */
108+ struct nrf_sockaddr_in * addr_in = (struct nrf_sockaddr_in * )address ;
109+
110+ addr_in -> sin_family = NRF_AF_INET ;
111+ addr_in -> sin_port = nrf_htons (5555 ); /* Port 5555 in network byte order */
112+ addr_in -> sin_addr .s_addr = nrf_htonl (0xC0A80064 ); /* 192.168.0.100 */
113+
114+ if (address_len ) {
115+ * address_len = sizeof (struct nrf_sockaddr_in );
116+ }
117+
118+ return 7 ; /* Return new socket fd */
119+ }
120+
83121void setUp (void )
84122{
85123 /* This is run before EACH test */
@@ -91,6 +129,8 @@ void tearDown(void)
91129 /* This is run after EACH test */
92130 /* Reset any stubs to prevent interference between tests */
93131 __cmock_nrf_getsockopt_Stub (NULL );
132+ __cmock_zsock_inet_ntop_Stub (NULL );
133+ __cmock_nrf_accept_Stub (NULL );
94134}
95135
96136/*
@@ -777,8 +817,6 @@ void test_xconnect_operation(void)
777817}
778818
779819/*
780- <<<<<<< Updated upstream
781- =======
782820 * Test: Socket listen operation via AT command
783821 * - Command: AT#XLISTEN=<handle>\r\n
784822 * - Tests: Putting a TCP socket into listening mode
@@ -1007,7 +1045,6 @@ void test_xaccept_not_listening(void)
10071045}
10081046
10091047/*
1010- >>>>>>> Stashed changes
10111048 * Test: Send data via AT#XSEND with unformatted string
10121049 * - Command: AT#XSEND=<handle>,<mode>,<flags>,"<data>"\r\n
10131050 * - Tests: Sending unformatted string data over TCP socket
@@ -1815,13 +1852,6 @@ static char *mock_zsock_inet_ntop_10_0_0_1_callback(
18151852 return dst ;
18161853}
18171854
1818- static char * mock_zsock_inet_ntop_192_168_0_100_callback (
1819- net_sa_family_t af , const void * src , char * dst , net_socklen_t size , int num_calls )
1820- {
1821- strcpy (dst , "192.168.0.100" );
1822- return dst ;
1823- }
1824-
18251855/* Helper callback for mocking nrf_recvfrom with data and address */
18261856static ssize_t mock_nrf_recvfrom_callback (int socket , void * buffer , size_t length , int flags ,
18271857 struct nrf_sockaddr * address , nrf_socklen_t * address_len ,
@@ -2717,7 +2747,6 @@ void test_xssocket_read_operation(void)
27172747 __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_SNDTIMEO */
27182748 __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_SEC_TAG_LIST */
27192749 __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_SEC_PEER_VERIFY */
2720- __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_SEC_ROLE */
27212750 __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_POLLCB */
27222751 send_at_command ("AT#XSSOCKET=2,1,1,42\r\n" );
27232752 response = get_captured_response ();
@@ -2888,26 +2917,11 @@ void test_xssocket_ipv4_tcp_server(void)
28882917 * 1. SO_SNDTIMEO (SOL_SOCKET)
28892918 * 2. SO_SEC_TAG_LIST (SOL_SECURE)
28902919 * 3. SO_SEC_PEER_VERIFY (SOL_SECURE)
2891- * 4. SO_SEC_ROLE (SOL_SECURE) - server only, verified below
2892- * 5. SO_POLLCB (SOL_SOCKET)
2920+ * 4. SO_POLLCB (SOL_SOCKET)
28932921 */
28942922 __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_SNDTIMEO */
28952923 __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_SEC_TAG_LIST */
28962924 __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_SEC_PEER_VERIFY */
2897-
2898- /* Verify SO_SEC_ROLE is set to server (value 1) */
2899- int expected_role = 1 ; /* NRF_SO_SEC_ROLE_SERVER */
2900-
2901- __cmock_nrf_setsockopt_ExpectWithArrayAndReturn (
2902- 0 , /* socket fd */
2903- NRF_SOL_SECURE , /* level */
2904- NRF_SO_SEC_ROLE , /* option_name */
2905- & expected_role , /* option_value */
2906- 1 , /* option_value array size */
2907- sizeof (int ), /* option_len */
2908- 0 /* return value */
2909- );
2910-
29112925 __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_POLLCB */
29122926
29132927 /* Send AT command: family=1(IPv4), type=1(STREAM), role=1(server), sec_tag=42 */
@@ -3102,6 +3116,55 @@ void test_xsocketopt_reuseaddr(void)
31023116 send_at_command ("AT#XCLOSE=0\r\n" );
31033117}
31043118
3119+ /*
3120+ * Test: Set and get socket option SO_TCP_SRV_SESSTIMEO
3121+ * - Command: AT#XSOCKETOPT=<handle>,1,55,<value> (set)
3122+ * AT#XSOCKETOPT=<handle>,0,55 (get)
3123+ * - Tests: Setting and getting SO_TCP_SRV_SESSTIMEO option (option 55)
3124+ */
3125+ void test_xsocketopt_tcp_srv_sesstimeo (void )
3126+ {
3127+ const char * response ;
3128+
3129+ /* Create a TCP socket */
3130+ __cmock_nrf_socket_ExpectAndReturn (NRF_AF_INET , NRF_SOCK_STREAM , NRF_IPPROTO_TCP , 0 );
3131+ __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* SO_SNDTIMEO */
3132+ __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 ); /* Bind to PDN */
3133+ send_at_command ("AT#XSOCKET=1,1,0\r\n" );
3134+ response = get_captured_response ();
3135+ TEST_ASSERT_TRUE (strstr (response , "#XSOCKET: 0" ) != NULL );
3136+ TEST_ASSERT_TRUE (strstr (response , "OK" ) != NULL );
3137+
3138+ /* Set SO_TCP_SRV_SESSTIMEO (option 55) to 135 */
3139+ __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 );
3140+ send_at_command ("AT#XSOCKETOPT=0,1,55,135\r\n" );
3141+ response = get_captured_response ();
3142+ TEST_ASSERT_TRUE (strstr (response , "OK" ) != NULL );
3143+
3144+ /* Get SO_TCP_SRV_SESSTIMEO (option 55) - should return 135 */
3145+ __cmock_nrf_getsockopt_Stub (mock_getsockopt_tcp_srv_sesstimeo_callback );
3146+ send_at_command ("AT#XSOCKETOPT=0,0,55\r\n" );
3147+ response = get_captured_response ();
3148+ TEST_ASSERT_TRUE (strstr (response , "#XSOCKETOPT: 0,135" ) != NULL );
3149+ TEST_ASSERT_TRUE (strstr (response , "OK" ) != NULL );
3150+
3151+ /* Set SO_TCP_SRV_SESSTIMEO (option 55) to 0 */
3152+ __cmock_nrf_setsockopt_ExpectAnyArgsAndReturn (0 );
3153+ send_at_command ("AT#XSOCKETOPT=0,1,55,0\r\n" );
3154+ response = get_captured_response ();
3155+ TEST_ASSERT_TRUE (strstr (response , "OK" ) != NULL );
3156+
3157+ /* Get SO_TCP_SRV_SESSTIMEO (option 55) - should return 0 */
3158+ send_at_command ("AT#XSOCKETOPT=0,0,55\r\n" );
3159+ response = get_captured_response ();
3160+ TEST_ASSERT_TRUE (strstr (response , "#XSOCKETOPT: 0,0" ) != NULL );
3161+ TEST_ASSERT_TRUE (strstr (response , "OK" ) != NULL );
3162+
3163+ /* Close socket */
3164+ __cmock_nrf_close_ExpectAndReturn (0 , 0 );
3165+ send_at_command ("AT#XCLOSE=0\r\n" );
3166+ }
3167+
31053168/*
31063169 * Test: Set and get secure socket options
31073170 * - Commands: AT#XSSOCKETOPT=<handle>,1,<name>,<value> (set)
0 commit comments