summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2019-09-30 15:35:53 -0500
committerMatt Spinler <spinler@us.ibm.com>2019-10-22 14:09:56 +0000
commit6852d7222d9268d2b205672d6296424c0581c830 (patch)
tree7a1a2ee0e0e9623be9f9cf2169cd0eaf5cf04c80 /test
parent828c4835df7cb7a31ac08b55bc98d8354fca7ad1 (diff)
downloadphosphor-logging-6852d7222d9268d2b205672d6296424c0581c830.tar.gz
phosphor-logging-6852d7222d9268d2b205672d6296424c0581c830.zip
PEL: Represent the SRC ASCII string field
In the SRC section of a PEL, there is a field called the 'ASCII string'. This is the string of 32 characters that shows up on the panel when the SRC function is chosen, and usually when people refer to an SRC, the first 8 characters of this field is what they are referring to. This new class handles that string. It will belong to the SRC section object. For BMC error SRCs, it looks like: BDSSRRRR Where: BD = "BD", indicating a BMC error SRC SS = subsystem value from PEL spec RRRR = reason code of the error The remaining 24 characters are spaces (' '). For example: "BD8D1234 " For BMC power* related errors, the value is: "11001234 " Where the difference is the "11" instead of "BD", and the following 2 bytes are always "00". * 'power' means comes from the repository that monitors for power faults. This is different purely to help keep field service documentation the same as in previous IBM server generations. Signed-off-by: Matt Spinler <spinler@us.ibm.com> Change-Id: I6e7292e7f5b501428999781b1a5ee5c243a63ac6
Diffstat (limited to 'test')
-rw-r--r--test/openpower-pels/Makefile.include9
-rw-r--r--test/openpower-pels/ascii_string_test.cpp71
2 files changed, 80 insertions, 0 deletions
diff --git a/test/openpower-pels/Makefile.include b/test/openpower-pels/Makefile.include
index b6b49aa..d9a6375 100644
--- a/test/openpower-pels/Makefile.include
+++ b/test/openpower-pels/Makefile.include
@@ -2,6 +2,7 @@ TESTS += $(check_PROGRAMS)
check_PROGRAMS += \
additional_data_test \
+ ascii_string_test \
bcd_time_test \
failing_mtms_test \
generic_section_test \
@@ -190,3 +191,11 @@ user_data_test_LDADD = \
$(test_ldadd) \
$(top_builddir)/extensions/openpower-pels/user_data.o
user_data_test_LDFLAGS = $(test_ldflags)
+
+ascii_string_test_SOURCES = %reldir%/ascii_string_test.cpp
+ascii_string_test_CPPFLAGS = $(test_cppflags)
+ascii_string_test_CXXFLAGS = $(test_cxxflags)
+ascii_string_test_LDADD = \
+ $(test_ldadd) \
+ $(top_builddir)/extensions/openpower-pels/ascii_string.o
+ascii_string_test_LDFLAGS = $(test_ldflags)
diff --git a/test/openpower-pels/ascii_string_test.cpp b/test/openpower-pels/ascii_string_test.cpp
new file mode 100644
index 0000000..022620d
--- /dev/null
+++ b/test/openpower-pels/ascii_string_test.cpp
@@ -0,0 +1,71 @@
+#include "extensions/openpower-pels/ascii_string.hpp"
+#include "extensions/openpower-pels/registry.hpp"
+
+#include <gtest/gtest.h>
+
+using namespace openpower::pels;
+
+TEST(AsciiStringTest, AsciiStringTest)
+{
+ // Build the ASCII string from a message registry entry
+ message::Entry entry;
+ entry.src.type = 0xBD;
+ entry.src.reasonCode = 0xABCD;
+ entry.subsystem = 0x37;
+
+ src::AsciiString as{entry};
+
+ auto data = as.get();
+
+ EXPECT_EQ(data, "BD37ABCD ");
+
+ // Now flatten it
+ std::vector<uint8_t> flattenedData;
+ Stream stream{flattenedData};
+
+ as.flatten(stream);
+
+ for (size_t i = 0; i < 32; i++)
+ {
+ EXPECT_EQ(data[i], flattenedData[i]);
+ }
+}
+
+// A 0x11 power SRC doesn't have the subsystem in it
+TEST(AsciiStringTest, PowerErrorTest)
+{
+ message::Entry entry;
+ entry.src.type = 0x11;
+ entry.src.reasonCode = 0xABCD;
+ entry.subsystem = 0x37;
+
+ src::AsciiString as{entry};
+ auto data = as.get();
+
+ EXPECT_EQ(data, "1100ABCD ");
+}
+
+TEST(AsciiStringTest, UnflattenTest)
+{
+ std::vector<uint8_t> rawData{'B', 'D', '5', '6', '1', '2', 'A', 'B'};
+
+ for (int i = 8; i < 32; i++)
+ {
+ rawData.push_back(' ');
+ }
+
+ Stream stream{rawData};
+ src::AsciiString as{stream};
+
+ auto data = as.get();
+
+ EXPECT_EQ(data, "BD5612AB ");
+}
+
+TEST(AsciiStringTest, UnderflowTest)
+{
+ std::vector<uint8_t> rawData{'B', 'D', '5', '6'};
+ Stream stream{rawData};
+
+ EXPECT_THROW(src::AsciiString as{stream}, std::out_of_range);
+}
OpenPOWER on IntegriCloud