1 #include "extensions/openpower-pels/pel_rules.hpp"
2
3 #include <gtest/gtest.h>
4
5 using namespace openpower::pels;
6
7 struct CheckParams
8 {
9 // pel_rules::check() inputs
10 uint16_t actionFlags;
11 uint8_t eventType;
12 uint8_t severity;
13
14 // pel_rules::check() expected outputs
15 uint16_t expectedActionFlags;
16 uint8_t expectedEventType;
17 };
18
19 const uint8_t sevInfo = 0x00;
20 const uint8_t sevRecovered = 0x10;
21 const uint8_t sevPredictive = 0x20;
22 const uint8_t sevUnrecov = 0x40;
23 const uint8_t sevCrit = 0x50;
24 const uint8_t sevDiagnostic = 0x60;
25 const uint8_t sevSymptom = 0x70;
26
27 const uint8_t typeNA = 0x00;
28 const uint8_t typeMisc = 0x01;
29 const uint8_t typeTracing = 0x02;
30 const uint8_t typeDumpNotif = 0x08;
31
TEST(PELRulesTest,TestCheckRules)32 TEST(PELRulesTest, TestCheckRules)
33 {
34 // Impossible to cover all combinations, but
35 // do some interesting ones.
36 std::vector<CheckParams> testParams{
37 // Informational errors w/ empty action flags
38 // and different event types.
39 {0, typeNA, sevInfo, 0x6000, typeMisc},
40 {0, typeMisc, sevInfo, 0x6000, typeMisc},
41 {0, typeTracing, sevInfo, 0x6000, typeTracing},
42 {0, typeDumpNotif, sevInfo, 0x2000, typeDumpNotif},
43
44 // Informational errors with wrong action flags
45 {0x8900, typeNA, sevInfo, 0x6000, typeMisc},
46
47 // Informational errors with extra valid action flags
48 {0x00C0, typeMisc, sevInfo, 0x60C0, typeMisc},
49
50 // Informational - don't report
51 {0x1000, typeMisc, sevInfo, 0x5000, typeMisc},
52
53 // Recovered will report as hidden
54 {0, typeNA, sevRecovered, 0x6000, typeNA},
55
56 // The 5 error severities will have:
57 // service action, report, call home
58 {0, typeNA, sevPredictive, 0xA800, typeNA},
59 {0, typeNA, sevUnrecov, 0xA800, typeNA},
60 {0, typeNA, sevCrit, 0xA800, typeNA},
61 {0, typeNA, sevDiagnostic, 0xA800, typeNA},
62 {0, typeNA, sevSymptom, 0xA800, typeNA}};
63
64 for (const auto& entry : testParams)
65 {
66 auto [actionFlags, type] = pel_rules::check(
67 entry.actionFlags, entry.eventType, entry.severity);
68
69 EXPECT_EQ(actionFlags, entry.expectedActionFlags);
70 EXPECT_EQ(type, entry.expectedEventType);
71 }
72 }
73