Skip to content

Commit 4ae8984

Browse files
authored
Merge pull request #11878 from michalpasztamobica/api_hardening
Improve API documentation and test coverage
2 parents 2cf56b8 + 75472d0 commit 4ae8984

19 files changed

+579
-184
lines changed

UNITTESTS/features/netsocket/EthernetInterface/test_EthernetInterface.cpp

Lines changed: 60 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717

1818
#include "gtest/gtest.h"
1919
#include "gmock/gmock.h"
20+
21+
#include "OnboardNetworkStack_mock.h"
22+
2023
#include "features/netsocket/EthernetInterface.h"
2124
#include <iostream>
2225

@@ -50,62 +53,9 @@ MBED_WEAK EMAC &EMAC::get_default_instance()
5053
return MockEMAC::get_instance();
5154
}
5255

53-
class EmacNetworkStackMock : public OnboardNetworkStack {
54-
public:
55-
MOCK_METHOD3(gethostbyname, nsapi_error_t(const char *host, SocketAddress *address, nsapi_version_t version));
56-
MOCK_METHOD1(add_dns_server, nsapi_error_t(const SocketAddress &address));
57-
MOCK_METHOD2(call_in, nsapi_error_t(int delay, mbed::Callback<void()> func));
58-
MOCK_METHOD2(socket_open, nsapi_error_t(nsapi_socket_t *handle, nsapi_protocol_t proto));
59-
MOCK_METHOD1(socket_close, nsapi_error_t(nsapi_socket_t handle));
60-
MOCK_METHOD2(socket_bind, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address));
61-
MOCK_METHOD2(socket_listen, nsapi_error_t(nsapi_socket_t handle, int backlog));
62-
MOCK_METHOD2(socket_connect, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address));
63-
MOCK_METHOD3(socket_accept, nsapi_error_t(nsapi_socket_t server, nsapi_socket_t *handle, SocketAddress *address));
64-
MOCK_METHOD3(socket_send, nsapi_error_t(nsapi_socket_t handle, const void *data, nsapi_size_t size));
65-
MOCK_METHOD3(socket_recv, nsapi_error_t(nsapi_socket_t handle, void *data, nsapi_size_t size));
66-
MOCK_METHOD4(socket_sendto, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address, const void *data, nsapi_size_t size));
67-
MOCK_METHOD4(socket_recvfrom, nsapi_error_t(nsapi_socket_t handle, SocketAddress *address, void *data, nsapi_size_t size));
68-
MOCK_METHOD5(setsockopt, nsapi_error_t(nsapi_socket_t handle, int level, int optname, const void *optval, unsigned optlen));
69-
MOCK_METHOD5(getsockopt, nsapi_error_t(nsapi_socket_t handle, int level, int optname, const void *optval, unsigned *optlen));
70-
MOCK_METHOD3(socket_attach, void(nsapi_socket_t handle, void (*callback)(void *), void *data));
71-
MOCK_METHOD3(add_ethernet_interface, nsapi_error_t(EMAC &emac, bool default_if, OnboardNetworkStack::Interface **interface_out));
72-
73-
static EmacNetworkStackMock &get_instance()
74-
{
75-
static EmacNetworkStackMock stackMock1;
76-
return stackMock1;
77-
}
78-
79-
class InterfaceMock : public OnboardNetworkStack::Interface {
80-
public:
81-
82-
static InterfaceMock &get_instance()
83-
{
84-
static InterfaceMock test_interface;
85-
return test_interface;
86-
}
87-
MOCK_METHOD6(bringup, nsapi_error_t(bool dhcp, const char *ip,
88-
const char *netmask, const char *gw,
89-
nsapi_ip_stack_t stack,
90-
bool blocking
91-
));
92-
MOCK_METHOD0(bringdown, nsapi_error_t());
93-
MOCK_METHOD1(attach, void(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb));
94-
MOCK_CONST_METHOD0(get_connection_status, nsapi_connection_status_t());
95-
MOCK_METHOD2(get_mac_address, char *(char *buf, nsapi_size_t buflen));
96-
MOCK_METHOD1(get_ip_address, nsapi_error_t(SocketAddress *address));
97-
MOCK_METHOD2(get_ip_address, char *(char *buf, nsapi_size_t buflen));
98-
MOCK_METHOD1(get_netmask, nsapi_error_t(SocketAddress *address));
99-
MOCK_METHOD2(get_netmask, char *(char *buf, nsapi_size_t buflen));
100-
MOCK_METHOD1(get_gateway, nsapi_error_t(SocketAddress *address));
101-
MOCK_METHOD2(get_gateway, char *(char *buf, nsapi_size_t buflen));
102-
MOCK_METHOD1(get_ipv6_link_local_address, nsapi_error_t(SocketAddress *address));
103-
};
104-
};
105-
10656
OnboardNetworkStack &OnboardNetworkStack::get_default_instance()
10757
{
108-
return EmacNetworkStackMock::get_instance();
58+
return OnboardNetworkStackMock::get_instance();
10959
}
11060

