1 #include "elog_entry.hpp"
2 #include "extensions.hpp"
3 
4 #include <sdbusplus/test/sdbus_mock.hpp>
5 
6 #include <gtest/gtest.h>
7 
8 using namespace phosphor::logging;
9 
10 void startup1(internal::Manager& /*manager*/) {}
11 
12 void startup2(internal::Manager& /*manager*/) {}
13 
14 void create1(const std::string& /*message*/, uint32_t /*id*/,
15              uint64_t /*timestamp*/, Entry::Level /*severity*/,
16              const AdditionalDataArg& /*additionalData*/,
17              const AssociationEndpointsArg& /*assocs*/, const FFDCArg& /*ffdc*/)
18 {}
19 
20 void create2(const std::string& /*message*/, uint32_t /*id*/,
21              uint64_t /*timestamp*/, Entry::Level /*severity*/,
22              const AdditionalDataArg& /*additionalData*/,
23              const AssociationEndpointsArg& /*assocs*/, const FFDCArg& /*ffdc*/)
24 {}
25 
26 void deleteLog1(uint32_t /*id*/) {}
27 
28 void deleteLog2(uint32_t /*id*/) {}
29 
30 void deleteProhibited1(uint32_t /*id*/, bool& prohibited)
31 {
32     prohibited = true;
33 }
34 
35 void deleteProhibited2(uint32_t /*id*/, bool& prohibited)
36 {
37     prohibited = true;
38 }
39 
40 void logIDWithHwIsolation1(std::vector<uint32_t>& logIDs)
41 {
42     logIDs.push_back(1);
43 }
44 
45 void logIDWithHwIsolation2(std::vector<uint32_t>& logIDs)
46 {
47     logIDs.push_back(2);
48 }
49 
50 DISABLE_LOG_ENTRY_CAPS()
51 REGISTER_EXTENSION_FUNCTION(startup1)
52 REGISTER_EXTENSION_FUNCTION(startup2)
53 REGISTER_EXTENSION_FUNCTION(create1)
54 REGISTER_EXTENSION_FUNCTION(create2)
55 REGISTER_EXTENSION_FUNCTION(deleteProhibited1)
56 REGISTER_EXTENSION_FUNCTION(deleteProhibited2)
57 REGISTER_EXTENSION_FUNCTION(logIDWithHwIsolation1)
58 REGISTER_EXTENSION_FUNCTION(logIDWithHwIsolation2)
59 REGISTER_EXTENSION_FUNCTION(deleteLog1)
60 REGISTER_EXTENSION_FUNCTION(deleteLog2)
61 
62 TEST(ExtensionsTest, FunctionCallTest)
63 {
64     sdbusplus::SdBusMock sdbusMock;
65     sdbusplus::bus_t bus = sdbusplus::get_mocked_new(&sdbusMock);
66     internal::Manager manager(bus, "testpath");
67 
68     EXPECT_EQ(Extensions::getStartupFunctions().size(), 2);
69     for (auto& s : Extensions::getStartupFunctions())
70     {
71         s(manager);
72     }
73 
74     AdditionalDataArg ad;
75     AssociationEndpointsArg assocs;
76     FFDCArg ffdc;
77     EXPECT_EQ(Extensions::getCreateFunctions().size(), 2);
78     for (auto& c : Extensions::getCreateFunctions())
79     {
80         c("test", 5, 6, Entry::Level::Informational, ad, assocs, ffdc);
81     }
82 
83     EXPECT_EQ(Extensions::getDeleteFunctions().size(), 2);
84     for (auto& d : Extensions::getDeleteFunctions())
85     {
86         d(5);
87     }
88 
89     EXPECT_EQ(Extensions::getDeleteProhibitedFunctions().size(), 2);
90     for (auto& p : Extensions::getDeleteProhibitedFunctions())
91     {
92         bool prohibited = false;
93         p(5, prohibited);
94         EXPECT_TRUE(prohibited);
95     }
96 
97     EXPECT_EQ(Extensions::getLogIDWithHwIsolationFunctions().size(), 2);
98     std::vector<uint32_t> ids;
99     for (size_t i = 0; i < 2; ++i)
100     {
101         auto getLogIDWithHwIsolation =
102             Extensions::getLogIDWithHwIsolationFunctions()[i];
103         getLogIDWithHwIsolation(ids);
104         if (i == 0)
105         {
106             EXPECT_EQ(ids.size(), 1);
107             EXPECT_EQ(ids[0], 1);
108         }
109         if (i == 1)
110         {
111             EXPECT_EQ(ids.size(), 2);
112             EXPECT_EQ(ids[1], 2);
113         }
114     }
115 
116     EXPECT_TRUE(Extensions::disableDefaultLogCaps());
117 }
118