Skip to content

Commit 9151ac9

Browse files
authored
Merge pull request #12013 from kivaisan/udp_echotest_connect_send_recv
Add UDP ECHOTEST with connect/send/recv calls
2 parents 6409efd + c2d72b5 commit 9151ac9

File tree

4 files changed

+153
-83
lines changed

4 files changed

+153
-83
lines changed

TESTS/netsocket/README.md

Lines changed: 88 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -213,80 +213,82 @@ Test case priorities
213213

214214
Please refer to the following table for priorities of test cases. Priorities are labeled as MUST and SHOULD. MUST means this is a requirement and therefore mandatory to pass the test. SHOULD means it is recommended to pass the test if the driver implements the feature in question.
215215

216-
| | Test case | Priority |
217-
|-----|-----------------------------------------|----------|
218-
| 1 | UDPSOCKET_OPEN_DESTRUCT | MUST |
219-
| 2 | UDPSOCKET_OPEN_LIMIT | MUST |
220-
| 3 | UDPSOCKET_OPEN_TWICE | MUST |
221-
| 4 | UDPSOCKET_OPEN_CLOSE_REPEAT | MUST |
222-
| 5 | UDPSOCKET_BIND_PORT | SHOULD |
223-
| 6 | UDPSOCKET_BIND_PORT_FAIL | SHOULD |
224-
| 9 | UDPSOCKET_BIND_ADDRESS_INVALID | SHOULD |
225-
| 10 | UDPSOCKET_BIND_WRONG_TYPE | SHOULD |
226-
| 11 | UDPSOCKET_BIND_ADDRESS | SHOULD |
227-
| 12 | UDPSOCKET_BIND_UNOPENED | SHOULD |
228-
| 13 | UDPSOCKET_SENDTO_INVALID | MUST |
229-
| 14 | UDPSOCKET_SENDTO_REPEAT | MUST |
230-
| 15 | UDPSOCKET_ECHOTEST | MUST |
231-
| 16 | UDPSOCKET_ECHOTEST_NONBLOCK | MUST |
232-
| 17 | UDPSOCKET_RECV_TIMEOUT | SHOULD |
233-
| 18 | UDPSOCKET_SENDTO_TIMEOUT | SHOULD |
234-
| 19 | TCPSOCKET_OPEN_DESTRUCT | MUST |
235-
| 20 | TCPSOCKET_OPEN_LIMIT | MUST |
236-
| 21 | TCPSOCKET_OPEN_TWICE | MUST |
237-
| 22 | TCPSOCKET_OPEN_CLOSE_REPEAT | MUST |
238-
| 23 | TCPSOCKET_BIND_PORT | SHOULD |
239-
| 24 | TCPSOCKET_BIND_PORT_FAIL | SHOULD |
240-
| 27 | TCPSOCKET_BIND_ADDRESS_INVALID | SHOULD |
241-
| 28 | TCPSOCKET_BIND_WRONG_TYPE | SHOULD |
242-
| 29 | TCPSOCKET_BIND_ADDRESS | SHOULD |
243-
| 30 | TCPSOCKET_BIND_UNOPENED | SHOULD |
244-
| 31 | TCPSOCKET_CONNECT_INVALID | MUST |
245-
| 32 | TCPSOCKET_SEND_REPEAT | MUST |
246-
| 33 | TCPSOCKET_ECHOTEST | MUST |
247-
| 34 | TCPSOCKET_ECHOTEST_NONBLOCK | MUST |
248-
| 35 | TCPSOCKET_RECV_TIMEOUT | SHOULD |
249-
| 36 | TCPSOCKET_SEND_TIMEOUT | SHOULD |
250-
| 37 | TCPSOCKET_ENDPOINT_CLOSE | MUST |
251-
| 38 | UDPSOCKET_ECHOTEST_BURST | MUST |
252-
| 39 | UDPSOCKET_ECHOTEST_BURST_NONBLOCK | MUST |
253-
| 40 | TCPSOCKET_ECHOTEST_BURST | MUST |
254-
| 41 | TCPSOCKET_ECHOTEST_BURST_NONBLOCK | MUST |
255-
| 42 | TCPSOCKET_RECV_100K | MUST |
256-
| 43 | TCPSOCKET_RECV_100K_NONBLOCK | MUST |
257-
| 44 | TCPSOCKET_THREAD_PER_SOCKET_SAFETY | MUST |
258-
| 45 | TCPSOCKET_SETSOCKOPT_KEEPALIVE_VALID | SHOULD |
259-
| 46 | TLSSOCKET_OPEN_DESTRUCT | SHOULD |
260-
| 47 | TLSSOCKET_OPEN_LIMIT | SHOULD |
261-
| 48 | TLSSOCKET_OPEN_TWICE | SHOULD |
262-
| 49 | TLSSOCKET_CONNECT_INVALID | SHOULD |
263-
| 50 | TLSSOCKET_HANDSHAKE_INVALID | SHOULD |
264-
| 51 | TLSSOCKET_SEND_CLOSED | SHOULD |
265-
| 52 | TLSSOCKET_SEND_UNCONNECTED | SHOULD |
266-
| 53 | TLSSOCKET_SEND_REPEAT | SHOULD |
267-
| 54 | TLSSOCKET_SEND_TIMEOUT | SHOULD |
268-
| 55 | TLSSOCKET_ECHOTEST | SHOULD |
269-
| 56 | TLSSOCKET_ECHOTEST_NONBLOCK | SHOULD |
270-
| 57 | TLSSOCKET_ENDPOINT_CLOSE | SHOULD |
271-
| 58 | TLSSOCKET_NO_CERT | SHOULD |
272-
| 59 | TLSSOCKET_RECV_TIMEOUT | SHOULD |
273-
| 60 | TLSSOCKET_SIMULTANEOUS_TEST | SHOULD |
274-
| 61 | TLSSOCKET_ECHOTEST_BURST | SHOULD |
275-
| 62 | TLSSOCKET_ECHOTEST_BURST_NONBLOCK | SHOULD |
276-
| 63 | ASYNCHRONOUS_DNS | MUST |
277-
| 64 | ASYNCHRONOUS_DNS_CACHE | MUST |
278-
| 65 | ASYNCHRONOUS_DNS_CANCEL | MUST |
279-
| 66 | ASYNCHRONOUS_DNS_EXTERNAL_EVENT_QUEUE | MUST |
280-
| 67 | ASYNCHRONOUS_DNS_INVALID_HOST | MUST |
281-
| 68 | ASYNCHRONOUS_DNS_NON_ASYNC_AND_ASYNC | MUST |
282-
| 69 | ASYNCHRONOUS_DNS_SIMULTANEOUS_CACHE | MUST |
283-
| 70 | ASYNCHRONOUS_DNS_SIMULTANEOUS_REPEAT | MUST |
284-
| 71 | ASYNCHRONOUS_DNS_SIMULTANEOUS | MUST |
285-
| 72 | ASYNCHRONOUS_DNS_TIMEOUTS | MUST |
286-
| 73 | SYNCHRONOUS_DNS | MUST |
287-
| 74 | SYNCHRONOUS_DNS_CACHE | MUST |
288-
| 75 | SYNCHRONOUS_DNS_INVALID_HOST | MUST |
289-
| 76 | SYNCHRONOUS_DNS_MULTIPLE | MUST |
216+
| | Test case | Priority |
217+
|-----|-----------------------------------------------|----------|
218+
| 1 | UDPSOCKET_OPEN_DESTRUCT | MUST |
219+
| 2 | UDPSOCKET_OPEN_LIMIT | MUST |
220+
| 3 | UDPSOCKET_OPEN_TWICE | MUST |
221+
| 4 | UDPSOCKET_OPEN_CLOSE_REPEAT | MUST |
222+
| 5 | UDPSOCKET_BIND_PORT | SHOULD |
223+
| 6 | UDPSOCKET_BIND_PORT_FAIL | SHOULD |
224+
| 9 | UDPSOCKET_BIND_ADDRESS_INVALID | SHOULD |
225+
| 10 | UDPSOCKET_BIND_WRONG_TYPE | SHOULD |
226+
| 11 | UDPSOCKET_BIND_ADDRESS | SHOULD |
227+
| 12 | UDPSOCKET_BIND_UNOPENED | SHOULD |
228+
| 13 | UDPSOCKET_SENDTO_INVALID | MUST |
229+
| 14 | UDPSOCKET_SENDTO_REPEAT | MUST |
230+
| 15 | UDPSOCKET_ECHOTEST | MUST |
231+
| 16 | UDPSOCKET_ECHOTEST_NONBLOCK | MUST |
232+
| 17 | UDPSOCKET_RECV_TIMEOUT | SHOULD |
233+
| 18 | UDPSOCKET_SENDTO_TIMEOUT | SHOULD |
234+
| 19 | TCPSOCKET_OPEN_DESTRUCT | MUST |
235+
| 20 | TCPSOCKET_OPEN_LIMIT | MUST |
236+
| 21 | TCPSOCKET_OPEN_TWICE | MUST |
237+
| 22 | TCPSOCKET_OPEN_CLOSE_REPEAT | MUST |
238+
| 23 | TCPSOCKET_BIND_PORT | SHOULD |
239+
| 24 | TCPSOCKET_BIND_PORT_FAIL | SHOULD |
240+
| 27 | TCPSOCKET_BIND_ADDRESS_INVALID | SHOULD |
241+
| 28 | TCPSOCKET_BIND_WRONG_TYPE | SHOULD |
242+
| 29 | TCPSOCKET_BIND_ADDRESS | SHOULD |
243+
| 30 | TCPSOCKET_BIND_UNOPENED | SHOULD |
244+
| 31 | TCPSOCKET_CONNECT_INVALID | MUST |
245+
| 32 | TCPSOCKET_SEND_REPEAT | MUST |
246+
| 33 | TCPSOCKET_ECHOTEST | MUST |
247+
| 34 | TCPSOCKET_ECHOTEST_NONBLOCK | MUST |
248+
| 35 | TCPSOCKET_RECV_TIMEOUT | SHOULD |
249+
| 36 | TCPSOCKET_SEND_TIMEOUT | SHOULD |
250+
| 37 | TCPSOCKET_ENDPOINT_CLOSE | MUST |
251+
| 38 | UDPSOCKET_ECHOTEST_BURST | MUST |
252+
| 39 | UDPSOCKET_ECHOTEST_BURST_NONBLOCK | MUST |
253+
| 40 | TCPSOCKET_ECHOTEST_BURST | MUST |
254+
| 41 | TCPSOCKET_ECHOTEST_BURST_NONBLOCK | MUST |
255+
| 42 | TCPSOCKET_RECV_100K | MUST |
256+
| 43 | TCPSOCKET_RECV_100K_NONBLOCK | MUST |
257+
| 44 | TCPSOCKET_THREAD_PER_SOCKET_SAFETY | MUST |
258+
| 45 | TCPSOCKET_SETSOCKOPT_KEEPALIVE_VALID | SHOULD |
259+
| 46 | TLSSOCKET_OPEN_DESTRUCT | SHOULD |
260+
| 47 | TLSSOCKET_OPEN_LIMIT | SHOULD |
261+
| 48 | TLSSOCKET_OPEN_TWICE | SHOULD |
262+
| 49 | TLSSOCKET_CONNECT_INVALID | SHOULD |
263+
| 50 | TLSSOCKET_HANDSHAKE_INVALID | SHOULD |
264+
| 51 | TLSSOCKET_SEND_CLOSED | SHOULD |
265+
| 52 | TLSSOCKET_SEND_UNCONNECTED | SHOULD |
266+
| 53 | TLSSOCKET_SEND_REPEAT | SHOULD |
267+
| 54 | TLSSOCKET_SEND_TIMEOUT | SHOULD |
268+
| 55 | TLSSOCKET_ECHOTEST | SHOULD |
269+
| 56 | TLSSOCKET_ECHOTEST_NONBLOCK | SHOULD |
270+
| 57 | TLSSOCKET_ENDPOINT_CLOSE | SHOULD |
271+
| 58 | TLSSOCKET_NO_CERT | SHOULD |
272+
| 59 | TLSSOCKET_RECV_TIMEOUT | SHOULD |
273+
| 60 | TLSSOCKET_SIMULTANEOUS_TEST | SHOULD |
274+
| 61 | TLSSOCKET_ECHOTEST_BURST | SHOULD |
275+
| 62 | TLSSOCKET_ECHOTEST_BURST_NONBLOCK | SHOULD |
276+
| 63 | ASYNCHRONOUS_DNS | MUST |
277+
| 64 | ASYNCHRONOUS_DNS_CACHE | MUST |
278+
| 65 | ASYNCHRONOUS_DNS_CANCEL | MUST |
279+
| 66 | ASYNCHRONOUS_DNS_EXTERNAL_EVENT_QUEUE | MUST |
280+
| 67 | ASYNCHRONOUS_DNS_INVALID_HOST | MUST |
281+
| 68 | ASYNCHRONOUS_DNS_NON_ASYNC_AND_ASYNC | MUST |
282+
| 69 | ASYNCHRONOUS_DNS_SIMULTANEOUS_CACHE | MUST |
283+
| 70 | ASYNCHRONOUS_DNS_SIMULTANEOUS_REPEAT | MUST |
284+
| 71 | ASYNCHRONOUS_DNS_SIMULTANEOUS | MUST |
285+
| 72 | ASYNCHRONOUS_DNS_TIMEOUTS | MUST |
286+
| 73 | SYNCHRONOUS_DNS | MUST |
287+
| 74 | SYNCHRONOUS_DNS_CACHE | MUST |
288+
| 75 | SYNCHRONOUS_DNS_INVALID_HOST | MUST |
289+
| 76 | SYNCHRONOUS_DNS_MULTIPLE | MUST |
290+
| 77 | UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV | MUST |
291+
| 78 | UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV | MUST |
290292

