|  | #include "extensions/openpower-pels/src.hpp" | 
|  | #include "pel_utils.hpp" | 
|  |  | 
|  | #include <gtest/gtest.h> | 
|  |  | 
|  | using namespace openpower::pels; | 
|  |  | 
|  | TEST(SRCTest, UnflattenFlattenTestNoCallouts) | 
|  | { | 
|  | auto data = pelDataFactory(TestPELType::primarySRCSection); | 
|  |  | 
|  | Stream stream{data}; | 
|  | SRC src{stream}; | 
|  |  | 
|  | EXPECT_TRUE(src.valid()); | 
|  |  | 
|  | EXPECT_EQ(src.header().id, 0x5053); | 
|  | EXPECT_EQ(src.header().size, 0x80); | 
|  | EXPECT_EQ(src.header().version, 0x01); | 
|  | EXPECT_EQ(src.header().subType, 0x01); | 
|  | EXPECT_EQ(src.header().componentID, 0x0202); | 
|  |  | 
|  | EXPECT_EQ(src.version(), 0x02); | 
|  | EXPECT_EQ(src.flags(), 0x00); | 
|  | EXPECT_EQ(src.hexWordCount(), 9); | 
|  | EXPECT_EQ(src.size(), 0x48); | 
|  |  | 
|  | const auto& hexwords = src.hexwordData(); | 
|  | EXPECT_EQ(0x02020202, hexwords[0]); | 
|  | EXPECT_EQ(0x03030303, hexwords[1]); | 
|  | EXPECT_EQ(0x04040404, hexwords[2]); | 
|  | EXPECT_EQ(0x05050505, hexwords[3]); | 
|  | EXPECT_EQ(0x06060606, hexwords[4]); | 
|  | EXPECT_EQ(0x07070707, hexwords[5]); | 
|  | EXPECT_EQ(0x08080808, hexwords[6]); | 
|  | EXPECT_EQ(0x09090909, hexwords[7]); | 
|  |  | 
|  | EXPECT_EQ(src.asciiString(), "BD8D5678                        "); | 
|  | EXPECT_FALSE(src.callouts()); | 
|  |  | 
|  | // Flatten | 
|  | std::vector<uint8_t> newData; | 
|  | Stream newStream{newData}; | 
|  |  | 
|  | src.flatten(newStream); | 
|  | EXPECT_EQ(data, newData); | 
|  | } | 
|  |  | 
|  | TEST(SRCTest, UnflattenFlattenTest2Callouts) | 
|  | { | 
|  | auto data = pelDataFactory(TestPELType::primarySRCSection2Callouts); | 
|  |  | 
|  | Stream stream{data}; | 
|  | SRC src{stream}; | 
|  |  | 
|  | EXPECT_TRUE(src.valid()); | 
|  |  | 
|  | // Spot check the SRC fields, but they're the same as above | 
|  | EXPECT_EQ(src.asciiString(), "BD8D5678                        "); | 
|  |  | 
|  | // There should be 2 callouts | 
|  | const auto& calloutsSection = src.callouts(); | 
|  | ASSERT_TRUE(calloutsSection); | 
|  | const auto& callouts = calloutsSection->callouts(); | 
|  | EXPECT_EQ(callouts.size(), 2); | 
|  |  | 
|  | // spot check that each callout has the right substructures | 
|  | EXPECT_TRUE(callouts.front()->fruIdentity()); | 
|  | EXPECT_FALSE(callouts.front()->pceIdentity()); | 
|  | EXPECT_FALSE(callouts.front()->mru()); | 
|  |  | 
|  | EXPECT_TRUE(callouts.back()->fruIdentity()); | 
|  | EXPECT_TRUE(callouts.back()->pceIdentity()); | 
|  | EXPECT_TRUE(callouts.back()->mru()); | 
|  |  | 
|  | // Flatten | 
|  | std::vector<uint8_t> newData; | 
|  | Stream newStream{newData}; | 
|  |  | 
|  | src.flatten(newStream); | 
|  | EXPECT_EQ(data, newData); | 
|  | } |