17
17
18
18
#include " gtest/gtest.h"
19
19
#include " gmock/gmock.h"
20
+
21
+ #include " OnboardNetworkStack_mock.h"
22
+
20
23
#include " features/netsocket/EthernetInterface.h"
21
24
#include < iostream>
22
25
@@ -50,62 +53,9 @@ MBED_WEAK EMAC &EMAC::get_default_instance()
50
53
return MockEMAC::get_instance ();
51
54
}
52
55
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
-
106
56
OnboardNetworkStack &OnboardNetworkStack::get_default_instance ()
107
57
{
108
- return EmacNetworkStackMock ::get_instance ();
58
+ return OnboardNetworkStackMock ::get_instance ();
109
59
}
110
60
111
61
// Implementaion in in NetworkInterfaceDefaults.cpp
@@ -126,15 +76,15 @@ using ::testing::SetArgReferee;
126
76
class TestEthernetInterface : public testing ::Test {
127
77
protected:
128
78
EthernetInterface *iface;
129
- EmacNetworkStackMock *stackMock;
79
+ OnboardNetworkStackMock *stackMock;
130
80
MockEMAC *emacMock;
131
- EmacNetworkStackMock ::InterfaceMock *netStackIface;
81
+ OnboardNetworkStackMock ::InterfaceMock *netStackIface;
132
82
virtual void SetUp ()
133
83
{
134
- stackMock = &EmacNetworkStackMock ::get_instance ();
84
+ stackMock = &OnboardNetworkStackMock ::get_instance ();
135
85
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 ());
138
88
}
139
89
140
90
virtual void TearDown ()
@@ -167,6 +117,15 @@ class TestEthernetInterface: public testing::Test {
167
117
TEST_F (TestEthernetInterface, constructor_default)
168
118
{
169
119
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 ());
170
129
}
171
130
172
131
TEST_F (TestEthernetInterface, constructor_getter)
@@ -214,6 +173,9 @@ TEST_F(TestEthernetInterface, set_network)
214
173
SocketAddress netmaskArg;
215
174
SocketAddress gatewayArg;
216
175
176
+ // Before connecting return NULL
177
+ EXPECT_EQ (NULL , iface->get_mac_address ());
178
+
217
179
SocketAddress tmp;
218
180
EXPECT_EQ (NSAPI_ERROR_NO_CONNECTION, iface->get_ip_address (&tmp));
219
181
EXPECT_EQ (NSAPI_ERROR_NO_CONNECTION, iface->get_netmask (&tmp));
@@ -279,6 +241,45 @@ TEST_F(TestEthernetInterface, attach)
279
241
iface->attach (cb);
280
242
}
281
243
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
+
282
283
TEST_F (TestEthernetInterface, set_dhcp)
283
284
{
284
285
EXPECT_EQ (NSAPI_ERROR_OK, iface->set_dhcp (false ));
0 commit comments