blob: 6d888b73d45b89451adbccb55fc1ab160ece9ecc [file] [log] [blame]
Matt Spinlerb8323632019-09-20 15:11:04 -05001#include "elog_entry.hpp"
Matt Spinlercb6b0592019-07-16 15:58:51 -05002#include "extensions/openpower-pels/pel.hpp"
3#include "pel_utils.hpp"
4
5#include <filesystem>
6#include <fstream>
7
8#include <gtest/gtest.h>
9
10namespace fs = std::filesystem;
11using namespace openpower::pels;
12
13class PELTest : public CleanLogID
14{
15};
16
17TEST_F(PELTest, FlattenTest)
18{
19 auto data = pelDataFactory(TestPelType::pelSimple);
20 auto pel = std::make_unique<PEL>(*data);
21
22 // Check a few fields
23 EXPECT_TRUE(pel->valid());
24 EXPECT_EQ(pel->id(), 0x80818283);
25 EXPECT_EQ(pel->plid(), 0x50515253);
26 EXPECT_EQ(pel->userHeader()->subsystem(), 0x10);
27 EXPECT_EQ(pel->userHeader()->actionFlags(), 0x80C0);
28
29 // Test that data in == data out
30 auto flattenedData = pel->data();
31 ASSERT_EQ(*data, flattenedData);
32}
33
34TEST_F(PELTest, CommitTimeTest)
35{
36 auto data = pelDataFactory(TestPelType::pelSimple);
37 auto pel = std::make_unique<PEL>(*data);
38
39 auto origTime = pel->commitTime();
40 pel->setCommitTime();
41 auto newTime = pel->commitTime();
42
43 ASSERT_NE(origTime, newTime);
44
45 // Make a new PEL and check new value is still there
46 auto newData = pel->data();
47 auto newPel = std::make_unique<PEL>(newData);
48 ASSERT_EQ(newTime, newPel->commitTime());
49}
50
51TEST_F(PELTest, AssignIDTest)
52{
53 auto data = pelDataFactory(TestPelType::pelSimple);
54 auto pel = std::make_unique<PEL>(*data);
55
56 auto origID = pel->id();
57 pel->assignID();
58 auto newID = pel->id();
59
60 ASSERT_NE(origID, newID);
61
62 // Make a new PEL and check new value is still there
63 auto newData = pel->data();
64 auto newPel = std::make_unique<PEL>(newData);
65 ASSERT_EQ(newID, newPel->id());
66}
67
68TEST_F(PELTest, WithLogIDTest)
69{
70 auto data = pelDataFactory(TestPelType::pelSimple);
71 auto pel = std::make_unique<PEL>(*data, 0x42);
72
73 EXPECT_TRUE(pel->valid());
74 EXPECT_EQ(pel->obmcLogID(), 0x42);
75}
76
77TEST_F(PELTest, InvalidPELTest)
78{
79 auto data = pelDataFactory(TestPelType::pelSimple);
80
81 // Too small
82 data->resize(PrivateHeader::flattenedSize());
83
84 auto pel = std::make_unique<PEL>(*data);
85
86 EXPECT_TRUE(pel->privateHeader()->valid());
87 EXPECT_FALSE(pel->userHeader()->valid());
88 EXPECT_FALSE(pel->valid());
89
Matt Spinlercb6b0592019-07-16 15:58:51 -050090 // Now corrupt the private header
91 data = pelDataFactory(TestPelType::pelSimple);
92 data->at(0) = 0;
93 pel = std::make_unique<PEL>(*data);
94
95 EXPECT_FALSE(pel->privateHeader()->valid());
96 EXPECT_TRUE(pel->userHeader()->valid());
97 EXPECT_FALSE(pel->valid());
98}
99
100TEST_F(PELTest, EmptyDataTest)
101{
102 std::vector<uint8_t> data;
103 auto pel = std::make_unique<PEL>(data);
104
105 EXPECT_FALSE(pel->privateHeader()->valid());
106 EXPECT_FALSE(pel->userHeader()->valid());
107 EXPECT_FALSE(pel->valid());
108}
Matt Spinlerb8323632019-09-20 15:11:04 -0500109
110TEST_F(PELTest, CreateFromRegistryTest)
111{
112 message::Entry regEntry;
113 uint64_t timestamp = 5;
114
115 regEntry.name = "test";
116 regEntry.subsystem = 5;
117 regEntry.actionFlags = 0xC000;
118
119 PEL pel{regEntry, 42, timestamp, phosphor::logging::Entry::Level::Error};
120
121 EXPECT_TRUE(pel.valid());
122 EXPECT_EQ(pel.privateHeader()->obmcLogID(), 42);
123 EXPECT_EQ(pel.userHeader()->severity(), 0x40);
124
125 // Add more checks as more sections are added
126}