xref: /openbmc/phosphor-logging/test/openpower-pels/mtms_test.cpp (revision be952d2edc63d9c9ad6ed389e012043b345e483e)
197f7abcfSMatt Spinler /**
297f7abcfSMatt Spinler  * Copyright © 2019 IBM Corporation
397f7abcfSMatt Spinler  *
497f7abcfSMatt Spinler  * Licensed under the Apache License, Version 2.0 (the "License");
597f7abcfSMatt Spinler  * you may not use this file except in compliance with the License.
697f7abcfSMatt Spinler  * You may obtain a copy of the License at
797f7abcfSMatt Spinler  *
897f7abcfSMatt Spinler  *     http://www.apache.org/licenses/LICENSE-2.0
997f7abcfSMatt Spinler  *
1097f7abcfSMatt Spinler  * Unless required by applicable law or agreed to in writing, software
1197f7abcfSMatt Spinler  * distributed under the License is distributed on an "AS IS" BASIS,
1297f7abcfSMatt Spinler  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1397f7abcfSMatt Spinler  * See the License for the specific language governing permissions and
1497f7abcfSMatt Spinler  * limitations under the License.
1597f7abcfSMatt Spinler  */
16b6664339SMatt Spinler #include "extensions/openpower-pels/mtms.hpp"
17b6664339SMatt Spinler 
18b6664339SMatt Spinler #include <gtest/gtest.h>
19b6664339SMatt Spinler 
20b6664339SMatt Spinler using namespace openpower::pels;
21b6664339SMatt Spinler 
TEST(MTMSTest,SizeTest)22b6664339SMatt Spinler TEST(MTMSTest, SizeTest)
23b6664339SMatt Spinler {
24b6664339SMatt Spinler     EXPECT_EQ(MTMS::flattenedSize(), 20);
25b6664339SMatt Spinler }
26b6664339SMatt Spinler 
TEST(MTMSTest,ConstructorTest)27b6664339SMatt Spinler TEST(MTMSTest, ConstructorTest)
28b6664339SMatt Spinler {
29b6664339SMatt Spinler     {
30b6664339SMatt Spinler         std::string tm{"TTTT-MMM"};
31b6664339SMatt Spinler         std::string sn{"123456789ABC"};
32b6664339SMatt Spinler 
33b6664339SMatt Spinler         MTMS mtms{tm, sn};
34b6664339SMatt Spinler 
35*be952d2eSMatt Spinler         const std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'};
364b59f7adSMatt Spinler         EXPECT_EQ(t, mtms.machineTypeAndModelRaw());
374b59f7adSMatt Spinler         EXPECT_EQ("TTTT-MMM", mtms.machineTypeAndModel());
38b6664339SMatt Spinler 
39*be952d2eSMatt Spinler         const std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6',
40b6664339SMatt Spinler                                         '7', '8', '9', 'A', 'B', 'C'};
414b59f7adSMatt Spinler         EXPECT_EQ(s, mtms.machineSerialNumberRaw());
424b59f7adSMatt Spinler         EXPECT_EQ("123456789ABC", mtms.machineSerialNumber());
43b6664339SMatt Spinler     }
44b6664339SMatt Spinler 
45b6664339SMatt Spinler     {
46b6664339SMatt Spinler         // too long- truncate it
47b6664339SMatt Spinler         std::string tm{"TTTT-MMME"};
48b6664339SMatt Spinler         std::string sn{"123456789ABCE"};
49b6664339SMatt Spinler 
50b6664339SMatt Spinler         MTMS mtms{tm, sn};
51b6664339SMatt Spinler 
52*be952d2eSMatt Spinler         const std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'};
534b59f7adSMatt Spinler         EXPECT_EQ(t, mtms.machineTypeAndModelRaw());
54b6664339SMatt Spinler 
55*be952d2eSMatt Spinler         const std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6',
56b6664339SMatt Spinler                                         '7', '8', '9', 'A', 'B', 'C'};
574b59f7adSMatt Spinler         EXPECT_EQ(s, mtms.machineSerialNumberRaw());
58b6664339SMatt Spinler     }
59b6664339SMatt Spinler 
60b6664339SMatt Spinler     {
61b6664339SMatt Spinler         // short
62b6664339SMatt Spinler         std::string tm{"TTTT"};
63b6664339SMatt Spinler         std::string sn{"1234"};
64b6664339SMatt Spinler 
65b6664339SMatt Spinler         MTMS mtms{tm, sn};
66b6664339SMatt Spinler 
67*be952d2eSMatt Spinler         const std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', 0, 0, 0, 0};
684b59f7adSMatt Spinler         EXPECT_EQ(t, mtms.machineTypeAndModelRaw());
694b59f7adSMatt Spinler         EXPECT_EQ("TTTT", mtms.machineTypeAndModel());
70b6664339SMatt Spinler 
71*be952d2eSMatt Spinler         const std::array<uint8_t, 12> s{'1', '2', '3', '4', 0, 0,
72*be952d2eSMatt Spinler                                         0,   0,   0,   0,   0, 0};
734b59f7adSMatt Spinler         EXPECT_EQ(s, mtms.machineSerialNumberRaw());
744b59f7adSMatt Spinler         EXPECT_EQ("1234", mtms.machineSerialNumber());
75b6664339SMatt Spinler     }
76b6664339SMatt Spinler 
77b6664339SMatt Spinler     {
78b6664339SMatt Spinler         // Stream constructor
79b6664339SMatt Spinler         std::vector<uint8_t> data{'T', 'T', 'T', 'T', '-', 'M', 'M',
80b6664339SMatt Spinler                                   'M', '1', '2', '3', '4', '5', '6',
81b6664339SMatt Spinler                                   '7', '8', '9', 'A', 'B', 'C'};
82b6664339SMatt Spinler         Stream stream{data};
83b6664339SMatt Spinler 
84b6664339SMatt Spinler         MTMS mtms{stream};
85b6664339SMatt Spinler 
864b59f7adSMatt Spinler         EXPECT_EQ("TTTT-MMM", mtms.machineTypeAndModel());
87b6664339SMatt Spinler 
884b59f7adSMatt Spinler         EXPECT_EQ("123456789ABC", mtms.machineSerialNumber());
89b6664339SMatt Spinler     }
90b6664339SMatt Spinler }
91b6664339SMatt Spinler 
TEST(MTMSTest,OperatorExtractTest)92b6664339SMatt Spinler TEST(MTMSTest, OperatorExtractTest)
93b6664339SMatt Spinler {
94b6664339SMatt Spinler     std::string tm{"TTTT-MMM"};
95b6664339SMatt Spinler     std::string sn{"123456789ABC"};
96b6664339SMatt Spinler 
97b6664339SMatt Spinler     MTMS mtms{tm, sn};
98b6664339SMatt Spinler 
99b6664339SMatt Spinler     // Check that we can extract the same data
100b6664339SMatt Spinler     std::vector<uint8_t> data;
101b6664339SMatt Spinler     Stream stream{data};
102b6664339SMatt Spinler     stream << mtms;
103b6664339SMatt Spinler 
104b6664339SMatt Spinler     std::vector<uint8_t> expected{'T', 'T', 'T', 'T', '-', 'M', 'M',
105b6664339SMatt Spinler                                   'M', '1', '2', '3', '4', '5', '6',
106b6664339SMatt Spinler                                   '7', '8', '9', 'A', 'B', 'C'};
107b6664339SMatt Spinler     EXPECT_EQ(expected, data);
108b6664339SMatt Spinler }
109b6664339SMatt Spinler 
TEST(MTMSTest,OperatorInsertTest)110b6664339SMatt Spinler TEST(MTMSTest, OperatorInsertTest)
111b6664339SMatt Spinler {
112b6664339SMatt Spinler     std::vector<uint8_t> data{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M', '1', '2',
113b6664339SMatt Spinler                               '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C'};
114b6664339SMatt Spinler     Stream stream{data};
115b6664339SMatt Spinler 
116b6664339SMatt Spinler     // Check that when we insert data it is what's expected
117b6664339SMatt Spinler     MTMS mtms;
118b6664339SMatt Spinler     stream >> mtms;
119b6664339SMatt Spinler 
1204b59f7adSMatt Spinler     EXPECT_EQ("TTTT-MMM", mtms.machineTypeAndModel());
121b6664339SMatt Spinler 
1224b59f7adSMatt Spinler     EXPECT_EQ("123456789ABC", mtms.machineSerialNumber());
123b6664339SMatt Spinler }
124