1 #include "snmp_conf_manager.hpp"
2 #include "snmp_serialize.hpp"
3 
4 #include <xyz/openbmc_project/Common/error.hpp>
5 
6 #include <gtest/gtest.h>
7 
8 namespace phosphor
9 {
10 namespace network
11 {
12 namespace snmp
13 {
14 
15 using InvalidArgument =
16     sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
17 
18 auto mgrObjPath = "/xyz/openbmc_test/snmp/manager";
19 
20 class TestSNMPClient : public testing::Test
21 {
22   public:
23     sdbusplus::bus_t bus;
24     ConfManager manager;
TestSNMPClient()25     TestSNMPClient() :
26         bus(sdbusplus::bus::new_default()), manager(bus, mgrObjPath)
27     {
28         char tmp[] = "/tmp/snmpClient.XXXXXX";
29         auto confDir = mkdtemp(tmp);
30         manager.dbusPersistentLocation = confDir;
31     }
32 
~TestSNMPClient()33     ~TestSNMPClient()
34     {
35         fs::remove_all(manager.dbusPersistentLocation);
36     }
37 };
38 
TEST_F(TestSNMPClient,UpdateProperty)39 TEST_F(TestSNMPClient, UpdateProperty)
40 {
41     std::string objPath = mgrObjPath;
42     objPath += "/" + std::to_string(1);
43     Client client(bus, objPath.c_str(), manager, "1.1.1.1", 202);
44     EXPECT_EQ(client.transportProtocol(),
45               sdbusplus::server::xyz::openbmc_project::network::Client::
46                   TransportProtocol::UDP);
47     EXPECT_EQ(client.address(), "1.1.1.1");
48     EXPECT_EQ(client.port(), 202);
49     client.address("2.2.2.2");
50     EXPECT_EQ(client.address(), "2.2.2.2");
51     client.port(404);
52     EXPECT_EQ(client.port(), 404);
53 }
54 
TEST_F(TestSNMPClient,AddEmptyAddress)55 TEST_F(TestSNMPClient, AddEmptyAddress)
56 {
57     std::string objPath = mgrObjPath;
58     objPath += "/" + std::to_string(1);
59     Client client(bus, objPath.c_str(), manager, "1.1.1.1", 202);
60     EXPECT_EQ(client.address(), "1.1.1.1");
61     EXPECT_EQ(client.port(), 202);
62 
63     EXPECT_THROW(client.address(""), InvalidArgument);
64 }
65 
TEST_F(TestSNMPClient,CheckPersistency)66 TEST_F(TestSNMPClient, CheckPersistency)
67 {
68     std::string objPath = mgrObjPath;
69     objPath += "/" + std::to_string(1);
70     std::string objPath2 = mgrObjPath;
71     objPath2 += "/" + std::to_string(2);
72 
73     Client client(bus, objPath.c_str(), manager, "1.1.1.1", 23);
74     client.address("2.2.2.2");
75 
76     Client restoreClient(bus, objPath2.c_str(), manager);
77     auto persistentPath = manager.dbusPersistentLocation;
78     persistentPath += "/1";
79     deserialize(persistentPath, restoreClient);
80 
81     EXPECT_EQ("2.2.2.2", restoreClient.address());
82     EXPECT_EQ(23, restoreClient.port());
83 }
84 
85 } // namespace snmp
86 } // namespace network
87 } // namespace phosphor
88