blob: 97b9d46b769d168b4754e87e16a91d398dae528c [file] [log] [blame]
Junxiao Shi2dc416d2017-07-03 04:46:16 +00001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2013-2017 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#ifndef NDN_NET_NETWORK_MONITOR_STUB_HPP
23#define NDN_NET_NETWORK_MONITOR_STUB_HPP
24
25#include "network-monitor.hpp"
26
27namespace ndn {
28namespace net {
29
30class NetworkMonitorImplStub;
31
32/** \brief a stub NetworkMonitor for unit testing
33 */
34class NetworkMonitorStub : public NetworkMonitor
35{
36public:
37 /** \brief constructor
38 * \param capabilities capabilities reported by \p getCapabilities
39 */
40 explicit
41 NetworkMonitorStub(uint32_t capabilities);
42
43 /** \brief create a NetworkInterface instance
44 */
45 static shared_ptr<NetworkInterface>
46 makeNetworkInterface();
47
48 /** \brief emit the \p onInterfaceAdded signal and add \p netif internally
49 * \param netif new network interface
50 * \post getNetworkInterface(netif->getName()) == netif
51 * \post listNetworkInterface() contains netif
52 * \throw std::invalid_argument a network interface with same name already exists
53 */
54 void
55 addInterface(shared_ptr<NetworkInterface> netif);
56
57 /** \brief emit the \p onInterfaceRemoved signal and remove \p netif internally
58 * \param ifname network interface name
59 * \post getNetworkInterface(ifname) == nullptr
60 * \post listNetworkInterface() does not contains an interface with specified name
61 * \note If specified interface name does not exist, this operation has no effect.
62 */
63 void
64 removeInterface(const std::string& ifname);
65
66 /** \brief emit the \p onEnumerationCompleted signal
67 *
68 * A real NetworkMonitor starts with an "enumerating" state, during which the initial
69 * information about network interfaces is collected from the OS. Upon discovering a network
70 * interface, it emits the \p onInterfaceAdded signal. When the initial enumerating completes,
71 * it emits the onEnumerationCompleted signal.
72 *
73 * To simulate this procedure on a newly constructed MockNetworkMonitor, the caller should
74 * invoke \p addInterface once for each network interface that already exists, and then invoke
75 * \p signalEnumerationCompleted .
76 */
77 void
78 emitEnumerationCompleted();
79
80private:
81 NetworkMonitorImplStub&
82 getImpl();
83};
84
85} // namespace net
86} // namespace ndn
87
88#endif // NDN_NET_NETWORK_MONITOR_STUB_HPP