291293

292294

@@ -833,6 +835,18 @@ mode.
833835
- Errors returned from `recvfrom()` calls are tolerated.
834836
- Calculate packet loss rate. The maximum tolerated packet loss rate is 30%.
835837

838+
### UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV
839+
840+
**Description:**
841+
842+
This test is exactly the same test as UDPSOCKET_ECHOTEST, except instead of using `sendto()` and `recvfrom()` methods, this uses TCPSocket-like `connect()`, `send()` and `recv()` methods.
843+
844+
### UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV
845+
846+
**Description:**
847+
848+
This test is exactly the same test as UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV, except instead of using `sendto()` and `recvfrom()` methods, this uses TCPSocket-like `connect()`, `send()` and `recv()` methods.
849+
836850
### UDPSOCKET_RECV_TIMEOUT
837851

838852
**Description:**

TESTS/netsocket/udp/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,9 +192,11 @@ Case cases[] = {
192192
Case("UDPSOCKET_BIND_WRONG_TYPE", UDPSOCKET_BIND_WRONG_TYPE),
193193
Case("UDPSOCKET_BIND_UNOPENED", UDPSOCKET_BIND_UNOPENED),
194194
Case("UDPSOCKET_ECHOTEST_NONBLOCK", UDPSOCKET_ECHOTEST_NONBLOCK),
195+
Case("UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV", UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV),
195196
Case("UDPSOCKET_ECHOTEST_BURST_NONBLOCK", UDPSOCKET_ECHOTEST_BURST_NONBLOCK),
196197
Case("UDPSOCKET_SENDTO_REPEAT", UDPSOCKET_SENDTO_REPEAT),
197198
Case("UDPSOCKET_ECHOTEST", UDPSOCKET_ECHOTEST),
199+
Case("UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV", UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV),
198200
Case("UDPSOCKET_ECHOTEST_BURST", UDPSOCKET_ECHOTEST_BURST),
199201
};
200202

