mirror of https://github.com/ARMmbed/mbed-os.git
Adds more TCP and UDP test cases
Adds TCP and UDP test cases tcpsocket_open_limit udpsocket_open_limitpull/6665/head
parent
8e81d0153a
commit
c86bf1acd0
|
@ -93,6 +93,7 @@ void greentea_teardown(const size_t passed, const size_t failed, const failure_t
|
||||||
Case cases[] = {
|
Case cases[] = {
|
||||||
Case("Echo burst", test_tcpsocket_echotest_burst),
|
Case("Echo burst", test_tcpsocket_echotest_burst),
|
||||||
Case("Echo burst non-block", test_tcpsocket_echotest_burst_nonblock),
|
Case("Echo burst non-block", test_tcpsocket_echotest_burst_nonblock),
|
||||||
|
Case("Open at least 4 sockets", test_tcpsocket_open_limit),
|
||||||
Case("Receive 100k from CHARGEN service", test_tcpsocket_recv_100k),
|
Case("Receive 100k from CHARGEN service", test_tcpsocket_recv_100k),
|
||||||
Case("Receive 100k from CHARGEN service non-block", test_tcpsocket_recv_100k_nonblock),
|
Case("Receive 100k from CHARGEN service non-block", test_tcpsocket_recv_100k_nonblock),
|
||||||
Case("Receive in given time", test_tcpsocket_recv_timeout),
|
Case("Receive in given time", test_tcpsocket_recv_timeout),
|
||||||
|
|
|
@ -28,6 +28,7 @@ void fill_tx_buffer_ascii(char *buff, size_t len);
|
||||||
void test_tcpsocket_echotest_burst();
|
void test_tcpsocket_echotest_burst();
|
||||||
void test_tcpsocket_echotest_burst_nonblock();
|
void test_tcpsocket_echotest_burst_nonblock();
|
||||||
void test_tcpsocket_endpoint_close();
|
void test_tcpsocket_endpoint_close();
|
||||||
|
void test_tcpsocket_open_limit();
|
||||||
void test_tcpsocket_recv_100k();
|
void test_tcpsocket_recv_100k();
|
||||||
void test_tcpsocket_recv_100k_nonblock();
|
void test_tcpsocket_recv_100k_nonblock();
|
||||||
void test_tcpsocket_recv_timeout();
|
void test_tcpsocket_recv_timeout();
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2018, ARM Limited, All Rights Reserved
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "greentea-client/test_env.h"
|
||||||
|
#include "mbed.h"
|
||||||
|
#include MBED_CONF_APP_HEADER_FILE
|
||||||
|
#include "tcp_tests.h"
|
||||||
|
#include "TCPSocket.h"
|
||||||
|
#include "unity/unity.h"
|
||||||
|
#include "utest.h"
|
||||||
|
|
||||||
|
using namespace utest::v1;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
typedef struct TCPSocketItem {
|
||||||
|
TCPSocket *sock;
|
||||||
|
TCPSocketItem *next;
|
||||||
|
} SocketItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_tcpsocket_open_limit()
|
||||||
|
{
|
||||||
|
int open_sockets[2] = {0};
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
TCPSocketItem *socket_list_head = NULL;
|
||||||
|
TCPSocketItem *it;
|
||||||
|
|
||||||
|
TCPSocket *sock;
|
||||||
|
int ret;
|
||||||
|
while (true) {
|
||||||
|
sock = new TCPSocket;
|
||||||
|
if (!sock) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ret = sock->open(get_interface());
|
||||||
|
if (ret == NSAPI_ERROR_NO_MEMORY || ret == NSAPI_ERROR_NO_SOCKET) {
|
||||||
|
printf("[round#%02d] unable to open new socket, error: %d\n", i, ret);
|
||||||
|
delete sock;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hopefully this doesn't interfere when trying to allocate more sockets
|
||||||
|
it = new TCPSocketItem;
|
||||||
|
if (!it) {
|
||||||
|
delete sock;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
it->sock = sock;
|
||||||
|
// Order of items in the list doesn't matter
|
||||||
|
it->next = socket_list_head;
|
||||||
|
socket_list_head = it;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!socket_list_head) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
TCPSocketItem *tmp;
|
||||||
|
for(TCPSocketItem *it = socket_list_head; it;) {
|
||||||
|
++open_sockets[i];
|
||||||
|
tmp = it;
|
||||||
|
it = it->next;
|
||||||
|
socket_list_head = it;
|
||||||
|
delete tmp->sock;
|
||||||
|
delete tmp;
|
||||||
|
}
|
||||||
|
printf("[round#%02d] %d sockets opened\n", i, open_sockets[i]);
|
||||||
|
}
|
||||||
|
TEST_ASSERT_EQUAL(open_sockets[0], open_sockets[1]);
|
||||||
|
TEST_ASSERT(open_sockets[0] >= 4);
|
||||||
|
}
|
|
@ -80,6 +80,7 @@ void greentea_teardown(const size_t passed, const size_t failed, const failure_t
|
||||||
Case cases[] = {
|
Case cases[] = {
|
||||||
Case("Echo burst", test_udpsocket_echotest_burst),
|
Case("Echo burst", test_udpsocket_echotest_burst),
|
||||||
Case("Echo burst non-block", test_udpsocket_echotest_burst_nonblock),
|
Case("Echo burst non-block", test_udpsocket_echotest_burst_nonblock),
|
||||||
|
Case("Open at least 3 sockets", test_udpsocket_open_limit),
|
||||||
Case("Receive in given time", test_udpsocket_recv_timeout),
|
Case("Receive in given time", test_udpsocket_recv_timeout),
|
||||||
Case("Send in given time", test_udpsocket_sendto_timeout),
|
Case("Send in given time", test_udpsocket_sendto_timeout),
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ void fill_tx_buffer_ascii(char *buff, size_t len);
|
||||||
*/
|
*/
|
||||||
void test_udpsocket_echotest_burst();
|
void test_udpsocket_echotest_burst();
|
||||||
void test_udpsocket_echotest_burst_nonblock();
|
void test_udpsocket_echotest_burst_nonblock();
|
||||||
|
void test_udpsocket_open_limit();
|
||||||
void test_udpsocket_recv_timeout();
|
void test_udpsocket_recv_timeout();
|
||||||
void test_udpsocket_sendto_timeout();
|
void test_udpsocket_sendto_timeout();
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2018, ARM Limited, All Rights Reserved
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "greentea-client/test_env.h"
|
||||||
|
#include "mbed.h"
|
||||||
|
#include MBED_CONF_APP_HEADER_FILE
|
||||||
|
#include "udp_tests.h"
|
||||||
|
#include "UDPSocket.h"
|
||||||
|
#include "unity/unity.h"
|
||||||
|
#include "utest.h"
|
||||||
|
|
||||||
|
using namespace utest::v1;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
typedef struct UDPSocketItem {
|
||||||
|
UDPSocket *sock;
|
||||||
|
UDPSocketItem *next;
|
||||||
|
} SocketItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_udpsocket_open_limit()
|
||||||
|
{
|
||||||
|
int open_sockets[2] = {0};
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
UDPSocketItem *socket_list_head = NULL;
|
||||||
|
UDPSocketItem *it;
|
||||||
|
|
||||||
|
UDPSocket *sock;
|
||||||
|
int ret;
|
||||||
|
while (true) {
|
||||||
|
sock = new UDPSocket;
|
||||||
|
if (!sock) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ret = sock->open(get_interface());
|
||||||
|
if (ret == NSAPI_ERROR_NO_MEMORY || ret == NSAPI_ERROR_NO_SOCKET) {
|
||||||
|
printf("[round#%02d] unable to open new socket, error: %d\n", i, ret);
|
||||||
|
delete sock;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hopefully this doesn't interfere when trying to allocate more sockets
|
||||||
|
it = new UDPSocketItem;
|
||||||
|
if (!it) {
|
||||||
|
delete sock;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
it->sock = sock;
|
||||||
|
// Order of items in the list doesn't matter
|
||||||
|
it->next = socket_list_head;
|
||||||
|
socket_list_head = it;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!socket_list_head) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
UDPSocketItem *tmp;
|
||||||
|
for(UDPSocketItem *it = socket_list_head; it;) {
|
||||||
|
++open_sockets[i];
|
||||||
|
tmp = it;
|
||||||
|
it = it->next;
|
||||||
|
socket_list_head = it;
|
||||||
|
delete tmp->sock;
|
||||||
|
delete tmp;
|
||||||
|
}
|
||||||
|
printf("[round#%02d] %d sockets opened\n", i, open_sockets[i]);
|
||||||
|
}
|
||||||
|
TEST_ASSERT_EQUAL(open_sockets[0], open_sockets[1]);
|
||||||
|
// In case of lwIP one is taken by DHCP -> reduction by one to three
|
||||||
|
TEST_ASSERT(open_sockets[0] >= 3);
|
||||||
|
}
|
Loading…
Reference in New Issue