| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 1 | #include "config_parser.hpp" | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 2 | #include "ipaddress.hpp" | 
| Ratan Gupta | 3529717 | 2018-11-28 18:40:16 +0530 | [diff] [blame] | 3 | #include "mock_network_manager.hpp" | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 4 | #include "mock_syscall.hpp" | 
| William A. Kennington III | fd862be | 2022-10-09 18:40:55 -0700 | [diff] [blame^] | 5 | #include "system_queries.hpp" | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 6 | #include "vlan_interface.hpp" | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 7 |  | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 8 | #include <arpa/inet.h> | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 9 | #include <net/if.h> | 
|  | 10 | #include <netinet/in.h> | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 11 |  | 
| Manojkiran Eda | a879baa | 2020-06-13 14:39:08 +0530 | [diff] [blame] | 12 | #include <filesystem> | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 13 | #include <sdbusplus/bus.hpp> | 
| William A. Kennington III | 84bfe67 | 2022-07-13 14:15:30 -0700 | [diff] [blame] | 14 | #include <stdplus/gtest/tmp.hpp> | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 15 |  | 
|  | 16 | #include <gtest/gtest.h> | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 17 |  | 
|  | 18 | namespace phosphor | 
|  | 19 | { | 
|  | 20 | namespace network | 
|  | 21 | { | 
|  | 22 |  | 
| Manojkiran Eda | a879baa | 2020-06-13 14:39:08 +0530 | [diff] [blame] | 23 | namespace fs = std::filesystem; | 
| William A. Kennington III | d298f93 | 2022-10-17 14:31:38 -0700 | [diff] [blame] | 24 | using std::literals::string_view_literals::operator""sv; | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 25 |  | 
| William A. Kennington III | 84bfe67 | 2022-07-13 14:15:30 -0700 | [diff] [blame] | 26 | class TestVlanInterface : public stdplus::gtest::TestWithTmp | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 27 | { | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 28 | public: | 
| Patrick Williams | c38b071 | 2022-07-22 19:26:54 -0500 | [diff] [blame] | 29 | sdbusplus::bus_t bus; | 
| William A. Kennington III | 84bfe67 | 2022-07-13 14:15:30 -0700 | [diff] [blame] | 30 | std::string confDir; | 
| Ratan Gupta | 3529717 | 2018-11-28 18:40:16 +0530 | [diff] [blame] | 31 | MockManager manager; | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 32 | EthernetInterface interface; | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 33 | TestVlanInterface() : | 
| William A. Kennington III | 84bfe67 | 2022-07-13 14:15:30 -0700 | [diff] [blame] | 34 | bus(sdbusplus::bus::new_default()), confDir(CaseTmpDir()), | 
|  | 35 | manager(bus, "/xyz/openbmc_test/network", confDir), | 
| William A. Kennington III | ebb1ad0 | 2019-04-21 18:02:49 -0700 | [diff] [blame] | 36 | interface(makeInterface(bus, manager)) | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 37 |  | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 38 | { | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 39 | } | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 40 |  | 
| Patrick Williams | c38b071 | 2022-07-22 19:26:54 -0500 | [diff] [blame] | 41 | static EthernetInterface makeInterface(sdbusplus::bus_t& bus, | 
| William A. Kennington III | ebb1ad0 | 2019-04-21 18:02:49 -0700 | [diff] [blame] | 42 | MockManager& manager) | 
|  | 43 | { | 
| William A. Kennington III | 862275a | 2019-04-22 20:37:08 -0700 | [diff] [blame] | 44 | mock_clear(); | 
| William A. Kennington III | 9ecb90e | 2022-10-14 03:12:43 -0700 | [diff] [blame] | 45 | mock_addIF("test0", /*idx=*/1); | 
| William A. Kennington III | 26275a3 | 2021-07-13 20:32:42 -0700 | [diff] [blame] | 46 | return {bus, | 
| William A. Kennington III | 26275a3 | 2021-07-13 20:32:42 -0700 | [diff] [blame] | 47 | manager, | 
| William A. Kennington III | fd862be | 2022-10-09 18:40:55 -0700 | [diff] [blame^] | 48 | system::InterfaceInfo{.idx = 1, .flags = 0, .name = "test0"}, | 
| William A. Kennington III | d298f93 | 2022-10-17 14:31:38 -0700 | [diff] [blame] | 49 | "/xyz/openbmc_test/network"sv, | 
|  | 50 | config::Parser(), | 
|  | 51 | /*emitSignal=*/false, | 
| William A. Kennington III | 9ecb90e | 2022-10-14 03:12:43 -0700 | [diff] [blame] | 52 | /*nicEnabled=*/true}; | 
| William A. Kennington III | ebb1ad0 | 2019-04-21 18:02:49 -0700 | [diff] [blame] | 53 | } | 
|  | 54 |  | 
| William A. Kennington III | d298f93 | 2022-10-17 14:31:38 -0700 | [diff] [blame] | 55 | void createVlan(uint16_t id) | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 56 | { | 
| William A. Kennington III | ebb1ad0 | 2019-04-21 18:02:49 -0700 | [diff] [blame] | 57 | std::string ifname = "test0."; | 
|  | 58 | ifname += std::to_string(id); | 
|  | 59 | mock_addIF(ifname.c_str(), 1000 + id); | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 60 | interface.createVLAN(id); | 
|  | 61 | } | 
|  | 62 |  | 
|  | 63 | void deleteVlan(const std::string& interfaceName) | 
|  | 64 | { | 
|  | 65 | interface.deleteVLANObject(interfaceName); | 
|  | 66 | } | 
|  | 67 |  | 
|  | 68 | int countIPObjects() | 
|  | 69 | { | 
|  | 70 | return interface.getAddresses().size(); | 
|  | 71 | } | 
|  | 72 |  | 
|  | 73 | bool isIPObjectExist(const std::string& ipaddress) | 
|  | 74 | { | 
|  | 75 | auto address = interface.getAddresses().find(ipaddress); | 
|  | 76 | if (address == interface.getAddresses().end()) | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 77 | { | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 78 | return false; | 
|  | 79 | } | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 80 | return true; | 
|  | 81 | } | 
|  | 82 |  | 
|  | 83 | bool deleteIPObject(const std::string& ipaddress) | 
|  | 84 | { | 
|  | 85 | auto address = interface.getAddresses().find(ipaddress); | 
|  | 86 | if (address == interface.getAddresses().end()) | 
|  | 87 | { | 
|  | 88 | return false; | 
|  | 89 | } | 
|  | 90 | address->second->delete_(); | 
|  | 91 | return true; | 
|  | 92 | } | 
|  | 93 |  | 
|  | 94 | void createIPObject(IP::Protocol addressType, const std::string& ipaddress, | 
|  | 95 | uint8_t subnetMask, const std::string& gateway) | 
|  | 96 | { | 
| Patrick Williams | 6aef769 | 2021-05-01 06:39:41 -0500 | [diff] [blame] | 97 | interface.ip(addressType, ipaddress, subnetMask, gateway); | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 98 | } | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 99 | }; | 
|  | 100 |  | 
|  | 101 | TEST_F(TestVlanInterface, createVLAN) | 
|  | 102 | { | 
|  | 103 | createVlan(50); | 
|  | 104 | fs::path filePath = confDir; | 
|  | 105 | filePath /= "test0.50.netdev"; | 
|  | 106 |  | 
| William A. Kennington III | e21a5cf | 2022-08-09 12:19:14 -0700 | [diff] [blame] | 107 | config::Parser parser(filePath); | 
| William A. Kennington III | 34bb3e2 | 2022-08-18 15:17:22 -0700 | [diff] [blame] | 108 | EXPECT_EQ(parser.map, config::SectionMap(config::SectionMapInt{ | 
|  | 109 | {"NetDev", | 
|  | 110 | { | 
|  | 111 | {{"Name", {"test0.50"}}, {"Kind", {"vlan"}}}, | 
|  | 112 | }}, | 
|  | 113 | {"VLAN", {{{"Id", {"50"}}}}}, | 
|  | 114 | })); | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 115 | } | 
|  | 116 |  | 
|  | 117 | TEST_F(TestVlanInterface, deleteVLAN) | 
|  | 118 | { | 
|  | 119 | createVlan(50); | 
|  | 120 | deleteVlan("test0.50"); | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 121 |  | 
|  | 122 | fs::path filePath = confDir; | 
|  | 123 | filePath /= "test0.50.netdev"; | 
| William A. Kennington III | e21a5cf | 2022-08-09 12:19:14 -0700 | [diff] [blame] | 124 | EXPECT_FALSE(fs::is_regular_file(filePath)); | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 125 | } | 
|  | 126 |  | 
|  | 127 | TEST_F(TestVlanInterface, createMultipleVLAN) | 
|  | 128 | { | 
|  | 129 | createVlan(50); | 
|  | 130 | createVlan(60); | 
|  | 131 |  | 
|  | 132 | fs::path filePath = confDir; | 
|  | 133 | filePath /= "test0.50.netdev"; | 
| William A. Kennington III | e21a5cf | 2022-08-09 12:19:14 -0700 | [diff] [blame] | 134 | config::Parser parser(filePath); | 
| William A. Kennington III | 34bb3e2 | 2022-08-18 15:17:22 -0700 | [diff] [blame] | 135 | EXPECT_EQ(parser.map, config::SectionMap(config::SectionMapInt{ | 
|  | 136 | {"NetDev", | 
|  | 137 | { | 
|  | 138 | {{"Name", {"test0.50"}}, {"Kind", {"vlan"}}}, | 
|  | 139 | }}, | 
|  | 140 | {"VLAN", {{{"Id", {"50"}}}}}, | 
|  | 141 | })); | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 142 |  | 
|  | 143 | filePath = confDir; | 
|  | 144 | filePath /= "test0.60.netdev"; | 
| William A. Kennington III | e21a5cf | 2022-08-09 12:19:14 -0700 | [diff] [blame] | 145 | parser.setFile(filePath); | 
| William A. Kennington III | 34bb3e2 | 2022-08-18 15:17:22 -0700 | [diff] [blame] | 146 | EXPECT_EQ(parser.map, config::SectionMap(config::SectionMapInt{ | 
|  | 147 | {"NetDev", | 
|  | 148 | { | 
|  | 149 | {{"Name", {"test0.60"}}, {"Kind", {"vlan"}}}, | 
|  | 150 | }}, | 
|  | 151 | {"VLAN", {{{"Id", {"60"}}}}}, | 
|  | 152 | })); | 
| Ratan Gupta | 2aca45c | 2017-07-26 01:16:27 +0530 | [diff] [blame] | 153 |  | 
|  | 154 | deleteVlan("test0.50"); | 
|  | 155 | deleteVlan("test0.60"); | 
|  | 156 | } | 
|  | 157 |  | 
| Gunnar Mills | 57d9c50 | 2018-09-14 14:42:34 -0500 | [diff] [blame] | 158 | } // namespace network | 
|  | 159 | } // namespace phosphor |