Skip to content

Commit 4957dd5

Browse files
authored
Merge pull request #8138 from michalpasztamobica/master
Unit tests for TCPSocket, TCPServer, UDPSocket, NetworkStack, InternetSocket
2 parents fc820f5 + b98e6b6 commit 4957dd5

File tree

15 files changed

+935
-37
lines changed

15 files changed

+935
-37
lines changed

UNITTESTS/features/netsocket/InternetSocket/test_InternetSocket.cpp

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,13 @@
1919
#include "features/netsocket/InternetSocket.h"
2020
#include "NetworkStack_stub.h"
2121

22+
extern std::list<uint32_t> eventFlagsStubNextRetval;
23+
24+
// InternetSocket is an abstract class, so we have to test it via its child.
2225
class stubInternetSocket : public InternetSocket {
2326
protected:
2427
nsapi_error_t return_value = 0;
2528
public:
26-
virtual void event()
27-
{
28-
if (_callback) {
29-
_callback.call();
30-
}
31-
}
32-
3329
virtual nsapi_error_t connect(const SocketAddress &address)
3430
{
3531
return return_value;
@@ -60,6 +56,15 @@ class stubInternetSocket : public InternetSocket {
6056
{
6157
return return_value;
6258
}
59+
60+
// Testing functions
61+
void add_reader (void) { _readers++;}
62+
void rem_reader (void) { _readers--;}
63+
void add_writer (void) { _writers++;}
64+
void rem_writer (void) { _writers--;}
65+
void add_pending (void) { _pending++;}
66+
void rem_pending (void) { _pending--;}
67+
6368
protected:
6469
virtual nsapi_protocol_t get_proto()
6570
{
@@ -94,7 +99,6 @@ TEST_F(TestInternetSocket, constructor)
9499
EXPECT_TRUE(socket);
95100
}
96101

97-
98102
TEST_F(TestInternetSocket, open_null_stack)
99103
{
100104
EXPECT_EQ(socket->open(NULL), NSAPI_ERROR_PARAMETER);
@@ -126,34 +130,81 @@ TEST_F(TestInternetSocket, close)
126130
EXPECT_EQ(socket->close(), NSAPI_ERROR_OK);
127131
}
128132

133+
TEST_F(TestInternetSocket, close_no_open)
134+
{
135+
stack.return_value = NSAPI_ERROR_OK;
136+
EXPECT_EQ(socket->close(), NSAPI_ERROR_OK);
137+
}
138+
139+
TEST_F(TestInternetSocket, close_during_read)
140+
{
141+
stack.return_value = NSAPI_ERROR_OK;
142+
socket->open((NetworkStack *)&stack);
143+
// when c++11 is available use something like the code below to test the blocking behavior
144+
// socket->add_reader();
145+
// std::async(c[](){std::this_thread::sleep_for(1ms); socket->rem_reader()});
146+
EXPECT_EQ(socket->close(), NSAPI_ERROR_OK);
147+
}
148+
129149
TEST_F(TestInternetSocket, modify_multicast_group)
130150
{
131151
SocketAddress a("127.0.0.1", 1024);
132152
stack.return_value = NSAPI_ERROR_OK;
133153
socket->open((NetworkStack *)&stack);
134-
154+
// when c++11 is available use something like the code below to test the blocking behavior
155+
// socket->add_reader();
156+
// std::async(c[](){std::this_thread::sleep_for(1ms); socket->rem_reader()});
135157
EXPECT_EQ(socket->join_multicast_group(a), NSAPI_ERROR_UNSUPPORTED);
136158
EXPECT_EQ(socket->leave_multicast_group(a), NSAPI_ERROR_UNSUPPORTED);
137159
}
138160

139-
TEST_F(TestInternetSocket, set_blocking)
161+
// set_blocking and set_timeout are tested within TCPSocket.
162+
163+
TEST_F(TestInternetSocket, bind_no_socket)
164+
{
165+
EXPECT_EQ(socket->bind(1), NSAPI_ERROR_NO_SOCKET);
166+
}
167+
168+
TEST_F(TestInternetSocket, bind)
169+
{
170+
socket->open((NetworkStack *)&stack);
171+
EXPECT_EQ(socket->bind("127.0.0.1", 80), NSAPI_ERROR_OK);
172+
}
173+
174+
TEST_F(TestInternetSocket, bind_nullstring)
140175
{
141-
socket->set_blocking(false);
142-
socket->set_blocking(true);
176+
socket->open((NetworkStack *)&stack);
177+
EXPECT_EQ(socket->bind(NULL, 80), NSAPI_ERROR_OK);
143178
}
144179

180+
// setsockopt and getsockopt are really just calling the underlying stack functions
181+
145182
TEST_F(TestInternetSocket, setsockopt_no_stack)
146183
{
147-
socket->close();
148184
EXPECT_EQ(socket->setsockopt(0, 0, 0, 0), NSAPI_ERROR_NO_SOCKET);
149185
}
150186

187+
TEST_F(TestInternetSocket, setsockopt)
188+
{
189+
socket->open((NetworkStack *)&stack);
190+
EXPECT_EQ(socket->setsockopt(0, 0, 0, 0), NSAPI_ERROR_UNSUPPORTED);
191+
}
192+
193+
TEST_F(TestInternetSocket, getsockopt_no_stack)
194+
{
195+
EXPECT_EQ(socket->getsockopt(0, 0, 0, 0), NSAPI_ERROR_NO_SOCKET);
196+
}
197+
198+
TEST_F(TestInternetSocket, getsockopt)
199+
{
200+
socket->open((NetworkStack *)&stack);
201+
EXPECT_EQ(socket->getsockopt(0, 0, 0, 0), NSAPI_ERROR_UNSUPPORTED);
202+
}
203+
151204
TEST_F(TestInternetSocket, sigio)
152205
{
153206
callback_is_called = false;
154-
// I'm calling sigio() through the DEPRECATED method, just to get coverage for both.
155-
// Not sure if this is wise at all, we should not aim for 100%
156207
socket->sigio(mbed::callback(my_callback));
157-
socket->event();
208+
socket->close(); // Trigger event;
158209
EXPECT_EQ(callback_is_called, true);
159210
}

UNITTESTS/features/netsocket/NetworkInterface/test_NetworkInterface.cpp

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "gtest/gtest.h"
1919
#include "features/netsocket/NetworkInterface.h"
20+
#include "NetworkStack_stub.h"
2021

2122
class stubNetworkInterface : public NetworkInterface {
2223
virtual nsapi_error_t connect()
@@ -29,8 +30,10 @@ class stubNetworkInterface : public NetworkInterface {
2930
};
3031
virtual NetworkStack *get_stack()
3132
{
32-
return NULL;
33+
return &stack;
3334
};
35+
public:
36+
NetworkStackstub stack;
3437
};
3538

3639
class TestNetworkInterface : public testing::Test {
@@ -53,8 +56,79 @@ TEST_F(TestNetworkInterface, constructor)
5356
EXPECT_TRUE(iface);
5457
}
5558

59+
// get_default_instance is tested along with the implementations of NetworkInterface.
60+
5661
TEST_F(TestNetworkInterface, get_mac_address)
5762
{
5863
char *n = 0;
5964
EXPECT_EQ(iface->get_mac_address(), n);
6065
}
66+
67+
TEST_F(TestNetworkInterface, get_ip_address)
68+
{
69+
char *n = 0;
70+
EXPECT_EQ(iface->get_ip_address(), n);
71+
}
72+
73+
TEST_F(TestNetworkInterface, get_netmask)
74+
{
75+
char *n = 0;
76+
EXPECT_EQ(iface->get_netmask(), n);
77+
}
78+
79+
TEST_F(TestNetworkInterface, get_gateway)
80+
{
81+
char *n = 0;
82+
EXPECT_EQ(iface->get_gateway(), n);
83+
}
84+
85+
TEST_F(TestNetworkInterface, set_network)
86+
{
87+
EXPECT_EQ(iface->set_network("127.0.0.1", "255.255.0.0", "127.0.0.1"), NSAPI_ERROR_UNSUPPORTED);
88+
}
89+
90+
TEST_F(TestNetworkInterface, set_dhcp)
91+
{
92+
EXPECT_EQ(iface->set_dhcp(true), NSAPI_ERROR_OK);
93+
EXPECT_EQ(iface->set_dhcp(false), NSAPI_ERROR_UNSUPPORTED);
94+
}
95+
96+
TEST_F(TestNetworkInterface, gethostbyname)
97+
{
98+
SocketAddress a;
99+
EXPECT_EQ(iface->gethostbyname("host", &a, NSAPI_UNSPEC), NSAPI_ERROR_OK);
100+
}
101+
102+
103+
static bool callback_is_called;
104+
static void my_callback(nsapi_error_t result, SocketAddress *address)
105+
{
106+
(void)result;
107+
(void)address;
108+
callback_is_called = true;
109+
}
110+
111+
TEST_F(TestNetworkInterface, gethostbyname_async)
112+
{
113+
SocketAddress a;
114+
EXPECT_EQ(iface->gethostbyname_async("host", mbed::callback(my_callback), NSAPI_UNSPEC), NSAPI_ERROR_OK);
115+
EXPECT_EQ(iface->gethostbyname_async_cancel(1), NSAPI_ERROR_OK);
116+
}
117+
118+
TEST_F(TestNetworkInterface, add_dns_server)
119+
{
120+
SocketAddress a("127.0.0.1", 1024);
121+
EXPECT_EQ(iface->add_dns_server(a), NSAPI_ERROR_OK);
122+
}
123+
124+
TEST_F(TestNetworkInterface, get_connection_status)
125+
{
126+
EXPECT_EQ(iface->get_connection_status(), NSAPI_ERROR_UNSUPPORTED);
127+
}
128+
129+
TEST_F(TestNetworkInterface, set_blocking)
130+
{
131+
EXPECT_EQ(iface->set_blocking(true), NSAPI_ERROR_UNSUPPORTED);
132+
}
133+
134+
// No way to test attach as it doesn't do or return anything.

UNITTESTS/features/netsocket/NetworkInterface/unittest.cmake

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,21 @@
55

66
# Source files
77
set(unittest-sources
8+
../features/netsocket/SocketAddress.cpp
9+
../features/netsocket/NetworkStack.cpp
810
../features/netsocket/NetworkInterface.cpp
11+
../features/frameworks/nanostack-libservice/source/libip4string/ip4tos.c
12+
../features/frameworks/nanostack-libservice/source/libip4string/stoip4.c
913
)
1014

1115
# Test files
1216
set(unittest-test-sources
17+
stubs/Mutex_stub.cpp
18+
stubs/mbed_assert_stub.c
19+
stubs/equeue_stub.c
20+
stubs/EventQueue_stub.cpp
21+
stubs/mbed_shared_queues_stub.cpp
22+
stubs/nsapi_dns_stub.cpp
23+
stubs/EventFlags_stub.cpp
1324
features/netsocket/NetworkInterface/test_NetworkInterface.cpp
1425
)

0 commit comments

Comments
 (0)