blob: 03d2944b48a5158c4d292d56e0f19af6acbd9359 [file] [log] [blame]
William A. Kennington IIIde70ccf2022-11-20 17:18:01 -08001#include "test_network_manager.hpp"
2
William A. Kennington III09f3a4a2022-10-25 02:59:16 -07003#include "config_parser.hpp"
Ratan Gupta255d5142017-08-10 09:02:08 +05304
William A. Kennington IIIf51620d2019-04-21 18:54:13 -07005#include <sdbusplus/bus.hpp>
William A. Kennington III84bfe672022-07-13 14:15:30 -07006#include <stdplus/gtest/tmp.hpp>
Gunnar Mills57d9c502018-09-14 14:42:34 -05007
Patrick Williams89d734b2023-05-10 07:50:25 -05008#include <filesystem>
9
Gunnar Mills57d9c502018-09-14 14:42:34 -050010#include <gtest/gtest.h>
Ratan Gupta8ab17922017-05-25 13:07:05 +053011
12namespace phosphor
13{
14namespace network
15{
16
William A. Kennington III9ecb90e2022-10-14 03:12:43 -070017using ::testing::Key;
18using ::testing::UnorderedElementsAre;
Ratan Gupta255d5142017-08-10 09:02:08 +053019
William A. Kennington III84bfe672022-07-13 14:15:30 -070020class TestNetworkManager : public stdplus::gtest::TestWithTmp
Ratan Gupta8ab17922017-05-25 13:07:05 +053021{
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070022 protected:
William A. Kennington III9ede1b72022-11-21 01:59:28 -080023 stdplus::Pinned<sdbusplus::bus_t> bus;
William A. Kennington IIIde70ccf2022-11-20 17:18:01 -080024 TestManager manager;
Gunnar Mills57d9c502018-09-14 14:42:34 -050025 TestNetworkManager() :
William A. Kennington IIIf51620d2019-04-21 18:54:13 -070026 bus(sdbusplus::bus::new_default()),
William A. Kennington III84bfe672022-07-13 14:15:30 -070027 manager(bus, "/xyz/openbmc_test/abc", CaseTmpDir())
Patrick Williams89d734b2023-05-10 07:50:25 -050028 {}
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070029
30 void deleteVLAN(std::string_view ifname)
31 {
32 manager.interfaces.find(ifname)->second->vlan->delete_();
33 }
Ratan Gupta8ab17922017-05-25 13:07:05 +053034};
35
Ratan Gupta8ab17922017-05-25 13:07:05 +053036TEST_F(TestNetworkManager, NoInterface)
37{
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070038 EXPECT_TRUE(manager.interfaces.empty());
Ratan Gupta8ab17922017-05-25 13:07:05 +053039}
William A. Kennington III5b179382022-11-15 15:23:26 -080040
Ratan Gupta8ab17922017-05-25 13:07:05 +053041TEST_F(TestNetworkManager, WithSingleInterface)
42{
William A. Kennington III5b179382022-11-15 15:23:26 -080043 manager.addInterface({.idx = 2, .flags = 0, .name = "igb1"});
44 manager.handleAdminState("managed", 2);
Ratan Gupta8ab17922017-05-25 13:07:05 +053045
William A. Kennington III8cff3802019-04-21 20:17:27 -070046 // Now create the interfaces which will call the mocked getifaddrs
47 // which returns the above interface detail.
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070048 EXPECT_THAT(manager.interfaces, UnorderedElementsAre(Key("igb1")));
Ratan Gupta8ab17922017-05-25 13:07:05 +053049}
50
51// getifaddrs returns two interfaces.
52TEST_F(TestNetworkManager, WithMultipleInterfaces)
53{
William A. Kennington III5b179382022-11-15 15:23:26 -080054 manager.addInterface({.idx = 1, .flags = 0, .name = "igb0"});
55 manager.handleAdminState("managed", 1);
56 manager.handleAdminState("unmanaged", 2);
57 manager.addInterface({.idx = 2, .flags = 0, .name = "igb1"});
Ratan Gupta8ab17922017-05-25 13:07:05 +053058
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070059 EXPECT_THAT(manager.interfaces,
William A. Kennington III9ecb90e2022-10-14 03:12:43 -070060 UnorderedElementsAre(Key("igb0"), Key("igb1")));
Ratan Gupta8ab17922017-05-25 13:07:05 +053061}
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070062
63TEST_F(TestNetworkManager, WithVLAN)
64{
65 EXPECT_THROW(manager.vlan("", 8000), std::exception);
66 EXPECT_THROW(manager.vlan("", 0), std::exception);
67 EXPECT_THROW(manager.vlan("eth0", 2), std::exception);
68
William A. Kennington III5b179382022-11-15 15:23:26 -080069 manager.addInterface({.idx = 1, .flags = 0, .name = "eth0"});
70 manager.handleAdminState("managed", 1);
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070071 EXPECT_NO_THROW(manager.vlan("eth0", 2));
72 EXPECT_NO_THROW(manager.vlan("eth0", 4094));
73 EXPECT_THAT(
74 manager.interfaces,
75 UnorderedElementsAre(Key("eth0"), Key("eth0.2"), Key("eth0.4094")));
76 auto netdev1 = config::pathForIntfDev(CaseTmpDir(), "eth0.2");
77 auto netdev2 = config::pathForIntfDev(CaseTmpDir(), "eth0.4094");
78 EXPECT_TRUE(std::filesystem::is_regular_file(netdev1));
79 EXPECT_TRUE(std::filesystem::is_regular_file(netdev2));
80
81 deleteVLAN("eth0.2");
82 EXPECT_THAT(manager.interfaces,
83 UnorderedElementsAre(Key("eth0"), Key("eth0.4094")));
84 EXPECT_FALSE(std::filesystem::is_regular_file(netdev1));
85 EXPECT_TRUE(std::filesystem::is_regular_file(netdev2));
86}
87
Gunnar Mills57d9c502018-09-14 14:42:34 -050088} // namespace network
89} // namespace phosphor