1de2a132aSGilbert Chen #include "libpldm/entity.h" 2de2a132aSGilbert Chen 33c5486d4SThu 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 663c5486d4SThu Nguyen std::vector<uint8_t> pdr2{ 673c5486d4SThu Nguyen 0x1, 0x0, 0x0, 683c5486d4SThu Nguyen 0x0, // record handle 693c5486d4SThu Nguyen 0x1, // PDRHeaderVersion 703c5486d4SThu Nguyen PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType 713c5486d4SThu Nguyen 0x1, 723c5486d4SThu Nguyen 0x0, // recordChangeNumber 733c5486d4SThu Nguyen 0x11, 743c5486d4SThu Nguyen 0, // dataLength 753c5486d4SThu Nguyen /* Entity Auxiliary Names PDR Data*/ 763c5486d4SThu Nguyen 3, 773c5486d4SThu Nguyen 0x80, // entityType system software 783c5486d4SThu Nguyen 0x1, 793c5486d4SThu Nguyen 0x0, // Entity instance number =1 803c5486d4SThu Nguyen 0, 813c5486d4SThu Nguyen 0, // Overal system 823c5486d4SThu Nguyen 0, // shared Name Count one name only 833c5486d4SThu Nguyen 01, // nameStringCount 843c5486d4SThu Nguyen 0x65, 0x6e, 0x00, 853c5486d4SThu Nguyen 0x00, // Language Tag "en" 863c5486d4SThu Nguyen 0x53, 0x00, 0x30, 0x00, 873c5486d4SThu Nguyen 0x00 // Entity Name "S0" 883c5486d4SThu Nguyen }; 893c5486d4SThu Nguyen 90de2a132aSGilbert Chen t1.pdrs.emplace_back(pdr1); 913c5486d4SThu 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); 1073c5486d4SThu Nguyen EXPECT_EQ(2, t1.pdrs.size()); 1083c5486d4SThu Nguyen EXPECT_EQ("S0", t1.getTerminusName()); 1093c5486d4SThu Nguyen } 1103c5486d4SThu Nguyen 111*f1e32c17Stal-yac TEST(TerminusTest, parseSensorAuxiliaryMultiNamesPDRTest) 112*f1e32c17Stal-yac { 113*f1e32c17Stal-yac auto t1 = pldm::platform_mc::Terminus(1, 114*f1e32c17Stal-yac 1 << PLDM_BASE | 1 << PLDM_PLATFORM); 115*f1e32c17Stal-yac std::vector<uint8_t> pdr1{ 116*f1e32c17Stal-yac 0x0, 117*f1e32c17Stal-yac 0x0, 118*f1e32c17Stal-yac 0x0, 119*f1e32c17Stal-yac 0x1, // record handle 120*f1e32c17Stal-yac 0x1, // PDRHeaderVersion 121*f1e32c17Stal-yac PLDM_SENSOR_AUXILIARY_NAMES_PDR, // PDRType 122*f1e32c17Stal-yac 0x0, 123*f1e32c17Stal-yac 0x0, // recordChangeNumber 124*f1e32c17Stal-yac 0x0, 125*f1e32c17Stal-yac 53, // dataLength 126*f1e32c17Stal-yac 0, 127*f1e32c17Stal-yac 0x0, // PLDMTerminusHandle 128*f1e32c17Stal-yac 0x1, 129*f1e32c17Stal-yac 0x0, // sensorID 130*f1e32c17Stal-yac 0x1, // sensorCount 131*f1e32c17Stal-yac 0x3, // nameStringCount 132*f1e32c17Stal-yac 'e', 133*f1e32c17Stal-yac 'n', 134*f1e32c17Stal-yac 0x0, // nameLanguageTag 135*f1e32c17Stal-yac 0x0, 136*f1e32c17Stal-yac 'T', 137*f1e32c17Stal-yac 0x0, 138*f1e32c17Stal-yac 'E', 139*f1e32c17Stal-yac 0x0, 140*f1e32c17Stal-yac 'M', 141*f1e32c17Stal-yac 0x0, 142*f1e32c17Stal-yac 'P', 143*f1e32c17Stal-yac 0x0, 144*f1e32c17Stal-yac '1', 145*f1e32c17Stal-yac 0x0, 146*f1e32c17Stal-yac 0x0, // sensorName Temp1 147*f1e32c17Stal-yac 'f', 148*f1e32c17Stal-yac 'r', 149*f1e32c17Stal-yac 0x0, // nameLanguageTag 150*f1e32c17Stal-yac 0x0, 151*f1e32c17Stal-yac 'T', 152*f1e32c17Stal-yac 0x0, 153*f1e32c17Stal-yac 'E', 154*f1e32c17Stal-yac 0x0, 155*f1e32c17Stal-yac 'M', 156*f1e32c17Stal-yac 0x0, 157*f1e32c17Stal-yac 'P', 158*f1e32c17Stal-yac 0x0, 159*f1e32c17Stal-yac '2', 160*f1e32c17Stal-yac 0x0, 161*f1e32c17Stal-yac 0x0, // sensorName Temp2 162*f1e32c17Stal-yac 'f', 163*f1e32c17Stal-yac 'r', 164*f1e32c17Stal-yac 0x0, // nameLanguageTag 165*f1e32c17Stal-yac 0x0, 166*f1e32c17Stal-yac 'T', 167*f1e32c17Stal-yac 0x0, 168*f1e32c17Stal-yac 'E', 169*f1e32c17Stal-yac 0x0, 170*f1e32c17Stal-yac 'M', 171*f1e32c17Stal-yac 0x0, 172*f1e32c17Stal-yac 'P', 173*f1e32c17Stal-yac 0x0, 174*f1e32c17Stal-yac '1', 175*f1e32c17Stal-yac 0x0, 176*f1e32c17Stal-yac '2', 177*f1e32c17Stal-yac 0x0, 178*f1e32c17Stal-yac 0x0 // sensorName Temp12 179*f1e32c17Stal-yac }; 180*f1e32c17Stal-yac 181*f1e32c17Stal-yac std::vector<uint8_t> pdr2{ 182*f1e32c17Stal-yac 0x1, 0x0, 0x0, 183*f1e32c17Stal-yac 0x0, // record handle 184*f1e32c17Stal-yac 0x1, // PDRHeaderVersion 185*f1e32c17Stal-yac PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType 186*f1e32c17Stal-yac 0x1, 187*f1e32c17Stal-yac 0x0, // recordChangeNumber 188*f1e32c17Stal-yac 0x11, 189*f1e32c17Stal-yac 0, // dataLength 190*f1e32c17Stal-yac /* Entity Auxiliary Names PDR Data*/ 191*f1e32c17Stal-yac 3, 192*f1e32c17Stal-yac 0x80, // entityType system software 193*f1e32c17Stal-yac 0x1, 194*f1e32c17Stal-yac 0x0, // Entity instance number =1 195*f1e32c17Stal-yac 0, 196*f1e32c17Stal-yac 0, // Overal system 197*f1e32c17Stal-yac 0, // shared Name Count one name only 198*f1e32c17Stal-yac 01, // nameStringCount 199*f1e32c17Stal-yac 0x65, 0x6e, 0x00, 200*f1e32c17Stal-yac 0x00, // Language Tag "en" 201*f1e32c17Stal-yac 0x53, 0x00, 0x30, 0x00, 202*f1e32c17Stal-yac 0x00 // Entity Name "S0" 203*f1e32c17Stal-yac }; 204*f1e32c17Stal-yac 205*f1e32c17Stal-yac t1.pdrs.emplace_back(pdr1); 206*f1e32c17Stal-yac t1.pdrs.emplace_back(pdr2); 207*f1e32c17Stal-yac t1.parseTerminusPDRs(); 208*f1e32c17Stal-yac 209*f1e32c17Stal-yac auto sensorAuxNames = t1.getSensorAuxiliaryNames(0); 210*f1e32c17Stal-yac EXPECT_EQ(nullptr, sensorAuxNames); 211*f1e32c17Stal-yac 212*f1e32c17Stal-yac sensorAuxNames = t1.getSensorAuxiliaryNames(1); 213*f1e32c17Stal-yac EXPECT_NE(nullptr, sensorAuxNames); 214*f1e32c17Stal-yac 215*f1e32c17Stal-yac const auto& [sensorId, sensorCnt, names] = *sensorAuxNames; 216*f1e32c17Stal-yac EXPECT_EQ(1, sensorId); 217*f1e32c17Stal-yac EXPECT_EQ(1, sensorCnt); 218*f1e32c17Stal-yac EXPECT_EQ(1, names.size()); 219*f1e32c17Stal-yac EXPECT_EQ(3, names[0].size()); 220*f1e32c17Stal-yac EXPECT_EQ("en", names[0][0].first); 221*f1e32c17Stal-yac EXPECT_EQ("TEMP1", names[0][0].second); 222*f1e32c17Stal-yac EXPECT_EQ("fr", names[0][1].first); 223*f1e32c17Stal-yac EXPECT_EQ("TEMP2", names[0][1].second); 224*f1e32c17Stal-yac EXPECT_EQ("fr", names[0][2].first); 225*f1e32c17Stal-yac EXPECT_EQ("TEMP12", names[0][2].second); 226*f1e32c17Stal-yac EXPECT_EQ(2, t1.pdrs.size()); 227*f1e32c17Stal-yac EXPECT_EQ("S0", t1.getTerminusName()); 228*f1e32c17Stal-yac } 229*f1e32c17Stal-yac 230*f1e32c17Stal-yac TEST(TerminusTest, parseSensorAuxiliaryNamesMultiSensorsPDRTest) 231*f1e32c17Stal-yac { 232*f1e32c17Stal-yac auto t1 = pldm::platform_mc::Terminus(1, 233*f1e32c17Stal-yac 1 << PLDM_BASE | 1 << PLDM_PLATFORM); 234*f1e32c17Stal-yac std::vector<uint8_t> pdr1{ 235*f1e32c17Stal-yac 0x0, 236*f1e32c17Stal-yac 0x0, 237*f1e32c17Stal-yac 0x0, 238*f1e32c17Stal-yac 0x1, // record handle 239*f1e32c17Stal-yac 0x1, // PDRHeaderVersion 240*f1e32c17Stal-yac PLDM_SENSOR_AUXILIARY_NAMES_PDR, // PDRType 241*f1e32c17Stal-yac 0x0, 242*f1e32c17Stal-yac 0x0, // recordChangeNumber 243*f1e32c17Stal-yac 0x0, 244*f1e32c17Stal-yac 54, // dataLength 245*f1e32c17Stal-yac 0, 246*f1e32c17Stal-yac 0x0, // PLDMTerminusHandle 247*f1e32c17Stal-yac 0x1, 248*f1e32c17Stal-yac 0x0, // sensorID 249*f1e32c17Stal-yac 0x2, // sensorCount 250*f1e32c17Stal-yac 0x1, // nameStringCount 251*f1e32c17Stal-yac 'e', 252*f1e32c17Stal-yac 'n', 253*f1e32c17Stal-yac 0x0, // nameLanguageTag 254*f1e32c17Stal-yac 0x0, 255*f1e32c17Stal-yac 'T', 256*f1e32c17Stal-yac 0x0, 257*f1e32c17Stal-yac 'E', 258*f1e32c17Stal-yac 0x0, 259*f1e32c17Stal-yac 'M', 260*f1e32c17Stal-yac 0x0, 261*f1e32c17Stal-yac 'P', 262*f1e32c17Stal-yac 0x0, 263*f1e32c17Stal-yac '1', 264*f1e32c17Stal-yac 0x0, 265*f1e32c17Stal-yac 0x0, // sensorName Temp1 266*f1e32c17Stal-yac 0x2, // nameStringCount 267*f1e32c17Stal-yac 'f', 268*f1e32c17Stal-yac 'r', 269*f1e32c17Stal-yac 0x0, // nameLanguageTag 270*f1e32c17Stal-yac 0x0, 271*f1e32c17Stal-yac 'T', 272*f1e32c17Stal-yac 0x0, 273*f1e32c17Stal-yac 'E', 274*f1e32c17Stal-yac 0x0, 275*f1e32c17Stal-yac 'M', 276*f1e32c17Stal-yac 0x0, 277*f1e32c17Stal-yac 'P', 278*f1e32c17Stal-yac 0x0, 279*f1e32c17Stal-yac '2', 280*f1e32c17Stal-yac 0x0, 281*f1e32c17Stal-yac 0x0, // sensorName Temp2 282*f1e32c17Stal-yac 'f', 283*f1e32c17Stal-yac 'r', 284*f1e32c17Stal-yac 0x0, // nameLanguageTag 285*f1e32c17Stal-yac 0x0, 286*f1e32c17Stal-yac 'T', 287*f1e32c17Stal-yac 0x0, 288*f1e32c17Stal-yac 'E', 289*f1e32c17Stal-yac 0x0, 290*f1e32c17Stal-yac 'M', 291*f1e32c17Stal-yac 0x0, 292*f1e32c17Stal-yac 'P', 293*f1e32c17Stal-yac 0x0, 294*f1e32c17Stal-yac '1', 295*f1e32c17Stal-yac 0x0, 296*f1e32c17Stal-yac '2', 297*f1e32c17Stal-yac 0x0, 298*f1e32c17Stal-yac 0x0 // sensorName Temp12 299*f1e32c17Stal-yac }; 300*f1e32c17Stal-yac 301*f1e32c17Stal-yac std::vector<uint8_t> pdr2{ 302*f1e32c17Stal-yac 0x1, 0x0, 0x0, 303*f1e32c17Stal-yac 0x0, // record handle 304*f1e32c17Stal-yac 0x1, // PDRHeaderVersion 305*f1e32c17Stal-yac PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType 306*f1e32c17Stal-yac 0x1, 307*f1e32c17Stal-yac 0x0, // recordChangeNumber 308*f1e32c17Stal-yac 0x11, 309*f1e32c17Stal-yac 0, // dataLength 310*f1e32c17Stal-yac /* Entity Auxiliary Names PDR Data*/ 311*f1e32c17Stal-yac 3, 312*f1e32c17Stal-yac 0x80, // entityType system software 313*f1e32c17Stal-yac 0x1, 314*f1e32c17Stal-yac 0x0, // Entity instance number =1 315*f1e32c17Stal-yac 0, 316*f1e32c17Stal-yac 0, // Overal system 317*f1e32c17Stal-yac 0, // shared Name Count one name only 318*f1e32c17Stal-yac 01, // nameStringCount 319*f1e32c17Stal-yac 0x65, 0x6e, 0x00, 320*f1e32c17Stal-yac 0x00, // Language Tag "en" 321*f1e32c17Stal-yac 0x53, 0x00, 0x30, 0x00, 322*f1e32c17Stal-yac 0x00 // Entity Name "S0" 323*f1e32c17Stal-yac }; 324*f1e32c17Stal-yac 325*f1e32c17Stal-yac t1.pdrs.emplace_back(pdr1); 326*f1e32c17Stal-yac t1.pdrs.emplace_back(pdr2); 327*f1e32c17Stal-yac t1.parseTerminusPDRs(); 328*f1e32c17Stal-yac 329*f1e32c17Stal-yac auto sensorAuxNames = t1.getSensorAuxiliaryNames(0); 330*f1e32c17Stal-yac EXPECT_EQ(nullptr, sensorAuxNames); 331*f1e32c17Stal-yac 332*f1e32c17Stal-yac sensorAuxNames = t1.getSensorAuxiliaryNames(1); 333*f1e32c17Stal-yac EXPECT_NE(nullptr, sensorAuxNames); 334*f1e32c17Stal-yac 335*f1e32c17Stal-yac const auto& [sensorId, sensorCnt, names] = *sensorAuxNames; 336*f1e32c17Stal-yac EXPECT_EQ(1, sensorId); 337*f1e32c17Stal-yac EXPECT_EQ(2, sensorCnt); 338*f1e32c17Stal-yac EXPECT_EQ(2, names.size()); 339*f1e32c17Stal-yac EXPECT_EQ(1, names[0].size()); 340*f1e32c17Stal-yac EXPECT_EQ("en", names[0][0].first); 341*f1e32c17Stal-yac EXPECT_EQ("TEMP1", names[0][0].second); 342*f1e32c17Stal-yac EXPECT_EQ(2, names[1].size()); 343*f1e32c17Stal-yac EXPECT_EQ("fr", names[1][0].first); 344*f1e32c17Stal-yac EXPECT_EQ("TEMP2", names[1][0].second); 345*f1e32c17Stal-yac EXPECT_EQ("fr", names[1][1].first); 346*f1e32c17Stal-yac EXPECT_EQ("TEMP12", names[1][1].second); 347*f1e32c17Stal-yac EXPECT_EQ(2, t1.pdrs.size()); 348*f1e32c17Stal-yac EXPECT_EQ("S0", t1.getTerminusName()); 349*f1e32c17Stal-yac } 350*f1e32c17Stal-yac 3513c5486d4SThu Nguyen TEST(TerminusTest, parsePDRTestNoSensorPDR) 3523c5486d4SThu Nguyen { 3533c5486d4SThu Nguyen auto t1 = pldm::platform_mc::Terminus(1, 3543c5486d4SThu Nguyen 1 << PLDM_BASE | 1 << PLDM_PLATFORM); 3553c5486d4SThu Nguyen std::vector<uint8_t> pdr1{ 3563c5486d4SThu Nguyen 0x1, 0x0, 0x0, 3573c5486d4SThu Nguyen 0x0, // record handle 3583c5486d4SThu Nguyen 0x1, // PDRHeaderVersion 3593c5486d4SThu Nguyen PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType 3603c5486d4SThu Nguyen 0x1, 3613c5486d4SThu Nguyen 0x0, // recordChangeNumber 3623c5486d4SThu Nguyen 0x11, 3633c5486d4SThu Nguyen 0, // dataLength 3643c5486d4SThu Nguyen /* Entity Auxiliary Names PDR Data*/ 3653c5486d4SThu Nguyen 3, 3663c5486d4SThu Nguyen 0x80, // entityType system software 3673c5486d4SThu Nguyen 0x1, 3683c5486d4SThu Nguyen 0x0, // Entity instance number =1 3693c5486d4SThu Nguyen 0, 3703c5486d4SThu Nguyen 0, // Overal system 3713c5486d4SThu Nguyen 0, // shared Name Count one name only 3723c5486d4SThu Nguyen 01, // nameStringCount 3733c5486d4SThu Nguyen 0x65, 0x6e, 0x00, 3743c5486d4SThu Nguyen 0x00, // Language Tag "en" 3753c5486d4SThu Nguyen 0x53, 0x00, 0x30, 0x00, 3763c5486d4SThu Nguyen 0x00 // Entity Name "S0" 3773c5486d4SThu Nguyen }; 3783c5486d4SThu Nguyen 3793c5486d4SThu Nguyen t1.pdrs.emplace_back(pdr1); 3803c5486d4SThu Nguyen t1.parseTerminusPDRs(); 3813c5486d4SThu Nguyen 3823c5486d4SThu Nguyen auto sensorAuxNames = t1.getSensorAuxiliaryNames(1); 3833c5486d4SThu Nguyen EXPECT_EQ(nullptr, sensorAuxNames); 384de2a132aSGilbert Chen } 385