Skip to content

Commit f176ba7

Browse files
author
Marcin Tomczyk
committed
UDPSOCKET_ECHOTEST change to tolerate duplicate packets
1 parent ea3ead0 commit f176ba7

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

TESTS/netsocket/udp/udpsocket_echotest.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ EventFlags signals;
4040
static const int BUFF_SIZE = 1200;
4141
char rx_buffer[BUFF_SIZE] = {0};
4242
char tx_buffer[BUFF_SIZE] = {0};
43+
char rx_last[BUFF_SIZE] = {0};
4344

4445
static const int PKTS = 22;
4546
static const int pkt_sizes[PKTS] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \
@@ -68,6 +69,7 @@ void UDPSOCKET_ECHOTEST()
6869
int sent;
6970
int packets_sent = 0;
7071
int packets_recv = 0;
72+
bool received_duplicate_packet = false;
7173
for (unsigned int s_idx = 0; s_idx < sizeof(pkt_sizes) / sizeof(*pkt_sizes); ++s_idx) {
7274
int pkt_s = pkt_sizes[s_idx];
7375

@@ -76,6 +78,7 @@ void UDPSOCKET_ECHOTEST()
7678

7779
for (int retry_cnt = 0; retry_cnt <= 2; retry_cnt++) {
7880
memset(rx_buffer, 0, BUFF_SIZE);
81+
memset(rx_last, 0, BUFF_SIZE);
7982
sent = sock.sendto(udp_addr, tx_buffer, pkt_s);
8083
if (check_oversized_packets(sent, pkt_s)) {
8184
TEST_IGNORE_MESSAGE("This device does not handle oversized packets");
@@ -85,7 +88,17 @@ void UDPSOCKET_ECHOTEST()
8588
printf("[Round#%02d - Sender] error, returned %d\n", s_idx, sent);
8689
continue;
8790
}
88-
recvd = sock.recvfrom(NULL, rx_buffer, pkt_s);
91+
92+
do {
93+
received_duplicate_packet = false;
94+
recvd = sock.recvfrom(NULL, rx_buffer, pkt_s);
95+
//Check if received duplicated packet
96+
if (s_idx > 0 && recvd == pkt_sizes[s_idx - 1] && memcmp(rx_last, rx_buffer, recvd) == 0) {
97+
printf("[Round#%02d - Receiver] info, received duplicate packet, returned %d\n", s_idx, recvd);
98+
received_duplicate_packet = true;
99+
}
100+
} while (received_duplicate_packet);
101+
89102
if (recvd == pkt_s) {
90103
break;
91104
} else {
@@ -94,6 +107,7 @@ void UDPSOCKET_ECHOTEST()
94107
}
95108
if (memcmp(tx_buffer, rx_buffer, pkt_s) == 0) {
96109
packets_recv++;
110+
memcpy(rx_last, rx_buffer, pkt_s);
97111
}
98112
// Make sure that at least one packet of every size was sent.
99113
TEST_ASSERT_TRUE(packets_sent > packets_sent_prev);

0 commit comments

Comments
 (0)