blob: de89272f26d86095aac6e2c088ca478af4330bbf [file] [log] [blame]
Ratan Gupta1dc91782018-04-19 16:47:12 +05301#include "snmp_conf_manager.hpp"
Ratan Gupta1dc91782018-04-19 16:47:12 +05302#include "xyz/openbmc_project/Common/error.hpp"
3
Ratan Gupta1dc91782018-04-19 16:47:12 +05304#include <sdbusplus/bus.hpp>
5
Patrick Williams1334b7b2021-02-22 17:15:12 -06006#include <gtest/gtest.h>
7
Ratan Gupta1dc91782018-04-19 16:47:12 +05308namespace phosphor
9{
10namespace network
11{
12namespace snmp
13{
14
Ratan Guptaa7ff3852018-11-16 14:05:57 +053015auto managerObjPath = "/xyz/openbmc_test/snmp/manager";
Ratan Gupta9c4fed62018-11-16 17:47:54 +053016using InvalidArgument =
17 sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
Ratan Guptaa7ff3852018-11-16 14:05:57 +053018
Ratan Gupta1dc91782018-04-19 16:47:12 +053019class TestSNMPConfManager : public testing::Test
20{
21 public:
22 sdbusplus::bus::bus bus;
23 ConfManager manager;
Ratan Gupta34d129a2021-12-04 21:04:51 +053024 // confDir could have been created locally in the
25 // TestSNMPConfManager but somehow that is leading
26 // to segmentation fault while running the unit test.
27 // TODO: https://github.com/openbmc/phosphor-snmp/issues/5
Ratan Gupta1dc91782018-04-19 16:47:12 +053028 std::string confDir;
Ratan Guptaa7ff3852018-11-16 14:05:57 +053029 TestSNMPConfManager() :
30 bus(sdbusplus::bus::new_default()), manager(bus, managerObjPath)
Ratan Gupta212f53e2018-04-30 17:28:05 +053031 {
32 char tmp[] = "/tmp/snmpManager.XXXXXX";
Ratan Gupta34d129a2021-12-04 21:04:51 +053033 confDir = mkdtemp(tmp);
Ratan Gupta212f53e2018-04-30 17:28:05 +053034 manager.dbusPersistentLocation = confDir;
35 }
Ratan Gupta1dc91782018-04-19 16:47:12 +053036
37 ~TestSNMPConfManager()
38 {
Ratan Gupta212f53e2018-04-30 17:28:05 +053039 fs::remove_all(manager.dbusPersistentLocation);
Ratan Gupta1dc91782018-04-19 16:47:12 +053040 }
41
Ratan Guptaa7ff3852018-11-16 14:05:57 +053042 std::string createSNMPClient(std::string ipaddress, uint16_t port)
Ratan Gupta1dc91782018-04-19 16:47:12 +053043 {
Ratan Guptaa7ff3852018-11-16 14:05:57 +053044 return manager.client(ipaddress, port);
Ratan Gupta1dc91782018-04-19 16:47:12 +053045 }
46
Patrick Williams1334b7b2021-02-22 17:15:12 -060047 ClientList& getSNMPClients()
Ratan Gupta1dc91782018-04-19 16:47:12 +053048 {
49 return manager.clients;
50 }
51
Patrick Williams1334b7b2021-02-22 17:15:12 -060052 bool isClientExist(const std::string& ipaddress)
Ratan Guptaa7ff3852018-11-16 14:05:57 +053053 {
Patrick Williams1334b7b2021-02-22 17:15:12 -060054 for (const auto& val : manager.clients)
Ratan Guptaa7ff3852018-11-16 14:05:57 +053055 {
56 if (val.second.get()->address() == ipaddress)
57 {
58 return true;
59 }
60 }
61 return false;
62 }
63
Ratan Gupta1dc91782018-04-19 16:47:12 +053064 void deleteSNMPClient(std::string ipaddress)
65 {
Patrick Williams1334b7b2021-02-22 17:15:12 -060066 for (const auto& val : manager.clients)
Ratan Guptaa7ff3852018-11-16 14:05:57 +053067 {
68 if (val.second.get()->address() == ipaddress)
69 {
70 val.second.get()->delete_();
71 }
72 }
Ratan Gupta1dc91782018-04-19 16:47:12 +053073 }
74};
75
76// Add single SNMP client
77TEST_F(TestSNMPConfManager, AddSNMPClient)
78{
Ratan Guptaa7ff3852018-11-16 14:05:57 +053079 // check the created object path
80 auto path = createSNMPClient("192.168.1.1", 24);
81 std::string expectedPath = managerObjPath;
82 expectedPath += std::string("/1");
Ratan Gupta1dc91782018-04-19 16:47:12 +053083
Ratan Guptaa7ff3852018-11-16 14:05:57 +053084 EXPECT_EQ(path, expectedPath);
Ratan Gupta1dc91782018-04-19 16:47:12 +053085
Ratan Guptaa7ff3852018-11-16 14:05:57 +053086 // check whether the client created
Patrick Williams1334b7b2021-02-22 17:15:12 -060087 auto& clients = getSNMPClients();
Ratan Gupta1dc91782018-04-19 16:47:12 +053088 EXPECT_EQ(1, clients.size());
Ratan Guptaa7ff3852018-11-16 14:05:57 +053089 EXPECT_EQ(true, isClientExist("192.168.1.1"));
Ratan Gupta1dc91782018-04-19 16:47:12 +053090}
91
92// Add multiple SNMP client
93TEST_F(TestSNMPConfManager, AddMultipleSNMPClient)
94{
Ratan Guptaa7ff3852018-11-16 14:05:57 +053095 // add multiple clients and check whether the object path is generated
96 // correctly.
Ratan Gupta1dc91782018-04-19 16:47:12 +053097 createSNMPClient("192.168.1.1", 24);
Ratan Guptaa7ff3852018-11-16 14:05:57 +053098 auto path = createSNMPClient("192.168.1.2", 24);
99 std::string expectedPath = managerObjPath;
100 expectedPath += std::string("/2");
Ratan Gupta1dc91782018-04-19 16:47:12 +0530101
Ratan Guptaa7ff3852018-11-16 14:05:57 +0530102 EXPECT_EQ(path, expectedPath);
103
104 // check both the clients get created
Patrick Williams1334b7b2021-02-22 17:15:12 -0600105 auto& clients = getSNMPClients();
Ratan Gupta1dc91782018-04-19 16:47:12 +0530106 EXPECT_EQ(2, clients.size());
Ratan Guptaa7ff3852018-11-16 14:05:57 +0530107
108 EXPECT_EQ(true, isClientExist("192.168.1.1"));
109 EXPECT_EQ(true, isClientExist("192.168.1.2"));
Ratan Gupta1dc91782018-04-19 16:47:12 +0530110}
111
Ratan Gupta9c4fed62018-11-16 17:47:54 +0530112// Add duplicate SNMP client
113TEST_F(TestSNMPConfManager, AddDuplicateSNMPClient)
114{
115 createSNMPClient("192.168.1.1", 24);
116 EXPECT_THROW(createSNMPClient("192.168.1.1", 24), InvalidArgument);
117}
118
Ratan Gupta1dc91782018-04-19 16:47:12 +0530119// Delete SNMP client
120TEST_F(TestSNMPConfManager, DeleteSNMPClient)
121{
Ratan Gupta1dc91782018-04-19 16:47:12 +0530122 createSNMPClient("192.168.1.1", 24);
123 createSNMPClient("192.168.1.2", 24);
124
Patrick Williams1334b7b2021-02-22 17:15:12 -0600125 auto& clients = getSNMPClients();
Ratan Gupta1dc91782018-04-19 16:47:12 +0530126 EXPECT_EQ(2, clients.size());
Ratan Guptaa7ff3852018-11-16 14:05:57 +0530127
Ratan Gupta1dc91782018-04-19 16:47:12 +0530128 deleteSNMPClient("192.168.1.1");
Ratan Guptaa7ff3852018-11-16 14:05:57 +0530129
130 auto path = createSNMPClient("192.168.1.3", 24);
131 std::string expectedPath = managerObjPath;
132 expectedPath += std::string("/3");
133 EXPECT_EQ(path, expectedPath);
134
135 EXPECT_EQ(2, clients.size());
136 EXPECT_EQ(true, isClientExist("192.168.1.2"));
137 EXPECT_EQ(false, isClientExist("192.168.1.1"));
138 EXPECT_EQ(true, isClientExist("192.168.1.3"));
Ratan Gupta1dc91782018-04-19 16:47:12 +0530139}
140
141} // namespace snmp
Ratan Guptaaea53d02018-09-06 17:56:59 +0530142} // namespace network
Ratan Gupta1dc91782018-04-19 16:47:12 +0530143} // namespace phosphor