blob: 2e51ac16c773a574e4eb76fc02fbe3cac2d14702 [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 III09f3a4a2022-10-25 02:59:16 -07005#include <filesystem>
William A. Kennington IIIf51620d2019-04-21 18:54:13 -07006#include <sdbusplus/bus.hpp>
William A. Kennington III84bfe672022-07-13 14:15:30 -07007#include <stdplus/gtest/tmp.hpp>
Gunnar Mills57d9c502018-09-14 14:42:34 -05008
9#include <gtest/gtest.h>
Ratan Gupta8ab17922017-05-25 13:07:05 +053010
11namespace phosphor
12{
13namespace network
14{
15
William A. Kennington III9ecb90e2022-10-14 03:12:43 -070016using ::testing::Key;
17using ::testing::UnorderedElementsAre;
Ratan Gupta255d5142017-08-10 09:02:08 +053018
William A. Kennington III84bfe672022-07-13 14:15:30 -070019class TestNetworkManager : public stdplus::gtest::TestWithTmp
Ratan Gupta8ab17922017-05-25 13:07:05 +053020{
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070021 protected:
Patrick Williamsc38b0712022-07-22 19:26:54 -050022 sdbusplus::bus_t bus;
William A. Kennington IIIde70ccf2022-11-20 17:18:01 -080023 TestManager manager;
Gunnar Mills57d9c502018-09-14 14:42:34 -050024 TestNetworkManager() :
William A. Kennington IIIf51620d2019-04-21 18:54:13 -070025 bus(sdbusplus::bus::new_default()),
William A. Kennington III84bfe672022-07-13 14:15:30 -070026 manager(bus, "/xyz/openbmc_test/abc", CaseTmpDir())
Gunnar Mills57d9c502018-09-14 14:42:34 -050027 {
Gunnar Mills57d9c502018-09-14 14:42:34 -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