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