summaryrefslogtreecommitdiffstats
path: root/test/openpower-pels/user_header_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/openpower-pels/user_header_test.cpp')
-rw-r--r--test/openpower-pels/user_header_test.cpp163
1 files changed, 163 insertions, 0 deletions
diff --git a/test/openpower-pels/user_header_test.cpp b/test/openpower-pels/user_header_test.cpp
new file mode 100644
index 0000000..7b8842c
--- /dev/null
+++ b/test/openpower-pels/user_header_test.cpp
@@ -0,0 +1,163 @@
+/**
+ * Copyright © 2019 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "elog_entry.hpp"
+#include "extensions/openpower-pels/pel_types.hpp"
+#include "extensions/openpower-pels/private_header.hpp"
+#include "extensions/openpower-pels/user_header.hpp"
+#include "pel_utils.hpp"
+
+#include <gtest/gtest.h>
+
+using namespace openpower::pels;
+
+TEST(UserHeaderTest, SizeTest)
+{
+ EXPECT_EQ(UserHeader::flattenedSize(), 24);
+}
+
+TEST(UserHeaderTest, UnflattenFlattenTest)
+{
+ auto data = pelDataFactory(TestPELType::userHeaderSection);
+
+ Stream stream(data);
+ UserHeader uh(stream);
+ EXPECT_EQ(uh.valid(), true);
+
+ EXPECT_EQ(uh.header().id, 0x5548);
+ EXPECT_EQ(uh.header().size, UserHeader::flattenedSize());
+ EXPECT_EQ(uh.header().version, 0x01);
+ EXPECT_EQ(uh.header().subType, 0x0A);
+ EXPECT_EQ(uh.header().componentID, 0x0B0C);
+
+ EXPECT_EQ(uh.subsystem(), 0x10);
+ EXPECT_EQ(uh.scope(), 0x04);
+ EXPECT_EQ(uh.severity(), 0x20);
+ EXPECT_EQ(uh.eventType(), 0x00);
+ EXPECT_EQ(uh.problemDomain(), 0x03);
+ EXPECT_EQ(uh.problemVector(), 0x04);
+ EXPECT_EQ(uh.actionFlags(), 0x80C0);
+
+ // Now flatten into a vector and check that this vector
+ // matches the original one.
+ std::vector<uint8_t> newData;
+ Stream newStream(newData);
+
+ uh.flatten(newStream);
+ EXPECT_EQ(data, newData);
+}
+
+TEST(UserHeaderTest, ShortDataTest)
+{
+ auto data = pelDataFactory(TestPELType::userHeaderSection);
+ data.resize(data.size() - 1);
+
+ Stream stream(data);
+ UserHeader uh(stream);
+
+ EXPECT_EQ(uh.valid(), false);
+}
+
+TEST(UserHeaderTest, CorruptDataTest1)
+{
+ auto data = pelDataFactory(TestPELType::userHeaderSection);
+ data.resize(data.size() - 1);
+
+ data.at(0) = 0; // corrupt the section ID
+
+ Stream stream(data);
+ UserHeader uh(stream);
+
+ EXPECT_EQ(uh.valid(), false);
+}
+
+TEST(UserHeaderTest, CorruptDataTest2)
+{
+ auto data = pelDataFactory(TestPELType::userHeaderSection);
+
+ data.at(4) = 0x22; // corrupt the version
+
+ Stream stream(data);
+ UserHeader uh(stream);
+
+ EXPECT_EQ(uh.valid(), false);
+}
+
+// Construct the User Header from the message registry
+TEST(UserHeaderTest, ConstructionTest)
+{
+ using namespace openpower::pels::message;
+ Entry regEntry;
+
+ regEntry.name = "test";
+ regEntry.subsystem = 5;
+ regEntry.severity = 0x40;
+ regEntry.actionFlags = 0xC000;
+ regEntry.eventType = 1;
+ regEntry.eventScope = 2;
+
+ UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error);
+
+ ASSERT_TRUE(uh.valid());
+ EXPECT_EQ(uh.header().id, 0x5548);
+ EXPECT_EQ(uh.header().size, UserHeader::flattenedSize());
+ EXPECT_EQ(uh.header().version, 0x01);
+ EXPECT_EQ(uh.header().subType, 0x00);
+ EXPECT_EQ(uh.header().componentID,
+ static_cast<uint16_t>(ComponentID::phosphorLogging));
+
+ ASSERT_EQ(uh.subsystem(), 5);
+ ASSERT_EQ(uh.severity(), 0x40);
+ ASSERT_EQ(uh.eventType(), 1);
+ ASSERT_EQ(uh.scope(), 2);
+ ASSERT_EQ(uh.problemDomain(), 0);
+ ASSERT_EQ(uh.problemVector(), 0);
+ ASSERT_EQ(uh.actionFlags(), 0xC000);
+}
+
+// Test that the severity comes from the event log if not
+// in the message registry
+TEST(UserHeaderTest, UseEventLogSevTest)
+{
+ using namespace openpower::pels::message;
+ Entry regEntry;
+
+ regEntry.name = "test";
+ regEntry.subsystem = 5;
+ regEntry.actionFlags = 0xC000;
+ regEntry.eventType = 1;
+ regEntry.eventScope = 2;
+ // Leave off severity
+
+ UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error);
+ ASSERT_EQ(uh.severity(), 0x40);
+}
+
+// Test that the optional event type & scope fields work
+TEST(UserHeaderTest, DefaultEventTypeScopeTest)
+{
+ using namespace openpower::pels::message;
+ Entry regEntry;
+
+ regEntry.name = "test";
+ regEntry.subsystem = 5;
+ regEntry.severity = 0x40;
+ regEntry.actionFlags = 0xC000;
+
+ UserHeader uh(regEntry, phosphor::logging::Entry::Level::Error);
+
+ ASSERT_EQ(uh.eventType(), 0);
+ ASSERT_EQ(uh.scope(), 0x03);
+}
OpenPOWER on IntegriCloud