1 /**
2 * Copyright © 2019 IBM Corporation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #include "extensions/openpower-pels/ascii_string.hpp"
17 #include "extensions/openpower-pels/registry.hpp"
18
19 #include <gtest/gtest.h>
20
21 using namespace openpower::pels;
22
TEST(AsciiStringTest,AsciiStringTest)23 TEST(AsciiStringTest, AsciiStringTest)
24 {
25 // Build the ASCII string from a message registry entry
26 message::Entry entry;
27 entry.src.type = 0xBD;
28 entry.src.reasonCode = 0xABCD;
29 entry.subsystem = 0x37;
30
31 src::AsciiString as{entry};
32
33 auto data = as.get();
34
35 EXPECT_EQ(data, "BD37ABCD ");
36
37 // Now flatten it
38 std::vector<uint8_t> flattenedData;
39 Stream stream{flattenedData};
40
41 as.flatten(stream);
42
43 for (size_t i = 0; i < 32; i++)
44 {
45 EXPECT_EQ(data[i], flattenedData[i]);
46 }
47 }
48
49 // A 0x11 power SRC doesn't have the subsystem in it
TEST(AsciiStringTest,PowerErrorTest)50 TEST(AsciiStringTest, PowerErrorTest)
51 {
52 message::Entry entry;
53 entry.src.type = 0x11;
54 entry.src.reasonCode = 0xABCD;
55 entry.subsystem = 0x37;
56
57 src::AsciiString as{entry};
58 auto data = as.get();
59
60 EXPECT_EQ(data, "1100ABCD ");
61 }
62
TEST(AsciiStringTest,UnflattenTest)63 TEST(AsciiStringTest, UnflattenTest)
64 {
65 std::vector<uint8_t> rawData{'B', 'D', '5', '6', '1', '2', 'A', 'B'};
66
67 for (int i = 8; i < 32; i++)
68 {
69 rawData.push_back(' ');
70 }
71
72 Stream stream{rawData};
73 src::AsciiString as{stream};
74
75 auto data = as.get();
76
77 EXPECT_EQ(data, "BD5612AB ");
78 }
79
TEST(AsciiStringTest,UnderflowTest)80 TEST(AsciiStringTest, UnderflowTest)
81 {
82 std::vector<uint8_t> rawData{'B', 'D', '5', '6'};
83 Stream stream{rawData};
84
85 EXPECT_THROW(src::AsciiString as{stream}, std::out_of_range);
86 }
87
TEST(AsciiStringTest,MissingSubsystemTest)88 TEST(AsciiStringTest, MissingSubsystemTest)
89 {
90 message::Entry entry;
91 entry.src.type = 0xBD;
92 entry.src.reasonCode = 0xABCD;
93
94 src::AsciiString as{entry};
95 auto data = as.get();
96
97 // Default subsystem is 0x70
98 EXPECT_EQ(data, "BD70ABCD ");
99 }
100