diff --git a/TESTS/netsocket/udp/main.cpp b/TESTS/netsocket/udp/main.cpp index 68222597cf..fb9e22f138 100644 --- a/TESTS/netsocket/udp/main.cpp +++ b/TESTS/netsocket/udp/main.cpp @@ -37,6 +37,10 @@ namespace { NetworkInterface *net; } +#if defined(MBED_NW_STATS_ENABLED) +mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0}; +#endif + NetworkInterface *get_interface() { return net; @@ -76,6 +80,15 @@ void fill_tx_buffer_ascii(char *buff, size_t len) } } +int fetch_stats() +{ +#if defined(MBED_NW_STATS_ENABLED) + return SocketStats::mbed_stats_socket_get_each(&udp_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT); +#else + return 0; +#endif +} + // Test setup utest::v1::status_t greentea_setup(const size_t number_of_cases) { diff --git a/TESTS/netsocket/udp/udp_tests.h b/TESTS/netsocket/udp/udp_tests.h index 8c909a6451..4073dcb217 100644 --- a/TESTS/netsocket/udp/udp_tests.h +++ b/TESTS/netsocket/udp/udp_tests.h @@ -21,6 +21,11 @@ NetworkInterface *get_interface(); void drop_bad_packets(UDPSocket &sock, int orig_timeout); void fill_tx_buffer_ascii(char *buff, size_t len); +int fetch_stats(void); + +#if defined(MBED_NW_STATS_ENABLED) +extern mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT]; +#endif /* * Test cases diff --git a/TESTS/netsocket/udp/udpsocket_echotest.cpp b/TESTS/netsocket/udp/udpsocket_echotest.cpp index b3ed7e7397..16b596e4a6 100644 --- a/TESTS/netsocket/udp/udpsocket_echotest.cpp +++ b/TESTS/netsocket/udp/udpsocket_echotest.cpp @@ -121,6 +121,14 @@ void udpsocket_echotest_nonblock_receiver(void *receive_bytes) void UDPSOCKET_ECHOTEST_NONBLOCK() { +#if defined(MBED_NW_STATS_ENABLED) + int j = 0; + int count = fetch_stats(); + for (; j < count; j++) { + TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state); + } +#endif + SocketAddress udp_addr; get_interface()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &udp_addr); udp_addr.set_port(MBED_CONF_APP_ECHO_SERVER_PORT); @@ -174,6 +182,14 @@ void UDPSOCKET_ECHOTEST_NONBLOCK() } } free(stack_mem); + +#if defined(MBED_NW_STATS_ENABLED) + TEST_ASSERT_EQUAL(1, fetch_stats()); + TEST_ASSERT_EQUAL(NSAPI_UDP, udp_stats[0].proto); + TEST_ASSERT(udp_stats[0].sent_bytes != 0); + TEST_ASSERT(udp_stats[0].recv_bytes != 0); +#endif + // Packet loss up to 30% tolerated if (packets_sent > 0) { double loss_ratio = 1 - ((double)packets_recv / (double)packets_sent); diff --git a/TESTS/netsocket/udp/udpsocket_open_close_repeat.cpp b/TESTS/netsocket/udp/udpsocket_open_close_repeat.cpp index dd28453c86..4fb0b57e3e 100644 --- a/TESTS/netsocket/udp/udpsocket_open_close_repeat.cpp +++ b/TESTS/netsocket/udp/udpsocket_open_close_repeat.cpp @@ -26,6 +26,11 @@ using namespace utest::v1; void UDPSOCKET_OPEN_CLOSE_REPEAT() { + int count = fetch_stats(); + for (int j = 0; j < count; j++) { + TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state); + } + UDPSocket *sock = new UDPSocket; if (!sock) { TEST_FAIL(); @@ -36,4 +41,9 @@ void UDPSOCKET_OPEN_CLOSE_REPEAT() TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->close()); } delete sock; + + count = fetch_stats(); + for (int j = 0; j < count; j++) { + TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state); + } } diff --git a/TESTS/netsocket/udp/udpsocket_open_limit.cpp b/TESTS/netsocket/udp/udpsocket_open_limit.cpp index d8f475709f..86833b51b6 100644 --- a/TESTS/netsocket/udp/udpsocket_open_limit.cpp +++ b/TESTS/netsocket/udp/udpsocket_open_limit.cpp @@ -21,6 +21,7 @@ #include "UDPSocket.h" #include "unity/unity.h" #include "utest.h" +#include "SocketStats.h" using namespace utest::v1; @@ -70,6 +71,15 @@ void UDPSOCKET_OPEN_LIMIT() break; } + int count = fetch_stats(); + int open_count = 0; + for (int j = 0; j < count; j++) { + if ((udp_stats[j].state == SOCK_OPEN) && (udp_stats[j].proto == NSAPI_UDP)) { + open_count++; + } + } + TEST_ASSERT(open_count >= 3); + UDPSocketItem *tmp; for (UDPSocketItem *it = socket_list_head; it;) { ++open_sockets[i];