blob: df7db77c11115838675c201437683cb737e9d81c [file] [log] [blame]
Ratan Gupta35297172018-11-28 18:40:16 +05301#include "mock_network_manager.hpp"
Ratan Gupta8ab17922017-05-25 13:07:05 +05302#include "mock_syscall.hpp"
Ratan Gupta8ab17922017-05-25 13:07:05 +05303
Gunnar Mills57d9c502018-09-14 14:42:34 -05004#include <arpa/inet.h>
Ratan Gupta8ab17922017-05-25 13:07:05 +05305#include <net/if.h>
6#include <netinet/in.h>
Ratan Gupta255d5142017-08-10 09:02:08 +05307#include <stdlib.h>
8
Ratan Gupta8ab17922017-05-25 13:07:05 +05309#include <exception>
Manojkiran Edaa879baa2020-06-13 14:39:08 +053010#include <filesystem>
William A. Kennington IIIf51620d2019-04-21 18:54:13 -070011#include <sdbusplus/bus.hpp>
Patrick Venturea9733402019-01-07 13:27:01 -080012#include <xyz/openbmc_project/Common/error.hpp>
Gunnar Mills57d9c502018-09-14 14:42:34 -050013
14#include <gtest/gtest.h>
Ratan Gupta8ab17922017-05-25 13:07:05 +053015
16namespace phosphor
17{
18namespace network
19{
20
Ratan Gupta35297172018-11-28 18:40:16 +053021std::unique_ptr<Timer> refreshObjectTimer = nullptr;
22std::unique_ptr<Timer> restartTimer = nullptr;
23
Manojkiran Edaa879baa2020-06-13 14:39:08 +053024namespace fs = std::filesystem;
Ratan Gupta255d5142017-08-10 09:02:08 +053025
Ratan Gupta8ab17922017-05-25 13:07:05 +053026class TestNetworkManager : public testing::Test
27{
Gunnar Mills57d9c502018-09-14 14:42:34 -050028 public:
29 sdbusplus::bus::bus bus;
Manojkiran Edaacd6dd52019-10-15 15:00:51 +053030 MockManager manager;
Gunnar Mills57d9c502018-09-14 14:42:34 -050031 std::string confDir;
32 TestNetworkManager() :
William A. Kennington IIIf51620d2019-04-21 18:54:13 -070033 bus(sdbusplus::bus::new_default()),
Gunnar Mills57d9c502018-09-14 14:42:34 -050034 manager(bus, "/xyz/openbmc_test/abc", "/tmp")
35 {
36 setConfDir();
37 }
Ratan Gupta8ab17922017-05-25 13:07:05 +053038
Gunnar Mills57d9c502018-09-14 14:42:34 -050039 ~TestNetworkManager()
40 {
41 if (confDir != "")
Ratan Gupta8ab17922017-05-25 13:07:05 +053042 {
Gunnar Mills57d9c502018-09-14 14:42:34 -050043 fs::remove_all(confDir);
Ratan Gupta255d5142017-08-10 09:02:08 +053044 }
Gunnar Mills57d9c502018-09-14 14:42:34 -050045 }
Ratan Gupta8ab17922017-05-25 13:07:05 +053046
Gunnar Mills57d9c502018-09-14 14:42:34 -050047 void setConfDir()
48 {
49 char tmp[] = "/tmp/NetworkManager.XXXXXX";
50 confDir = mkdtemp(tmp);
51 manager.setConfDir(confDir);
52 }
Ratan Gupta255d5142017-08-10 09:02:08 +053053
Gunnar Mills57d9c502018-09-14 14:42:34 -050054 void createInterfaces()
55 {
56 manager.createInterfaces();
57 }
Ratan Gupta8ab17922017-05-25 13:07:05 +053058};
59
60// getifaddrs will not return any interface
61TEST_F(TestNetworkManager, NoInterface)
62{
63 using namespace sdbusplus::xyz::openbmc_project::Common::Error;
Patrick Venture8fe594c2019-01-07 13:24:12 -080064 EXPECT_THROW(createInterfaces(), InternalFailure);
Ratan Gupta8ab17922017-05-25 13:07:05 +053065}
Ratan Gupta8ab17922017-05-25 13:07:05 +053066// getifaddrs returns single interface.
67TEST_F(TestNetworkManager, WithSingleInterface)
68{
William A. Kennington III8cff3802019-04-21 20:17:27 -070069 mock_clear();
William A. Kennington III862275a2019-04-22 20:37:08 -070070
William A. Kennington III8cff3802019-04-21 20:17:27 -070071 // Adds the following ip in the getifaddrs list.
72 mock_addIF("igb1", 2);
73 mock_addIP("igb1", "192.0.2.3", "255.255.255.128", IFF_UP | IFF_RUNNING);
Ratan Gupta8ab17922017-05-25 13:07:05 +053074
William A. Kennington III8cff3802019-04-21 20:17:27 -070075 // Now create the interfaces which will call the mocked getifaddrs
76 // which returns the above interface detail.
77 createInterfaces();
78 EXPECT_EQ(1, manager.getInterfaceCount());
79 EXPECT_EQ(true, manager.hasInterface("igb1"));
Ratan Gupta8ab17922017-05-25 13:07:05 +053080}
81
82// getifaddrs returns two interfaces.
83TEST_F(TestNetworkManager, WithMultipleInterfaces)
84{
William A. Kennington III8cff3802019-04-21 20:17:27 -070085 mock_clear();
William A. Kennington III862275a2019-04-22 20:37:08 -070086
William A. Kennington III8cff3802019-04-21 20:17:27 -070087 mock_addIF("igb0", 1);
88 mock_addIP("igb0", "192.0.2.2", "255.255.255.128", IFF_UP | IFF_RUNNING);
Ratan Gupta8ab17922017-05-25 13:07:05 +053089
William A. Kennington III8cff3802019-04-21 20:17:27 -070090 mock_addIF("igb1", 2);
91 mock_addIP("igb1", "192.0.2.3", "255.255.255.128", IFF_UP | IFF_RUNNING);
Ratan Gupta8ab17922017-05-25 13:07:05 +053092
William A. Kennington III8cff3802019-04-21 20:17:27 -070093 createInterfaces();
94 EXPECT_EQ(2, manager.getInterfaceCount());
95 EXPECT_EQ(true, manager.hasInterface("igb0"));
96 EXPECT_EQ(true, manager.hasInterface("igb1"));
Ratan Gupta8ab17922017-05-25 13:07:05 +053097}
Gunnar Mills57d9c502018-09-14 14:42:34 -050098} // namespace network
99} // namespace phosphor