1 #include "extensions/openpower-pels/private_header.hpp" 2 #include "extensions/openpower-pels/user_header.hpp" 3 #include "pel_utils.hpp" 4 5 #include <gtest/gtest.h> 6 7 using namespace openpower::pels; 8 9 TEST(UserHeaderTest, SizeTest) 10 { 11 EXPECT_EQ(UserHeader::flattenedSize(), 24); 12 } 13 14 TEST(UserHeaderTest, UnflattenFlattenTest) 15 { 16 auto data = pelDataFactory(TestPelType::userHeaderSimple); 17 18 Stream stream(*data); 19 UserHeader uh(stream); 20 EXPECT_EQ(uh.valid(), true); 21 22 EXPECT_EQ(uh.header().id, 0x5548); 23 EXPECT_EQ(uh.header().size, UserHeader::flattenedSize()); 24 EXPECT_EQ(uh.header().version, 0x01); 25 EXPECT_EQ(uh.header().subType, 0x0A); 26 EXPECT_EQ(uh.header().componentID, 0x0B0C); 27 28 EXPECT_EQ(uh.subsystem(), 0x10); 29 EXPECT_EQ(uh.scope(), 0x04); 30 EXPECT_EQ(uh.severity(), 0x20); 31 EXPECT_EQ(uh.eventType(), 0x00); 32 EXPECT_EQ(uh.problemDomain(), 0x03); 33 EXPECT_EQ(uh.problemVector(), 0x04); 34 EXPECT_EQ(uh.actionFlags(), 0x80C0); 35 36 // Now flatten into a vector and check that this vector 37 // matches the original one. 38 std::vector<uint8_t> newData; 39 Stream newStream(newData); 40 41 uh.flatten(newStream); 42 EXPECT_EQ(*data, newData); 43 44 // Change a field, then flatten and unflatten again 45 uh.subsystem() = 0x44; 46 47 newStream.offset(0); 48 newData.clear(); 49 uh.flatten(newStream); 50 EXPECT_NE(*data, newData); 51 52 newStream.offset(0); 53 UserHeader newUH(newStream); 54 55 EXPECT_TRUE(newUH.valid()); 56 EXPECT_EQ(newUH.subsystem(), 0x44); 57 } 58 59 TEST(UserHeaderTest, ShortDataTest) 60 { 61 auto data = pelDataFactory(TestPelType::userHeaderSimple); 62 data->resize(data->size() - 1); 63 64 Stream stream(*data); 65 UserHeader uh(stream); 66 67 EXPECT_EQ(uh.valid(), false); 68 } 69 70 TEST(UserHeaderTest, CorruptDataTest1) 71 { 72 auto data = pelDataFactory(TestPelType::userHeaderSimple); 73 data->resize(data->size() - 1); 74 75 data->at(0) = 0; // corrupt the section ID 76 77 Stream stream(*data); 78 UserHeader uh(stream); 79 80 EXPECT_EQ(uh.valid(), false); 81 } 82 83 TEST(UserHeaderTest, CorruptDataTest2) 84 { 85 auto data = pelDataFactory(TestPelType::userHeaderSimple); 86 87 data->at(4) = 0x22; // corrupt the version 88 89 Stream stream(*data); 90 UserHeader uh(stream); 91 92 EXPECT_EQ(uh.valid(), false); 93 } 94