Skip to content

Commit 0915097

Browse files
authored
Merge pull request #9570 from VeijoPesonen/bugfix-tests-netsocket-udp_udpsocket_echotest_nonblock
tests-netsocket-udp: UDPSOCKET_ECHOTEST_NONBLOCK fixes
2 parents db1d8fd + df3cdaa commit 0915097

File tree

3 files changed

+47
-19
lines changed

3 files changed

+47
-19
lines changed

TESTS/netsocket/udp/main.cpp

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,26 @@
3333

3434
using namespace utest::v1;
3535

36+
namespace {
37+
Timer tc_bucket; // Timer to limit a test cases run time
38+
}
39+
3640
#if MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
3741
mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
3842
#endif
3943

44+
void drop_bad_packets(UDPSocket &sock, int orig_timeout)
45+
{
46+
nsapi_error_t err;
47+
sock.set_timeout(0);
48+
while (true) {
49+
err = sock.recv(NULL, 0);
50+
if (err == NSAPI_ERROR_WOULD_BLOCK) {
51+
break;
52+
}
53+
}
54+
sock.set_timeout(orig_timeout);
55+
}
4056
static void _ifup()
4157
{
4258
NetworkInterface *net = NetworkInterface::get_default_instance();
@@ -51,18 +67,6 @@ static void _ifdown()
5167
printf("MBED: ifdown\n");
5268
}
5369

54-
void drop_bad_packets(UDPSocket &sock, int orig_timeout)
55-
{
56-
nsapi_error_t err;
57-
sock.set_timeout(0);
58-
while (true) {
59-
err = sock.recvfrom(NULL, 0, 0);
60-
if (err == NSAPI_ERROR_WOULD_BLOCK) {
61-
break;
62-
}
63-
}
64-
sock.set_timeout(orig_timeout);
65-
}
6670

6771
nsapi_version_t get_ip_version()
6872
{
@@ -80,6 +84,11 @@ void fill_tx_buffer_ascii(char *buff, size_t len)
8084
}
8185
}
8286

87+
int split2half_rmng_udp_test_time()
88+
{
89+
return (udp_global::TESTS_TIMEOUT - tc_bucket.read()) / 2;
90+
}
91+
8392
#if MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
8493
int fetch_stats()
8594
{
@@ -90,20 +99,20 @@ int fetch_stats()
9099
// Test setup
91100
utest::v1::status_t greentea_setup(const size_t number_of_cases)
92101
{
93-
GREENTEA_SETUP(480, "default_auto");
102+
GREENTEA_SETUP(udp_global::TESTS_TIMEOUT, "default_auto");
94103
_ifup();
104+
tc_bucket.start();
95105
return greentea_test_setup_handler(number_of_cases);
96106
}
97107

98108
void greentea_teardown(const size_t passed, const size_t failed, const failure_t failure)
99109
{
110+
tc_bucket.stop();
100111
_ifdown();
101112
return greentea_test_teardown_handler(passed, failed, failure);
102113
}
103114

104115
Case cases[] = {
105-
Case("UDPSOCKET_ECHOTEST", UDPSOCKET_ECHOTEST),
106-
Case("UDPSOCKET_ECHOTEST_NONBLOCK", UDPSOCKET_ECHOTEST_NONBLOCK),
107116
Case("UDPSOCKET_OPEN_CLOSE_REPEAT", UDPSOCKET_OPEN_CLOSE_REPEAT),
108117
Case("UDPSOCKET_OPEN_LIMIT", UDPSOCKET_OPEN_LIMIT),
109118
Case("UDPSOCKET_RECV_TIMEOUT", UDPSOCKET_RECV_TIMEOUT),
@@ -119,10 +128,11 @@ Case cases[] = {
119128
Case("UDPSOCKET_BIND_WRONG_TYPE", UDPSOCKET_BIND_WRONG_TYPE),
120129
Case("UDPSOCKET_BIND_UNOPENED", UDPSOCKET_BIND_UNOPENED),
121130
Case("UDPSOCKET_SENDTO_INVALID", UDPSOCKET_SENDTO_INVALID),
122-
Case("UDPSOCKET_ECHOTEST", UDPSOCKET_ECHOTEST),
123-
Case("UDPSOCKET_ECHOTEST_BURST", UDPSOCKET_ECHOTEST_BURST),
131+
Case("UDPSOCKET_ECHOTEST_NONBLOCK", UDPSOCKET_ECHOTEST_NONBLOCK),
124132
Case("UDPSOCKET_ECHOTEST_BURST_NONBLOCK", UDPSOCKET_ECHOTEST_BURST_NONBLOCK),
125133
Case("UDPSOCKET_SENDTO_REPEAT", UDPSOCKET_SENDTO_REPEAT),
134+
Case("UDPSOCKET_ECHOTEST", UDPSOCKET_ECHOTEST),
135+
Case("UDPSOCKET_ECHOTEST_BURST", UDPSOCKET_ECHOTEST_BURST),
126136
};
127137

128138
Specification specification(greentea_setup, cases, greentea_teardown, greentea_continue_handlers);

TESTS/netsocket/udp/udp_tests.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ extern mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
2828
int fetch_stats(void);
2929
#endif
3030

31+
/**
32+
* Single testcase might take only half of the remaining execution time
33+
*/
34+
int split2half_rmng_udp_test_time(); // [s]
35+
36+
namespace udp_global {
37+
static const int TESTS_TIMEOUT = 480;
38+
}
39+
3140
/*
3241
* Test cases
3342
*/

TESTS/netsocket/udp/udpsocket_echotest.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ static const int pkt_sizes[PKTS] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \
4545
100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, \
4646
1100, 1200
4747
};
48+
Timer tc_exec_time;
49+
int time_allotted;
4850
}
4951

