Skip to content

Commit 4611662

Browse files
authored
Merge pull request #11612 from michalpasztamobica/coverage_gaps_unitests
IPCore unittests improvements
2 parents 7d8f1b9 + 66c4b13 commit 4611662

File tree

7 files changed

+84
-10
lines changed

7 files changed

+84
-10
lines changed

UNITTESTS/features/netsocket/DTLSSocket/test_DTLSSocket.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ TEST_F(TestDTLSSocket, constructor)
5454
EXPECT_TRUE(socket);
5555
}
5656

57+
TEST_F(TestDTLSSocket, connect_no_socket)
58+
{
59+
EXPECT_TRUE(socket);
60+
EXPECT_EQ(socket->connect("127.0.0.1", 1024), NSAPI_ERROR_NO_SOCKET);
61+
}
62+
5763
/* connect */
5864

5965
TEST_F(TestDTLSSocket, connect)

UNITTESTS/features/netsocket/InternetSocket/test_InternetSocket.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
#include "gtest/gtest.h"
1919
#include "features/netsocket/InternetSocket.h"
2020
#include "NetworkStack_stub.h"
21+
#include <future>
22+
#include <thread>
23+
#include <chrono>
2124

2225
extern std::list<uint32_t> eventFlagsStubNextRetval;
2326

@@ -155,20 +158,29 @@ TEST_F(TestInternetSocket, close_during_read)
155158
{
156159
stack.return_value = NSAPI_ERROR_OK;
157160
socket->open((NetworkStack *)&stack);
158-
// when c++11 is available use something like the code below to test the blocking behavior
159-
// socket->add_reader();
160-
// std::async(c[](){std::this_thread::sleep_for(1ms); socket->rem_reader()});
161+
// Simulate the blocking behavior by adding a reader.
162+
socket->add_reader();
163+
// The reader will be removed after we attempt to close the socket.
164+
auto delay = std::chrono::milliseconds(2);
165+
auto fut = std::async(std::launch::async, [&]() {
166+
std::this_thread::sleep_for(delay);
167+
socket->rem_reader();
168+
});
169+
170+
// close() will block until the other thread calls rem_reader()
171+
auto start = std::chrono::system_clock::now();
161172
EXPECT_EQ(socket->close(), NSAPI_ERROR_OK);
173+
auto end = std::chrono::system_clock::now();
174+
175+
auto diff = end - start;
176+
EXPECT_LE(delay, end - start);
162177
}
163178

164179
TEST_F(TestInternetSocket, modify_multicast_group)
165180
{
166181
SocketAddress a("127.0.0.1", 1024);
167182
stack.return_value = NSAPI_ERROR_OK;
168183
socket->open((NetworkStack *)&stack);
169-
// when c++11 is available use something like the code below to test the blocking behavior
170-
// socket->add_reader();
171-
// std::async(c[](){std::this_thread::sleep_for(1ms); socket->rem_reader()});
172184
EXPECT_EQ(socket->join_multicast_group(a), NSAPI_ERROR_UNSUPPORTED);
173185
EXPECT_EQ(socket->leave_multicast_group(a), NSAPI_ERROR_UNSUPPORTED);
174186
}

UNITTESTS/features/netsocket/NetworkInterface/test_NetworkInterface.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class TestNetworkInterface : public testing::Test {
6464
TEST_F(TestNetworkInterface, constructor)
6565
{
6666
EXPECT_TRUE(iface);
67+
iface->set_as_default(); //Empty function. Just trigger it, so it doesn't obscure coverage reports.
6768
}
6869

6970
// get_default_instance is tested along with the implementations of NetworkInterface.
@@ -92,6 +93,12 @@ TEST_F(TestNetworkInterface, get_gateway)
9293
EXPECT_EQ(iface->get_gateway(), n);
9394
}
9495

