From 546fdd2596414523a3ef0d781360d5be86ba3c5f Mon Sep 17 00:00:00 2001 From: Michal Paszta Date: Fri, 8 Nov 2019 09:24:40 +0200 Subject: [PATCH] Move OnboardNetworkStackMock to a separate file The mock was only used by EthernetInterface tests, but we can reuse it for other tests as well. --- .../test_EthernetInterface.cpp | 68 ++------------- UNITTESTS/stubs/NetworkStack_stub.h | 7 ++ UNITTESTS/stubs/OnboardNetworkStack_mock.h | 82 +++++++++++++++++++ 3 files changed, 98 insertions(+), 59 deletions(-) create mode 100644 UNITTESTS/stubs/OnboardNetworkStack_mock.h diff --git a/UNITTESTS/features/netsocket/EthernetInterface/test_EthernetInterface.cpp b/UNITTESTS/features/netsocket/EthernetInterface/test_EthernetInterface.cpp index 03d644db60..6580c404d6 100644 --- a/UNITTESTS/features/netsocket/EthernetInterface/test_EthernetInterface.cpp +++ b/UNITTESTS/features/netsocket/EthernetInterface/test_EthernetInterface.cpp @@ -17,6 +17,9 @@ #include "gtest/gtest.h" #include "gmock/gmock.h" + +#include "OnboardNetworkStack_mock.h" + #include "features/netsocket/EthernetInterface.h" #include @@ -50,62 +53,9 @@ MBED_WEAK EMAC &EMAC::get_default_instance() return MockEMAC::get_instance(); } -class EmacNetworkStackMock : public OnboardNetworkStack { -public: - MOCK_METHOD3(gethostbyname, nsapi_error_t(const char *host, SocketAddress *address, nsapi_version_t version)); - MOCK_METHOD1(add_dns_server, nsapi_error_t(const SocketAddress &address)); - MOCK_METHOD2(call_in, nsapi_error_t(int delay, mbed::Callback func)); - MOCK_METHOD2(socket_open, nsapi_error_t(nsapi_socket_t *handle, nsapi_protocol_t proto)); - MOCK_METHOD1(socket_close, nsapi_error_t(nsapi_socket_t handle)); - MOCK_METHOD2(socket_bind, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address)); - MOCK_METHOD2(socket_listen, nsapi_error_t(nsapi_socket_t handle, int backlog)); - MOCK_METHOD2(socket_connect, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address)); - MOCK_METHOD3(socket_accept, nsapi_error_t(nsapi_socket_t server, nsapi_socket_t *handle, SocketAddress *address)); - MOCK_METHOD3(socket_send, nsapi_error_t(nsapi_socket_t handle, const void *data, nsapi_size_t size)); - MOCK_METHOD3(socket_recv, nsapi_error_t(nsapi_socket_t handle, void *data, nsapi_size_t size)); - MOCK_METHOD4(socket_sendto, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address, const void *data, nsapi_size_t size)); - MOCK_METHOD4(socket_recvfrom, nsapi_error_t(nsapi_socket_t handle, SocketAddress *address, void *data, nsapi_size_t size)); - MOCK_METHOD5(setsockopt, nsapi_error_t(nsapi_socket_t handle, int level, int optname, const void *optval, unsigned optlen)); - MOCK_METHOD5(getsockopt, nsapi_error_t(nsapi_socket_t handle, int level, int optname, const void *optval, unsigned *optlen)); - MOCK_METHOD3(socket_attach, void(nsapi_socket_t handle, void (*callback)(void *), void *data)); - MOCK_METHOD3(add_ethernet_interface, nsapi_error_t(EMAC &emac, bool default_if, OnboardNetworkStack::Interface **interface_out)); - - static EmacNetworkStackMock &get_instance() - { - static EmacNetworkStackMock stackMock1; - return stackMock1; - } - - class InterfaceMock : public OnboardNetworkStack::Interface { - public: - - static InterfaceMock &get_instance() - { - static InterfaceMock test_interface; - return test_interface; - } - MOCK_METHOD6(bringup, nsapi_error_t(bool dhcp, const char *ip, - const char *netmask, const char *gw, - nsapi_ip_stack_t stack, - bool blocking - )); - MOCK_METHOD0(bringdown, nsapi_error_t()); - MOCK_METHOD1(attach, void(mbed::Callback status_cb)); - MOCK_CONST_METHOD0(get_connection_status, nsapi_connection_status_t()); - MOCK_METHOD2(get_mac_address, char *(char *buf, nsapi_size_t buflen)); - MOCK_METHOD1(get_ip_address, nsapi_error_t(SocketAddress *address)); - MOCK_METHOD2(get_ip_address, char *(char *buf, nsapi_size_t buflen)); - MOCK_METHOD1(get_netmask, nsapi_error_t(SocketAddress *address)); - MOCK_METHOD2(get_netmask, char *(char *buf, nsapi_size_t buflen)); - MOCK_METHOD1(get_gateway, nsapi_error_t(SocketAddress *address)); - MOCK_METHOD2(get_gateway, char *(char *buf, nsapi_size_t buflen)); - MOCK_METHOD1(get_ipv6_link_local_address, nsapi_error_t(SocketAddress *address)); - }; -}; - OnboardNetworkStack &OnboardNetworkStack::get_default_instance() { - return EmacNetworkStackMock::get_instance(); + return OnboardNetworkStackMock::get_instance(); } // Implementaion in in NetworkInterfaceDefaults.cpp @@ -126,15 +76,15 @@ using ::testing::SetArgReferee; class TestEthernetInterface: public testing::Test { protected: EthernetInterface *iface; - EmacNetworkStackMock *stackMock; + OnboardNetworkStackMock *stackMock; MockEMAC *emacMock; - EmacNetworkStackMock::InterfaceMock *netStackIface; + OnboardNetworkStackMock::InterfaceMock *netStackIface; virtual void SetUp() { - stackMock = &EmacNetworkStackMock::get_instance(); + stackMock = &OnboardNetworkStackMock::get_instance(); emacMock = &MockEMAC::get_instance(); - netStackIface = &EmacNetworkStackMock::InterfaceMock::get_instance(); - iface = new EthernetInterface(MockEMAC::get_instance(), EmacNetworkStackMock::get_instance()); + netStackIface = &OnboardNetworkStackMock::InterfaceMock::get_instance(); + iface = new EthernetInterface(MockEMAC::get_instance(), OnboardNetworkStackMock::get_instance()); } virtual void TearDown() diff --git a/UNITTESTS/stubs/NetworkStack_stub.h b/UNITTESTS/stubs/NetworkStack_stub.h index 3102b55510..8dfe6df0d0 100644 --- a/UNITTESTS/stubs/NetworkStack_stub.h +++ b/UNITTESTS/stubs/NetworkStack_stub.h @@ -21,6 +21,13 @@ #include "netsocket/NetworkStack.h" #include +/* + * Note: If you want to: + * - control and/or set expectations for the data returned/sent from/to the stack + * - set expectations on the calls to NetworkStack + * See OnboardNetworkStack_mock.h and its OnboardNetworkStackMock class. + */ + class NetworkStackstub : public NetworkStack { public: std::list return_values; diff --git a/UNITTESTS/stubs/OnboardNetworkStack_mock.h b/UNITTESTS/stubs/OnboardNetworkStack_mock.h new file mode 100644 index 0000000000..02a91c5f3c --- /dev/null +++ b/UNITTESTS/stubs/OnboardNetworkStack_mock.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2019, Arm Limited and affiliates. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UNITTESTS_STUBS_ONBOARDNETWORKSTACK_MOCK_H_ +#define UNITTESTS_STUBS_ONBOARDNETWORKSTACK_MOCK_H_ + +#include "gtest/gtest.h" +#include "gmock/gmock.h" + +#include "netsocket/OnboardNetworkStack.h" + +/* + * Note: If all you need is a simple stub with basic return value control + * consider using NetworkStack_stub.h and its NetworkStackstub class. + */ + +class OnboardNetworkStackMock : public OnboardNetworkStack { +public: + MOCK_METHOD3(gethostbyname, nsapi_error_t(const char *host, SocketAddress *address, nsapi_version_t version)); + MOCK_METHOD1(add_dns_server, nsapi_error_t(const SocketAddress &address)); + MOCK_METHOD2(call_in, nsapi_error_t(int delay, mbed::Callback func)); + MOCK_METHOD2(socket_open, nsapi_error_t(nsapi_socket_t *handle, nsapi_protocol_t proto)); + MOCK_METHOD1(socket_close, nsapi_error_t(nsapi_socket_t handle)); + MOCK_METHOD2(socket_bind, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address)); + MOCK_METHOD2(socket_listen, nsapi_error_t(nsapi_socket_t handle, int backlog)); + MOCK_METHOD2(socket_connect, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address)); + MOCK_METHOD3(socket_accept, nsapi_error_t(nsapi_socket_t server, nsapi_socket_t *handle, SocketAddress *address)); + MOCK_METHOD3(socket_send, nsapi_error_t(nsapi_socket_t handle, const void *data, nsapi_size_t size)); + MOCK_METHOD3(socket_recv, nsapi_error_t(nsapi_socket_t handle, void *data, nsapi_size_t size)); + MOCK_METHOD4(socket_sendto, nsapi_error_t(nsapi_socket_t handle, const SocketAddress &address, const void *data, nsapi_size_t size)); + MOCK_METHOD4(socket_recvfrom, nsapi_error_t(nsapi_socket_t handle, SocketAddress *address, void *data, nsapi_size_t size)); + MOCK_METHOD5(setsockopt, nsapi_error_t(nsapi_socket_t handle, int level, int optname, const void *optval, unsigned optlen)); + MOCK_METHOD5(getsockopt, nsapi_error_t(nsapi_socket_t handle, int level, int optname, const void *optval, unsigned *optlen)); + MOCK_METHOD3(socket_attach, void(nsapi_socket_t handle, void (*callback)(void *), void *data)); + MOCK_METHOD3(add_ethernet_interface, nsapi_error_t(EMAC &emac, bool default_if, OnboardNetworkStack::Interface **interface_out)); + + static OnboardNetworkStackMock &get_instance() + { + static OnboardNetworkStackMock stackMock1; + return stackMock1; + } + + class InterfaceMock : public OnboardNetworkStack::Interface { + public: + + static InterfaceMock &get_instance() + { + static InterfaceMock test_interface; + return test_interface; + } + MOCK_METHOD6(bringup, nsapi_error_t(bool dhcp, const char *ip, + const char *netmask, const char *gw, + nsapi_ip_stack_t stack, + bool blocking + )); + MOCK_METHOD0(bringdown, nsapi_error_t()); + MOCK_METHOD1(attach, void(mbed::Callback status_cb)); + MOCK_CONST_METHOD0(get_connection_status, nsapi_connection_status_t()); + MOCK_METHOD2(get_mac_address, char *(char *buf, nsapi_size_t buflen)); + MOCK_METHOD2(get_ip_address, char *(char *buf, nsapi_size_t buflen)); + MOCK_METHOD1(get_ipv6_link_local_address, nsapi_error_t(SocketAddress *address)); + MOCK_METHOD2(get_netmask, char *(char *buf, nsapi_size_t buflen)); + MOCK_METHOD2(get_gateway, char *(char *buf, nsapi_size_t buflen)); + }; +}; + + +#endif /* UNITTESTS_STUBS_ONBOARDNETWORKSTACK_MOCK_H_ */