1212f53e8SRatan Gupta #include "snmp_client.hpp"
2212f53e8SRatan Gupta #include "snmp_conf_manager.hpp"
3212f53e8SRatan Gupta #include "snmp_serialize.hpp"
4212f53e8SRatan Gupta 
51334b7b3SPatrick Williams #include <netinet/in.h>
61334b7b3SPatrick Williams 
734d129a9SRatan Gupta #include <filesystem>
81334b7b3SPatrick Williams #include <fstream>
91334b7b3SPatrick Williams 
101334b7b3SPatrick Williams #include <gtest/gtest.h>
111334b7b3SPatrick Williams 
12212f53e8SRatan Gupta namespace phosphor
13212f53e8SRatan Gupta {
14212f53e8SRatan Gupta namespace network
15212f53e8SRatan Gupta {
16212f53e8SRatan Gupta namespace snmp
17212f53e8SRatan Gupta {
18212f53e8SRatan Gupta 
19212f53e8SRatan Gupta constexpr auto clientObjPath = "/xyz/openbmc_test/snmp/client";
2034d129a9SRatan Gupta namespace fs = std::filesystem;
21212f53e8SRatan Gupta 
22212f53e8SRatan Gupta class TestSerialize : public testing::Test
23212f53e8SRatan Gupta {
24212f53e8SRatan Gupta   public:
25*87d3edd6SPatrick Williams     sdbusplus::bus_t bus;
26212f53e8SRatan Gupta     ConfManager manager;
TestSerialize()27212f53e8SRatan Gupta     TestSerialize() :
28212f53e8SRatan Gupta         bus(sdbusplus::bus::new_default()),
29212f53e8SRatan Gupta         manager(bus, "/xyz/openbmc_test/snmp/manager")
30212f53e8SRatan Gupta     {
31212f53e8SRatan Gupta         char tmp[] = "/tmp/snmpManager.XXXXXX";
32212f53e8SRatan Gupta         std::string confDir = mkdtemp(tmp);
33212f53e8SRatan Gupta         manager.dbusPersistentLocation = confDir;
34212f53e8SRatan Gupta     }
~TestSerialize()35212f53e8SRatan Gupta     ~TestSerialize()
36212f53e8SRatan Gupta     {
37212f53e8SRatan Gupta         std::error_code ec;
38212f53e8SRatan Gupta         fs::remove_all(manager.dbusPersistentLocation, ec);
39212f53e8SRatan Gupta     }
40212f53e8SRatan Gupta };
41212f53e8SRatan Gupta 
TEST_F(TestSerialize,serialize)42212f53e8SRatan Gupta TEST_F(TestSerialize, serialize)
43212f53e8SRatan Gupta {
44a7ff3850SRatan Gupta     std::string objPath = clientObjPath;
45a7ff3850SRatan Gupta     objPath += "/" + std::to_string(1);
462cbf7231SPatrick Williams     std::string objPath2 = clientObjPath;
472cbf7231SPatrick Williams     objPath2 += "/" + std::to_string(2);
48212f53e8SRatan Gupta 
49a7ff3850SRatan Gupta     Client client(bus, objPath.c_str(), manager, "1.1.1.1", 23);
50a7ff3850SRatan Gupta 
51a7ff3850SRatan Gupta     auto path = serialize(1, client, manager.dbusPersistentLocation);
522cbf7231SPatrick Williams     Client restoreClient(bus, objPath2.c_str(), manager);
53212f53e8SRatan Gupta 
54212f53e8SRatan Gupta     deserialize(path, restoreClient);
55212f53e8SRatan Gupta 
56212f53e8SRatan Gupta     EXPECT_EQ("1.1.1.1", restoreClient.address());
57212f53e8SRatan Gupta     EXPECT_EQ(23, restoreClient.port());
58212f53e8SRatan Gupta }
59212f53e8SRatan Gupta 
TEST_F(TestSerialize,deserialize_non_existent_file)60212f53e8SRatan Gupta TEST_F(TestSerialize, deserialize_non_existent_file)
61212f53e8SRatan Gupta {
62a7ff3850SRatan Gupta     std::string objPath = clientObjPath;
63a7ff3850SRatan Gupta     objPath += "/" + std::to_string(1);
64a7ff3850SRatan Gupta 
65a7ff3850SRatan Gupta     Client client(bus, objPath.c_str(), manager);
66212f53e8SRatan Gupta     fs::path path = manager.dbusPersistentLocation;
67a7ff3850SRatan Gupta     path /= "1";
68212f53e8SRatan Gupta 
69212f53e8SRatan Gupta     auto ret = deserialize(path, client);
70212f53e8SRatan Gupta 
71212f53e8SRatan Gupta     EXPECT_EQ(false, ret);
72212f53e8SRatan Gupta }
73212f53e8SRatan Gupta 
TEST_F(TestSerialize,deserialize_empty_file)74212f53e8SRatan Gupta TEST_F(TestSerialize, deserialize_empty_file)
75212f53e8SRatan Gupta {
76a7ff3850SRatan Gupta     std::string objPath = clientObjPath;
77a7ff3850SRatan Gupta     objPath += "/" + std::to_string(1);
78a7ff3850SRatan Gupta 
79a7ff3850SRatan Gupta     Client restoreClient(bus, objPath.c_str(), manager);
80212f53e8SRatan Gupta 
81212f53e8SRatan Gupta     std::fstream file;
82212f53e8SRatan Gupta 
83212f53e8SRatan Gupta     fs::path path = manager.dbusPersistentLocation;
84a7ff3850SRatan Gupta     path /= "1";
85212f53e8SRatan Gupta 
86212f53e8SRatan Gupta     file.open(path.string(), std::ofstream::out);
87212f53e8SRatan Gupta     file.close();
88212f53e8SRatan Gupta     // deserialize the object with empty file
89212f53e8SRatan Gupta     auto ret = deserialize(path, restoreClient);
90212f53e8SRatan Gupta     EXPECT_EQ(false, ret);
91212f53e8SRatan Gupta }
92212f53e8SRatan Gupta 
93212f53e8SRatan Gupta } // namespace snmp
94212f53e8SRatan Gupta } // namespace network
95212f53e8SRatan Gupta } // namespace phosphor
96