96+
TEST_F(TestNetworkInterface, get_interface_name)
97+
{
98+
char *n = 0;
99+
EXPECT_EQ(iface->get_interface_name(n), n);
100+
}
101+
95102
TEST_F(TestNetworkInterface, set_network)
96103
{
97104
EXPECT_EQ(iface->set_network("127.0.0.1", "255.255.0.0", "127.0.0.1"), NSAPI_ERROR_UNSUPPORTED);
@@ -168,7 +175,7 @@ TEST_F(TestNetworkInterface, add_event_listener)
168175

169176
TEST_F(TestNetworkInterface, remove_event_listener)
170177
{
171-
// Add two callback and check that both are called
178+
// Add two callbacks and check that both are called
172179
callback_is_called = false;
173180
second_callback_called = false;
174181
iface->add_event_listener(my_iface_callback);
@@ -215,7 +222,6 @@ TEST_F(TestNetworkInterface, correct_event_listener_per_interface)
215222
EXPECT_EQ(second_callback_called, true);
216223

217224
iface->remove_event_listener(my_iface_callback);
218-
iface2->remove_event_listener(my_iface_callback2);
219-
225+
// Do not call iface2->remove_event_listener, so the destructor can take care of this.
220226
delete iface2;
221227
}

UNITTESTS/features/netsocket/SocketAddress/test_SocketAddress.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,5 +162,9 @@ TEST_F(TestSocketAddress, bool_operator_ip6_true)
162162
EXPECT_TRUE(addr ? true : false);
163163
}
164164

165-
165+
TEST_F(TestSocketAddress, bool_operator_ip6_false)
166+
{
167+
SocketAddress addr("0:0:0:0:0:0:0:0", 80);
168+
EXPECT_FALSE(addr ? true : false);
169+
}
166170

UNITTESTS/features/netsocket/TCPSocket/test_TCPSocket.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ TEST_F(TestTCPSocket, connect)
7777
stack.return_value = NSAPI_ERROR_OK;
7878
const SocketAddress a("127.0.0.1", 1024);
7979
EXPECT_EQ(socket->connect(a), NSAPI_ERROR_OK);
80+
EXPECT_EQ(socket->setsockopt(NSAPI_SOCKET, NSAPI_BIND_TO_DEVICE, "12345", 5), NSAPI_ERROR_UNSUPPORTED);
81+
EXPECT_EQ(socket->connect("127.0.0.1", 1024), NSAPI_ERROR_OK);
8082
}
8183

8284
TEST_F(TestTCPSocket, connect_no_open)

UNITTESTS/features/netsocket/TLSSocketWrapper/test_TLSSocketWrapper.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,20 @@ TEST_F(TestTLSSocketWrapper, constructor_hostname)
105105
delete wrapper2;
106106
}
107107

108+
TEST_F(TestTLSSocketWrapper, no_socket)
109+
{
110+
TLSSocketWrapper *wrapperTmp = new TLSSocketWrapper(NULL);
111+
const SocketAddress a("127.0.0.1", 1024);
112+
EXPECT_EQ(wrapperTmp->connect(a), NSAPI_ERROR_NO_SOCKET);
113+
EXPECT_EQ(wrapperTmp->bind(a), NSAPI_ERROR_NO_SOCKET);
114+
EXPECT_EQ(wrapperTmp->setsockopt(0, 0, 0, 0), NSAPI_ERROR_NO_SOCKET);
115+
EXPECT_EQ(wrapperTmp->getsockopt(0, 0, 0, 0), NSAPI_ERROR_NO_SOCKET);
116+
EXPECT_EQ(wrapperTmp->send(dataBuf, dataSize), NSAPI_ERROR_NO_SOCKET);
117+
EXPECT_EQ(wrapperTmp->recv(dataBuf, dataSize), NSAPI_ERROR_NO_SOCKET);
118+
EXPECT_EQ(wrapperTmp->close(), NSAPI_ERROR_NO_SOCKET);
119+
delete wrapperTmp;
120+
}
121+
108122
/* connect */
109123

