1 #include "extensions/openpower-pels/private_header.hpp" 2 #include "pel_utils.hpp" 3 4 #include <gtest/gtest.h> 5 6 using namespace openpower::pels; 7 8 TEST(PrivateHeaderTest, SizeTest) 9 { 10 EXPECT_EQ(PrivateHeader::flattenedSize(), 48); 11 } 12 13 TEST(PrivateHeaderTest, UnflattenFlattenTest) 14 { 15 auto data = pelDataFactory(TestPelType::privateHeaderSimple); 16 17 Stream stream(*data); 18 PrivateHeader ph(stream); 19 EXPECT_EQ(ph.valid(), true); 20 21 EXPECT_EQ(ph.header().id, 0x5048); 22 EXPECT_EQ(ph.header().size, PrivateHeader::flattenedSize()); 23 EXPECT_EQ(ph.header().version, 0x01); 24 EXPECT_EQ(ph.header().subType, 0x02); 25 EXPECT_EQ(ph.header().componentID, 0x0304); 26 27 auto& ct = ph.createTimestamp(); 28 EXPECT_EQ(ct.yearMSB, 0x20); 29 EXPECT_EQ(ct.yearLSB, 0x30); 30 EXPECT_EQ(ct.month, 0x05); 31 EXPECT_EQ(ct.day, 0x09); 32 EXPECT_EQ(ct.hour, 0x011); 33 EXPECT_EQ(ct.minutes, 0x1E); 34 EXPECT_EQ(ct.seconds, 0x01); 35 EXPECT_EQ(ct.hundredths, 0x63); 36 37 auto& mt = ph.commitTimestamp(); 38 EXPECT_EQ(mt.yearMSB, 0x20); 39 EXPECT_EQ(mt.yearLSB, 0x31); 40 EXPECT_EQ(mt.month, 0x06); 41 EXPECT_EQ(mt.day, 0x0F); 42 EXPECT_EQ(mt.hour, 0x09); 43 EXPECT_EQ(mt.minutes, 0x22); 44 EXPECT_EQ(mt.seconds, 0x3A); 45 EXPECT_EQ(mt.hundredths, 0x00); 46 47 EXPECT_EQ(ph.creatorID(), 0xAA); 48 EXPECT_EQ(ph.logType(), 0x00); 49 EXPECT_EQ(ph.sectionCount(), 0x02); 50 EXPECT_EQ(ph.obmcLogID(), 0x90919293); 51 52 char expected[] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x00}; 53 EXPECT_TRUE(memcmp(ph.creatorVersion().version, expected, 8) == 0); 54 55 EXPECT_EQ(ph.plid(), 0x50515253); 56 EXPECT_EQ(ph.id(), 0x80818283); 57 58 // Now flatten into a vector and check that this vector 59 // matches the original one. 60 std::vector<uint8_t> newData; 61 Stream newStream(newData); 62 63 newStream << ph; 64 EXPECT_EQ(*data, newData); 65 66 // Change a field, then flatten and unflatten again 67 ph.creatorID() = 0x55; 68 69 newStream.offset(0); 70 newData.clear(); 71 newStream << ph; 72 EXPECT_NE(*data, newData); 73 74 newStream.offset(0); 75 PrivateHeader newPH(newStream); 76 77 EXPECT_TRUE(newPH.valid()); 78 EXPECT_EQ(newPH.creatorID(), 0x55); 79 } 80 81 TEST(PrivateHeaderTest, ShortDataTest) 82 { 83 auto data = pelDataFactory(TestPelType::privateHeaderSimple); 84 data->resize(PrivateHeader::flattenedSize() - 1); 85 Stream stream(*data); 86 87 PrivateHeader ph(stream); 88 89 EXPECT_EQ(ph.valid(), false); 90 } 91 92 TEST(PrivateHeaderTest, CorruptDataTest1) 93 { 94 auto data = pelDataFactory(TestPelType::privateHeaderSimple); 95 Stream stream(*data); 96 97 data->at(0) = 0; // corrupt the section ID 98 99 PrivateHeader ph(stream); 100 101 EXPECT_EQ(ph.valid(), false); 102 } 103 104 TEST(PrivateHeaderTest, CorruptDataTest2) 105 { 106 auto data = pelDataFactory(TestPelType::privateHeaderSimple); 107 Stream stream(*data); 108 109 data->at(4) = 0x22; // corrupt the version 110 111 PrivateHeader ph(stream); 112 113 EXPECT_EQ(ph.valid(), false); 114 } 115 116 TEST(PrivateHeaderTest, CorruptDataTest3) 117 { 118 auto data = pelDataFactory(TestPelType::privateHeaderSimple); 119 Stream stream(*data); 120 121 data->at(27) = 1; // corrupt the section count 122 123 PrivateHeader ph(stream); 124 125 EXPECT_EQ(ph.valid(), false); 126 } 127