TESTS/netsocket/udp/udp_tests.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ static const int MAX_SEND_SIZE_IPV6 = 1220;
5454
* Test cases
5555
*/
5656
void UDPSOCKET_ECHOTEST();
57+
void UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV();
5758
void UDPSOCKET_ECHOTEST_NONBLOCK();
59+
void UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV();
5860
void UDPSOCKET_ECHOTEST_BURST();
5961
void UDPSOCKET_ECHOTEST_BURST_NONBLOCK();
6062
void UDPSOCKET_OPEN_CLOSE_REPEAT();

TESTS/netsocket/udp/udpsocket_echotest.cpp

Lines changed: 61 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ static void _sigio_handler()
6161
signals.set(SIGNAL_SIGIO_RX | SIGNAL_SIGIO_TX);
6262
}
6363

64-
void UDPSOCKET_ECHOTEST()
64+
void UDPSOCKET_ECHOTEST_impl(bool use_sendto)
6565
{
6666
SocketAddress udp_addr;
6767
SocketAddress recv_addr;
@@ -71,6 +71,10 @@ void UDPSOCKET_ECHOTEST()
7171
UDPSocket sock;
7272
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.open(NetworkInterface::get_default_instance()));
7373

74+
if (!use_sendto) {
75+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.connect(udp_addr));
76+
}
77+
7478
sock.set_timeout(SOCKET_TIMEOUT);
7579
int recvd;
7680
int sent;
@@ -85,7 +89,11 @@ void UDPSOCKET_ECHOTEST()
8589

