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