11334b7b3SPatrick Williams #include "snmp_conf_manager.hpp"
21334b7b3SPatrick Williams #include "snmp_serialize.hpp"
39d18e562SRatan Gupta 
49d18e562SRatan Gupta #include <xyz/openbmc_project/Common/error.hpp>
59d18e562SRatan Gupta 
61334b7b3SPatrick Williams #include <gtest/gtest.h>
79d18e562SRatan Gupta 
89d18e562SRatan Gupta namespace phosphor
99d18e562SRatan Gupta {
109d18e562SRatan Gupta namespace network
119d18e562SRatan Gupta {
129d18e562SRatan Gupta namespace snmp
139d18e562SRatan Gupta {
149d18e562SRatan Gupta 
159d18e562SRatan Gupta using InvalidArgument =
169d18e562SRatan Gupta     sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
179d18e562SRatan Gupta 
189d18e562SRatan Gupta auto mgrObjPath = "/xyz/openbmc_test/snmp/manager";
199d18e562SRatan Gupta 
209d18e562SRatan Gupta class TestSNMPClient : public testing::Test
219d18e562SRatan Gupta {
229d18e562SRatan Gupta   public:
2387d3edd6SPatrick Williams     sdbusplus::bus_t bus;
249d18e562SRatan Gupta     ConfManager manager;
TestSNMPClient()259d18e562SRatan Gupta     TestSNMPClient() :
269d18e562SRatan Gupta         bus(sdbusplus::bus::new_default()), manager(bus, mgrObjPath)
279d18e562SRatan Gupta     {
289d18e562SRatan Gupta         char tmp[] = "/tmp/snmpClient.XXXXXX";
2934d129a9SRatan Gupta         auto confDir = mkdtemp(tmp);
309d18e562SRatan Gupta         manager.dbusPersistentLocation = confDir;
319d18e562SRatan Gupta     }
329d18e562SRatan Gupta 
~TestSNMPClient()339d18e562SRatan Gupta     ~TestSNMPClient()
349d18e562SRatan Gupta     {
359d18e562SRatan Gupta         fs::remove_all(manager.dbusPersistentLocation);
369d18e562SRatan Gupta     }
379d18e562SRatan Gupta };
389d18e562SRatan Gupta 
TEST_F(TestSNMPClient,UpdateProperty)399d18e562SRatan Gupta TEST_F(TestSNMPClient, UpdateProperty)
409d18e562SRatan Gupta {
419d18e562SRatan Gupta     std::string objPath = mgrObjPath;
429d18e562SRatan Gupta     objPath += "/" + std::to_string(1);
439d18e562SRatan Gupta     Client client(bus, objPath.c_str(), manager, "1.1.1.1", 202);
44*40f769bbSIvan Mikhaylov     EXPECT_EQ(client.transportProtocol(),
45*40f769bbSIvan Mikhaylov               sdbusplus::server::xyz::openbmc_project::network::Client::
46*40f769bbSIvan Mikhaylov                   TransportProtocol::UDP);
479d18e562SRatan Gupta     EXPECT_EQ(client.address(), "1.1.1.1");
489d18e562SRatan Gupta     EXPECT_EQ(client.port(), 202);
499d18e562SRatan Gupta     client.address("2.2.2.2");
509d18e562SRatan Gupta     EXPECT_EQ(client.address(), "2.2.2.2");
519d18e562SRatan Gupta     client.port(404);
529d18e562SRatan Gupta     EXPECT_EQ(client.port(), 404);
539d18e562SRatan Gupta }
549d18e562SRatan Gupta 
TEST_F(TestSNMPClient,AddEmptyAddress)559d18e562SRatan Gupta TEST_F(TestSNMPClient, AddEmptyAddress)
569d18e562SRatan Gupta {
579d18e562SRatan Gupta     std::string objPath = mgrObjPath;
589d18e562SRatan Gupta     objPath += "/" + std::to_string(1);
599d18e562SRatan Gupta     Client client(bus, objPath.c_str(), manager, "1.1.1.1", 202);
609d18e562SRatan Gupta     EXPECT_EQ(client.address(), "1.1.1.1");
619d18e562SRatan Gupta     EXPECT_EQ(client.port(), 202);
629d18e562SRatan Gupta 
639d18e562SRatan Gupta     EXPECT_THROW(client.address(""), InvalidArgument);
649d18e562SRatan Gupta }
659d18e562SRatan Gupta 
TEST_F(TestSNMPClient,CheckPersistency)669d18e562SRatan Gupta TEST_F(TestSNMPClient, CheckPersistency)
679d18e562SRatan Gupta {
689d18e562SRatan Gupta     std::string objPath = mgrObjPath;
699d18e562SRatan Gupta     objPath += "/" + std::to_string(1);
702cbf7231SPatrick Williams     std::string objPath2 = mgrObjPath;
712cbf7231SPatrick Williams     objPath2 += "/" + std::to_string(2);
729d18e562SRatan Gupta 
739d18e562SRatan Gupta     Client client(bus, objPath.c_str(), manager, "1.1.1.1", 23);
749d18e562SRatan Gupta     client.address("2.2.2.2");
759d18e562SRatan Gupta 
762cbf7231SPatrick Williams     Client restoreClient(bus, objPath2.c_str(), manager);
779d18e562SRatan Gupta     auto persistentPath = manager.dbusPersistentLocation;
789d18e562SRatan Gupta     persistentPath += "/1";
799d18e562SRatan Gupta     deserialize(persistentPath, restoreClient);
809d18e562SRatan Gupta 
819d18e562SRatan Gupta     EXPECT_EQ("2.2.2.2", restoreClient.address());
829d18e562SRatan Gupta     EXPECT_EQ(23, restoreClient.port());
839d18e562SRatan Gupta }
849d18e562SRatan Gupta 
859d18e562SRatan Gupta } // namespace snmp
869d18e562SRatan Gupta } // namespace network
879d18e562SRatan Gupta } // namespace phosphor
88