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 // gtest doesn't like this happening in another file, so do it here.
11 StartupFunctions Extensions::startupFunctions{};
12 CreateFunctions Extensions::createFunctions{};
13 DeleteFunctions Extensions::deleteFunctions{};
14 DeleteProhibitedFunctions Extensions::deleteProhibitedFunctions{};
15 Extensions::DefaultErrorCaps Extensions::defaultErrorCaps =
16     Extensions::DefaultErrorCaps::enable;
17 
18 void startup1(internal::Manager& /*manager*/)
19 {
20 }
21 
22 void startup2(internal::Manager& /*manager*/)
23 {
24 }
25 
26 void create1(const std::string& /*message*/, uint32_t /*id*/,
27              uint64_t /*timestamp*/, Entry::Level /*severity*/,
28              const AdditionalDataArg& /*additionalData*/,
29              const AssociationEndpointsArg& /*assocs*/, const FFDCArg& /*ffdc*/)
30 {
31 }
32 
33 void create2(const std::string& /*message*/, uint32_t /*id*/,
34              uint64_t /*timestamp*/, Entry::Level /*severity*/,
35              const AdditionalDataArg& /*additionalData*/,
36              const AssociationEndpointsArg& /*assocs*/, const FFDCArg& /*ffdc*/)
37 {
38 }
39 
40 void deleteLog1(uint32_t /*id*/)
41 {
42 }
43 
44 void deleteLog2(uint32_t /*id*/)
45 {
46 }
47 
48 void deleteProhibited1(uint32_t /*id*/, bool& prohibited)
49 {
50     prohibited = true;
51 }
52 
53 void deleteProhibited2(uint32_t /*id*/, bool& prohibited)
54 {
55     prohibited = true;
56 }
57 
58 DISABLE_LOG_ENTRY_CAPS()
59 REGISTER_EXTENSION_FUNCTION(startup1)
60 REGISTER_EXTENSION_FUNCTION(startup2)
61 REGISTER_EXTENSION_FUNCTION(create1)
62 REGISTER_EXTENSION_FUNCTION(create2)
63 REGISTER_EXTENSION_FUNCTION(deleteProhibited1)
64 REGISTER_EXTENSION_FUNCTION(deleteProhibited2)
65 REGISTER_EXTENSION_FUNCTION(deleteLog1)
66 REGISTER_EXTENSION_FUNCTION(deleteLog2)
67 
68 TEST(ExtensionsTest, FunctionCallTest)
69 {
70     sdbusplus::SdBusMock sdbusMock;
71     sdbusplus::bus::bus bus = sdbusplus::get_mocked_new(&sdbusMock);
72     internal::Manager manager(bus, "testpath");
73 
74     EXPECT_EQ(Extensions::getStartupFunctions().size(), 2);
75     for (auto& s : Extensions::getStartupFunctions())
76     {
77         s(manager);
78     }
79 
80     AdditionalDataArg ad;
81     AssociationEndpointsArg assocs;
82     FFDCArg ffdc;
83     EXPECT_EQ(Extensions::getCreateFunctions().size(), 2);
84     for (auto& c : Extensions::getCreateFunctions())
85     {
86         c("test", 5, 6, Entry::Level::Informational, ad, assocs, ffdc);
87     }
88 
89     EXPECT_EQ(Extensions::getDeleteFunctions().size(), 2);
90     for (auto& d : Extensions::getDeleteFunctions())
91     {
92         d(5);
93     }
94 
95     EXPECT_EQ(Extensions::getDeleteProhibitedFunctions().size(), 2);
96     for (auto& p : Extensions::getDeleteProhibitedFunctions())
97     {
98         bool prohibited = false;
99         p(5, prohibited);
100         EXPECT_TRUE(prohibited);
101     }
102 
103     EXPECT_TRUE(Extensions::disableDefaultLogCaps());
104 }
105