1 #include "snmp_client.hpp"
2 #include "snmp_conf_manager.hpp"
3 #include "snmp_serialize.hpp"
4
5 #include <netinet/in.h>
6
7 #include <filesystem>
8 #include <fstream>
9
10 #include <gtest/gtest.h>
11
12 namespace phosphor
13 {
14 namespace network
15 {
16 namespace snmp
17 {
18
19 constexpr auto clientObjPath = "/xyz/openbmc_test/snmp/client";
20 namespace fs = std::filesystem;
21
22 class TestSerialize : public testing::Test
23 {
24 public:
25 sdbusplus::bus_t bus;
26 ConfManager manager;
TestSerialize()27 TestSerialize() :
28 bus(sdbusplus::bus::new_default()),
29 manager(bus, "/xyz/openbmc_test/snmp/manager")
30 {
31 char tmp[] = "/tmp/snmpManager.XXXXXX";
32 std::string confDir = mkdtemp(tmp);
33 manager.dbusPersistentLocation = confDir;
34 }
~TestSerialize()35 ~TestSerialize()
36 {
37 std::error_code ec;
38 fs::remove_all(manager.dbusPersistentLocation, ec);
39 }
40 };
41
TEST_F(TestSerialize,serialize)42 TEST_F(TestSerialize, serialize)
43 {
44 std::string objPath = clientObjPath;
45 objPath += "/" + std::to_string(1);
46 std::string objPath2 = clientObjPath;
47 objPath2 += "/" + std::to_string(2);
48
49 Client client(bus, objPath.c_str(), manager, "1.1.1.1", 23);
50
51 auto path = serialize(1, client, manager.dbusPersistentLocation);
52 Client restoreClient(bus, objPath2.c_str(), manager);
53
54 deserialize(path, restoreClient);
55
56 EXPECT_EQ("1.1.1.1", restoreClient.address());
57 EXPECT_EQ(23, restoreClient.port());
58 }
59
TEST_F(TestSerialize,deserialize_non_existent_file)60 TEST_F(TestSerialize, deserialize_non_existent_file)
61 {
62 std::string objPath = clientObjPath;
63 objPath += "/" + std::to_string(1);
64
65 Client client(bus, objPath.c_str(), manager);
66 fs::path path = manager.dbusPersistentLocation;
67 path /= "1";
68
69 auto ret = deserialize(path, client);
70
71 EXPECT_EQ(false, ret);
72 }
73
TEST_F(TestSerialize,deserialize_empty_file)74 TEST_F(TestSerialize, deserialize_empty_file)
75 {
76 std::string objPath = clientObjPath;
77 objPath += "/" + std::to_string(1);
78
79 Client restoreClient(bus, objPath.c_str(), manager);
80
81 std::fstream file;
82
83 fs::path path = manager.dbusPersistentLocation;
84 path /= "1";
85
86 file.open(path.string(), std::ofstream::out);
87 file.close();
88 // deserialize the object with empty file
89 auto ret = deserialize(path, restoreClient);
90 EXPECT_EQ(false, ret);
91 }
92
93 } // namespace snmp
94 } // namespace network
95 } // namespace phosphor
96