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