1212f53e8SRatan Gupta #include <experimental/filesystem> 2212f53e8SRatan Gupta #include <fstream> 3212f53e8SRatan Gupta #include <gtest/gtest.h> 4212f53e8SRatan Gupta #include <netinet/in.h> 5212f53e8SRatan Gupta 6212f53e8SRatan Gupta #include "snmp_client.hpp" 7212f53e8SRatan Gupta #include "snmp_conf_manager.hpp" 8212f53e8SRatan Gupta #include "snmp_serialize.hpp" 9212f53e8SRatan Gupta 10212f53e8SRatan Gupta namespace phosphor 11212f53e8SRatan Gupta { 12212f53e8SRatan Gupta namespace network 13212f53e8SRatan Gupta { 14212f53e8SRatan Gupta namespace snmp 15212f53e8SRatan Gupta { 16212f53e8SRatan Gupta 17212f53e8SRatan Gupta constexpr auto clientObjPath = "/xyz/openbmc_test/snmp/client"; 18212f53e8SRatan Gupta namespace fs = std::experimental::filesystem; 19212f53e8SRatan Gupta 20212f53e8SRatan Gupta class TestSerialize : public testing::Test 21212f53e8SRatan Gupta { 22212f53e8SRatan Gupta public: 23212f53e8SRatan Gupta sdbusplus::bus::bus bus; 24212f53e8SRatan Gupta ConfManager manager; 25212f53e8SRatan Gupta TestSerialize() : 26212f53e8SRatan Gupta bus(sdbusplus::bus::new_default()), 27212f53e8SRatan Gupta manager(bus, "/xyz/openbmc_test/snmp/manager") 28212f53e8SRatan Gupta { 29212f53e8SRatan Gupta char tmp[] = "/tmp/snmpManager.XXXXXX"; 30212f53e8SRatan Gupta std::string confDir = mkdtemp(tmp); 31212f53e8SRatan Gupta manager.dbusPersistentLocation = confDir; 32212f53e8SRatan Gupta } 33212f53e8SRatan Gupta ~TestSerialize() 34212f53e8SRatan Gupta { 35212f53e8SRatan Gupta std::error_code ec; 36212f53e8SRatan Gupta fs::remove_all(manager.dbusPersistentLocation, ec); 37212f53e8SRatan Gupta } 38212f53e8SRatan Gupta }; 39212f53e8SRatan Gupta 40212f53e8SRatan Gupta TEST_F(TestSerialize, serialize) 41212f53e8SRatan Gupta { 42*a7ff3850SRatan Gupta std::string objPath = clientObjPath; 43*a7ff3850SRatan Gupta objPath += "/" + std::to_string(1); 44212f53e8SRatan Gupta 45*a7ff3850SRatan Gupta Client client(bus, objPath.c_str(), manager, "1.1.1.1", 23); 46*a7ff3850SRatan Gupta 47*a7ff3850SRatan Gupta auto path = serialize(1, client, manager.dbusPersistentLocation); 48*a7ff3850SRatan Gupta Client restoreClient(bus, objPath.c_str(), manager); 49212f53e8SRatan Gupta 50212f53e8SRatan Gupta deserialize(path, restoreClient); 51212f53e8SRatan Gupta 52212f53e8SRatan Gupta EXPECT_EQ("1.1.1.1", restoreClient.address()); 53212f53e8SRatan Gupta EXPECT_EQ(23, restoreClient.port()); 54212f53e8SRatan Gupta } 55212f53e8SRatan Gupta 56212f53e8SRatan Gupta TEST_F(TestSerialize, deserialize_non_existent_file) 57212f53e8SRatan Gupta { 58*a7ff3850SRatan Gupta std::string objPath = clientObjPath; 59*a7ff3850SRatan Gupta objPath += "/" + std::to_string(1); 60*a7ff3850SRatan Gupta 61*a7ff3850SRatan Gupta Client client(bus, objPath.c_str(), manager); 62212f53e8SRatan Gupta fs::path path = manager.dbusPersistentLocation; 63*a7ff3850SRatan Gupta path /= "1"; 64212f53e8SRatan Gupta 65212f53e8SRatan Gupta auto ret = deserialize(path, client); 66212f53e8SRatan Gupta 67212f53e8SRatan Gupta EXPECT_EQ(false, ret); 68212f53e8SRatan Gupta } 69212f53e8SRatan Gupta 70212f53e8SRatan Gupta TEST_F(TestSerialize, deserialize_empty_file) 71212f53e8SRatan Gupta { 72*a7ff3850SRatan Gupta std::string objPath = clientObjPath; 73*a7ff3850SRatan Gupta objPath += "/" + std::to_string(1); 74*a7ff3850SRatan Gupta 75*a7ff3850SRatan Gupta Client restoreClient(bus, objPath.c_str(), manager); 76212f53e8SRatan Gupta 77212f53e8SRatan Gupta std::fstream file; 78212f53e8SRatan Gupta 79212f53e8SRatan Gupta fs::path path = manager.dbusPersistentLocation; 80*a7ff3850SRatan Gupta path /= "1"; 81212f53e8SRatan Gupta 82212f53e8SRatan Gupta file.open(path.string(), std::ofstream::out); 83212f53e8SRatan Gupta file.close(); 84212f53e8SRatan Gupta // deserialize the object with empty file 85212f53e8SRatan Gupta auto ret = deserialize(path, restoreClient); 86212f53e8SRatan Gupta EXPECT_EQ(false, ret); 87212f53e8SRatan Gupta } 88212f53e8SRatan Gupta 89212f53e8SRatan Gupta } // namespace snmp 90212f53e8SRatan Gupta } // namespace network 91212f53e8SRatan Gupta } // namespace phosphor 92