5052
static void _sigio_handler(osThreadId id)
@@ -106,6 +108,9 @@ void udpsocket_echotest_nonblock_receiver(void *receive_bytes)
106108
for (int retry_cnt = 0; retry_cnt <= RETRIES; retry_cnt++) {
107109
recvd = sock.recvfrom(NULL, rx_buffer, expt2recv);
108110
if (recvd == NSAPI_ERROR_WOULD_BLOCK) {
111+
if (tc_exec_time.read() >= time_allotted) {
112+
break;
113+
}
109114
wait_ms(WAIT2RECV_TIMEOUT);
110115
--retry_cnt;
111116
continue;
@@ -118,7 +123,7 @@ void udpsocket_echotest_nonblock_receiver(void *receive_bytes)
118123
}
119124
}
120125

121-
drop_bad_packets(sock, -1); // timeout equivalent to set_blocking(false)
126+
drop_bad_packets(sock, 0); // timeout equivalent to set_blocking(false)
122127

123128
tx_sem.release();
124129
}
@@ -132,6 +137,8 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
132137
TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state);
133138
}
134139
#endif
140+
tc_exec_time.start();
141+
time_allotted = split2half_rmng_udp_test_time(); // [s]
135142

136143
SocketAddress udp_addr;
137144
NetworkInterface::get_default_instance()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &udp_addr);
@@ -166,7 +173,8 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
166173
packets_sent++;
167174
}
168175
if (sent == NSAPI_ERROR_WOULD_BLOCK) {
169-
if (osSignalWait(SIGNAL_SIGIO, SIGIO_TIMEOUT).status == osEventTimeout) {
176+
if (tc_exec_time.read() >= time_allotted ||
177+
osSignalWait(SIGNAL_SIGIO, SIGIO_TIMEOUT).status == osEventTimeout) {
170178
continue;
171179
}
172180
--retry_cnt;
@@ -209,4 +217,5 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
209217
#endif
210218
}
211219
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.close());
220+
tc_exec_time.stop();
212221
}

0 commit comments

Comments
 (0)