xref: /openbmc/pldm/platform-mc/test/terminus_test.cpp (revision 3c5486d41105d4ac7a84fbf36973b52059d9b6b6)
1de2a132aSGilbert Chen #include "libpldm/entity.h"
2de2a132aSGilbert Chen 
3*3c5486d4SThu Nguyen #include "platform-mc/numeric_sensor.hpp"
46c7fed4cSGilbert Chen #include "platform-mc/terminus.hpp"
56c7fed4cSGilbert Chen 
66c7fed4cSGilbert Chen #include <gtest/gtest.h>
76c7fed4cSGilbert Chen 
86c7fed4cSGilbert Chen TEST(TerminusTest, supportedTypeTest)
96c7fed4cSGilbert Chen {
106c7fed4cSGilbert Chen     auto t1 = pldm::platform_mc::Terminus(1, 1 << PLDM_BASE);
116c7fed4cSGilbert Chen     auto t2 = pldm::platform_mc::Terminus(2,
126c7fed4cSGilbert Chen                                           1 << PLDM_BASE | 1 << PLDM_PLATFORM);
136c7fed4cSGilbert Chen 
146c7fed4cSGilbert Chen     EXPECT_EQ(true, t1.doesSupportType(PLDM_BASE));
156c7fed4cSGilbert Chen     EXPECT_EQ(false, t1.doesSupportType(PLDM_PLATFORM));
166c7fed4cSGilbert Chen     EXPECT_EQ(true, t2.doesSupportType(PLDM_BASE));
176c7fed4cSGilbert Chen     EXPECT_EQ(true, t2.doesSupportType(PLDM_PLATFORM));
186c7fed4cSGilbert Chen }
196c7fed4cSGilbert Chen 
206c7fed4cSGilbert Chen TEST(TerminusTest, getTidTest)
216c7fed4cSGilbert Chen {
226c7fed4cSGilbert Chen     const pldm_tid_t tid = 1;
236c7fed4cSGilbert Chen     auto t1 = pldm::platform_mc::Terminus(tid, 1 << PLDM_BASE);
246c7fed4cSGilbert Chen 
256c7fed4cSGilbert Chen     EXPECT_EQ(tid, t1.getTid());
266c7fed4cSGilbert Chen }
27de2a132aSGilbert Chen 
28de2a132aSGilbert Chen TEST(TerminusTest, parseSensorAuxiliaryNamesPDRTest)
29de2a132aSGilbert Chen {
30de2a132aSGilbert Chen     auto t1 = pldm::platform_mc::Terminus(1,
31de2a132aSGilbert Chen                                           1 << PLDM_BASE | 1 << PLDM_PLATFORM);
32de2a132aSGilbert Chen     std::vector<uint8_t> pdr1{
33de2a132aSGilbert Chen         0x0,
34de2a132aSGilbert Chen         0x0,
35de2a132aSGilbert Chen         0x0,
36de2a132aSGilbert Chen         0x1,                             // record handle
37de2a132aSGilbert Chen         0x1,                             // PDRHeaderVersion
38de2a132aSGilbert Chen         PLDM_SENSOR_AUXILIARY_NAMES_PDR, // PDRType
39de2a132aSGilbert Chen         0x0,
40de2a132aSGilbert Chen         0x0,                             // recordChangeNumber
41de2a132aSGilbert Chen         0x0,
42de2a132aSGilbert Chen         21,                              // dataLength
43de2a132aSGilbert Chen         0,
44de2a132aSGilbert Chen         0x0,                             // PLDMTerminusHandle
45de2a132aSGilbert Chen         0x1,
46de2a132aSGilbert Chen         0x0,                             // sensorID
47de2a132aSGilbert Chen         0x1,                             // sensorCount
48de2a132aSGilbert Chen         0x1,                             // nameStringCount
49de2a132aSGilbert Chen         'e',
50de2a132aSGilbert Chen         'n',
51de2a132aSGilbert Chen         0x0, // nameLanguageTag
52de2a132aSGilbert Chen         0x0,
53de2a132aSGilbert Chen         'T',
54de2a132aSGilbert Chen         0x0,
55de2a132aSGilbert Chen         'E',
56de2a132aSGilbert Chen         0x0,
57de2a132aSGilbert Chen         'M',
58de2a132aSGilbert Chen         0x0,
59de2a132aSGilbert Chen         'P',
60de2a132aSGilbert Chen         0x0,
61de2a132aSGilbert Chen         '1',
62de2a132aSGilbert Chen         0x0,
63de2a132aSGilbert Chen         0x0 // sensorName
64de2a132aSGilbert Chen     };
65de2a132aSGilbert Chen 
66*3c5486d4SThu Nguyen     std::vector<uint8_t> pdr2{
67*3c5486d4SThu Nguyen         0x1, 0x0, 0x0,
68*3c5486d4SThu Nguyen         0x0,                             // record handle
69*3c5486d4SThu Nguyen         0x1,                             // PDRHeaderVersion
70*3c5486d4SThu Nguyen         PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType
71*3c5486d4SThu Nguyen         0x1,
72*3c5486d4SThu Nguyen         0x0,                             // recordChangeNumber
73*3c5486d4SThu Nguyen         0x11,
74*3c5486d4SThu Nguyen         0,                               // dataLength
75*3c5486d4SThu Nguyen         /* Entity Auxiliary Names PDR Data*/
76*3c5486d4SThu Nguyen         3,
77*3c5486d4SThu Nguyen         0x80, // entityType system software
78*3c5486d4SThu Nguyen         0x1,
79*3c5486d4SThu Nguyen         0x0,  // Entity instance number =1
80*3c5486d4SThu Nguyen         0,
81*3c5486d4SThu Nguyen         0,    // Overal system
82*3c5486d4SThu Nguyen         0,    // shared Name Count one name only
83*3c5486d4SThu Nguyen         01,   // nameStringCount
84*3c5486d4SThu Nguyen         0x65, 0x6e, 0x00,
85*3c5486d4SThu Nguyen         0x00, // Language Tag "en"
86*3c5486d4SThu Nguyen         0x53, 0x00, 0x30, 0x00,
87*3c5486d4SThu Nguyen         0x00  // Entity Name "S0"
88*3c5486d4SThu Nguyen     };
89*3c5486d4SThu Nguyen 
90de2a132aSGilbert Chen     t1.pdrs.emplace_back(pdr1);
91*3c5486d4SThu Nguyen     t1.pdrs.emplace_back(pdr2);
92de2a132aSGilbert Chen     t1.parseTerminusPDRs();
93de2a132aSGilbert Chen 
94de2a132aSGilbert Chen     auto sensorAuxNames = t1.getSensorAuxiliaryNames(0);
95de2a132aSGilbert Chen     EXPECT_EQ(nullptr, sensorAuxNames);
96de2a132aSGilbert Chen 
97de2a132aSGilbert Chen     sensorAuxNames = t1.getSensorAuxiliaryNames(1);
98de2a132aSGilbert Chen     EXPECT_NE(nullptr, sensorAuxNames);
99de2a132aSGilbert Chen 
100de2a132aSGilbert Chen     const auto& [sensorId, sensorCnt, names] = *sensorAuxNames;
101de2a132aSGilbert Chen     EXPECT_EQ(1, sensorId);
102de2a132aSGilbert Chen     EXPECT_EQ(1, sensorCnt);
103de2a132aSGilbert Chen     EXPECT_EQ(1, names.size());
104de2a132aSGilbert Chen     EXPECT_EQ(1, names[0].size());
105de2a132aSGilbert Chen     EXPECT_EQ("en", names[0][0].first);
106de2a132aSGilbert Chen     EXPECT_EQ("TEMP1", names[0][0].second);
107*3c5486d4SThu Nguyen     EXPECT_EQ(2, t1.pdrs.size());
108*3c5486d4SThu Nguyen     EXPECT_EQ("S0", t1.getTerminusName());
109*3c5486d4SThu Nguyen }
110*3c5486d4SThu Nguyen 
111*3c5486d4SThu Nguyen TEST(TerminusTest, parsePDRTestNoSensorPDR)
112*3c5486d4SThu Nguyen {
113*3c5486d4SThu Nguyen     auto t1 = pldm::platform_mc::Terminus(1,
114*3c5486d4SThu Nguyen                                           1 << PLDM_BASE | 1 << PLDM_PLATFORM);
115*3c5486d4SThu Nguyen     std::vector<uint8_t> pdr1{
116*3c5486d4SThu Nguyen         0x1, 0x0, 0x0,
117*3c5486d4SThu Nguyen         0x0,                             // record handle
118*3c5486d4SThu Nguyen         0x1,                             // PDRHeaderVersion
119*3c5486d4SThu Nguyen         PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType
120*3c5486d4SThu Nguyen         0x1,
121*3c5486d4SThu Nguyen         0x0,                             // recordChangeNumber
122*3c5486d4SThu Nguyen         0x11,
123*3c5486d4SThu Nguyen         0,                               // dataLength
124*3c5486d4SThu Nguyen         /* Entity Auxiliary Names PDR Data*/
125*3c5486d4SThu Nguyen         3,
126*3c5486d4SThu Nguyen         0x80, // entityType system software
127*3c5486d4SThu Nguyen         0x1,
128*3c5486d4SThu Nguyen         0x0,  // Entity instance number =1
129*3c5486d4SThu Nguyen         0,
130*3c5486d4SThu Nguyen         0,    // Overal system
131*3c5486d4SThu Nguyen         0,    // shared Name Count one name only
132*3c5486d4SThu Nguyen         01,   // nameStringCount
133*3c5486d4SThu Nguyen         0x65, 0x6e, 0x00,
134*3c5486d4SThu Nguyen         0x00, // Language Tag "en"
135*3c5486d4SThu Nguyen         0x53, 0x00, 0x30, 0x00,
136*3c5486d4SThu Nguyen         0x00  // Entity Name "S0"
137*3c5486d4SThu Nguyen     };
138*3c5486d4SThu Nguyen 
139*3c5486d4SThu Nguyen     t1.pdrs.emplace_back(pdr1);
140*3c5486d4SThu Nguyen     t1.parseTerminusPDRs();
141*3c5486d4SThu Nguyen 
142*3c5486d4SThu Nguyen     auto sensorAuxNames = t1.getSensorAuxiliaryNames(1);
143*3c5486d4SThu Nguyen     EXPECT_EQ(nullptr, sensorAuxNames);
144de2a132aSGilbert Chen }
145