xref: /openbmc/phosphor-logging/test/openpower-pels/ascii_string_test.cpp (revision 40fb54935ce7367636a7156039396ee91cc4d5e2)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright 2019 IBM Corporation
3 
4 #include "extensions/openpower-pels/ascii_string.hpp"
5 #include "extensions/openpower-pels/registry.hpp"
6 
7 #include <gtest/gtest.h>
8 
9 using namespace openpower::pels;
10 
TEST(AsciiStringTest,AsciiStringTest)11 TEST(AsciiStringTest, AsciiStringTest)
12 {
13     // Build the ASCII string from a message registry entry
14     message::Entry entry;
15     entry.src.type = 0xBD;
16     entry.src.reasonCode = 0xABCD;
17     entry.subsystem = 0x37;
18 
19     src::AsciiString as{entry};
20 
21     auto data = as.get();
22 
23     EXPECT_EQ(data, "BD37ABCD                        ");
24 
25     // Now flatten it
26     std::vector<uint8_t> flattenedData;
27     Stream stream{flattenedData};
28 
29     as.flatten(stream);
30 
31     for (size_t i = 0; i < 32; i++)
32     {
33         EXPECT_EQ(data[i], flattenedData[i]);
34     }
35 }
36 
37 // A 0x11 power SRC doesn't have the subsystem in it
TEST(AsciiStringTest,PowerErrorTest)38 TEST(AsciiStringTest, PowerErrorTest)
39 {
40     message::Entry entry;
41     entry.src.type = 0x11;
42     entry.src.reasonCode = 0xABCD;
43     entry.subsystem = 0x37;
44 
45     src::AsciiString as{entry};
46     auto data = as.get();
47 
48     EXPECT_EQ(data, "1100ABCD                        ");
49 }
50 
TEST(AsciiStringTest,UnflattenTest)51 TEST(AsciiStringTest, UnflattenTest)
52 {
53     std::vector<uint8_t> rawData{'B', 'D', '5', '6', '1', '2', 'A', 'B'};
54 
55     for (int i = 8; i < 32; i++)
56     {
57         rawData.push_back(' ');
58     }
59 
60     Stream stream{rawData};
61     src::AsciiString as{stream};
62 
63     auto data = as.get();
64 
65     EXPECT_EQ(data, "BD5612AB                        ");
66 }
67 
TEST(AsciiStringTest,UnderflowTest)68 TEST(AsciiStringTest, UnderflowTest)
69 {
70     std::vector<uint8_t> rawData{'B', 'D', '5', '6'};
71     Stream stream{rawData};
72 
73     EXPECT_THROW(src::AsciiString as{stream}, std::out_of_range);
74 }
75 
TEST(AsciiStringTest,MissingSubsystemTest)76 TEST(AsciiStringTest, MissingSubsystemTest)
77 {
78     message::Entry entry;
79     entry.src.type = 0xBD;
80     entry.src.reasonCode = 0xABCD;
81 
82     src::AsciiString as{entry};
83     auto data = as.get();
84 
85     // Default subsystem is 0x70
86     EXPECT_EQ(data, "BD70ABCD                        ");
87 }
88