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-
10656OnboardNetworkStack &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;
12676class TestEthernetInterface : public testing ::Test {
12777protected:
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 {
167117TEST_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
172131TEST_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+
282283TEST_F (TestEthernetInterface, set_dhcp)
283284{
284285 EXPECT_EQ (NSAPI_ERROR_OK, iface->set_dhcp (false ));
0 commit comments