xref: /openbmc/phosphor-logging/test/openpower-pels/user_header_test.cpp (revision e594063471e730f374abc53235e43a2ef3a1b407)
197f7abcfSMatt Spinler /**
297f7abcfSMatt Spinler  * Copyright © 2019 IBM Corporation
397f7abcfSMatt Spinler  *
497f7abcfSMatt Spinler  * Licensed under the Apache License, Version 2.0 (the "License");
597f7abcfSMatt Spinler  * you may not use this file except in compliance with the License.
697f7abcfSMatt Spinler  * You may obtain a copy of the License at
797f7abcfSMatt Spinler  *
897f7abcfSMatt Spinler  *     http://www.apache.org/licenses/LICENSE-2.0
997f7abcfSMatt Spinler  *
1097f7abcfSMatt Spinler  * Unless required by applicable law or agreed to in writing, software
1197f7abcfSMatt Spinler  * distributed under the License is distributed on an "AS IS" BASIS,
1297f7abcfSMatt Spinler  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1397f7abcfSMatt Spinler  * See the License for the specific language governing permissions and
1497f7abcfSMatt Spinler  * limitations under the License.
1597f7abcfSMatt Spinler  */
16fdb6a202SMatt Spinler #include "elog_entry.hpp"
17fdb6a202SMatt Spinler #include "extensions/openpower-pels/pel_types.hpp"
1803c1d915SMatt Spinler #include "extensions/openpower-pels/private_header.hpp"
1903c1d915SMatt Spinler #include "extensions/openpower-pels/user_header.hpp"
20aadccc85SMatt Spinler #include "mocks.hpp"
2103c1d915SMatt Spinler #include "pel_utils.hpp"
2203c1d915SMatt Spinler 
2303c1d915SMatt Spinler #include <gtest/gtest.h>
2403c1d915SMatt Spinler 
2503c1d915SMatt Spinler using namespace openpower::pels;
26aadccc85SMatt Spinler using ::testing::Return;
2703c1d915SMatt Spinler 
TEST(UserHeaderTest,SizeTest)2803c1d915SMatt Spinler TEST(UserHeaderTest, SizeTest)
2903c1d915SMatt Spinler {
3003c1d915SMatt Spinler     EXPECT_EQ(UserHeader::flattenedSize(), 24);
3103c1d915SMatt Spinler }
3203c1d915SMatt Spinler 
TEST(UserHeaderTest,UnflattenFlattenTest)3303c1d915SMatt Spinler TEST(UserHeaderTest, UnflattenFlattenTest)
3403c1d915SMatt Spinler {
3542828bd9SMatt Spinler     auto data = pelDataFactory(TestPELType::userHeaderSection);
3603c1d915SMatt Spinler 
3742828bd9SMatt Spinler     Stream stream(data);
3803c1d915SMatt Spinler     UserHeader uh(stream);
3903c1d915SMatt Spinler     EXPECT_EQ(uh.valid(), true);
4003c1d915SMatt Spinler 
4103c1d915SMatt Spinler     EXPECT_EQ(uh.header().id, 0x5548);
4203c1d915SMatt Spinler     EXPECT_EQ(uh.header().size, UserHeader::flattenedSize());
4303c1d915SMatt Spinler     EXPECT_EQ(uh.header().version, 0x01);
4403c1d915SMatt Spinler     EXPECT_EQ(uh.header().subType, 0x0A);
4503c1d915SMatt Spinler     EXPECT_EQ(uh.header().componentID, 0x0B0C);
4603c1d915SMatt Spinler 
4703c1d915SMatt Spinler     EXPECT_EQ(uh.subsystem(), 0x10);
4803c1d915SMatt Spinler     EXPECT_EQ(uh.scope(), 0x04);
4903c1d915SMatt Spinler     EXPECT_EQ(uh.severity(), 0x20);
5003c1d915SMatt Spinler     EXPECT_EQ(uh.eventType(), 0x00);
5103c1d915SMatt Spinler     EXPECT_EQ(uh.problemDomain(), 0x03);
5203c1d915SMatt Spinler     EXPECT_EQ(uh.problemVector(), 0x04);
5303c1d915SMatt Spinler     EXPECT_EQ(uh.actionFlags(), 0x80C0);
5403c1d915SMatt Spinler 
5503c1d915SMatt Spinler     // Now flatten into a vector and check that this vector
5603c1d915SMatt Spinler     // matches the original one.
5703c1d915SMatt Spinler     std::vector<uint8_t> newData;
5803c1d915SMatt Spinler     Stream newStream(newData);
5903c1d915SMatt Spinler 
60cf5a8d0fSMatt Spinler     uh.flatten(newStream);
6142828bd9SMatt Spinler     EXPECT_EQ(data, newData);
6203c1d915SMatt Spinler }
6303c1d915SMatt Spinler 
TEST(UserHeaderTest,ShortDataTest)6403c1d915SMatt Spinler TEST(UserHeaderTest, ShortDataTest)
6503c1d915SMatt Spinler {
6642828bd9SMatt Spinler     auto data = pelDataFactory(TestPELType::userHeaderSection);
6742828bd9SMatt Spinler     data.resize(data.size() - 1);
6803c1d915SMatt Spinler 
6942828bd9SMatt Spinler     Stream stream(data);
7003c1d915SMatt Spinler     UserHeader uh(stream);
7103c1d915SMatt Spinler 
7203c1d915SMatt Spinler     EXPECT_EQ(uh.valid(), false);
7303c1d915SMatt Spinler }
7403c1d915SMatt Spinler 
TEST(UserHeaderTest,CorruptDataTest1)7503c1d915SMatt Spinler TEST(UserHeaderTest, CorruptDataTest1)
7603c1d915SMatt Spinler {
7742828bd9SMatt Spinler     auto data = pelDataFactory(TestPELType::userHeaderSection);
7842828bd9SMatt Spinler     data.resize(data.size() - 1);
7903c1d915SMatt Spinler 
8042828bd9SMatt Spinler     data.at(0) = 0; // corrupt the section ID
8103c1d915SMatt Spinler 
8242828bd9SMatt Spinler     Stream stream(data);
8303c1d915SMatt Spinler     UserHeader uh(stream);
8403c1d915SMatt Spinler 
8503c1d915SMatt Spinler     EXPECT_EQ(uh.valid(), false);
8603c1d915SMatt Spinler }
8703c1d915SMatt Spinler 
TEST(UserHeaderTest,CorruptDataTest2)8803c1d915SMatt Spinler TEST(UserHeaderTest, CorruptDataTest2)
8903c1d915SMatt Spinler {
9042828bd9SMatt Spinler     auto data = pelDataFactory(TestPELType::userHeaderSection);
9103c1d915SMatt Spinler 
9242828bd9SMatt Spinler     data.at(4) = 0x22; // corrupt the version
9303c1d915SMatt Spinler 
9442828bd9SMatt Spinler     Stream stream(data);
9503c1d915SMatt Spinler     UserHeader uh(stream);
9603c1d915SMatt Spinler 
9703c1d915SMatt Spinler     EXPECT_EQ(uh.valid(), false);
9803c1d915SMatt Spinler }
99fdb6a202SMatt Spinler 
100fdb6a202SMatt Spinler // Construct the User Header from the message registry
TEST(UserHeaderTest,ConstructionTest)101fdb6a202SMatt Spinler TEST(UserHeaderTest, ConstructionTest)
102fdb6a202SMatt Spinler {
103fdb6a202SMatt Spinler     using namespace openpower::pels::message;
104aadccc85SMatt Spinler     {
105fdb6a202SMatt Spinler         Entry regEntry;
106fdb6a202SMatt Spinler 
107fdb6a202SMatt Spinler         regEntry.name = "test";
108fdb6a202SMatt Spinler         regEntry.subsystem = 5;
109aadccc85SMatt Spinler         regEntry.severity = {{"", 0x40}};
110fdb6a202SMatt Spinler         regEntry.actionFlags = 0xC000;
111fdb6a202SMatt Spinler         regEntry.eventType = 1;
112fdb6a202SMatt Spinler         regEntry.eventScope = 2;
113fdb6a202SMatt Spinler 
114aadccc85SMatt Spinler         MockDataInterface dataIface;
1156b3f345bSVijay Lobo         AdditionalData ad;
116aadccc85SMatt Spinler 
1176b3f345bSVijay Lobo         UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error, ad,
118aadccc85SMatt Spinler                       dataIface);
119fdb6a202SMatt Spinler 
120fdb6a202SMatt Spinler         ASSERT_TRUE(uh.valid());
121fdb6a202SMatt Spinler         EXPECT_EQ(uh.header().id, 0x5548);
122fdb6a202SMatt Spinler         EXPECT_EQ(uh.header().size, UserHeader::flattenedSize());
123fdb6a202SMatt Spinler         EXPECT_EQ(uh.header().version, 0x01);
124fdb6a202SMatt Spinler         EXPECT_EQ(uh.header().subType, 0x00);
125fdb6a202SMatt Spinler         EXPECT_EQ(uh.header().componentID,
126fdb6a202SMatt Spinler                   static_cast<uint16_t>(ComponentID::phosphorLogging));
127fdb6a202SMatt Spinler 
1281f93c590SMatt Spinler         EXPECT_EQ(uh.subsystem(), 5);
1291f93c590SMatt Spinler         EXPECT_EQ(uh.severity(), 0x40);
1301f93c590SMatt Spinler         EXPECT_EQ(uh.eventType(), 1);
1311f93c590SMatt Spinler         EXPECT_EQ(uh.scope(), 2);
1321f93c590SMatt Spinler         EXPECT_EQ(uh.problemDomain(), 0);
1331f93c590SMatt Spinler         EXPECT_EQ(uh.problemVector(), 0);
1341f93c590SMatt Spinler         EXPECT_EQ(uh.actionFlags(), 0xC000);
1351f93c590SMatt Spinler 
1361f93c590SMatt Spinler         {
1371f93c590SMatt Spinler             // The same thing, but as if the action flags weren't specified
1381f93c590SMatt Spinler             // in the registry so they are a nullopt.  The object should
1391f93c590SMatt Spinler             // then set them to 0xFFFF.
1401f93c590SMatt Spinler             regEntry.actionFlags = std::nullopt;
1411f93c590SMatt Spinler 
1426b3f345bSVijay Lobo             UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error, ad,
1431f93c590SMatt Spinler                           dataIface);
1441f93c590SMatt Spinler             EXPECT_EQ(uh.actionFlags(), 0xFFFF);
1451f93c590SMatt Spinler         }
146fdb6a202SMatt Spinler     }
147fdb6a202SMatt Spinler 
148aadccc85SMatt Spinler     // Test the system type based severity lookups
149aadccc85SMatt Spinler     {
150aadccc85SMatt Spinler         Entry regEntry;
151aadccc85SMatt Spinler 
152aadccc85SMatt Spinler         regEntry.name = "test";
153aadccc85SMatt Spinler         regEntry.subsystem = 5;
154aadccc85SMatt Spinler         regEntry.severity = {{"", 0x20}, {"systemB", 0x10}, {"systemA", 0x00}};
155aadccc85SMatt Spinler 
1566b3f345bSVijay Lobo         AdditionalData ad;
1576b3f345bSVijay Lobo 
158aadccc85SMatt Spinler         MockDataInterface dataIface;
1596ea4d5f7SMatt Spinler         std::vector<std::string> names1{"systemA"};
1606ea4d5f7SMatt Spinler         std::vector<std::string> names2{"systemB"};
1616ea4d5f7SMatt Spinler         std::vector<std::string> names3{"systemC"};
1626ea4d5f7SMatt Spinler 
1636ea4d5f7SMatt Spinler         EXPECT_CALL(dataIface, getSystemNames)
1641ab6696fSMatt Spinler             .WillOnce(Return(names1))
1651ab6696fSMatt Spinler             .WillOnce(Return(names2))
1661ab6696fSMatt Spinler             .WillOnce(Return(names3));
167aadccc85SMatt Spinler 
168aadccc85SMatt Spinler         {
1696b3f345bSVijay Lobo             UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error, ad,
170aadccc85SMatt Spinler                           dataIface);
171aadccc85SMatt Spinler 
172aadccc85SMatt Spinler             EXPECT_EQ(uh.severity(), 0x00);
173aadccc85SMatt Spinler         }
174aadccc85SMatt Spinler 
175aadccc85SMatt Spinler         {
1766b3f345bSVijay Lobo             UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error, ad,
177aadccc85SMatt Spinler                           dataIface);
178aadccc85SMatt Spinler 
179aadccc85SMatt Spinler             EXPECT_EQ(uh.severity(), 0x10);
180aadccc85SMatt Spinler         }
181aadccc85SMatt Spinler 
182aadccc85SMatt Spinler         {
1836b3f345bSVijay Lobo             UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error, ad,
184aadccc85SMatt Spinler                           dataIface);
185aadccc85SMatt Spinler 
186aadccc85SMatt Spinler             EXPECT_EQ(uh.severity(), 0x20);
187aadccc85SMatt Spinler         }
188aadccc85SMatt Spinler     }
189aadccc85SMatt Spinler }
190aadccc85SMatt Spinler 
191fdb6a202SMatt Spinler // Test that the severity comes from the event log if not
192fdb6a202SMatt Spinler // in the message registry
TEST(UserHeaderTest,UseEventLogSevTest)193fdb6a202SMatt Spinler TEST(UserHeaderTest, UseEventLogSevTest)
194fdb6a202SMatt Spinler {
195fdb6a202SMatt Spinler     using namespace openpower::pels::message;
196fdb6a202SMatt Spinler     Entry regEntry;
197fdb6a202SMatt Spinler 
198fdb6a202SMatt Spinler     regEntry.name = "test";
199fdb6a202SMatt Spinler     regEntry.subsystem = 5;
200fdb6a202SMatt Spinler     regEntry.actionFlags = 0xC000;
201fdb6a202SMatt Spinler     regEntry.eventType = 1;
202fdb6a202SMatt Spinler     regEntry.eventScope = 2;
203fdb6a202SMatt Spinler     // Leave off severity
204fdb6a202SMatt Spinler 
205aadccc85SMatt Spinler     MockDataInterface dataIface;
2066b3f345bSVijay Lobo     AdditionalData ad;
207aadccc85SMatt Spinler 
2086b3f345bSVijay Lobo     UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error, ad,
2096b3f345bSVijay Lobo                   dataIface);
210fdb6a202SMatt Spinler     ASSERT_EQ(uh.severity(), 0x40);
211fdb6a202SMatt Spinler }
212fdb6a202SMatt Spinler 
2136b3f345bSVijay Lobo // Test that the critical severity comes from the event log if not
2146b3f345bSVijay Lobo // in the message registry
TEST(UserHeaderTest,UseEventLogSevCritTest)2156b3f345bSVijay Lobo TEST(UserHeaderTest, UseEventLogSevCritTest)
2166b3f345bSVijay Lobo {
2176b3f345bSVijay Lobo     using namespace openpower::pels::message;
2186b3f345bSVijay Lobo     Entry regEntry;
2196b3f345bSVijay Lobo 
2206b3f345bSVijay Lobo     regEntry.name = "test";
2216b3f345bSVijay Lobo     regEntry.subsystem = 5;
2226b3f345bSVijay Lobo     regEntry.actionFlags = 0xC000;
2236b3f345bSVijay Lobo     regEntry.eventType = 1;
2246b3f345bSVijay Lobo     regEntry.eventScope = 2;
2256b3f345bSVijay Lobo     // Leave off severity
2266b3f345bSVijay Lobo 
2276b3f345bSVijay Lobo     MockDataInterface dataIface;
2286b3f345bSVijay Lobo     AdditionalData ad;
2296b3f345bSVijay Lobo 
2306b3f345bSVijay Lobo     UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
2316b3f345bSVijay Lobo                   dataIface);
2326b3f345bSVijay Lobo     ASSERT_EQ(uh.severity(), 0x50);
2336b3f345bSVijay Lobo }
2346b3f345bSVijay Lobo 
2356b3f345bSVijay Lobo // Test that the critical severity comes from the event log if not
2366b3f345bSVijay Lobo // in the message registry and termination condition is set
TEST(UserHeaderTest,UseEventLogSevCritTermTest)2376b3f345bSVijay Lobo TEST(UserHeaderTest, UseEventLogSevCritTermTest)
2386b3f345bSVijay Lobo {
2396b3f345bSVijay Lobo     using namespace openpower::pels::message;
2406b3f345bSVijay Lobo     Entry regEntry;
2416b3f345bSVijay Lobo 
2426b3f345bSVijay Lobo     regEntry.name = "test";
2436b3f345bSVijay Lobo     regEntry.subsystem = 5;
2446b3f345bSVijay Lobo     regEntry.actionFlags = 0xC000;
2456b3f345bSVijay Lobo     regEntry.eventType = 1;
2466b3f345bSVijay Lobo     regEntry.eventScope = 2;
2476b3f345bSVijay Lobo     // Leave off severity
2486b3f345bSVijay Lobo 
2496b3f345bSVijay Lobo     MockDataInterface dataIface;
250*e5940634SPatrick Williams     std::map<std::string, std::string> adData{
251*e5940634SPatrick Williams         {"SEVERITY_DETAIL", "SYSTEM_TERM"}};
2526b3f345bSVijay Lobo     AdditionalData ad{adData};
2536b3f345bSVijay Lobo 
2546b3f345bSVijay Lobo     UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
2556b3f345bSVijay Lobo                   dataIface);
2566b3f345bSVijay Lobo     ASSERT_EQ(uh.severity(), 0x51);
2576b3f345bSVijay Lobo }
2586b3f345bSVijay Lobo 
259fdb6a202SMatt Spinler // Test that the optional event type & scope fields work
TEST(UserHeaderTest,DefaultEventTypeScopeTest)260fdb6a202SMatt Spinler TEST(UserHeaderTest, DefaultEventTypeScopeTest)
261fdb6a202SMatt Spinler {
262fdb6a202SMatt Spinler     using namespace openpower::pels::message;
263fdb6a202SMatt Spinler     Entry regEntry;
264fdb6a202SMatt Spinler 
265fdb6a202SMatt Spinler     regEntry.name = "test";
266fdb6a202SMatt Spinler     regEntry.subsystem = 5;
267aadccc85SMatt Spinler     regEntry.severity = {{"", 0x40}};
268fdb6a202SMatt Spinler     regEntry.actionFlags = 0xC000;
269fdb6a202SMatt Spinler 
270aadccc85SMatt Spinler     MockDataInterface dataIface;
2716b3f345bSVijay Lobo     AdditionalData ad;
272aadccc85SMatt Spinler 
2736b3f345bSVijay Lobo     UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error, ad,
2746b3f345bSVijay Lobo                   dataIface);
275fdb6a202SMatt Spinler 
276fdb6a202SMatt Spinler     ASSERT_EQ(uh.eventType(), 0);
277fdb6a202SMatt Spinler     ASSERT_EQ(uh.scope(), 0x03);
278fdb6a202SMatt Spinler }
2793b8ed7f2SSumit Kumar 
2803b8ed7f2SSumit Kumar // Test that the event severity & action flags override
2813b8ed7f2SSumit Kumar // when QuiesceOnHwError is set
TEST(UserHeaderTest,UseEventLogQuiesceOnErrorTest)2823b8ed7f2SSumit Kumar TEST(UserHeaderTest, UseEventLogQuiesceOnErrorTest)
2833b8ed7f2SSumit Kumar {
2843b8ed7f2SSumit Kumar     using namespace openpower::pels::message;
2853b8ed7f2SSumit Kumar     Entry regEntry;
2863b8ed7f2SSumit Kumar 
2873b8ed7f2SSumit Kumar     regEntry.name = "test";
2883b8ed7f2SSumit Kumar     regEntry.subsystem = 5;
2893b8ed7f2SSumit Kumar     regEntry.actionFlags = 0xC000;
2903b8ed7f2SSumit Kumar     regEntry.eventType = 1;
2913b8ed7f2SSumit Kumar     regEntry.eventScope = 2;
2923b8ed7f2SSumit Kumar     regEntry.severity = {{"", 0x40}, {"systemB", 0x10}, {"systemA", 0x00}};
2933b8ed7f2SSumit Kumar 
2943b8ed7f2SSumit Kumar     // set the value for mfg severity and action flags
2953b8ed7f2SSumit Kumar     regEntry.mfgSeverity = {{"systemA", 0x20}};
2963b8ed7f2SSumit Kumar     regEntry.mfgActionFlags = 0xF000;
2973b8ed7f2SSumit Kumar 
2983b8ed7f2SSumit Kumar     std::vector<std::string> names{"systemA"};
2993b8ed7f2SSumit Kumar 
3003b8ed7f2SSumit Kumar     MockDataInterface dataIface;
3013b8ed7f2SSumit Kumar     AdditionalData ad;
3023b8ed7f2SSumit Kumar 
3033b8ed7f2SSumit Kumar     EXPECT_CALL(dataIface, getSystemNames).WillOnce(Return(names));
3043b8ed7f2SSumit Kumar     EXPECT_CALL(dataIface, getQuiesceOnError).WillOnce(Return(true));
3053b8ed7f2SSumit Kumar 
3063b8ed7f2SSumit Kumar     UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error, ad,
3073b8ed7f2SSumit Kumar                   dataIface);
3083b8ed7f2SSumit Kumar 
3093b8ed7f2SSumit Kumar     EXPECT_EQ(uh.severity(), 0x20);
3103b8ed7f2SSumit Kumar     EXPECT_EQ(uh.actionFlags(), 0xF000);
3113b8ed7f2SSumit Kumar }
31250bfa69aSSumit Kumar 
31350bfa69aSSumit Kumar // Test that the PEL Subsystem omes from the event log if any
TEST(UserHeaderTest,UseEventLogPELSubsystem)31450bfa69aSSumit Kumar TEST(UserHeaderTest, UseEventLogPELSubsystem)
31550bfa69aSSumit Kumar {
31650bfa69aSSumit Kumar     using namespace openpower::pels::message;
31723970b0dSMatt Spinler 
31823970b0dSMatt Spinler     {
31950bfa69aSSumit Kumar         Entry regEntry;
32050bfa69aSSumit Kumar 
32150bfa69aSSumit Kumar         regEntry.name = "test";
32250bfa69aSSumit Kumar         regEntry.subsystem = 5;
32350bfa69aSSumit Kumar         regEntry.actionFlags = 0xC000;
32450bfa69aSSumit Kumar         regEntry.eventType = 1;
32550bfa69aSSumit Kumar         regEntry.eventScope = 2;
32650bfa69aSSumit Kumar 
32750bfa69aSSumit Kumar         MockDataInterface dataIface;
328*e5940634SPatrick Williams         std::map<std::string, std::string> adData{{"PEL_SUBSYSTEM", "0x25"}};
32950bfa69aSSumit Kumar         AdditionalData ad{adData};
33050bfa69aSSumit Kumar 
33150bfa69aSSumit Kumar         UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
33250bfa69aSSumit Kumar                       dataIface);
33350bfa69aSSumit Kumar         ASSERT_EQ(uh.subsystem(), 0x25);
33450bfa69aSSumit Kumar     }
33523970b0dSMatt Spinler     {
33623970b0dSMatt Spinler         // No subsystem in registry, and invalid PEL_SUBSYSTEM
33723970b0dSMatt Spinler         Entry regEntry;
33823970b0dSMatt Spinler 
33923970b0dSMatt Spinler         regEntry.name = "test";
34023970b0dSMatt Spinler         regEntry.actionFlags = 0xC000;
34123970b0dSMatt Spinler         regEntry.eventType = 1;
34223970b0dSMatt Spinler         regEntry.eventScope = 2;
34323970b0dSMatt Spinler 
34423970b0dSMatt Spinler         MockDataInterface dataIface;
345*e5940634SPatrick Williams         std::map<std::string, std::string> adData{{"PEL_SUBSYSTEM", "0x99"}};
34623970b0dSMatt Spinler         AdditionalData ad{adData};
34723970b0dSMatt Spinler 
34823970b0dSMatt Spinler         UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
34923970b0dSMatt Spinler                       dataIface);
35023970b0dSMatt Spinler         ASSERT_EQ(uh.subsystem(), 0x70); // others
35123970b0dSMatt Spinler     }
35223970b0dSMatt Spinler     {
35323970b0dSMatt Spinler         // No subsystem in registry or PEL_SUBSYSTEM
35423970b0dSMatt Spinler         Entry regEntry;
35523970b0dSMatt Spinler 
35623970b0dSMatt Spinler         regEntry.name = "test";
35723970b0dSMatt Spinler         regEntry.actionFlags = 0xC000;
35823970b0dSMatt Spinler         regEntry.eventType = 1;
35923970b0dSMatt Spinler         regEntry.eventScope = 2;
36023970b0dSMatt Spinler 
36123970b0dSMatt Spinler         MockDataInterface dataIface;
362*e5940634SPatrick Williams         std::map<std::string, std::string> adData;
36323970b0dSMatt Spinler         AdditionalData ad{adData};
36423970b0dSMatt Spinler 
36523970b0dSMatt Spinler         UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
36623970b0dSMatt Spinler                       dataIface);
36723970b0dSMatt Spinler         ASSERT_EQ(uh.subsystem(), 0x70); // others
36823970b0dSMatt Spinler     }
36923970b0dSMatt Spinler }
370