1 #include "extensions/openpower-pels/mtms.hpp"
2 
3 #include <gtest/gtest.h>
4 
5 using namespace openpower::pels;
6 
7 TEST(MTMSTest, SizeTest)
8 {
9     EXPECT_EQ(MTMS::flattenedSize(), 20);
10 }
11 
12 TEST(MTMSTest, ConstructorTest)
13 {
14     {
15         std::string tm{"TTTT-MMM"};
16         std::string sn{"123456789ABC"};
17 
18         MTMS mtms{tm, sn};
19 
20         std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'};
21         EXPECT_EQ(t, mtms.machineTypeAndModel());
22 
23         std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6',
24                                   '7', '8', '9', 'A', 'B', 'C'};
25         EXPECT_EQ(s, mtms.machineSerialNumber());
26     }
27 
28     {
29         // too long- truncate it
30         std::string tm{"TTTT-MMME"};
31         std::string sn{"123456789ABCE"};
32 
33         MTMS mtms{tm, sn};
34 
35         std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'};
36         EXPECT_EQ(t, mtms.machineTypeAndModel());
37 
38         std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6',
39                                   '7', '8', '9', 'A', 'B', 'C'};
40         EXPECT_EQ(s, mtms.machineSerialNumber());
41     }
42 
43     {
44         // short
45         std::string tm{"TTTT"};
46         std::string sn{"1234"};
47 
48         MTMS mtms{tm, sn};
49 
50         std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', 0, 0, 0, 0};
51         EXPECT_EQ(t, mtms.machineTypeAndModel());
52 
53         std::array<uint8_t, 12> s{'1', '2', '3', '4', 0, 0, 0, 0, 0, 0, 0, 0};
54         EXPECT_EQ(s, mtms.machineSerialNumber());
55     }
56 
57     {
58         // Stream constructor
59         std::vector<uint8_t> data{'T', 'T', 'T', 'T', '-', 'M', 'M',
60                                   'M', '1', '2', '3', '4', '5', '6',
61                                   '7', '8', '9', 'A', 'B', 'C'};
62         Stream stream{data};
63 
64         MTMS mtms{stream};
65 
66         std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'};
67         EXPECT_EQ(t, mtms.machineTypeAndModel());
68 
69         std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6',
70                                   '7', '8', '9', 'A', 'B', 'C'};
71         EXPECT_EQ(s, mtms.machineSerialNumber());
72     }
73 }
74 
75 TEST(MTMSTest, OperatorExtractTest)
76 {
77     std::string tm{"TTTT-MMM"};
78     std::string sn{"123456789ABC"};
79 
80     MTMS mtms{tm, sn};
81 
82     // Check that we can extract the same data
83     std::vector<uint8_t> data;
84     Stream stream{data};
85     stream << mtms;
86 
87     std::vector<uint8_t> expected{'T', 'T', 'T', 'T', '-', 'M', 'M',
88                                   'M', '1', '2', '3', '4', '5', '6',
89                                   '7', '8', '9', 'A', 'B', 'C'};
90     EXPECT_EQ(expected, data);
91 }
92 
93 TEST(MTMSTest, OperatorInsertTest)
94 {
95     std::vector<uint8_t> data{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M', '1', '2',
96                               '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C'};
97     Stream stream{data};
98 
99     // Check that when we insert data it is what's expected
100     MTMS mtms;
101     stream >> mtms;
102 
103     std::array<uint8_t, 8> t{'T', 'T', 'T', 'T', '-', 'M', 'M', 'M'};
104     EXPECT_EQ(t, mtms.machineTypeAndModel());
105 
106     std::array<uint8_t, 12> s{'1', '2', '3', '4', '5', '6',
107                               '7', '8', '9', 'A', 'B', 'C'};
108     EXPECT_EQ(s, mtms.machineSerialNumber());
109 }
110