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