Skip to content

Commit 68deb05

Browse files
author
Cruz Monrreal
authored
Merge pull request #9376 from michalpasztamobica/tcpsocket_greentea
TCP/UDP greentea tests refactoring and cleanup
2 parents 30e0d8f + 59e8ded commit 68deb05

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+183
-124
lines changed

TESTS/netsocket/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,10 @@ content at minimum:
243243
"help" : "Port of echo server",
244244
"value" : "7"
245245
}
246+
"echo-server-discard-port" : {
247+
"help" : "Discard port of echo server",
248+
"value" : "9"
249+
}
246250
}
247251
}
248252
```

TESTS/netsocket/tcp/main.cpp

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
using namespace utest::v1;
3535

3636
namespace {
37-
NetworkInterface *net;
3837
Timer tc_bucket; // Timer to limit a test cases run time
3938
}
4039

@@ -45,11 +44,6 @@ mbed_stats_socket_t tcp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
4544
char tcp_global::rx_buffer[RX_BUFF_SIZE];
4645
char tcp_global::tx_buffer[TX_BUFF_SIZE];
4746

48-
NetworkInterface *get_interface()
49-
{
50-
return net;
51-
}
52-
5347
void drop_bad_packets(TCPSocket &sock, int orig_timeout)
5448
{
5549
nsapi_error_t err;
@@ -65,46 +59,50 @@ void drop_bad_packets(TCPSocket &sock, int orig_timeout)
6559

6660
static void _ifup()
6761
{
68-
net = NetworkInterface::get_default_instance();
62+
NetworkInterface *net = NetworkInterface::get_default_instance();
6963
nsapi_error_t err = net->connect();
7064
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, err);
7165
printf("MBED: TCPClient IP address is '%s'\n", net->get_ip_address());
7266
}
7367

7468
static void _ifdown()
7569
{
76-
net->disconnect();
70+
NetworkInterface::get_default_instance()->disconnect();
7771
printf("MBED: ifdown\n");
7872
}
7973

80-
nsapi_error_t tcpsocket_connect_to_echo_srv(TCPSocket &sock)
74+
nsapi_error_t tcpsocket_connect_to_srv(TCPSocket &sock, uint16_t port)
8175
{
8276
SocketAddress tcp_addr;
8377

84-
get_interface()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &tcp_addr);
85-
tcp_addr.set_port(MBED_CONF_APP_ECHO_SERVER_PORT);
78+
NetworkInterface::get_default_instance()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &tcp_addr);
79+
tcp_addr.set_port(port);
80+
81+
printf("MBED: Server '%s', port %d\n", tcp_addr.get_ip_address(), tcp_addr.get_port());
8682

87-
nsapi_error_t err = sock.open(get_interface());
83+
nsapi_error_t err = sock.open(NetworkInterface::get_default_instance());
8884
if (err != NSAPI_ERROR_OK) {
85+
printf("Error from sock.open: %d\n", err);
8986
return err;
9087
}
9188

92-
return sock.connect(tcp_addr);
93-
}
94-
95-
nsapi_error_t tcpsocket_connect_to_discard_srv(TCPSocket &sock)
96-
{
97-
SocketAddress tcp_addr;
98-
99-
get_interface()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &tcp_addr);
100-
tcp_addr.set_port(9);
101-
102-
nsapi_error_t err = sock.open(get_interface());
89+
err = sock.connect(tcp_addr);
10390
if (err != NSAPI_ERROR_OK) {
91+
printf("Error from sock.connect: %d\n", err);
10492
return err;
10593
}
10694

107-
return sock.connect(tcp_addr);
95+
return NSAPI_ERROR_OK;
96+
}
97+
98+
nsapi_error_t tcpsocket_connect_to_echo_srv(TCPSocket &sock)
99+
{
100+
return tcpsocket_connect_to_srv(sock, MBED_CONF_APP_ECHO_SERVER_PORT);
101+
}
102+
103+
nsapi_error_t tcpsocket_connect_to_discard_srv(TCPSocket &sock)
104+
{
105+
return tcpsocket_connect_to_srv(sock, MBED_CONF_APP_ECHO_SERVER_DISCARD_PORT);
108106
}
109107

110108
void fill_tx_buffer_ascii(char *buff, size_t len)

TESTS/netsocket/tcp/tcpsocket_bind_address.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ void TCPSOCKET_BIND_ADDRESS()
3636
TCPSocket *sock = new TCPSocket;
3737
if (!sock) {
3838
TEST_FAIL();
39+
return;
3940
}
40-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(get_interface()));
41-
SocketAddress sockAddr = SocketAddress(get_interface()->get_ip_address(), 80);
41+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
42+
SocketAddress sockAddr = SocketAddress(NetworkInterface::get_default_instance()->get_ip_address(), 80);
4243
nsapi_error_t bind_result = sock->bind(sockAddr);
4344
if (bind_result == NSAPI_ERROR_UNSUPPORTED) {
4445
TEST_IGNORE_MESSAGE("bind() not supported");

TESTS/netsocket/tcp/tcpsocket_bind_address_invalid.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ void TCPSOCKET_BIND_ADDRESS_INVALID()
3636
TCPSocket *sock = new TCPSocket;
3737
if (!sock) {
3838
TEST_FAIL();
39+
return;
3940
}
40-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(get_interface()));
41+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
4142
nsapi_error_t bind_result = sock->bind("190.2.3.4", 1024);
4243
if (bind_result == NSAPI_ERROR_UNSUPPORTED) {
4344
TEST_IGNORE_MESSAGE("bind() not supported");

TESTS/netsocket/tcp/tcpsocket_bind_address_null.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ void TCPSOCKET_BIND_ADDRESS_NULL()
3636
TCPSocket *sock = new TCPSocket;
3737
if (!sock) {
3838
TEST_FAIL();
39+
return;
3940
}
40-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(get_interface()));
41+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
4142
nsapi_error_t bind_result = sock->bind(NULL, 1024);
4243
if (bind_result == NSAPI_ERROR_UNSUPPORTED) {
4344
TEST_IGNORE_MESSAGE("bind() not supported");

TESTS/netsocket/tcp/tcpsocket_bind_address_port.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ void TCPSOCKET_BIND_ADDRESS_PORT()
3636
TCPSocket *sock = new TCPSocket;
3737
if (!sock) {
3838
TEST_FAIL();
39+
return;
3940
}
40-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(get_interface()));
41-
nsapi_error_t bind_result = sock->bind(get_interface()->get_ip_address(), 80);
41+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
42+
nsapi_error_t bind_result = sock->bind(NetworkInterface::get_default_instance()->get_ip_address(), 80);
4243
if (bind_result == NSAPI_ERROR_UNSUPPORTED) {
4344
TEST_IGNORE_MESSAGE("bind() not supported");
4445
} else {

TESTS/netsocket/tcp/tcpsocket_bind_port.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ void TCPSOCKET_BIND_PORT()
3636
TCPSocket *sock = new TCPSocket;
3737
if (!sock) {
3838
TEST_FAIL();
39+
return;
3940
}
40-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(get_interface()));
41+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
4142
nsapi_error_t bind_result = sock->bind(1024);
4243
if (bind_result == NSAPI_ERROR_UNSUPPORTED) {
4344
TEST_IGNORE_MESSAGE("bind() not supported");

TESTS/netsocket/tcp/tcpsocket_bind_port_fail.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ void TCPSOCKET_BIND_PORT_FAIL()
3636
TCPSocket *sock = new TCPSocket;
3737
if (!sock) {
3838
TEST_FAIL();
39+
return;
3940
}
40-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(get_interface()));
41+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
4142
nsapi_error_t bind_result = sock->bind(1024);
4243
if (bind_result == NSAPI_ERROR_UNSUPPORTED) {
4344
TEST_IGNORE_MESSAGE("bind() not supported");
@@ -51,7 +52,7 @@ void TCPSOCKET_BIND_PORT_FAIL()
5152
if (!sock2) {
5253
TEST_FAIL();
5354
}
54-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock2->open(get_interface()));
55+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock2->open(NetworkInterface::get_default_instance()));
5556
TEST_ASSERT_EQUAL(NSAPI_ERROR_PARAMETER, sock2->bind(1024));
5657

5758
delete sock;

TESTS/netsocket/tcp/tcpsocket_bind_unopened.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ void TCPSOCKET_BIND_UNOPENED()
3636
TCPSocket *sock = new TCPSocket;
3737
if (!sock) {
3838
TEST_FAIL();
39+
return;
3940
}
4041
nsapi_error_t bind_result = sock->bind(1024);
4142
if (bind_result == NSAPI_ERROR_UNSUPPORTED) {

TESTS/netsocket/tcp/tcpsocket_bind_wrong_type.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ void TCPSOCKET_BIND_WRONG_TYPE()
3636
TCPSocket *sock = new TCPSocket;
3737
if (!sock) {
3838
TEST_FAIL();
39+
return;
3940
}
40-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(get_interface()));
41+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->open(NetworkInterface::get_default_instance()));
4142
char addr_bytes[16] = {0xfe, 0x80, 0xff, 0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
4243
SocketAddress sockAddr = SocketAddress(addr_bytes, NSAPI_IPv4, 80);
4344
nsapi_error_t bind_result = sock->bind(sockAddr);

TESTS/netsocket/tcp/tcpsocket_connect_invalid.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ using namespace utest::v1;
2727
void TCPSOCKET_CONNECT_INVALID()
2828
{
2929
TCPSocket sock;
30-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.open(get_interface()));
30+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.open(NetworkInterface::get_default_instance()));
3131

3232
TEST_ASSERT(sock.connect(NULL, 9) < 0);
3333
TEST_ASSERT(sock.connect("", 9) < 0);

TESTS/netsocket/tcp/tcpsocket_echotest.cpp

Lines changed: 51 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,25 @@ static const int pkt_sizes[PKTS] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \
3636
};
3737
TCPSocket sock;
3838
Semaphore tx_sem(0, 1);
39+
events::EventQueue *event_queue;
40+
int bytes2recv;
41+
int bytes2recv_total;
3942

4043
Timer tc_exec_time;
4144
int time_allotted;
45+
bool receive_error;
4246
}
4347

48+
void tcpsocket_echotest_nonblock_receive();
49+
4450
static void _sigio_handler(osThreadId id)
4551
{
4652
osSignalSet(id, SIGNAL_SIGIO);
53+
if (event_queue != NULL) {
54+
event_queue->call(tcpsocket_echotest_nonblock_receive);
55+
} else {
56+
TEST_FAIL_MESSAGE("_sigio_handler running when event_queue is NULL");
57+
}
4758
}
4859

4960
void TCPSOCKET_ECHOTEST()
@@ -83,33 +94,31 @@ void TCPSOCKET_ECHOTEST()
8394
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.close());
8495
}
8596

86-
void tcpsocket_echotest_nonblock_receiver(void *receive_bytes)
97+
void tcpsocket_echotest_nonblock_receive()
8798
{
88-
int bytes2recv = *(int *)receive_bytes;
89-
int recvd;
90-
while (bytes2recv) {
91-
recvd = sock.recv(&(tcp_global::rx_buffer[*(int *)receive_bytes - bytes2recv]), bytes2recv);
92-
if (recvd == NSAPI_ERROR_WOULD_BLOCK) {
93-
if (tc_exec_time.read() >= time_allotted) {
94-
TEST_FAIL();
95-
break;
96-
}
97-
wait(1);
98-
continue;
99-
} else if (recvd < 0) {
100-
TEST_FAIL();
101-
break;
99+
int recvd = sock.recv(&(tcp_global::rx_buffer[bytes2recv_total - bytes2recv]), bytes2recv);
100+
if (recvd == NSAPI_ERROR_WOULD_BLOCK) {
101+
if (tc_exec_time.read() >= time_allotted) {
102+
receive_error = true;
102103
}
104+
return;
105+
} else if (recvd < 0) {
106+
receive_error = true;
107+
} else {
103108
bytes2recv -= recvd;
104109
}
105110

106-
TEST_ASSERT_EQUAL(0, memcmp(tcp_global::tx_buffer, tcp_global::rx_buffer, *(int *)receive_bytes));
107-
108-
static int round = 0;
109-
printf("[Recevr#%02d] bytes received: %d\n", round++, *(int *)receive_bytes);
110-
111-
tx_sem.release();
111+
if (bytes2recv == 0) {
112+
TEST_ASSERT_EQUAL(0, memcmp(tcp_global::tx_buffer, tcp_global::rx_buffer, bytes2recv_total));
112113

114+
static int round = 0;
115+
printf("[Recevr#%02d] bytes received: %d\n", round++, bytes2recv_total);
116+
tx_sem.release();
117+
} else if (receive_error || bytes2recv < 0) {
118+
TEST_FAIL();
119+
tx_sem.release();
120+
}
121+
// else - no error, not all bytes were received yet.
113122
}
114123

115124
void TCPSOCKET_ECHOTEST_NONBLOCK()
@@ -124,24 +133,30 @@ void TCPSOCKET_ECHOTEST_NONBLOCK()
124133
tc_exec_time.start();
125134
time_allotted = split2half_rmng_tcp_test_time(); // [s]
126135

136+
EventQueue queue(2 * EVENTS_EVENT_SIZE);
137+
event_queue = &queue;
138+
127139
tcpsocket_connect_to_echo_srv(sock);
128140
sock.set_blocking(false);
129141
sock.sigio(callback(_sigio_handler, ThisThread::get_id()));
130142

131143
int bytes2send;
132144
int sent;
133145
int s_idx = 0;
134-
Thread *thread;
146+
receive_error = false;
135147
unsigned char *stack_mem = (unsigned char *)malloc(tcp_global::TCP_OS_STACK_SIZE);
136148
TEST_ASSERT_NOT_NULL(stack_mem);
149+
Thread *receiver_thread = new Thread(osPriorityNormal,
150+
tcp_global::TCP_OS_STACK_SIZE,
151+
stack_mem,
152+
"receiver");
153+
154+
TEST_ASSERT_EQUAL(osOK, receiver_thread->start(callback(&queue, &EventQueue::dispatch_forever)));
137155

138156
for (int pkt_s = pkt_sizes[s_idx]; s_idx < PKTS; ++s_idx) {
139157
pkt_s = pkt_sizes[s_idx];
140-
thread = new Thread(osPriorityNormal,
141-
tcp_global::TCP_OS_STACK_SIZE,
142-
stack_mem,
143-
"receiver");
144-
TEST_ASSERT_EQUAL(osOK, thread->start(callback(tcpsocket_echotest_nonblock_receiver, &pkt_s)));
158+
bytes2recv = pkt_s;
159+
bytes2recv_total = pkt_s;
145160

146161
fill_tx_buffer_ascii(tcp_global::tx_buffer, pkt_s);
147162

@@ -151,16 +166,12 @@ void TCPSOCKET_ECHOTEST_NONBLOCK()
151166
if (sent == NSAPI_ERROR_WOULD_BLOCK) {
152167
if (tc_exec_time.read() >= time_allotted ||
153168
osSignalWait(SIGNAL_SIGIO, SIGIO_TIMEOUT).status == osEventTimeout) {
154-
thread->terminate();
155-
delete thread;
156169
TEST_FAIL();
157170
goto END;
158171
}
159172
continue;
160173
} else if (sent <= 0) {
161174
printf("[Sender#%02d] network error %d\n", s_idx, sent);
162-
thread->terminate();
163-
delete thread;
164175
TEST_FAIL();
165176
goto END;
166177
}
@@ -176,12 +187,17 @@ void TCPSOCKET_ECHOTEST_NONBLOCK()
176187
}
177188
TEST_ASSERT_EQUAL(bytes2send, tcp_stats[j].sent_bytes);
178189
#endif
179-
tx_sem.wait(split2half_rmng_tcp_test_time());
180-
thread->join();
181-
delete thread;
190+
tx_sem.wait(split2half_rmng_tcp_test_time() * 1000); // *1000 to convert s->ms
191+
if (receive_error) {
192+
break;
193+
}
182194
}
183195
END:
196+
sock.sigio(NULL);
197+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.close());
198+
receiver_thread->terminate();
199+
delete receiver_thread;
200+
receiver_thread = NULL;
184201
tc_exec_time.stop();
185202
free(stack_mem);
186-
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.close());
187203
}

TESTS/netsocket/tcp/tcpsocket_echotest_burst.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ void TCPSOCKET_ECHOTEST_BURST()
7878
}
7979

8080
if (bt_left != 0) {
81-
drop_bad_packets(sock, 0);
82-
TEST_FAIL();
81+
TEST_FAIL_MESSAGE("bt_left != 0");
8382
goto END;
8483
}
8584

@@ -142,7 +141,6 @@ void TCPSOCKET_ECHOTEST_BURST_NONBLOCK()
142141

143142
if (bt_left != 0) {
144143
printf("network error %d, missing %d bytes from a burst\n", recvd, bt_left);
145-
drop_bad_packets(sock, -1);
146144
TEST_FAIL();
147145
goto END;
148146
}

TESTS/netsocket/tcp/tcpsocket_endpoint_close.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ static nsapi_error_t _tcpsocket_connect_to_daytime_srv(TCPSocket &sock)
3838
{
3939
SocketAddress tcp_addr;
4040

41-
get_interface()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &tcp_addr);
41+
NetworkInterface::get_default_instance()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &tcp_addr);
4242
tcp_addr.set_port(13);
4343

44-
nsapi_error_t err = sock.open(get_interface());
44+
nsapi_error_t err = sock.open(NetworkInterface::get_default_instance());
4545
if (err != NSAPI_ERROR_OK) {
4646
return err;
4747
}

0 commit comments

Comments
 (0)