8690
for (int retry_cnt = 0; retry_cnt <= 2; retry_cnt++) {
8791
memset(rx_buffer, 0, BUFF_SIZE);
88-
sent = sock.sendto(udp_addr, tx_buffer, pkt_s);
92+
if (use_sendto) {
93+
sent = sock.sendto(udp_addr, tx_buffer, pkt_s);
94+
} else {
95+
sent = sock.send(tx_buffer, pkt_s);
96+
}
8997
if (check_oversized_packets(sent, pkt_s)) {
9098
TEST_IGNORE_MESSAGE("This device does not handle oversized packets");
9199
} else if (sent == pkt_s) {
@@ -97,7 +105,11 @@ void UDPSOCKET_ECHOTEST()
97105

98106
do {
99107
received_duplicate_packet = false;
100-
recvd = sock.recvfrom(&recv_addr, rx_buffer, pkt_s);
108+
if (use_sendto) {
109+
recvd = sock.recvfrom(&recv_addr, rx_buffer, pkt_s);
110+
} else {
111+
recvd = sock.recv(rx_buffer, pkt_s);
112+
}
101113
//Check if received duplicated packet
102114
for (unsigned int d_idx = 0; d_idx < PKTS; ++d_idx) {
103115
if (pkt_received[d_idx] && d_idx != s_idx && recvd == pkt_sizes[d_idx]) {
@@ -114,9 +126,12 @@ void UDPSOCKET_ECHOTEST()
114126
tr_error("[Round#%02d - Receiver] error, returned %d", s_idx, recvd);
115127
}
116128
}
117-
// Verify received address is correct
118-
TEST_ASSERT(udp_addr == recv_addr);
119-
TEST_ASSERT_EQUAL(udp_addr.get_port(), recv_addr.get_port());
129+
130+
if (use_sendto) {
131+
// Verify received address is correct
132+
TEST_ASSERT(udp_addr == recv_addr);
133+
TEST_ASSERT_EQUAL(udp_addr.get_port(), recv_addr.get_port());
134+
}
120135

121136
if (memcmp(tx_buffer, rx_buffer, pkt_s) == 0) {
122137
packets_recv++;
@@ -135,7 +150,18 @@ void UDPSOCKET_ECHOTEST()
135150
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.close());
136151
}
137152

138-
void UDPSOCKET_ECHOTEST_NONBLOCK()
153+
void UDPSOCKET_ECHOTEST()
154+
{
155+
UDPSOCKET_ECHOTEST_impl(true);
156+
}
157+
158+
void UDPSOCKET_ECHOTEST_CONNECT_SEND_RECV()
159+
{
160+
UDPSOCKET_ECHOTEST_impl(false);
161+
}
162+
163+
164+
void UDPSOCKET_ECHOTEST_NONBLOCK_impl(bool use_sendto)
139165
{
140166
tc_exec_time.start();
141167
time_allotted = split2half_rmng_udp_test_time(); // [s]
@@ -149,6 +175,11 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
149175
return;
150176
}
151177
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
178+
179+
if (!use_sendto) {
180+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->connect(udp_addr));
181+
}
182+
152183
sock->set_blocking(false);
153184
sock->sigio(callback(_sigio_handler));
154185
int sent;
@@ -160,7 +191,12 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
160191
for (int retry_cnt = 0; retry_cnt <= RETRIES; retry_cnt++) {
161192
fill_tx_buffer_ascii(tx_buffer, pkt_s);
162193

163-
sent = sock->sendto(udp_addr, tx_buffer, pkt_s);
194+
if (use_sendto) {
195+
sent = sock->sendto(udp_addr, tx_buffer, pkt_s);
196+
} else {
197+
sent = sock->send(tx_buffer, pkt_s);
198+
}
199+
164200
if (sent == pkt_s) {
165201
packets_sent++;
166202
} else if (sent == NSAPI_ERROR_WOULD_BLOCK) {
@@ -176,7 +212,13 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
176212

177213
int recvd;
178214
for (int retry_recv = 0; retry_recv <= RETRIES; retry_recv++) {
179-
recvd = sock->recvfrom(NULL, rx_buffer, pkt_s);
215+
216+
if (use_sendto) {
217+
recvd = sock->recvfrom(NULL, rx_buffer, pkt_s);
218+
} else {
219+
recvd = sock->recv(rx_buffer, pkt_s);
220+
}
221+
180222
if (recvd == NSAPI_ERROR_WOULD_BLOCK) {
181223
if (tc_exec_time.read() >= time_allotted) {
182224
break;
@@ -230,3 +272,13 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
230272
delete sock;
231273
tc_exec_time.stop();
232274
}
275+
276+
void UDPSOCKET_ECHOTEST_NONBLOCK()
277+
{
278+
UDPSOCKET_ECHOTEST_NONBLOCK_impl(true);
279+
}
280+
281+
void UDPSOCKET_ECHOTEST_NONBLOCK_CONNECT_SEND_RECV()
282+
{
283+
UDPSOCKET_ECHOTEST_NONBLOCK_impl(false);
284+
}

0 commit comments

Comments
 (0)