1 #include "mock_network_manager.hpp" 2 #include "mock_syscall.hpp" 3 4 #include <arpa/inet.h> 5 #include <net/if.h> 6 #include <netinet/in.h> 7 #include <stdlib.h> 8 9 #include <exception> 10 #include <experimental/filesystem> 11 #include <sdbusplus/test/sdbus_mock.hpp> 12 #include <xyz/openbmc_project/Common/error.hpp> 13 14 #include <gtest/gtest.h> 15 16 namespace phosphor 17 { 18 namespace network 19 { 20 21 std::unique_ptr<Timer> refreshObjectTimer = nullptr; 22 std::unique_ptr<Timer> restartTimer = nullptr; 23 24 namespace fs = std::experimental::filesystem; 25 26 class TestNetworkManager : public testing::Test 27 { 28 public: 29 sdbusplus::SdBusMock sdbus_mock; 30 sdbusplus::bus::bus bus; 31 Manager manager; 32 std::string confDir; 33 TestNetworkManager() : 34 bus(sdbusplus::get_mocked_new(&sdbus_mock)), 35 manager(bus, "/xyz/openbmc_test/abc", "/tmp") 36 { 37 setConfDir(); 38 } 39 40 ~TestNetworkManager() 41 { 42 if (confDir != "") 43 { 44 fs::remove_all(confDir); 45 } 46 } 47 48 void setConfDir() 49 { 50 char tmp[] = "/tmp/NetworkManager.XXXXXX"; 51 confDir = mkdtemp(tmp); 52 manager.setConfDir(confDir); 53 } 54 55 void createInterfaces() 56 { 57 manager.createInterfaces(); 58 } 59 }; 60 61 // getifaddrs will not return any interface 62 TEST_F(TestNetworkManager, NoInterface) 63 { 64 using namespace sdbusplus::xyz::openbmc_project::Common::Error; 65 EXPECT_THROW(createInterfaces(), InternalFailure); 66 } 67 68 // getifaddrs returns single interface. 69 TEST_F(TestNetworkManager, WithSingleInterface) 70 { 71 bool caughtException = false; 72 try 73 { 74 // Adds the following ip in the getifaddrs list. 75 mock_addIP("igb1", "192.0.2.3", "255.255.255.128", 76 IFF_UP | IFF_RUNNING); 77 78 // Now create the interfaces which will call the mocked getifaddrs 79 // which returns the above interface detail. 80 createInterfaces(); 81 EXPECT_EQ(1, manager.getInterfaceCount()); 82 EXPECT_EQ(true, manager.hasInterface("igb1")); 83 } 84 catch (std::exception& e) 85 { 86 caughtException = true; 87 } 88 EXPECT_EQ(false, caughtException); 89 } 90 91 // getifaddrs returns two interfaces. 92 TEST_F(TestNetworkManager, WithMultipleInterfaces) 93 { 94 try 95 { 96 mock_addIP("igb0", "192.0.2.2", "255.255.255.128", 97 IFF_UP | IFF_RUNNING); 98 99 mock_addIP("igb1", "192.0.2.3", "255.255.255.128", 100 IFF_UP | IFF_RUNNING); 101 102 createInterfaces(); 103 EXPECT_EQ(2, manager.getInterfaceCount()); 104 EXPECT_EQ(true, manager.hasInterface("igb0")); 105 } 106 catch (std::exception& e) 107 { 108 } 109 } 110 111 } // namespace network 112 } // namespace phosphor 113