1*44524a5fSGilbert Chen #include "config.h"
2*44524a5fSGilbert Chen 
3*44524a5fSGilbert Chen #include "common/utils.hpp"
4*44524a5fSGilbert Chen #include "requester/test/mock_mctp_discovery_handler_intf.hpp"
5*44524a5fSGilbert Chen 
6*44524a5fSGilbert Chen #include <gmock/gmock.h>
7*44524a5fSGilbert Chen #include <gtest/gtest.h>
8*44524a5fSGilbert Chen 
9*44524a5fSGilbert Chen using ::testing::_;
10*44524a5fSGilbert Chen 
TEST(MctpEndpointDiscoveryTest,SingleHandleMctpEndpoint)11*44524a5fSGilbert Chen TEST(MctpEndpointDiscoveryTest, SingleHandleMctpEndpoint)
12*44524a5fSGilbert Chen {
13*44524a5fSGilbert Chen     auto& bus = pldm::utils::DBusHandler::getBus();
14*44524a5fSGilbert Chen     pldm::MockManager manager;
15*44524a5fSGilbert Chen 
16*44524a5fSGilbert Chen     EXPECT_CALL(manager, handleMctpEndpoints(_)).Times(1);
17*44524a5fSGilbert Chen 
18*44524a5fSGilbert Chen     auto mctpDiscoveryHandler = std::make_unique<pldm::MctpDiscovery>(
19*44524a5fSGilbert Chen         bus, std::initializer_list<pldm::MctpDiscoveryHandlerIntf*>{&manager});
20*44524a5fSGilbert Chen     mctpDiscoveryHandler = nullptr;
21*44524a5fSGilbert Chen }
22*44524a5fSGilbert Chen 
TEST(MctpEndpointDiscoveryTest,MultipleHandleMctpEndpoints)23*44524a5fSGilbert Chen TEST(MctpEndpointDiscoveryTest, MultipleHandleMctpEndpoints)
24*44524a5fSGilbert Chen {
25*44524a5fSGilbert Chen     auto& bus = pldm::utils::DBusHandler::getBus();
26*44524a5fSGilbert Chen     pldm::MockManager manager1;
27*44524a5fSGilbert Chen     pldm::MockManager manager2;
28*44524a5fSGilbert Chen 
29*44524a5fSGilbert Chen     EXPECT_CALL(manager1, handleMctpEndpoints(_)).Times(1);
30*44524a5fSGilbert Chen     EXPECT_CALL(manager2, handleMctpEndpoints(_)).Times(1);
31*44524a5fSGilbert Chen 
32*44524a5fSGilbert Chen     auto mctpDiscoveryHandler = std::make_unique<pldm::MctpDiscovery>(
33*44524a5fSGilbert Chen         bus, std::initializer_list<pldm::MctpDiscoveryHandlerIntf*>{&manager1,
34*44524a5fSGilbert Chen                                                                     &manager2});
35*44524a5fSGilbert Chen     mctpDiscoveryHandler = nullptr;
36*44524a5fSGilbert Chen }
37*44524a5fSGilbert Chen 
TEST(MctpEndpointDiscoveryTest,goodGetMctpInfos)38*44524a5fSGilbert Chen TEST(MctpEndpointDiscoveryTest, goodGetMctpInfos)
39*44524a5fSGilbert Chen {
40*44524a5fSGilbert Chen     auto& bus = pldm::utils::DBusHandler::getBus();
41*44524a5fSGilbert Chen     pldm::MockManager manager;
42*44524a5fSGilbert Chen     pldm::MctpInfos mctpInfos;
43*44524a5fSGilbert Chen 
44*44524a5fSGilbert Chen     auto mctpDiscoveryHandler = std::make_unique<pldm::MctpDiscovery>(
45*44524a5fSGilbert Chen         bus, std::initializer_list<pldm::MctpDiscoveryHandlerIntf*>{&manager});
46*44524a5fSGilbert Chen     mctpDiscoveryHandler->getMctpInfos(mctpInfos);
47*44524a5fSGilbert Chen     EXPECT_EQ(mctpInfos.size(), 0);
48*44524a5fSGilbert Chen }
49*44524a5fSGilbert Chen 
TEST(MctpEndpointDiscoveryTest,goodAddToExistingMctpInfos)50*44524a5fSGilbert Chen TEST(MctpEndpointDiscoveryTest, goodAddToExistingMctpInfos)
51*44524a5fSGilbert Chen {
52*44524a5fSGilbert Chen     auto& bus = pldm::utils::DBusHandler::getBus();
53*44524a5fSGilbert Chen     pldm::MockManager manager;
54*44524a5fSGilbert Chen     const pldm::MctpInfos& mctpInfos = {
55*44524a5fSGilbert Chen         pldm::MctpInfo(11, pldm::emptyUUID, "", 1),
56*44524a5fSGilbert Chen         pldm::MctpInfo(12, pldm::emptyUUID, "abc", 1)};
57*44524a5fSGilbert Chen 
58*44524a5fSGilbert Chen     auto mctpDiscoveryHandler = std::make_unique<pldm::MctpDiscovery>(
59*44524a5fSGilbert Chen         bus, std::initializer_list<pldm::MctpDiscoveryHandlerIntf*>{&manager});
60*44524a5fSGilbert Chen     mctpDiscoveryHandler->addToExistingMctpInfos(mctpInfos);
61*44524a5fSGilbert Chen     EXPECT_EQ(mctpDiscoveryHandler->existingMctpInfos.size(), 2);
62*44524a5fSGilbert Chen     pldm::MctpInfo mctpInfo = mctpDiscoveryHandler->existingMctpInfos.back();
63*44524a5fSGilbert Chen     EXPECT_EQ(std::get<0>(mctpInfo), 12);
64*44524a5fSGilbert Chen     EXPECT_EQ(std::get<2>(mctpInfo), "abc");
65*44524a5fSGilbert Chen     EXPECT_EQ(std::get<3>(mctpInfo), 1);
66*44524a5fSGilbert Chen }
67*44524a5fSGilbert Chen 
TEST(MctpEndpointDiscoveryTest,badAddToExistingMctpInfos)68*44524a5fSGilbert Chen TEST(MctpEndpointDiscoveryTest, badAddToExistingMctpInfos)
69*44524a5fSGilbert Chen {
70*44524a5fSGilbert Chen     auto& bus = pldm::utils::DBusHandler::getBus();
71*44524a5fSGilbert Chen     pldm::MockManager manager;
72*44524a5fSGilbert Chen     const pldm::MctpInfos& mctpInfos = {
73*44524a5fSGilbert Chen         pldm::MctpInfo(11, pldm::emptyUUID, "", 1)};
74*44524a5fSGilbert Chen 
75*44524a5fSGilbert Chen     auto mctpDiscoveryHandler = std::make_unique<pldm::MctpDiscovery>(
76*44524a5fSGilbert Chen         bus, std::initializer_list<pldm::MctpDiscoveryHandlerIntf*>{&manager});
77*44524a5fSGilbert Chen     mctpDiscoveryHandler->addToExistingMctpInfos(mctpInfos);
78*44524a5fSGilbert Chen     EXPECT_NE(mctpDiscoveryHandler->existingMctpInfos.size(), 2);
79*44524a5fSGilbert Chen }
80*44524a5fSGilbert Chen 
TEST(MctpEndpointDiscoveryTest,goodRemoveFromExistingMctpInfos)81*44524a5fSGilbert Chen TEST(MctpEndpointDiscoveryTest, goodRemoveFromExistingMctpInfos)
82*44524a5fSGilbert Chen {
83*44524a5fSGilbert Chen     auto& bus = pldm::utils::DBusHandler::getBus();
84*44524a5fSGilbert Chen     pldm::MockManager manager;
85*44524a5fSGilbert Chen     const pldm::MctpInfos& mctpInfos = {
86*44524a5fSGilbert Chen         pldm::MctpInfo(11, pldm::emptyUUID, "def", 2),
87*44524a5fSGilbert Chen         pldm::MctpInfo(12, pldm::emptyUUID, "abc", 1)};
88*44524a5fSGilbert Chen 
89*44524a5fSGilbert Chen     auto mctpDiscoveryHandler = std::make_unique<pldm::MctpDiscovery>(
90*44524a5fSGilbert Chen         bus, std::initializer_list<pldm::MctpDiscoveryHandlerIntf*>{&manager});
91*44524a5fSGilbert Chen     mctpDiscoveryHandler->addToExistingMctpInfos(mctpInfos);
92*44524a5fSGilbert Chen     EXPECT_EQ(mctpDiscoveryHandler->existingMctpInfos.size(), 2);
93*44524a5fSGilbert Chen     pldm::MctpInfo mctpInfo = mctpDiscoveryHandler->existingMctpInfos.back();
94*44524a5fSGilbert Chen     EXPECT_EQ(std::get<0>(mctpInfo), 12);
95*44524a5fSGilbert Chen     EXPECT_EQ(std::get<2>(mctpInfo), "abc");
96*44524a5fSGilbert Chen     EXPECT_EQ(std::get<3>(mctpInfo), 1);
97*44524a5fSGilbert Chen     pldm::MctpInfos removedInfos;
98*44524a5fSGilbert Chen     pldm::MctpInfos remainMctpInfos;
99*44524a5fSGilbert Chen     remainMctpInfos.emplace_back(pldm::MctpInfo(12, pldm::emptyUUID, "abc", 1));
100*44524a5fSGilbert Chen 
101*44524a5fSGilbert Chen     mctpDiscoveryHandler->removeFromExistingMctpInfos(remainMctpInfos,
102*44524a5fSGilbert Chen                                                       removedInfos);
103*44524a5fSGilbert Chen     EXPECT_EQ(mctpDiscoveryHandler->existingMctpInfos.size(), 1);
104*44524a5fSGilbert Chen     mctpInfo = mctpDiscoveryHandler->existingMctpInfos.back();
105*44524a5fSGilbert Chen     EXPECT_EQ(std::get<0>(mctpInfo), 12);
106*44524a5fSGilbert Chen     EXPECT_EQ(std::get<2>(mctpInfo), "abc");
107*44524a5fSGilbert Chen     EXPECT_EQ(std::get<3>(mctpInfo), 1);
108*44524a5fSGilbert Chen     EXPECT_EQ(removedInfos.size(), 1);
109*44524a5fSGilbert Chen     mctpInfo = removedInfos.back();
110*44524a5fSGilbert Chen     EXPECT_EQ(std::get<0>(mctpInfo), 11);
111*44524a5fSGilbert Chen     EXPECT_EQ(std::get<2>(mctpInfo), "def");
112*44524a5fSGilbert Chen     EXPECT_EQ(std::get<3>(mctpInfo), 2);
113*44524a5fSGilbert Chen }
114*44524a5fSGilbert Chen 
TEST(MctpEndpointDiscoveryTest,goodRemoveEndpoints)115*44524a5fSGilbert Chen TEST(MctpEndpointDiscoveryTest, goodRemoveEndpoints)
116*44524a5fSGilbert Chen {
117*44524a5fSGilbert Chen     auto& bus = pldm::utils::DBusHandler::getBus();
118*44524a5fSGilbert Chen     pldm::MockManager manager;
119*44524a5fSGilbert Chen     const pldm::MctpInfos& mctpInfos = {
120*44524a5fSGilbert Chen         pldm::MctpInfo(11, pldm::emptyUUID, "def", 2),
121*44524a5fSGilbert Chen         pldm::MctpInfo(12, pldm::emptyUUID, "abc", 1)};
122*44524a5fSGilbert Chen 
123*44524a5fSGilbert Chen     auto mctpDiscoveryHandler = std::make_unique<pldm::MctpDiscovery>(
124*44524a5fSGilbert Chen         bus, std::initializer_list<pldm::MctpDiscoveryHandlerIntf*>{&manager});
125*44524a5fSGilbert Chen     mctpDiscoveryHandler->addToExistingMctpInfos(mctpInfos);
126*44524a5fSGilbert Chen     EXPECT_EQ(mctpDiscoveryHandler->existingMctpInfos.size(), 2);
127*44524a5fSGilbert Chen     pldm::MctpInfo mctpInfo = mctpDiscoveryHandler->existingMctpInfos.back();
128*44524a5fSGilbert Chen     EXPECT_EQ(std::get<0>(mctpInfo), 12);
129*44524a5fSGilbert Chen     EXPECT_EQ(std::get<2>(mctpInfo), "abc");
130*44524a5fSGilbert Chen     EXPECT_EQ(std::get<3>(mctpInfo), 1);
131*44524a5fSGilbert Chen     sdbusplus::message_t msg = sdbusplus::bus::new_default().new_method_call(
132*44524a5fSGilbert Chen         "xyz.openbmc_project.sdbusplus.test.Object",
133*44524a5fSGilbert Chen         "/xyz/openbmc_project/sdbusplus/test/object",
134*44524a5fSGilbert Chen         "xyz.openbmc_project.sdbusplus.test.Object", "Unused");
135*44524a5fSGilbert Chen     mctpDiscoveryHandler->removeEndpoints(msg);
136*44524a5fSGilbert Chen     EXPECT_EQ(mctpDiscoveryHandler->existingMctpInfos.size(), 0);
137*44524a5fSGilbert Chen }
138