@@ -322,6 +322,7 @@ static void test_setup(void *data)
322322
323323 z_impl_zsock_recvfrom_fake .custom_fake = z_impl_zsock_recvfrom_custom_fake ;
324324 z_impl_zsock_sendto_fake .custom_fake = z_impl_zsock_sendto_custom_fake ;
325+ clear_socket_events (ZSOCK_POLLIN | ZSOCK_POLLOUT | ZSOCK_POLLERR );
325326
326327 for (i = 0 ; i < ARRAY_SIZE (messages_needing_response ); i ++ ) {
327328 messages_needing_response [i ] = 0 ;
@@ -727,5 +728,65 @@ ZTEST(coap_client, test_multiple_clients)
727728 zassert_ok (k_sem_take (& sem1 , K_MSEC (MORE_THAN_EXCHANGE_LIFETIME_MS )));
728729 zassert_ok (k_sem_take (& sem2 , K_MSEC (MORE_THAN_EXCHANGE_LIFETIME_MS )));
729730 zassert_equal (last_response_code , COAP_RESPONSE_CODE_OK , "Unexpected response" );
731+ }
732+
733+
734+ ZTEST (coap_client , test_poll_err )
735+ {
736+ int ret = 0 ;
737+ struct sockaddr address = {0 };
738+ struct coap_client_request client_request = {
739+ .method = COAP_METHOD_GET ,
740+ .confirmable = true,
741+ .path = test_path ,
742+ .fmt = COAP_CONTENT_FORMAT_TEXT_PLAIN ,
743+ .cb = coap_callback ,
744+ .payload = short_payload ,
745+ .len = strlen (short_payload ),
746+ };
747+
748+ z_impl_zsock_sendto_fake .custom_fake = z_impl_zsock_sendto_custom_fake_no_reply ;
749+ set_socket_events (ZSOCK_POLLERR );
750+
751+ k_sleep (K_MSEC (1 ));
752+
753+ LOG_INF ("Send request" );
754+ ret = coap_client_req (& client , 0 , & address , & client_request , NULL );
755+ zassert_true (ret >= 0 , "Sending request failed, %d" , ret );
756+
757+ k_sleep (K_MSEC (MORE_THAN_EXCHANGE_LIFETIME_MS ));
758+ zassert_equal (last_response_code , - EIO , "Unexpected response" );
759+ }
760+
761+ ZTEST (coap_client , test_poll_err_after_response )
762+ {
763+ int ret = 0 ;
764+ struct k_sem sem1 ;
765+ struct sockaddr address = {0 };
766+ struct coap_client_request client_request = {
767+ .method = COAP_METHOD_GET ,
768+ .confirmable = true,
769+ .path = test_path ,
770+ .fmt = COAP_CONTENT_FORMAT_TEXT_PLAIN ,
771+ .cb = coap_callback ,
772+ .payload = short_payload ,
773+ .len = strlen (short_payload ),
774+ .user_data = & sem1
775+ };
776+
777+ zassert_ok (k_sem_init (& sem1 , 0 , 1 ));
778+ z_impl_zsock_sendto_fake .custom_fake = z_impl_zsock_sendto_custom_fake_no_reply ;
779+ set_socket_events (ZSOCK_POLLIN );
780+
781+ k_sleep (K_MSEC (1 ));
782+
783+ LOG_INF ("Send request" );
784+ ret = coap_client_req (& client , 0 , & address , & client_request , NULL );
785+ zassert_true (ret >= 0 , "Sending request failed, %d" , ret );
786+
787+ zassert_ok (k_sem_take (& sem1 , K_MSEC (MORE_THAN_EXCHANGE_LIFETIME_MS )));
788+ zassert_equal (last_response_code , COAP_RESPONSE_CODE_OK , "Unexpected response" );
730789
790+ set_socket_events (ZSOCK_POLLERR );
791+ zassert_not_ok (k_sem_take (& sem1 , K_MSEC (MORE_THAN_EXCHANGE_LIFETIME_MS )));
731792}
0 commit comments