110124
TEST_F(TestTLSSocketWrapper, connect)
@@ -194,6 +208,11 @@ TEST_F(TestTLSSocketWrapper, connect_handshake_fail_ssl_handshake_in_progress)
194208
mbedtls_stub.retArray[2] = MBEDTLS_ERR_SSL_WANT_READ; // mbedtls_ssl_handshake error
195209
const SocketAddress a("127.0.0.1", 1024);
196210
EXPECT_EQ(wrapper->connect(a), NSAPI_ERROR_IN_PROGRESS);
211+
212+
// Check that send will fail in this situation.
213+
mbedtls_stub.retArray[3] = MBEDTLS_ERR_SSL_WANT_READ; // mbedtls_ssl_handshake error
214+
eventFlagsStubNextRetval.push_back(osFlagsError); // Break the wait loop
215+
EXPECT_EQ(wrapper->send(dataBuf, dataSize), NSAPI_ERROR_WOULD_BLOCK);
197216
}
198217

199218
TEST_F(TestTLSSocketWrapper, connect_handshake_fail_ssl_get_verify_result)
@@ -243,6 +262,17 @@ TEST_F(TestTLSSocketWrapper, send_error_would_block)
243262
EXPECT_EQ(wrapper->send(dataBuf, dataSize), NSAPI_ERROR_WOULD_BLOCK);
244263
}
245264

265+
TEST_F(TestTLSSocketWrapper, send_device_error)
266+
{
267+
transport->open((NetworkStack *)&stack);
268+
mbedtls_stub.useCounter = true;
269+
mbedtls_stub.retArray[3] = MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE; // mbedtls_ssl_write
270+
eventFlagsStubNextRetval.push_back(osFlagsError); // Break the wait loop
271+
const SocketAddress a("127.0.0.1", 1024);
272+
EXPECT_EQ(wrapper->connect(a), NSAPI_ERROR_OK);
273+
EXPECT_EQ(wrapper->send(dataBuf, dataSize), NSAPI_ERROR_DEVICE_ERROR);
274+
}
275+
246276
TEST_F(TestTLSSocketWrapper, send_to)
247277
{
248278
transport->open((NetworkStack *)&stack);
@@ -294,6 +324,17 @@ TEST_F(TestTLSSocketWrapper, recv_would_block)
294324
EXPECT_EQ(wrapper->recv(dataBuf, dataSize), NSAPI_ERROR_WOULD_BLOCK);
295325
}
296326

327+
TEST_F(TestTLSSocketWrapper, recv_device_error)
328+
{
329+
transport->open((NetworkStack *)&stack);
330+
mbedtls_stub.useCounter = true;
331+
mbedtls_stub.retArray[3] = MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE; // mbedtls_ssl_write
332+
const SocketAddress a("127.0.0.1", 1024);
333+
EXPECT_EQ(wrapper->connect(a), NSAPI_ERROR_OK);
334+
eventFlagsStubNextRetval.push_back(osFlagsError); // Break the wait loop
335+
EXPECT_EQ(wrapper->recv(dataBuf, dataSize), NSAPI_ERROR_DEVICE_ERROR);
336+
}
337+
297338
TEST_F(TestTLSSocketWrapper, recv_from_no_socket)
298339
{
299340
SocketAddress a("127.0.0.1", 1024);

UNITTESTS/features/netsocket/UDPSocket/test_UDPSocket.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ TEST_F(TestUDPSocket, sendto_addr_port)
7474

7575
stack.return_value = NSAPI_ERROR_OK;
7676
EXPECT_EQ(socket->sendto("127.0.0.1", 0, 0, 0), 0);
77+
78+
EXPECT_EQ(socket->setsockopt(NSAPI_SOCKET, NSAPI_BIND_TO_DEVICE, "12324", 5), NSAPI_ERROR_UNSUPPORTED);
79+
EXPECT_EQ(socket->sendto("127.0.0.1", 0, 0, 0), 0);
7780
}
7881

7982
TEST_F(TestUDPSocket, connect)

0 commit comments

Comments
 (0)