mirror of https://github.com/ARMmbed/mbed-os.git
Add UDP ECHOTEST with connect/send/recv calls
UDPSocket can be used also similar to TCPSocket using connect(), send() and recv() methods. This commit adds UDP ECHOTESTS which uses these methods instead of sendto() and recvfrom().pull/12013/head
parent
a8ee2d8c7d
commit
767c40d970
|
@ -192,9 +192,11 @@ Case cases[] = {
|
||||||
Case("UDPSOCKET_BIND_WRONG_TYPE", UDPSOCKET_BIND_WRONG_TYPE),
|
Case("UDPSOCKET_BIND_WRONG_TYPE", UDPSOCKET_BIND_WRONG_TYPE),
|
||||||
Case("UDPSOCKET_BIND_UNOPENED", UDPSOCKET_BIND_UNOPENED),
|
Case("UDPSOCKET_BIND_UNOPENED", UDPSOCKET_BIND_UNOPENED),
|
||||||
Case("UDPSOCKET_ECHOTEST_NONBLOCK", UDPSOCKET_ECHOTEST_NONBLOCK),
|
Case("UDPSOCKET_ECHOTEST_NONBLOCK", UDPSOCKET_ECHOTEST_NONBLOCK),
|
||||||
|
Case("UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV", UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV),
|
||||||
Case("UDPSOCKET_ECHOTEST_BURST_NONBLOCK", UDPSOCKET_ECHOTEST_BURST_NONBLOCK),
|
Case("UDPSOCKET_ECHOTEST_BURST_NONBLOCK", UDPSOCKET_ECHOTEST_BURST_NONBLOCK),
|
||||||
Case("UDPSOCKET_SENDTO_REPEAT", UDPSOCKET_SENDTO_REPEAT),
|
Case("UDPSOCKET_SENDTO_REPEAT", UDPSOCKET_SENDTO_REPEAT),
|
||||||
Case("UDPSOCKET_ECHOTEST", UDPSOCKET_ECHOTEST),
|
Case("UDPSOCKET_ECHOTEST", UDPSOCKET_ECHOTEST),
|
||||||
|
Case("UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV", UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV),
|
||||||
Case("UDPSOCKET_ECHOTEST_BURST", UDPSOCKET_ECHOTEST_BURST),
|
Case("UDPSOCKET_ECHOTEST_BURST", UDPSOCKET_ECHOTEST_BURST),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,9 @@ static const int MAX_SEND_SIZE_IPV6 = 1220;
|
||||||
* Test cases
|
* Test cases
|
||||||
*/
|
*/
|
||||||
void UDPSOCKET_ECHOTEST();
|
void UDPSOCKET_ECHOTEST();
|
||||||
|
void UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV();
|
||||||
void UDPSOCKET_ECHOTEST_NONBLOCK();
|
void UDPSOCKET_ECHOTEST_NONBLOCK();
|
||||||
|
void UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV();
|
||||||
void UDPSOCKET_ECHOTEST_BURST();
|
void UDPSOCKET_ECHOTEST_BURST();
|
||||||
void UDPSOCKET_ECHOTEST_BURST_NONBLOCK();
|
void UDPSOCKET_ECHOTEST_BURST_NONBLOCK();
|
||||||
void UDPSOCKET_OPEN_CLOSE_REPEAT();
|
void UDPSOCKET_OPEN_CLOSE_REPEAT();
|
||||||
|
|
|
@ -61,7 +61,7 @@ static void _sigio_handler()
|
||||||
signals.set(SIGNAL_SIGIO_RX | SIGNAL_SIGIO_TX);
|
signals.set(SIGNAL_SIGIO_RX | SIGNAL_SIGIO_TX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSOCKET_ECHOTEST()
|
void UDPSOCKET_ECHOTEST_impl(bool use_sendto)
|
||||||
{
|
{
|
||||||
SocketAddress udp_addr;
|
SocketAddress udp_addr;
|
||||||
SocketAddress recv_addr;
|
SocketAddress recv_addr;
|
||||||
|
@ -71,6 +71,10 @@ void UDPSOCKET_ECHOTEST()
|
||||||
UDPSocket sock;
|
UDPSocket sock;
|
||||||
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.open(NetworkInterface::get_default_instance()));
|
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.open(NetworkInterface::get_default_instance()));
|
||||||
|
|
||||||
|
if (!use_sendto) {
|
||||||
|
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.connect(udp_addr));
|
||||||
|
}
|
||||||
|
|
||||||
sock.set_timeout(SOCKET_TIMEOUT);
|
sock.set_timeout(SOCKET_TIMEOUT);
|
||||||
int recvd;
|
int recvd;
|
||||||
int sent;
|
int sent;
|
||||||
|
@ -85,7 +89,11 @@ void UDPSOCKET_ECHOTEST()
|
||||||
|
|
||||||
for (int retry_cnt = 0; retry_cnt <= 2; retry_cnt++) {
|
for (int retry_cnt = 0; retry_cnt <= 2; retry_cnt++) {
|
||||||
memset(rx_buffer, 0, BUFF_SIZE);
|
memset(rx_buffer, 0, BUFF_SIZE);
|
||||||
sent = sock.sendto(udp_addr, tx_buffer, pkt_s);
|
if (use_sendto) {
|
||||||
|
sent = sock.sendto(udp_addr, tx_buffer, pkt_s);
|
||||||
|
} else {
|
||||||
|
sent = sock.send(tx_buffer, pkt_s);
|
||||||
|
}
|
||||||
if (check_oversized_packets(sent, pkt_s)) {
|
if (check_oversized_packets(sent, pkt_s)) {
|
||||||
TEST_IGNORE_MESSAGE("This device does not handle oversized packets");
|
TEST_IGNORE_MESSAGE("This device does not handle oversized packets");
|
||||||
} else if (sent == pkt_s) {
|
} else if (sent == pkt_s) {
|
||||||
|
@ -97,7 +105,11 @@ void UDPSOCKET_ECHOTEST()
|
||||||
|
|
||||||
do {
|
do {
|
||||||
received_duplicate_packet = false;
|
received_duplicate_packet = false;
|
||||||
recvd = sock.recvfrom(&recv_addr, rx_buffer, pkt_s);
|
if (use_sendto) {
|
||||||
|
recvd = sock.recvfrom(&recv_addr, rx_buffer, pkt_s);
|
||||||
|
} else {
|
||||||
|
recvd = sock.recv(rx_buffer, pkt_s);
|
||||||
|
}
|
||||||
//Check if received duplicated packet
|
//Check if received duplicated packet
|
||||||
for (unsigned int d_idx = 0; d_idx < PKTS; ++d_idx) {
|
for (unsigned int d_idx = 0; d_idx < PKTS; ++d_idx) {
|
||||||
if (pkt_received[d_idx] && d_idx != s_idx && recvd == pkt_sizes[d_idx]) {
|
if (pkt_received[d_idx] && d_idx != s_idx && recvd == pkt_sizes[d_idx]) {
|
||||||
|
@ -114,9 +126,12 @@ void UDPSOCKET_ECHOTEST()
|
||||||
tr_error("[Round#%02d - Receiver] error, returned %d", s_idx, recvd);
|
tr_error("[Round#%02d - Receiver] error, returned %d", s_idx, recvd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Verify received address is correct
|
|
||||||
TEST_ASSERT(udp_addr == recv_addr);
|
if (use_sendto) {
|
||||||
TEST_ASSERT_EQUAL(udp_addr.get_port(), recv_addr.get_port());
|
// Verify received address is correct
|
||||||
|
TEST_ASSERT(udp_addr == recv_addr);
|
||||||
|
TEST_ASSERT_EQUAL(udp_addr.get_port(), recv_addr.get_port());
|
||||||
|
}
|
||||||
|
|
||||||
if (memcmp(tx_buffer, rx_buffer, pkt_s) == 0) {
|
if (memcmp(tx_buffer, rx_buffer, pkt_s) == 0) {
|
||||||
packets_recv++;
|
packets_recv++;
|
||||||
|
@ -135,7 +150,18 @@ void UDPSOCKET_ECHOTEST()
|
||||||
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.close());
|
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.close());
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSOCKET_ECHOTEST_NONBLOCK()
|
void UDPSOCKET_ECHOTEST()
|
||||||
|
{
|
||||||
|
UDPSOCKET_ECHOTEST_impl(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV()
|
||||||
|
{
|
||||||
|
UDPSOCKET_ECHOTEST_impl(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UDPSOCKET_ECHOTEST_NONBLOCK_impl(bool use_sendto)
|
||||||
{
|
{
|
||||||
tc_exec_time.start();
|
tc_exec_time.start();
|
||||||
time_allotted = split2half_rmng_udp_test_time(); // [s]
|
time_allotted = split2half_rmng_udp_test_time(); // [s]
|
||||||
|
@ -149,6 +175,11 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
|
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
|
||||||
|
|
||||||
|
if (!use_sendto) {
|
||||||
|
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->connect(udp_addr));
|
||||||
|
}
|
||||||
|
|
||||||
sock->set_blocking(false);
|
sock->set_blocking(false);
|
||||||
sock->sigio(callback(_sigio_handler));
|
sock->sigio(callback(_sigio_handler));
|
||||||
int sent;
|
int sent;
|
||||||
|
@ -160,7 +191,12 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
|
||||||
for (int retry_cnt = 0; retry_cnt <= RETRIES; retry_cnt++) {
|
for (int retry_cnt = 0; retry_cnt <= RETRIES; retry_cnt++) {
|
||||||
fill_tx_buffer_ascii(tx_buffer, pkt_s);
|
fill_tx_buffer_ascii(tx_buffer, pkt_s);
|
||||||
|
|
||||||
sent = sock->sendto(udp_addr, tx_buffer, pkt_s);
|
if (use_sendto) {
|
||||||
|
sent = sock->sendto(udp_addr, tx_buffer, pkt_s);
|
||||||
|
} else {
|
||||||
|
sent = sock->send(tx_buffer, pkt_s);
|
||||||
|
}
|
||||||
|
|
||||||
if (sent == pkt_s) {
|
if (sent == pkt_s) {
|
||||||
packets_sent++;
|
packets_sent++;
|
||||||
} else if (sent == NSAPI_ERROR_WOULD_BLOCK) {
|
} else if (sent == NSAPI_ERROR_WOULD_BLOCK) {
|
||||||
|
@ -176,7 +212,13 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
|
||||||
|
|
||||||
int recvd;
|
int recvd;
|
||||||
for (int retry_recv = 0; retry_recv <= RETRIES; retry_recv++) {
|
for (int retry_recv = 0; retry_recv <= RETRIES; retry_recv++) {
|
||||||
recvd = sock->recvfrom(NULL, rx_buffer, pkt_s);
|
|
||||||
|
if (use_sendto) {
|
||||||
|
recvd = sock->recvfrom(NULL, rx_buffer, pkt_s);
|
||||||
|
} else {
|
||||||
|
recvd = sock->recv(rx_buffer, pkt_s);
|
||||||
|
}
|
||||||
|
|
||||||
if (recvd == NSAPI_ERROR_WOULD_BLOCK) {
|
if (recvd == NSAPI_ERROR_WOULD_BLOCK) {
|
||||||
if (tc_exec_time.read() >= time_allotted) {
|
if (tc_exec_time.read() >= time_allotted) {
|
||||||
break;
|
break;
|
||||||
|
@ -230,3 +272,13 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
|
||||||
delete sock;
|
delete sock;
|
||||||
tc_exec_time.stop();
|
tc_exec_time.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UDPSOCKET_ECHOTEST_NONBLOCK()
|
||||||
|
{
|
||||||
|
UDPSOCKET_ECHOTEST_NONBLOCK_impl(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV()
|
||||||
|
{
|
||||||
|
UDPSOCKET_ECHOTEST_NONBLOCK_impl(false);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue