xref: /openbmc/pldm/platform-mc/test/terminus_test.cpp (revision fe2527954be36a3013dc6b8c8ff13ae649bb58a6)
1 #include "platform-mc/numeric_sensor.hpp"
2 #include "platform-mc/terminus.hpp"
3 
4 #include <libpldm/entity.h>
5 
6 #include <gtest/gtest.h>
7 
TEST(TerminusTest,supportedTypeTest)8 TEST(TerminusTest, supportedTypeTest)
9 {
10     auto event = sdeventplus::Event::get_default();
11     auto t1 = pldm::platform_mc::Terminus(1, 1 << PLDM_BASE, event);
12     auto t2 = pldm::platform_mc::Terminus(
13         2, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
14 
15     EXPECT_EQ(true, t1.doesSupportType(PLDM_BASE));
16     EXPECT_EQ(false, t1.doesSupportType(PLDM_PLATFORM));
17     EXPECT_EQ(true, t2.doesSupportType(PLDM_BASE));
18     EXPECT_EQ(true, t2.doesSupportType(PLDM_PLATFORM));
19 }
20 
TEST(TerminusTest,getTidTest)21 TEST(TerminusTest, getTidTest)
22 {
23     auto event = sdeventplus::Event::get_default();
24     const pldm_tid_t tid = 1;
25     auto t1 = pldm::platform_mc::Terminus(tid, 1 << PLDM_BASE, event);
26 
27     EXPECT_EQ(tid, t1.getTid());
28 }
29 
TEST(TerminusTest,parseSensorAuxiliaryNamesPDRTest)30 TEST(TerminusTest, parseSensorAuxiliaryNamesPDRTest)
31 {
32     auto event = sdeventplus::Event::get_default();
33     auto t1 = pldm::platform_mc::Terminus(
34         1, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
35     std::vector<uint8_t> pdr1{
36         0x0,
37         0x0,
38         0x0,
39         0x1,                             // record handle
40         0x1,                             // PDRHeaderVersion
41         PLDM_SENSOR_AUXILIARY_NAMES_PDR, // PDRType
42         0x0,
43         0x0,                             // recordChangeNumber
44         0x0,
45         21,                              // dataLength
46         0,
47         0x0,                             // PLDMTerminusHandle
48         0x1,
49         0x0,                             // sensorID
50         0x1,                             // sensorCount
51         0x1,                             // nameStringCount
52         'e',
53         'n',
54         0x0, // nameLanguageTag
55         0x0,
56         'T',
57         0x0,
58         'E',
59         0x0,
60         'M',
61         0x0,
62         'P',
63         0x0,
64         '1',
65         0x0,
66         0x0 // sensorName
67     };
68 
69     std::vector<uint8_t> pdr2{
70         0x1, 0x0, 0x0,
71         0x0,                             // record handle
72         0x1,                             // PDRHeaderVersion
73         PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType
74         0x1,
75         0x0,                             // recordChangeNumber
76         0x11,
77         0,                               // dataLength
78         /* Entity Auxiliary Names PDR Data*/
79         3,
80         0x80, // entityType system software
81         0x1,
82         0x0,  // Entity instance number =1
83         0,
84         0,    // Overall system
85         0,    // shared Name Count one name only
86         01,   // nameStringCount
87         0x65, 0x6e, 0x00,
88         0x00, // Language Tag "en"
89         0x53, 0x00, 0x30, 0x00,
90         0x00  // Entity Name "S0"
91     };
92 
93     t1.pdrs.emplace_back(pdr1);
94     t1.pdrs.emplace_back(pdr2);
95     t1.parseTerminusPDRs();
96 
97     auto sensorAuxNames = t1.getSensorAuxiliaryNames(0);
98     EXPECT_EQ(nullptr, sensorAuxNames);
99 
100     sensorAuxNames = t1.getSensorAuxiliaryNames(1);
101     EXPECT_NE(nullptr, sensorAuxNames);
102 
103     const auto& [sensorId, sensorCnt, names] = *sensorAuxNames;
104     EXPECT_EQ(1, sensorId);
105     EXPECT_EQ(1, sensorCnt);
106     EXPECT_EQ(1, names.size());
107     EXPECT_EQ(1, names[0].size());
108     EXPECT_EQ("en", names[0][0].first);
109     EXPECT_EQ("TEMP1", names[0][0].second);
110     EXPECT_EQ(2, t1.pdrs.size());
111     EXPECT_EQ("S0", t1.getTerminusName().value());
112 }
113 
TEST(TerminusTest,parseSensorAuxiliaryMultiNamesPDRTest)114 TEST(TerminusTest, parseSensorAuxiliaryMultiNamesPDRTest)
115 {
116     auto event = sdeventplus::Event::get_default();
117     auto t1 = pldm::platform_mc::Terminus(
118         1, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
119     std::vector<uint8_t> pdr1{
120         0x0,
121         0x0,
122         0x0,
123         0x1,                             // record handle
124         0x1,                             // PDRHeaderVersion
125         PLDM_SENSOR_AUXILIARY_NAMES_PDR, // PDRType
126         0x0,
127         0x0,                             // recordChangeNumber
128         0x0,
129         53,                              // dataLength
130         0,
131         0x0,                             // PLDMTerminusHandle
132         0x1,
133         0x0,                             // sensorID
134         0x1,                             // sensorCount
135         0x3,                             // nameStringCount
136         'e',
137         'n',
138         0x0, // nameLanguageTag
139         0x0,
140         'T',
141         0x0,
142         'E',
143         0x0,
144         'M',
145         0x0,
146         'P',
147         0x0,
148         '1',
149         0x0,
150         0x0, // sensorName Temp1
151         'f',
152         'r',
153         0x0, // nameLanguageTag
154         0x0,
155         'T',
156         0x0,
157         'E',
158         0x0,
159         'M',
160         0x0,
161         'P',
162         0x0,
163         '2',
164         0x0,
165         0x0, // sensorName Temp2
166         'f',
167         'r',
168         0x0, // nameLanguageTag
169         0x0,
170         'T',
171         0x0,
172         'E',
173         0x0,
174         'M',
175         0x0,
176         'P',
177         0x0,
178         '1',
179         0x0,
180         '2',
181         0x0,
182         0x0 // sensorName Temp12
183     };
184 
185     std::vector<uint8_t> pdr2{
186         0x1, 0x0, 0x0,
187         0x0,                             // record handle
188         0x1,                             // PDRHeaderVersion
189         PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType
190         0x1,
191         0x0,                             // recordChangeNumber
192         0x11,
193         0,                               // dataLength
194         /* Entity Auxiliary Names PDR Data*/
195         3,
196         0x80, // entityType system software
197         0x1,
198         0x0,  // Entity instance number =1
199         0,
200         0,    // Overall system
201         0,    // shared Name Count one name only
202         01,   // nameStringCount
203         0x65, 0x6e, 0x00,
204         0x00, // Language Tag "en"
205         0x53, 0x00, 0x30, 0x00,
206         0x00  // Entity Name "S0"
207     };
208 
209     t1.pdrs.emplace_back(pdr1);
210     t1.pdrs.emplace_back(pdr2);
211     t1.parseTerminusPDRs();
212 
213     auto sensorAuxNames = t1.getSensorAuxiliaryNames(0);
214     EXPECT_EQ(nullptr, sensorAuxNames);
215 
216     sensorAuxNames = t1.getSensorAuxiliaryNames(1);
217     EXPECT_NE(nullptr, sensorAuxNames);
218 
219     const auto& [sensorId, sensorCnt, names] = *sensorAuxNames;
220     EXPECT_EQ(1, sensorId);
221     EXPECT_EQ(1, sensorCnt);
222     EXPECT_EQ(1, names.size());
223     EXPECT_EQ(3, names[0].size());
224     EXPECT_EQ("en", names[0][0].first);
225     EXPECT_EQ("TEMP1", names[0][0].second);
226     EXPECT_EQ("fr", names[0][1].first);
227     EXPECT_EQ("TEMP2", names[0][1].second);
228     EXPECT_EQ("fr", names[0][2].first);
229     EXPECT_EQ("TEMP12", names[0][2].second);
230     EXPECT_EQ(2, t1.pdrs.size());
231     EXPECT_EQ("S0", t1.getTerminusName().value());
232 }
233 
TEST(TerminusTest,parseSensorAuxiliaryNamesMultiSensorsPDRTest)234 TEST(TerminusTest, parseSensorAuxiliaryNamesMultiSensorsPDRTest)
235 {
236     auto event = sdeventplus::Event::get_default();
237     auto t1 = pldm::platform_mc::Terminus(
238         1, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
239     std::vector<uint8_t> pdr1{
240         0x0,
241         0x0,
242         0x0,
243         0x1,                             // record handle
244         0x1,                             // PDRHeaderVersion
245         PLDM_SENSOR_AUXILIARY_NAMES_PDR, // PDRType
246         0x0,
247         0x0,                             // recordChangeNumber
248         0x0,
249         54,                              // dataLength
250         0,
251         0x0,                             // PLDMTerminusHandle
252         0x1,
253         0x0,                             // sensorID
254         0x2,                             // sensorCount
255         0x1,                             // nameStringCount
256         'e',
257         'n',
258         0x0, // nameLanguageTag
259         0x0,
260         'T',
261         0x0,
262         'E',
263         0x0,
264         'M',
265         0x0,
266         'P',
267         0x0,
268         '1',
269         0x0,
270         0x0, // sensorName Temp1
271         0x2, // nameStringCount
272         'f',
273         'r',
274         0x0, // nameLanguageTag
275         0x0,
276         'T',
277         0x0,
278         'E',
279         0x0,
280         'M',
281         0x0,
282         'P',
283         0x0,
284         '2',
285         0x0,
286         0x0, // sensorName Temp2
287         'f',
288         'r',
289         0x0, // nameLanguageTag
290         0x0,
291         'T',
292         0x0,
293         'E',
294         0x0,
295         'M',
296         0x0,
297         'P',
298         0x0,
299         '1',
300         0x0,
301         '2',
302         0x0,
303         0x0 // sensorName Temp12
304     };
305 
306     std::vector<uint8_t> pdr2{
307         0x1, 0x0, 0x0,
308         0x0,                             // record handle
309         0x1,                             // PDRHeaderVersion
310         PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType
311         0x1,
312         0x0,                             // recordChangeNumber
313         0x11,
314         0,                               // dataLength
315         /* Entity Auxiliary Names PDR Data*/
316         3,
317         0x80, // entityType system software
318         0x1,
319         0x0,  // Entity instance number =1
320         0,
321         0,    // Overall system
322         0,    // shared Name Count one name only
323         01,   // nameStringCount
324         0x65, 0x6e, 0x00,
325         0x00, // Language Tag "en"
326         0x53, 0x00, 0x30, 0x00,
327         0x00  // Entity Name "S0"
328     };
329 
330     t1.pdrs.emplace_back(pdr1);
331     t1.pdrs.emplace_back(pdr2);
332     t1.parseTerminusPDRs();
333 
334     auto sensorAuxNames = t1.getSensorAuxiliaryNames(0);
335     EXPECT_EQ(nullptr, sensorAuxNames);
336 
337     sensorAuxNames = t1.getSensorAuxiliaryNames(1);
338     EXPECT_NE(nullptr, sensorAuxNames);
339 
340     const auto& [sensorId, sensorCnt, names] = *sensorAuxNames;
341     EXPECT_EQ(1, sensorId);
342     EXPECT_EQ(2, sensorCnt);
343     EXPECT_EQ(2, names.size());
344     EXPECT_EQ(1, names[0].size());
345     EXPECT_EQ("en", names[0][0].first);
346     EXPECT_EQ("TEMP1", names[0][0].second);
347     EXPECT_EQ(2, names[1].size());
348     EXPECT_EQ("fr", names[1][0].first);
349     EXPECT_EQ("TEMP2", names[1][0].second);
350     EXPECT_EQ("fr", names[1][1].first);
351     EXPECT_EQ("TEMP12", names[1][1].second);
352     EXPECT_EQ(2, t1.pdrs.size());
353     EXPECT_EQ("S0", t1.getTerminusName().value());
354 }
355 
TEST(TerminusTest,parsePDRTestNoSensorPDR)356 TEST(TerminusTest, parsePDRTestNoSensorPDR)
357 {
358     auto event = sdeventplus::Event::get_default();
359     auto t1 = pldm::platform_mc::Terminus(
360         1, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
361     std::vector<uint8_t> pdr1{
362         0x1, 0x0, 0x0,
363         0x0,                             // record handle
364         0x1,                             // PDRHeaderVersion
365         PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType
366         0x1,
367         0x0,                             // recordChangeNumber
368         0x11,
369         0,                               // dataLength
370         /* Entity Auxiliary Names PDR Data*/
371         3,
372         0x80, // entityType system software
373         0x1,
374         0x0,  // Entity instance number =1
375         0,
376         0,    // Overall system
377         0,    // shared Name Count one name only
378         01,   // nameStringCount
379         0x65, 0x6e, 0x00,
380         0x00, // Language Tag "en"
381         0x53, 0x00, 0x30, 0x00,
382         0x00  // Entity Name "S0"
383     };
384 
385     t1.pdrs.emplace_back(pdr1);
386     t1.parseTerminusPDRs();
387 
388     auto sensorAuxNames = t1.getSensorAuxiliaryNames(1);
389     EXPECT_EQ(nullptr, sensorAuxNames);
390 }
391