diff options
author | Matt Spinler <spinler@us.ibm.com> | 2019-09-10 15:24:10 -0500 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2019-09-27 14:26:13 -0500 |
commit | b666433986470ba76ed7357ea026db39ad0b404b (patch) | |
tree | b370fb517086b037a5c17b468f89003d987b4bd7 /test/openpower-pels/mtms_test.cpp | |
parent | 72575f51ed7b7ead4d55c87b23c186d882ae8345 (diff) | |
download | phosphor-logging-b666433986470ba76ed7357ea026db39ad0b404b.tar.gz phosphor-logging-b666433986470ba76ed7357ea026db39ad0b404b.zip |
PEL: MTMS class to handle the type-model and SN
This class represents the (M)achine (T)ype-(M)odel (S)erial number
structure for the PEL, where it is used in both the ExtendedUserHeader
and FailingMTMS sections.
It consists of an 8 byte machine type+model field of the form TTT-MMMM,
followed by a 12 byte machine serial number field. Unused bytes are set
to 0.
Note that this is not a PEL section itself. It's just used by other PEL
sections.
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I15f9858e951a913ab2353cf93b7f20cc2709c502
Diffstat (limited to 'test/openpower-pels/mtms_test.cpp')
-rw-r--r-- | test/openpower-pels/mtms_test.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/test/openpower-pels/mtms_test.cpp b/test/openpower-pels/mtms_test.cpp new file mode 100644 index 0000000..999100f --- /dev/null +++ b/test/openpower-pels/mtms_test.cpp @@ -0,0 +1,109 @@ +#include "extensions/openpower-pels/mtms.hpp" + +#include <gtest/gtest.h> + +using namespace openpower::pels; + +TEST(MTMSTest, SizeTest) +{ + EXPECT_EQ(MTMS::flattenedSize(), 20); +} + +TEST(MTMSTest, ConstructorTest) +{ + { + std::string tm{"TTTT-MMM"}; + std::string sn{"123456789ABC"}; + + MTMS mtms{tm, sn}; + + std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'}; + EXPECT_EQ(t, mtms.machineTypeAndModel()); + + std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6', + '7', '8', '9', 'A', 'B', 'C'}; + EXPECT_EQ(s, mtms.machineSerialNumber()); + } + + { + // too long- truncate it + std::string tm{"TTTT-MMME"}; + std::string sn{"123456789ABCE"}; + + MTMS mtms{tm, sn}; + + std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'}; + EXPECT_EQ(t, mtms.machineTypeAndModel()); + + std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6', + '7', '8', '9', 'A', 'B', 'C'}; + EXPECT_EQ(s, mtms.machineSerialNumber()); + } + + { + // short + std::string tm{"TTTT"}; + std::string sn{"1234"}; + + MTMS mtms{tm, sn}; + + std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', 0, 0, 0, 0}; + EXPECT_EQ(t, mtms.machineTypeAndModel()); + + std::array<uint8_t, 12> s{'1', '2', '3', '4', 0, 0, 0, 0, 0, 0, 0, 0}; + EXPECT_EQ(s, mtms.machineSerialNumber()); + } + + { + // Stream constructor + std::vector<uint8_t> data{'T', 'T', 'T', 'T', '-', 'M', 'M', + 'M', '1', '2', '3', '4', '5', '6', + '7', '8', '9', 'A', 'B', 'C'}; + Stream stream{data}; + + MTMS mtms{stream}; + + std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'}; + EXPECT_EQ(t, mtms.machineTypeAndModel()); + + std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6', + '7', '8', '9', 'A', 'B', 'C'}; + EXPECT_EQ(s, mtms.machineSerialNumber()); + } +} + +TEST(MTMSTest, OperatorExtractTest) +{ + std::string tm{"TTTT-MMM"}; + std::string sn{"123456789ABC"}; + + MTMS mtms{tm, sn}; + + // Check that we can extract the same data + std::vector<uint8_t> data; + Stream stream{data}; + stream << mtms; + + std::vector<uint8_t> expected{'T', 'T', 'T', 'T', '-', 'M', 'M', + 'M', '1', '2', '3', '4', '5', '6', + '7', '8', '9', 'A', 'B', 'C'}; + EXPECT_EQ(expected, data); +} + +TEST(MTMSTest, OperatorInsertTest) +{ + std::vector<uint8_t> data{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M', '1', '2', + '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C'}; + Stream stream{data}; + + // Check that when we insert data it is what's expected + MTMS mtms; + stream >> mtms; + + std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'}; + EXPECT_EQ(t, mtms.machineTypeAndModel()); + + std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6', + '7', '8', '9', 'A', 'B', 'C'}; + EXPECT_EQ(s, mtms.machineSerialNumber()); +} |