11161
// Implementaion in in NetworkInterfaceDefaults.cpp
@@ -126,15 +76,15 @@ using ::testing::SetArgReferee;
12676
class TestEthernetInterface: public testing::Test {
12777
protected:
12878
EthernetInterface *iface;
129-
EmacNetworkStackMock *stackMock;
79+
OnboardNetworkStackMock *stackMock;
13080
MockEMAC *emacMock;
131-
EmacNetworkStackMock::InterfaceMock *netStackIface;
81+
OnboardNetworkStackMock::InterfaceMock *netStackIface;
13282
virtual void SetUp()
13383
{
134-
stackMock = &EmacNetworkStackMock::get_instance();
84+
stackMock = &OnboardNetworkStackMock::get_instance();
13585
emacMock = &MockEMAC::get_instance();
136-
netStackIface = &EmacNetworkStackMock::InterfaceMock::get_instance();
137-
iface = new EthernetInterface(MockEMAC::get_instance(), EmacNetworkStackMock::get_instance());
86+
netStackIface = &OnboardNetworkStackMock::InterfaceMock::get_instance();
87+
iface = new EthernetInterface(MockEMAC::get_instance(), OnboardNetworkStackMock::get_instance());
13888
}
13989

14090
virtual void TearDown()
@@ -167,6 +117,15 @@ class TestEthernetInterface: public testing::Test {
167117
TEST_F(TestEthernetInterface, constructor_default)
168118
{
169119
EXPECT_TRUE(iface);
120+
121+
// Test that this clas presents itself correctly
122+
EXPECT_NE(nullptr, iface->ethInterface());
123+
EXPECT_NE(nullptr, iface->emacInterface());
124+
125+
EXPECT_EQ(nullptr, iface->wifiInterface());
126+
EXPECT_EQ(nullptr, iface->cellularBase());
127+
EXPECT_EQ(nullptr, iface->cellularInterface());
128+
EXPECT_EQ(nullptr, iface->meshInterface());
170129
}
171130

172131
TEST_F(TestEthernetInterface, constructor_getter)
@@ -214,6 +173,9 @@ TEST_F(TestEthernetInterface, set_network)
214173
SocketAddress netmaskArg;
215174
SocketAddress gatewayArg;
216175

176+
// Before connecting return NULL
177+
EXPECT_EQ(NULL, iface->get_mac_address());
178+
217179
SocketAddress tmp;
218180
EXPECT_EQ(NSAPI_ERROR_NO_CONNECTION, iface->get_ip_address(&tmp));
219181
EXPECT_EQ(NSAPI_ERROR_NO_CONNECTION, iface->get_netmask(&tmp));
@@ -279,6 +241,45 @@ TEST_F(TestEthernetInterface, attach)
279241
iface->attach(cb);
280242
}
281243

244+
245+
TEST_F(TestEthernetInterface, get_interface_name)
246+
{
247+
char name[100] = "eth0";
248+
EXPECT_EQ(NULL, iface->get_interface_name(name));
249+
250+
doConnect();
251+
252+
// The parameter will be an internal variable.
253+
EXPECT_CALL(*netStackIface, get_interface_name(_))
254+
.Times(1)
255+
.WillOnce(Return(name));
256+
EXPECT_EQ(std::string(name), std::string(iface->get_interface_name(name)));
257+
}
258+
259+
TEST_F(TestEthernetInterface, get_ipv6_link_local_address)
260+
{
261+
SocketAddress addr("4.3.2.1");
262+
EXPECT_EQ(NSAPI_ERROR_NO_CONNECTION, iface->get_ipv6_link_local_address(&addr));
263+
EXPECT_EQ(std::string(addr.get_ip_address()), std::string("4.3.2.1"));
264+
doConnect();
265+
266+
// The parameter will be an internal variable.
267+
EXPECT_CALL(*netStackIface, get_ipv6_link_local_address(&addr))
268+
.Times(1)
269+
.WillOnce(Return(NSAPI_ERROR_OK));
270+
EXPECT_EQ(NSAPI_ERROR_OK, iface->get_ipv6_link_local_address(&addr));
271+
}
272+
273+
TEST_F(TestEthernetInterface, set_as_default)
274+
{
275+
doConnect();
276+
277+
EXPECT_CALL(*stackMock, set_default_interface(netStackIface))
278+
.Times(1);
279+
iface->set_as_default();
280+
}
281+
282+
282283
TEST_F(TestEthernetInterface, set_dhcp)
283284
{
284285
EXPECT_EQ(NSAPI_ERROR_OK, iface->set_dhcp(false));

UNITTESTS/features/netsocket/NetworkInterface/test_NetworkInterface.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,12 @@ TEST_F(TestNetworkInterface, set_blocking)
148148
EXPECT_EQ(iface->set_blocking(true), NSAPI_ERROR_UNSUPPORTED);
149149
}
150150

151+
TEST_F(TestNetworkInterface, get_ipv6_link_local_address)
152+
{
153+
SocketAddress a;
154+
EXPECT_EQ(iface->get_ipv6_link_local_address(&a), NSAPI_ERROR_UNSUPPORTED);
155+
}
156+
151157
void my_iface_callback(nsapi_event_t e, intptr_t i)
152158
{
153159
(void)e;

0 commit comments

Comments
 (0)