xref: /openbmc/phosphor-networkd/test/test_ethernet_interface.cpp (revision ab27a819bee0db24233f9d0e7e142b3e3424c5b8)
1c9645fe5SRatan Gupta #include "config_parser.hpp"
25978dd11SRatan Gupta #include "ipaddress.hpp"
35b17938cSWilliam A. Kennington III #include "mock_ethernet_interface.hpp"
4de70ccf6SWilliam A. Kennington III #include "test_network_manager.hpp"
547722dcfSRatan Gupta 
647722dcfSRatan Gupta #include <net/if.h>
79c441fd4SWilliam A. Kennington III #include <net/if_arp.h>
8255d514eSRatan Gupta 
957d9c506SGunnar Mills #include <sdbusplus/bus.hpp>
1084bfe679SWilliam A. Kennington III #include <stdplus/gtest/tmp.hpp>
11003b8b79SAsmitha Karunanithi #include <xyz/openbmc_project/Common/error.hpp>
1257d9c506SGunnar Mills 
1389d734b9SPatrick Williams #include <string_view>
1489d734b9SPatrick Williams 
1557d9c506SGunnar Mills #include <gtest/gtest.h>
1647722dcfSRatan Gupta 
1747722dcfSRatan Gupta namespace phosphor
1847722dcfSRatan Gupta {
1947722dcfSRatan Gupta namespace network
2047722dcfSRatan Gupta {
2147722dcfSRatan Gupta 
22bbf5e9e8SWilliam A. Kennington III using sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
23991a8e81SWilliam A. Kennington III using std::literals::string_view_literals::operator""sv;
2459e5b91dSWilliam A. Kennington III using testing::Key;
2559e5b91dSWilliam A. Kennington III using testing::UnorderedElementsAre;
2602d87c19SWilliam A. Kennington III using stdplus::operator""_sub;
27991a8e81SWilliam A. Kennington III 
2884bfe679SWilliam A. Kennington III class TestEthernetInterface : public stdplus::gtest::TestWithTmp
2947722dcfSRatan Gupta {
3047722dcfSRatan Gupta   public:
319ede1b74SWilliam A. Kennington III     stdplus::Pinned<sdbusplus::bus_t> bus;
325b17938cSWilliam A. Kennington III     std::filesystem::path confDir;
33de70ccf6SWilliam A. Kennington III     TestManager manager;
34acd6dd55SManojkiran Eda     MockEthernetInterface interface;
TestEthernetInterface()3557d9c506SGunnar Mills     TestEthernetInterface() :
3684bfe679SWilliam A. Kennington III         bus(sdbusplus::bus::new_default()), confDir(CaseTmpDir()),
3784bfe679SWilliam A. Kennington III         manager(bus, "/xyz/openbmc_test/network", confDir),
38ebb1ad0cSWilliam A. Kennington III         interface(makeInterface(bus, manager))
3947722dcfSRatan Gupta 
4089d734b9SPatrick Williams     {}
41255d514eSRatan Gupta 
makeInterface(stdplus::PinnedRef<sdbusplus::bus_t> bus,TestManager & manager)42ad205028SPatrick Williams     static MockEthernetInterface makeInterface(
43ad205028SPatrick Williams         stdplus::PinnedRef<sdbusplus::bus_t> bus, TestManager& manager)
44ebb1ad0cSWilliam A. Kennington III     {
459c441fd4SWilliam A. Kennington III         AllIntfInfo info{InterfaceInfo{
469c441fd4SWilliam A. Kennington III             .type = ARPHRD_ETHER, .idx = 1, .flags = 0, .name = "test0"}};
477784856dSWilliam A. Kennington III         return {bus, manager, info, "/xyz/openbmc_test/network"sv,
487784856dSWilliam A. Kennington III                 config::Parser()};
49ebb1ad0cSWilliam A. Kennington III     }
50ebb1ad0cSWilliam A. Kennington III 
createIPObject(IP::Protocol addressType,const std::string & ipaddress,uint8_t subnetMask)5159e5b91dSWilliam A. Kennington III     auto createIPObject(IP::Protocol addressType, const std::string& ipaddress,
52e25f8b49SWilliam A. Kennington III                         uint8_t subnetMask)
5347722dcfSRatan Gupta     {
5459e5b91dSWilliam A. Kennington III         return interface.ip(addressType, ipaddress, subnetMask, "");
5547722dcfSRatan Gupta     }
56003b8b79SAsmitha Karunanithi 
createStaticGatewayObject(const std::string & gateway,IP::Protocol protocol)57*ab27a819SRavi Teja     auto createStaticGatewayObject(const std::string& gateway,
58*ab27a819SRavi Teja                                    IP::Protocol protocol)
59*ab27a819SRavi Teja     {
60*ab27a819SRavi Teja         return interface.staticGateway(gateway, protocol);
61*ab27a819SRavi Teja     }
62*ab27a819SRavi Teja 
setNtpServers()63003b8b79SAsmitha Karunanithi     void setNtpServers()
64003b8b79SAsmitha Karunanithi     {
65003b8b79SAsmitha Karunanithi         ServerList ntpServers = {"10.1.1.1", "10.2.2.2", "10.3.3.3"};
66003b8b79SAsmitha Karunanithi         interface.EthernetInterfaceIntf::ntpServers(ntpServers);
67003b8b79SAsmitha Karunanithi     }
68003b8b79SAsmitha Karunanithi 
getNtpServers()69003b8b79SAsmitha Karunanithi     ServerList getNtpServers()
70003b8b79SAsmitha Karunanithi     {
71003b8b79SAsmitha Karunanithi         return interface.EthernetInterfaceIntf::ntpServers();
72003b8b79SAsmitha Karunanithi     }
7347722dcfSRatan Gupta };
7447722dcfSRatan Gupta 
TEST_F(TestEthernetInterface,Fields)759ecb90ebSWilliam A. Kennington III TEST_F(TestEthernetInterface, Fields)
769ecb90ebSWilliam A. Kennington III {
779ecb90ebSWilliam A. Kennington III     EXPECT_EQ(0, interface.mtu());
789ecb90ebSWilliam A. Kennington III     EXPECT_EQ("", interface.macAddress());
799ecb90ebSWilliam A. Kennington III     EXPECT_FALSE(interface.linkUp());
809ecb90ebSWilliam A. Kennington III 
81b7d6a1a7SWilliam A. Kennington III     constexpr stdplus::EtherAddr mac{0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
829ecb90ebSWilliam A. Kennington III     constexpr unsigned mtu = 150;
839ecb90ebSWilliam A. Kennington III 
84ad205028SPatrick Williams     AllIntfInfo info{InterfaceInfo{
85ad205028SPatrick Williams         .type = ARPHRD_ETHER,
869c441fd4SWilliam A. Kennington III         .idx = 2,
87fd862be8SWilliam A. Kennington III         .flags = IFF_RUNNING,
88fd862be8SWilliam A. Kennington III         .name = "test1",
89fd862be8SWilliam A. Kennington III         .mac = mac,
9013d665caSWilliam A. Kennington III         .mtu = mtu}};
917784856dSWilliam A. Kennington III     MockEthernetInterface intf(bus, manager, info,
92d298f93aSWilliam A. Kennington III                                "/xyz/openbmc_test/network"sv, config::Parser());
939ecb90ebSWilliam A. Kennington III 
949ecb90ebSWilliam A. Kennington III     EXPECT_EQ(mtu, intf.mtu());
95b7d6a1a7SWilliam A. Kennington III     EXPECT_EQ(stdplus::toStr(mac), intf.macAddress());
969ecb90ebSWilliam A. Kennington III     EXPECT_TRUE(intf.linkUp());
979ecb90ebSWilliam A. Kennington III }
989ecb90ebSWilliam A. Kennington III 
TEST_F(TestEthernetInterface,NoIPaddress)9947722dcfSRatan Gupta TEST_F(TestEthernetInterface, NoIPaddress)
10047722dcfSRatan Gupta {
10159e5b91dSWilliam A. Kennington III     EXPECT_TRUE(interface.addrs.empty());
10247722dcfSRatan Gupta }
10347722dcfSRatan Gupta 
TEST_F(TestEthernetInterface,AddIPAddress)10447722dcfSRatan Gupta TEST_F(TestEthernetInterface, AddIPAddress)
10547722dcfSRatan Gupta {
10630f3ba2cSWilliam A. Kennington III     EXPECT_THROW(createIPObject(IP::Protocol::IPv4, "127.0.0.1", 16),
10730f3ba2cSWilliam A. Kennington III                  InvalidArgument);
10830f3ba2cSWilliam A. Kennington III     EXPECT_THROW(createIPObject(IP::Protocol::IPv4, "127.0.0.1", 32),
10930f3ba2cSWilliam A. Kennington III                  InvalidArgument);
11030f3ba2cSWilliam A. Kennington III     EXPECT_THROW(createIPObject(IP::Protocol::IPv4, "192.168.1.1", 0),
11130f3ba2cSWilliam A. Kennington III                  InvalidArgument);
11230f3ba2cSWilliam A. Kennington III     EXPECT_THROW(createIPObject(IP::Protocol::IPv6, "::1", 64),
11330f3ba2cSWilliam A. Kennington III                  InvalidArgument);
11430f3ba2cSWilliam A. Kennington III     EXPECT_THROW(createIPObject(IP::Protocol::IPv6, "::", 128),
11530f3ba2cSWilliam A. Kennington III                  InvalidArgument);
11630f3ba2cSWilliam A. Kennington III     EXPECT_THROW(createIPObject(IP::Protocol::IPv6, "fe80::1", 0),
11730f3ba2cSWilliam A. Kennington III                  InvalidArgument);
11830f3ba2cSWilliam A. Kennington III 
11959e5b91dSWilliam A. Kennington III     createIPObject(IP::Protocol::IPv4, "10.10.10.10", 16);
12002d87c19SWilliam A. Kennington III     EXPECT_THAT(interface.addrs,
12102d87c19SWilliam A. Kennington III                 UnorderedElementsAre(Key("10.10.10.10/16"_sub)));
12247722dcfSRatan Gupta }
12347722dcfSRatan Gupta 
TEST_F(TestEthernetInterface,AddMultipleAddress)12447722dcfSRatan Gupta TEST_F(TestEthernetInterface, AddMultipleAddress)
12547722dcfSRatan Gupta {
12659e5b91dSWilliam A. Kennington III     createIPObject(IP::Protocol::IPv4, "10.10.10.10", 16);
12759e5b91dSWilliam A. Kennington III     createIPObject(IP::Protocol::IPv4, "20.20.20.20", 16);
12802d87c19SWilliam A. Kennington III     EXPECT_THAT(interface.addrs,
12902d87c19SWilliam A. Kennington III                 UnorderedElementsAre(Key("10.10.10.10/16"_sub),
13002d87c19SWilliam A. Kennington III                                      Key("20.20.20.20/16"_sub)));
13147722dcfSRatan Gupta }
13247722dcfSRatan Gupta 
TEST_F(TestEthernetInterface,DeleteIPAddress)13347722dcfSRatan Gupta TEST_F(TestEthernetInterface, DeleteIPAddress)
13447722dcfSRatan Gupta {
13559e5b91dSWilliam A. Kennington III     createIPObject(IP::Protocol::IPv4, "10.10.10.10", 16);
13659e5b91dSWilliam A. Kennington III     createIPObject(IP::Protocol::IPv4, "20.20.20.20", 16);
13702d87c19SWilliam A. Kennington III     interface.addrs.at("10.10.10.10/16"_sub)->delete_();
13802d87c19SWilliam A. Kennington III     EXPECT_THAT(interface.addrs,
13902d87c19SWilliam A. Kennington III                 UnorderedElementsAre(Key("20.20.20.20/16"_sub)));
14047722dcfSRatan Gupta }
14147722dcfSRatan Gupta 
TEST_F(TestEthernetInterface,CheckObjectPath)14247722dcfSRatan Gupta TEST_F(TestEthernetInterface, CheckObjectPath)
14347722dcfSRatan Gupta {
14459e5b91dSWilliam A. Kennington III     auto path = createIPObject(IP::Protocol::IPv4, "10.10.10.10", 16);
14559e5b91dSWilliam A. Kennington III     EXPECT_EQ(path.parent_path(), "/xyz/openbmc_test/network/test0");
14659e5b91dSWilliam A. Kennington III     EXPECT_EQ(path.filename(), "10.10.10.10/16");
14747722dcfSRatan Gupta }
14847722dcfSRatan Gupta 
TEST_F(TestEthernetInterface,addStaticNameServers)149acd6dd55SManojkiran Eda TEST_F(TestEthernetInterface, addStaticNameServers)
15009f6157bSRatan Gupta {
15109f6157bSRatan Gupta     ServerList servers = {"9.1.1.1", "9.2.2.2", "9.3.3.3"};
152de70ccf6SWilliam A. Kennington III     EXPECT_CALL(manager.mockReload, schedule());
153acd6dd55SManojkiran Eda     interface.staticNameServers(servers);
1545b17938cSWilliam A. Kennington III     config::Parser parser((confDir / "00-bmc-test0.network").native());
15534bb3e20SWilliam A. Kennington III     EXPECT_EQ(servers, parser.map.getValueStrings("Network", "DNS"));
15609f6157bSRatan Gupta }
15709f6157bSRatan Gupta 
TEST_F(TestEthernetInterface,getDynamicNameServers)158acd6dd55SManojkiran Eda TEST_F(TestEthernetInterface, getDynamicNameServers)
159acd6dd55SManojkiran Eda {
160acd6dd55SManojkiran Eda     ServerList servers = {"9.1.1.1", "9.2.2.2", "9.3.3.3"};
161acd6dd55SManojkiran Eda     EXPECT_CALL(interface, getNameServerFromResolvd())
162acd6dd55SManojkiran Eda         .WillRepeatedly(testing::Return(servers));
163acd6dd55SManojkiran Eda     EXPECT_EQ(interface.getNameServerFromResolvd(), servers);
164acd6dd55SManojkiran Eda }
165acd6dd55SManojkiran Eda 
TEST_F(TestEthernetInterface,addStaticNTPServers)166003b8b79SAsmitha Karunanithi TEST_F(TestEthernetInterface, addStaticNTPServers)
167c9645fe5SRatan Gupta {
168c9645fe5SRatan Gupta     ServerList servers = {"10.1.1.1", "10.2.2.2", "10.3.3.3"};
169de70ccf6SWilliam A. Kennington III     EXPECT_CALL(manager.mockReload, schedule());
170003b8b79SAsmitha Karunanithi     interface.staticNTPServers(servers);
1715b17938cSWilliam A. Kennington III     config::Parser parser((confDir / "00-bmc-test0.network").native());
17234bb3e20SWilliam A. Kennington III     EXPECT_EQ(servers, parser.map.getValueStrings("Network", "NTP"));
173c9645fe5SRatan Gupta }
174c9645fe5SRatan Gupta 
TEST_F(TestEthernetInterface,addNTPServers)175003b8b79SAsmitha Karunanithi TEST_F(TestEthernetInterface, addNTPServers)
176003b8b79SAsmitha Karunanithi {
177003b8b79SAsmitha Karunanithi     using namespace sdbusplus::xyz::openbmc_project::Common::Error;
178003b8b79SAsmitha Karunanithi     ServerList servers = {"10.1.1.1", "10.2.2.2", "10.3.3.3"};
179003b8b79SAsmitha Karunanithi     EXPECT_THROW(interface.ntpServers(servers), NotAllowed);
180003b8b79SAsmitha Karunanithi }
181003b8b79SAsmitha Karunanithi 
TEST_F(TestEthernetInterface,getNTPServers)182003b8b79SAsmitha Karunanithi TEST_F(TestEthernetInterface, getNTPServers)
183003b8b79SAsmitha Karunanithi {
184003b8b79SAsmitha Karunanithi     ServerList servers = {"10.1.1.1", "10.2.2.2", "10.3.3.3"};
185003b8b79SAsmitha Karunanithi     setNtpServers();
186003b8b79SAsmitha Karunanithi     EXPECT_EQ(getNtpServers(), servers);
187003b8b79SAsmitha Karunanithi }
188003b8b79SAsmitha Karunanithi 
TEST_F(TestEthernetInterface,addGateway)189a5a0944cSRavi Teja TEST_F(TestEthernetInterface, addGateway)
190a5a0944cSRavi Teja {
191a5a0944cSRavi Teja     std::string gateway = "10.3.3.3";
192a5a0944cSRavi Teja     interface.defaultGateway(gateway);
193a5a0944cSRavi Teja     EXPECT_EQ(interface.defaultGateway(), gateway);
194bbf5e9e8SWilliam A. Kennington III     EXPECT_THROW(interface.defaultGateway6("127.0.0.10"), InvalidArgument);
195bbf5e9e8SWilliam A. Kennington III     EXPECT_THROW(interface.defaultGateway6("0.0.0.0"), InvalidArgument);
196bbf5e9e8SWilliam A. Kennington III     EXPECT_THROW(interface.defaultGateway6("224.1.0.0"), InvalidArgument);
197bbf5e9e8SWilliam A. Kennington III     EXPECT_EQ(interface.defaultGateway(), gateway);
198c2e061f2SJiaqing Zhao     interface.defaultGateway("");
199c2e061f2SJiaqing Zhao     EXPECT_EQ(interface.defaultGateway(), "");
2009ca5c8ecSWilliam A. Kennington III     interface.defaultGateway("0.0.0.0");
2019ca5c8ecSWilliam A. Kennington III     EXPECT_EQ(interface.defaultGateway(), "");
202a5a0944cSRavi Teja }
203a5a0944cSRavi Teja 
TEST_F(TestEthernetInterface,addGateway6)204a5a0944cSRavi Teja TEST_F(TestEthernetInterface, addGateway6)
205a5a0944cSRavi Teja {
206bbf5e9e8SWilliam A. Kennington III     std::string gateway6 = "fe80::1";
207a5a0944cSRavi Teja     interface.defaultGateway6(gateway6);
208a5a0944cSRavi Teja     EXPECT_EQ(interface.defaultGateway6(), gateway6);
209bbf5e9e8SWilliam A. Kennington III     EXPECT_THROW(interface.defaultGateway6("::1"), InvalidArgument);
210bbf5e9e8SWilliam A. Kennington III     EXPECT_EQ(interface.defaultGateway6(), gateway6);
211c2e061f2SJiaqing Zhao     interface.defaultGateway6("");
212c2e061f2SJiaqing Zhao     EXPECT_EQ(interface.defaultGateway6(), "");
2139ca5c8ecSWilliam A. Kennington III     interface.defaultGateway6("::");
2149ca5c8ecSWilliam A. Kennington III     EXPECT_EQ(interface.defaultGateway6(), "");
215a5a0944cSRavi Teja }
216a5a0944cSRavi Teja 
TEST_F(TestEthernetInterface,DHCPEnabled)2178060c0daSWilliam A. Kennington III TEST_F(TestEthernetInterface, DHCPEnabled)
2188060c0daSWilliam A. Kennington III {
219de70ccf6SWilliam A. Kennington III     EXPECT_CALL(manager.mockReload, schedule())
220de70ccf6SWilliam A. Kennington III         .WillRepeatedly(testing::Return());
2218060c0daSWilliam A. Kennington III 
2228060c0daSWilliam A. Kennington III     using DHCPConf = EthernetInterfaceIntf::DHCPConf;
2238060c0daSWilliam A. Kennington III     auto test = [&](DHCPConf conf, bool dhcp4, bool dhcp6, bool ra) {
2248060c0daSWilliam A. Kennington III         EXPECT_EQ(conf, interface.dhcpEnabled());
2258060c0daSWilliam A. Kennington III         EXPECT_EQ(dhcp4, interface.dhcp4());
2268060c0daSWilliam A. Kennington III         EXPECT_EQ(dhcp6, interface.dhcp6());
2278060c0daSWilliam A. Kennington III         EXPECT_EQ(ra, interface.ipv6AcceptRA());
2288060c0daSWilliam A. Kennington III     };
2298060c0daSWilliam A. Kennington III     test(DHCPConf::both, /*dhcp4=*/true, /*dhcp6=*/true, /*ra=*/true);
2308060c0daSWilliam A. Kennington III 
2318060c0daSWilliam A. Kennington III     auto set_test = [&](DHCPConf conf, bool dhcp4, bool dhcp6, bool ra) {
2328060c0daSWilliam A. Kennington III         EXPECT_EQ(conf, interface.dhcpEnabled(conf));
2338060c0daSWilliam A. Kennington III         test(conf, dhcp4, dhcp6, ra);
2348060c0daSWilliam A. Kennington III     };
2358060c0daSWilliam A. Kennington III     set_test(DHCPConf::none, /*dhcp4=*/false, /*dhcp6=*/false, /*ra=*/false);
2368060c0daSWilliam A. Kennington III     set_test(DHCPConf::v4, /*dhcp4=*/true, /*dhcp6=*/false, /*ra=*/false);
2378060c0daSWilliam A. Kennington III     set_test(DHCPConf::v6stateless, /*dhcp4=*/false, /*dhcp6=*/false,
2388060c0daSWilliam A. Kennington III              /*ra=*/true);
2398060c0daSWilliam A. Kennington III     set_test(DHCPConf::v6, /*dhcp4=*/false, /*dhcp6=*/true, /*ra=*/true);
2408060c0daSWilliam A. Kennington III     set_test(DHCPConf::v4v6stateless, /*dhcp4=*/true, /*dhcp6=*/false,
2418060c0daSWilliam A. Kennington III              /*ra=*/true);
2428060c0daSWilliam A. Kennington III     set_test(DHCPConf::both, /*dhcp4=*/true, /*dhcp6=*/true, /*ra=*/true);
2438060c0daSWilliam A. Kennington III 
2448060c0daSWilliam A. Kennington III     auto ind_test = [&](DHCPConf conf, bool dhcp4, bool dhcp6, bool ra) {
2458060c0daSWilliam A. Kennington III         EXPECT_EQ(dhcp4, interface.dhcp4(dhcp4));
2468060c0daSWilliam A. Kennington III         EXPECT_EQ(dhcp6, interface.dhcp6(dhcp6));
2478060c0daSWilliam A. Kennington III         EXPECT_EQ(ra, interface.ipv6AcceptRA(ra));
2488060c0daSWilliam A. Kennington III         test(conf, dhcp4, dhcp6, ra);
2498060c0daSWilliam A. Kennington III     };
2508060c0daSWilliam A. Kennington III     ind_test(DHCPConf::none, /*dhcp4=*/false, /*dhcp6=*/false, /*ra=*/false);
2518060c0daSWilliam A. Kennington III     ind_test(DHCPConf::v4, /*dhcp4=*/true, /*dhcp6=*/false, /*ra=*/false);
2528060c0daSWilliam A. Kennington III     ind_test(DHCPConf::v6stateless, /*dhcp4=*/false, /*dhcp6=*/false,
2538060c0daSWilliam A. Kennington III              /*ra=*/true);
2548060c0daSWilliam A. Kennington III     ind_test(DHCPConf::v6, /*dhcp4=*/false, /*dhcp6=*/true, /*ra=*/false);
2558060c0daSWilliam A. Kennington III     set_test(DHCPConf::v6, /*dhcp4=*/false, /*dhcp6=*/true, /*ra=*/true);
2568060c0daSWilliam A. Kennington III     ind_test(DHCPConf::v4v6stateless, /*dhcp4=*/true, /*dhcp6=*/false,
2578060c0daSWilliam A. Kennington III              /*ra=*/true);
2588060c0daSWilliam A. Kennington III     ind_test(DHCPConf::both, /*dhcp4=*/true, /*dhcp6=*/true, /*ra=*/false);
2598060c0daSWilliam A. Kennington III     set_test(DHCPConf::both, /*dhcp4=*/true, /*dhcp6=*/true, /*ra=*/true);
2608060c0daSWilliam A. Kennington III }
2618060c0daSWilliam A. Kennington III 
TEST_F(TestEthernetInterface,AddStaticGateway)262*ab27a819SRavi Teja TEST_F(TestEthernetInterface, AddStaticGateway)
263*ab27a819SRavi Teja {
264*ab27a819SRavi Teja     createStaticGatewayObject("10.10.10.1", IP::Protocol::IPv4);
265*ab27a819SRavi Teja     EXPECT_THAT(interface.staticGateways,
266*ab27a819SRavi Teja                 UnorderedElementsAre(Key(std::string("10.10.10.1"))));
267*ab27a819SRavi Teja }
268*ab27a819SRavi Teja 
TEST_F(TestEthernetInterface,AddMultipleStaticGateways)269*ab27a819SRavi Teja TEST_F(TestEthernetInterface, AddMultipleStaticGateways)
270*ab27a819SRavi Teja {
271*ab27a819SRavi Teja     createStaticGatewayObject("10.10.10.1", IP::Protocol::IPv4);
272*ab27a819SRavi Teja     createStaticGatewayObject("10.20.30.1", IP::Protocol::IPv4);
273*ab27a819SRavi Teja     EXPECT_THAT(interface.staticGateways,
274*ab27a819SRavi Teja                 UnorderedElementsAre(Key(std::string("10.10.10.1")),
275*ab27a819SRavi Teja                                      Key(std::string("10.20.30.1"))));
276*ab27a819SRavi Teja }
277*ab27a819SRavi Teja 
TEST_F(TestEthernetInterface,DeleteStaticGateway)278*ab27a819SRavi Teja TEST_F(TestEthernetInterface, DeleteStaticGateway)
279*ab27a819SRavi Teja {
280*ab27a819SRavi Teja     createStaticGatewayObject("10.10.10.1", IP::Protocol::IPv4);
281*ab27a819SRavi Teja     createStaticGatewayObject("10.20.30.1", IP::Protocol::IPv4);
282*ab27a819SRavi Teja 
283*ab27a819SRavi Teja     interface.staticGateways.at(std::string("10.10.10.1"))->delete_();
284*ab27a819SRavi Teja     interface.staticGateways.at(std::string("10.20.30.1"))->delete_();
285*ab27a819SRavi Teja     EXPECT_EQ(interface.staticGateways.empty(), true);
286*ab27a819SRavi Teja }
287*ab27a819SRavi Teja 
TEST_F(TestEthernetInterface,AddIPv6StaticGateway)288*ab27a819SRavi Teja TEST_F(TestEthernetInterface, AddIPv6StaticGateway)
289*ab27a819SRavi Teja {
290*ab27a819SRavi Teja     createStaticGatewayObject("2002:903:15f:325::1", IP::Protocol::IPv6);
291*ab27a819SRavi Teja     EXPECT_THAT(interface.staticGateways,
292*ab27a819SRavi Teja                 UnorderedElementsAre(Key(std::string("2002:903:15f:325::1"))));
293*ab27a819SRavi Teja }
294*ab27a819SRavi Teja 
TEST_F(TestEthernetInterface,AddMultipleIPv6StaticGateways)295*ab27a819SRavi Teja TEST_F(TestEthernetInterface, AddMultipleIPv6StaticGateways)
296*ab27a819SRavi Teja {
297*ab27a819SRavi Teja     createStaticGatewayObject("2003:903:15f:325::1", IP::Protocol::IPv6);
298*ab27a819SRavi Teja     createStaticGatewayObject("2004:903:15f:325::1", IP::Protocol::IPv6);
299*ab27a819SRavi Teja     EXPECT_THAT(interface.staticGateways,
300*ab27a819SRavi Teja                 UnorderedElementsAre(Key(std::string("2003:903:15f:325::1")),
301*ab27a819SRavi Teja                                      Key(std::string("2004:903:15f:325::1"))));
302*ab27a819SRavi Teja }
303*ab27a819SRavi Teja 
30457d9c506SGunnar Mills } // namespace network
30547722dcfSRatan Gupta } // namespace phosphor
306