1*77e6fe7aSGilbert Chen #include "libpldm/base.h" 2*77e6fe7aSGilbert Chen #include "libpldm/entity.h" 3*77e6fe7aSGilbert Chen #include "libpldm/platform.h" 4*77e6fe7aSGilbert Chen 5*77e6fe7aSGilbert Chen #include "common/instance_id.hpp" 6*77e6fe7aSGilbert Chen #include "common/types.hpp" 7*77e6fe7aSGilbert Chen #include "mock_event_manager.hpp" 8*77e6fe7aSGilbert Chen #include "mock_terminus_manager.hpp" 9*77e6fe7aSGilbert Chen #include "platform-mc/platform_manager.hpp" 10*77e6fe7aSGilbert Chen #include "platform-mc/terminus_manager.hpp" 11*77e6fe7aSGilbert Chen #include "test/test_instance_id.hpp" 12*77e6fe7aSGilbert Chen 13*77e6fe7aSGilbert Chen #include <gtest/gtest.h> 14*77e6fe7aSGilbert Chen 15*77e6fe7aSGilbert Chen using ::testing::_; 16*77e6fe7aSGilbert Chen using ::testing::Return; 17*77e6fe7aSGilbert Chen 18*77e6fe7aSGilbert Chen class EventManagerTest : public testing::Test 19*77e6fe7aSGilbert Chen { 20*77e6fe7aSGilbert Chen protected: 21*77e6fe7aSGilbert Chen EventManagerTest() : 22*77e6fe7aSGilbert Chen bus(pldm::utils::DBusHandler::getBus()), 23*77e6fe7aSGilbert Chen event(sdeventplus::Event::get_default()), instanceIdDb(), 24*77e6fe7aSGilbert Chen reqHandler(pldmTransport, event, instanceIdDb, false, 25*77e6fe7aSGilbert Chen std::chrono::seconds(1), 2, std::chrono::milliseconds(100)), 26*77e6fe7aSGilbert Chen terminusManager(event, reqHandler, instanceIdDb, termini, nullptr), 27*77e6fe7aSGilbert Chen eventManager(terminusManager, termini), 28*77e6fe7aSGilbert Chen platformManager(terminusManager, termini) 29*77e6fe7aSGilbert Chen {} 30*77e6fe7aSGilbert Chen 31*77e6fe7aSGilbert Chen PldmTransport* pldmTransport = nullptr; 32*77e6fe7aSGilbert Chen sdbusplus::bus::bus& bus; 33*77e6fe7aSGilbert Chen sdeventplus::Event event; 34*77e6fe7aSGilbert Chen TestInstanceIdDb instanceIdDb; 35*77e6fe7aSGilbert Chen pldm::requester::Handler<pldm::requester::Request> reqHandler; 36*77e6fe7aSGilbert Chen pldm::platform_mc::MockTerminusManager terminusManager; 37*77e6fe7aSGilbert Chen pldm::platform_mc::MockEventManager eventManager; 38*77e6fe7aSGilbert Chen pldm::platform_mc::PlatformManager platformManager; 39*77e6fe7aSGilbert Chen pldm::platform_mc::TerminiMapper termini{}; 40*77e6fe7aSGilbert Chen }; 41*77e6fe7aSGilbert Chen 42*77e6fe7aSGilbert Chen TEST_F(EventManagerTest, processNumericSensorEventTest) 43*77e6fe7aSGilbert Chen { 44*77e6fe7aSGilbert Chen #define SENSOR_READING 50 45*77e6fe7aSGilbert Chen #define WARNING_HIGH 45 46*77e6fe7aSGilbert Chen pldm_tid_t tid = 1; 47*77e6fe7aSGilbert Chen termini[tid] = std::make_shared<pldm::platform_mc::Terminus>( 48*77e6fe7aSGilbert Chen tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM); 49*77e6fe7aSGilbert Chen std::vector<uint8_t> pdr1{ 50*77e6fe7aSGilbert Chen 0x1, 51*77e6fe7aSGilbert Chen 0x0, 52*77e6fe7aSGilbert Chen 0x0, 53*77e6fe7aSGilbert Chen 0x0, // record handle 54*77e6fe7aSGilbert Chen 0x1, // PDRHeaderVersion 55*77e6fe7aSGilbert Chen PLDM_NUMERIC_SENSOR_PDR, // PDRType 56*77e6fe7aSGilbert Chen 0x0, 57*77e6fe7aSGilbert Chen 0x0, // recordChangeNumber 58*77e6fe7aSGilbert Chen PLDM_PDR_NUMERIC_SENSOR_PDR_MIN_LENGTH, 59*77e6fe7aSGilbert Chen 0, // dataLength 60*77e6fe7aSGilbert Chen 0, 61*77e6fe7aSGilbert Chen 0, // PLDMTerminusHandle 62*77e6fe7aSGilbert Chen 0x1, 63*77e6fe7aSGilbert Chen 0x0, // sensorID=1 64*77e6fe7aSGilbert Chen PLDM_ENTITY_POWER_SUPPLY, 65*77e6fe7aSGilbert Chen 0, // entityType=Power Supply(120) 66*77e6fe7aSGilbert Chen 1, 67*77e6fe7aSGilbert Chen 0, // entityInstanceNumber 68*77e6fe7aSGilbert Chen 1, 69*77e6fe7aSGilbert Chen 0, // containerID=1 70*77e6fe7aSGilbert Chen PLDM_NO_INIT, // sensorInit 71*77e6fe7aSGilbert Chen false, // sensorAuxiliaryNamesPDR 72*77e6fe7aSGilbert Chen PLDM_SENSOR_UNIT_DEGRESS_C, // baseUint(2)=degrees C 73*77e6fe7aSGilbert Chen 0, // unitModifier = 0 74*77e6fe7aSGilbert Chen 0, // rateUnit 75*77e6fe7aSGilbert Chen 0, // baseOEMUnitHandle 76*77e6fe7aSGilbert Chen 0, // auxUnit 77*77e6fe7aSGilbert Chen 0, // auxUnitModifier 78*77e6fe7aSGilbert Chen 0, // auxRateUnit 79*77e6fe7aSGilbert Chen 0, // rel 80*77e6fe7aSGilbert Chen 0, // auxOEMUnitHandle 81*77e6fe7aSGilbert Chen true, // isLinear 82*77e6fe7aSGilbert Chen PLDM_SENSOR_DATA_SIZE_UINT8, // sensorDataSize 83*77e6fe7aSGilbert Chen 0, 84*77e6fe7aSGilbert Chen 0, 85*77e6fe7aSGilbert Chen 0x80, 86*77e6fe7aSGilbert Chen 0x3f, // resolution=1.0 87*77e6fe7aSGilbert Chen 0, 88*77e6fe7aSGilbert Chen 0, 89*77e6fe7aSGilbert Chen 0, 90*77e6fe7aSGilbert Chen 0, // offset=0 91*77e6fe7aSGilbert Chen 0, 92*77e6fe7aSGilbert Chen 0, // accuracy 93*77e6fe7aSGilbert Chen 0, // plusTolerance 94*77e6fe7aSGilbert Chen 0, // minusTolerance 95*77e6fe7aSGilbert Chen 2, // hysteresis = 2 96*77e6fe7aSGilbert Chen 0x1b, // supportedThresholds 97*77e6fe7aSGilbert Chen 0, // thresholdAndHysteresisVolatility 98*77e6fe7aSGilbert Chen 0, 99*77e6fe7aSGilbert Chen 0, 100*77e6fe7aSGilbert Chen 0x80, 101*77e6fe7aSGilbert Chen 0x3f, // stateTransistionInterval=1.0 102*77e6fe7aSGilbert Chen 0, 103*77e6fe7aSGilbert Chen 0, 104*77e6fe7aSGilbert Chen 0x80, 105*77e6fe7aSGilbert Chen 0x3f, // updateInverval=1.0 106*77e6fe7aSGilbert Chen 255, // maxReadable 107*77e6fe7aSGilbert Chen 0, // minReadable 108*77e6fe7aSGilbert Chen PLDM_RANGE_FIELD_FORMAT_UINT8, // rangeFieldFormat 109*77e6fe7aSGilbert Chen 0x18, // rangeFieldsupport 110*77e6fe7aSGilbert Chen 0, // nominalValue 111*77e6fe7aSGilbert Chen 0, // normalMax 112*77e6fe7aSGilbert Chen 0, // normalMin 113*77e6fe7aSGilbert Chen WARNING_HIGH, // warningHigh 114*77e6fe7aSGilbert Chen 20, // warningLow 115*77e6fe7aSGilbert Chen 60, // criticalHigh 116*77e6fe7aSGilbert Chen 10, // criticalLow 117*77e6fe7aSGilbert Chen 0, // fatalHigh 118*77e6fe7aSGilbert Chen 0 // fatalLow 119*77e6fe7aSGilbert Chen }; 120*77e6fe7aSGilbert Chen 121*77e6fe7aSGilbert Chen std::vector<uint8_t> pdr2{ 122*77e6fe7aSGilbert Chen 0x1, 0x0, 0x0, 123*77e6fe7aSGilbert Chen 0x0, // record handle 124*77e6fe7aSGilbert Chen 0x1, // PDRHeaderVersion 125*77e6fe7aSGilbert Chen PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType 126*77e6fe7aSGilbert Chen 0x1, 127*77e6fe7aSGilbert Chen 0x0, // recordChangeNumber 128*77e6fe7aSGilbert Chen 0x11, 129*77e6fe7aSGilbert Chen 0, // dataLength 130*77e6fe7aSGilbert Chen /* Entity Auxiliary Names PDR Data*/ 131*77e6fe7aSGilbert Chen 3, 132*77e6fe7aSGilbert Chen 0x80, // entityType system software 133*77e6fe7aSGilbert Chen 0x1, 134*77e6fe7aSGilbert Chen 0x0, // Entity instance number =1 135*77e6fe7aSGilbert Chen 0, 136*77e6fe7aSGilbert Chen 0, // Overal system 137*77e6fe7aSGilbert Chen 0, // shared Name Count one name only 138*77e6fe7aSGilbert Chen 01, // nameStringCount 139*77e6fe7aSGilbert Chen 0x65, 0x6e, 0x00, 140*77e6fe7aSGilbert Chen 0x00, // Language Tag "en" 141*77e6fe7aSGilbert Chen 0x53, 0x00, 0x30, 0x00, 142*77e6fe7aSGilbert Chen 0x00 // Entity Name "S0" 143*77e6fe7aSGilbert Chen }; 144*77e6fe7aSGilbert Chen 145*77e6fe7aSGilbert Chen // add dummy numeric sensor 146*77e6fe7aSGilbert Chen termini[tid]->pdrs.emplace_back(pdr1); 147*77e6fe7aSGilbert Chen termini[tid]->pdrs.emplace_back(pdr2); 148*77e6fe7aSGilbert Chen termini[tid]->parseTerminusPDRs(); 149*77e6fe7aSGilbert Chen EXPECT_EQ(1, termini[tid]->numericSensors.size()); 150*77e6fe7aSGilbert Chen 151*77e6fe7aSGilbert Chen uint8_t platformEventStatus = 0; 152*77e6fe7aSGilbert Chen 153*77e6fe7aSGilbert Chen std::vector<uint8_t> eventData{ 154*77e6fe7aSGilbert Chen 0x1, 155*77e6fe7aSGilbert Chen 0x0, // sensor id 156*77e6fe7aSGilbert Chen PLDM_NUMERIC_SENSOR_STATE, 157*77e6fe7aSGilbert Chen PLDM_SENSOR_UPPERWARNING, 158*77e6fe7aSGilbert Chen PLDM_SENSOR_NORMAL, 159*77e6fe7aSGilbert Chen PLDM_SENSOR_DATA_SIZE_UINT8, 160*77e6fe7aSGilbert Chen SENSOR_READING}; 161*77e6fe7aSGilbert Chen auto rc = eventManager.handlePlatformEvent( 162*77e6fe7aSGilbert Chen tid, 0x00, PLDM_SENSOR_EVENT, eventData.data(), eventData.size()); 163*77e6fe7aSGilbert Chen EXPECT_EQ(PLDM_SUCCESS, rc); 164*77e6fe7aSGilbert Chen EXPECT_EQ(PLDM_EVENT_NO_LOGGING, platformEventStatus); 165*77e6fe7aSGilbert Chen } 166*77e6fe7aSGilbert Chen 167*77e6fe7aSGilbert Chen TEST_F(EventManagerTest, SetEventReceiverTest) 168*77e6fe7aSGilbert Chen { 169*77e6fe7aSGilbert Chen // Add terminus 170*77e6fe7aSGilbert Chen auto mappedTid = terminusManager.mapTid(pldm::MctpInfo(10, "", "", 1)); 171*77e6fe7aSGilbert Chen auto tid = mappedTid.value(); 172*77e6fe7aSGilbert Chen termini[tid] = std::make_shared<pldm::platform_mc::Terminus>( 173*77e6fe7aSGilbert Chen tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM); 174*77e6fe7aSGilbert Chen auto terminus = termini[tid]; 175*77e6fe7aSGilbert Chen 176*77e6fe7aSGilbert Chen /* Set supported command by terminus */ 177*77e6fe7aSGilbert Chen auto size = PLDM_MAX_TYPES * (PLDM_MAX_CMDS_PER_TYPE / 8); 178*77e6fe7aSGilbert Chen std::vector<uint8_t> pldmCmds(size); 179*77e6fe7aSGilbert Chen uint8_t type = PLDM_PLATFORM; 180*77e6fe7aSGilbert Chen uint8_t cmd = PLDM_GET_PDR_REPOSITORY_INFO; 181*77e6fe7aSGilbert Chen auto idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8); 182*77e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8)); 183*77e6fe7aSGilbert Chen cmd = PLDM_GET_PDR; 184*77e6fe7aSGilbert Chen idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8); 185*77e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8)); 186*77e6fe7aSGilbert Chen cmd = PLDM_EVENT_MESSAGE_SUPPORTED; 187*77e6fe7aSGilbert Chen idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8); 188*77e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8)); 189*77e6fe7aSGilbert Chen cmd = PLDM_EVENT_MESSAGE_BUFFER_SIZE; 190*77e6fe7aSGilbert Chen idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8); 191*77e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8)); 192*77e6fe7aSGilbert Chen cmd = PLDM_SET_EVENT_RECEIVER; 193*77e6fe7aSGilbert Chen idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8); 194*77e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8)); 195*77e6fe7aSGilbert Chen termini[tid]->setSupportedCommands(pldmCmds); 196*77e6fe7aSGilbert Chen 197*77e6fe7aSGilbert Chen EXPECT_EQ(true, termini[tid]->doesSupportCommand(PLDM_PLATFORM, 198*77e6fe7aSGilbert Chen PLDM_SET_EVENT_RECEIVER)); 199*77e6fe7aSGilbert Chen EXPECT_EQ(true, termini[tid]->doesSupportCommand( 200*77e6fe7aSGilbert Chen PLDM_PLATFORM, PLDM_EVENT_MESSAGE_BUFFER_SIZE)); 201*77e6fe7aSGilbert Chen EXPECT_EQ(true, termini[tid]->doesSupportCommand( 202*77e6fe7aSGilbert Chen PLDM_PLATFORM, PLDM_EVENT_MESSAGE_SUPPORTED)); 203*77e6fe7aSGilbert Chen EXPECT_EQ(true, 204*77e6fe7aSGilbert Chen termini[tid]->doesSupportCommand(PLDM_PLATFORM, PLDM_GET_PDR)); 205*77e6fe7aSGilbert Chen EXPECT_EQ(true, termini[tid]->doesSupportCommand( 206*77e6fe7aSGilbert Chen PLDM_PLATFORM, PLDM_GET_PDR_REPOSITORY_INFO)); 207*77e6fe7aSGilbert Chen 208*77e6fe7aSGilbert Chen // queue getPDRRepositoryInfo response 209*77e6fe7aSGilbert Chen const size_t getPDRRepositoryInfoLen = 210*77e6fe7aSGilbert Chen PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES; 211*77e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + getPDRRepositoryInfoLen> 212*77e6fe7aSGilbert Chen getPDRRepositoryInfoResp{ 213*77e6fe7aSGilbert Chen 0x0, 0x02, 0x50, PLDM_SUCCESS, 214*77e6fe7aSGilbert Chen 0x0, // repositoryState 215*77e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 216*77e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // updateTime 217*77e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 218*77e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // OEMUpdateTime 219*77e6fe7aSGilbert Chen 2, 0x0, 0x0, 0x0, // recordCount 220*77e6fe7aSGilbert Chen 0x0, 0x1, 0x0, 0x0, // repositorySize 221*77e6fe7aSGilbert Chen 59, 0x0, 0x0, 0x0, // largestRecordSize 222*77e6fe7aSGilbert Chen 0x0 // dataTransferHandleTimeout 223*77e6fe7aSGilbert Chen }; 224*77e6fe7aSGilbert Chen auto rc = terminusManager.enqueueResponse( 225*77e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(getPDRRepositoryInfoResp.data()), 226*77e6fe7aSGilbert Chen sizeof(getPDRRepositoryInfoResp)); 227*77e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS); 228*77e6fe7aSGilbert Chen 229*77e6fe7aSGilbert Chen // queue getPDR responses 230*77e6fe7aSGilbert Chen const size_t getPdrRespLen = 81; 231*77e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + getPdrRespLen> getPdrResp{ 232*77e6fe7aSGilbert Chen 0x0, 0x02, 0x51, PLDM_SUCCESS, 0x1, 0x0, 0x0, 0x0, // nextRecordHandle 233*77e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, // nextDataTransferHandle 234*77e6fe7aSGilbert Chen 0x5, // transferFlag 235*77e6fe7aSGilbert Chen 69, 0x0, // responseCount 236*77e6fe7aSGilbert Chen // numeric Sensor PDR 237*77e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 238*77e6fe7aSGilbert Chen 0x0, // record handle 239*77e6fe7aSGilbert Chen 0x1, // PDRHeaderVersion 240*77e6fe7aSGilbert Chen PLDM_NUMERIC_SENSOR_PDR, // PDRType 241*77e6fe7aSGilbert Chen 0x0, 242*77e6fe7aSGilbert Chen 0x0, // recordChangeNumber 243*77e6fe7aSGilbert Chen PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH + 244*77e6fe7aSGilbert Chen PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH + 245*77e6fe7aSGilbert Chen PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH, 246*77e6fe7aSGilbert Chen 0, // dataLength 247*77e6fe7aSGilbert Chen 0, 248*77e6fe7aSGilbert Chen 0, // PLDMTerminusHandle 249*77e6fe7aSGilbert Chen 0x1, 250*77e6fe7aSGilbert Chen 0x0, // sensorID=1 251*77e6fe7aSGilbert Chen 120, 252*77e6fe7aSGilbert Chen 0, // entityType=Power Supply(120) 253*77e6fe7aSGilbert Chen 1, 254*77e6fe7aSGilbert Chen 0, // entityInstanceNumber 255*77e6fe7aSGilbert Chen 0x1, 256*77e6fe7aSGilbert Chen 0x0, // containerID=1 257*77e6fe7aSGilbert Chen PLDM_NO_INIT, // sensorInit 258*77e6fe7aSGilbert Chen false, // sensorAuxiliaryNamesPDR 259*77e6fe7aSGilbert Chen PLDM_SENSOR_UNIT_DEGRESS_C, // baseUint(2)=degrees C 260*77e6fe7aSGilbert Chen 1, // unitModifier = 1 261*77e6fe7aSGilbert Chen 0, // rateUnit 262*77e6fe7aSGilbert Chen 0, // baseOEMUnitHandle 263*77e6fe7aSGilbert Chen 0, // auxUnit 264*77e6fe7aSGilbert Chen 0, // auxUnitModifier 265*77e6fe7aSGilbert Chen 0, // auxRateUnit 266*77e6fe7aSGilbert Chen 0, // rel 267*77e6fe7aSGilbert Chen 0, // auxOEMUnitHandle 268*77e6fe7aSGilbert Chen true, // isLinear 269*77e6fe7aSGilbert Chen PLDM_SENSOR_DATA_SIZE_UINT8, // sensorDataSize 270*77e6fe7aSGilbert Chen 0, 0, 0xc0, 271*77e6fe7aSGilbert Chen 0x3f, // resolution=1.5 272*77e6fe7aSGilbert Chen 0, 0, 0x80, 273*77e6fe7aSGilbert Chen 0x3f, // offset=1.0 274*77e6fe7aSGilbert Chen 0, 275*77e6fe7aSGilbert Chen 0, // accuracy 276*77e6fe7aSGilbert Chen 0, // plusTolerance 277*77e6fe7aSGilbert Chen 0, // minusTolerance 278*77e6fe7aSGilbert Chen 2, // hysteresis 279*77e6fe7aSGilbert Chen 0, // supportedThresholds 280*77e6fe7aSGilbert Chen 0, // thresholdAndHysteresisVolatility 281*77e6fe7aSGilbert Chen 0, 0, 0x80, 282*77e6fe7aSGilbert Chen 0x3f, // stateTransistionInterval=1.0 283*77e6fe7aSGilbert Chen 0, 0, 0x80, 284*77e6fe7aSGilbert Chen 0x3f, // updateInverval=1.0 285*77e6fe7aSGilbert Chen 255, // maxReadable 286*77e6fe7aSGilbert Chen 0, // minReadable 287*77e6fe7aSGilbert Chen PLDM_RANGE_FIELD_FORMAT_UINT8, // rangeFieldFormat 288*77e6fe7aSGilbert Chen 0, // rangeFieldsupport 289*77e6fe7aSGilbert Chen 0, // nominalValue 290*77e6fe7aSGilbert Chen 0, // normalMax 291*77e6fe7aSGilbert Chen 0, // normalMin 292*77e6fe7aSGilbert Chen 0, // warningHigh 293*77e6fe7aSGilbert Chen 0, // warningLow 294*77e6fe7aSGilbert Chen 0, // criticalHigh 295*77e6fe7aSGilbert Chen 0, // criticalLow 296*77e6fe7aSGilbert Chen 0, // fatalHigh 297*77e6fe7aSGilbert Chen 0 // fatalLow 298*77e6fe7aSGilbert Chen }; 299*77e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse( 300*77e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(getPdrResp.data()), sizeof(getPdrResp)); 301*77e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS); 302*77e6fe7aSGilbert Chen 303*77e6fe7aSGilbert Chen const size_t getPdrAuxNameRespLen = 39; 304*77e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + getPdrAuxNameRespLen> 305*77e6fe7aSGilbert Chen getPdrAuxNameResp{ 306*77e6fe7aSGilbert Chen 0x0, 0x02, 0x51, PLDM_SUCCESS, 0x0, 0x0, 0x0, 307*77e6fe7aSGilbert Chen 0x0, // nextRecordHandle 308*77e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, // nextDataTransferHandle 309*77e6fe7aSGilbert Chen 0x5, // transferFlag 310*77e6fe7aSGilbert Chen 0x1b, 0x0, // responseCount 311*77e6fe7aSGilbert Chen // Common PDR Header 312*77e6fe7aSGilbert Chen 0x1, 0x0, 0x0, 313*77e6fe7aSGilbert Chen 0x0, // record handle 314*77e6fe7aSGilbert Chen 0x1, // PDRHeaderVersion 315*77e6fe7aSGilbert Chen PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType 316*77e6fe7aSGilbert Chen 0x1, 317*77e6fe7aSGilbert Chen 0x0, // recordChangeNumber 318*77e6fe7aSGilbert Chen 0x11, 319*77e6fe7aSGilbert Chen 0, // dataLength 320*77e6fe7aSGilbert Chen /* Entity Auxiliary Names PDR Data*/ 321*77e6fe7aSGilbert Chen 3, 322*77e6fe7aSGilbert Chen 0x80, // entityType system software 323*77e6fe7aSGilbert Chen 0x1, 324*77e6fe7aSGilbert Chen 0x0, // Entity instance number =1 325*77e6fe7aSGilbert Chen 0, 326*77e6fe7aSGilbert Chen 0, // Overal system 327*77e6fe7aSGilbert Chen 0, // shared Name Count one name only 328*77e6fe7aSGilbert Chen 01, // nameStringCount 329*77e6fe7aSGilbert Chen 0x65, 0x6e, 0x00, 330*77e6fe7aSGilbert Chen 0x00, // Language Tag "en" 331*77e6fe7aSGilbert Chen 0x53, 0x00, 0x30, 0x00, 332*77e6fe7aSGilbert Chen 0x00 // Entity Name "S0" 333*77e6fe7aSGilbert Chen }; 334*77e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse( 335*77e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(getPdrAuxNameResp.data()), 336*77e6fe7aSGilbert Chen sizeof(getPdrAuxNameResp)); 337*77e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS); 338*77e6fe7aSGilbert Chen 339*77e6fe7aSGilbert Chen // queue eventMessageBufferSize response(bufferSize=32) 340*77e6fe7aSGilbert Chen const size_t eventMessageBufferSizeRespLen = 3; 341*77e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + eventMessageBufferSizeRespLen> 342*77e6fe7aSGilbert Chen eventMessageBufferSizeResp{0x0, 0x02, 0x0d, PLDM_SUCCESS, 32, 0}; 343*77e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse( 344*77e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(eventMessageBufferSizeResp.data()), 345*77e6fe7aSGilbert Chen sizeof(eventMessageBufferSizeResp)); 346*77e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS); 347*77e6fe7aSGilbert Chen 348*77e6fe7aSGilbert Chen // queue eventMessageSupported response 349*77e6fe7aSGilbert Chen const size_t eventMessageSupportedLen = 7; 350*77e6fe7aSGilbert Chen PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES; 351*77e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + eventMessageSupportedLen> 352*77e6fe7aSGilbert Chen eventMessageSupportedResp{0x0, 0x02, 0x0c, PLDM_SUCCESS, 353*77e6fe7aSGilbert Chen 0x0, // synchronyConfiguration 354*77e6fe7aSGilbert Chen 0x06, // synchronyConfigurationSupported 355*77e6fe7aSGilbert Chen 3, // numberEventClassReturned 356*77e6fe7aSGilbert Chen 0x0, 0x5, 0xfa}; 357*77e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse( 358*77e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(eventMessageSupportedResp.data()), 359*77e6fe7aSGilbert Chen sizeof(eventMessageSupportedResp)); 360*77e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS); 361*77e6fe7aSGilbert Chen 362*77e6fe7aSGilbert Chen // queue SetEventReceiver response 363*77e6fe7aSGilbert Chen const size_t SetEventReceiverLen = 1; 364*77e6fe7aSGilbert Chen PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES; 365*77e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + SetEventReceiverLen> 366*77e6fe7aSGilbert Chen SetEventReceiverResp{0x0, 0x02, 0x04, PLDM_SUCCESS}; 367*77e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse( 368*77e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(SetEventReceiverResp.data()), 369*77e6fe7aSGilbert Chen sizeof(SetEventReceiverResp)); 370*77e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS); 371*77e6fe7aSGilbert Chen 372*77e6fe7aSGilbert Chen // should finish immediately 373*77e6fe7aSGilbert Chen stdexec::sync_wait(platformManager.initTerminus()); 374*77e6fe7aSGilbert Chen EXPECT_EQ(true, terminus->initialized); 375*77e6fe7aSGilbert Chen EXPECT_EQ(32, terminus->maxBufferSize); 376*77e6fe7aSGilbert Chen EXPECT_EQ(0x06, terminus->synchronyConfigurationSupported.byte); 377*77e6fe7aSGilbert Chen EXPECT_EQ(2, terminus->pdrs.size()); 378*77e6fe7aSGilbert Chen EXPECT_EQ(1, terminus->numericSensors.size()); 379*77e6fe7aSGilbert Chen } 380*77e6fe7aSGilbert Chen 381*77e6fe7aSGilbert Chen TEST_F(EventManagerTest, updateAvailableState) 382*77e6fe7aSGilbert Chen { 383*77e6fe7aSGilbert Chen pldm_tid_t tid = 1; 384*77e6fe7aSGilbert Chen eventManager.updateAvailableState(tid, true); 385*77e6fe7aSGilbert Chen EXPECT_EQ(true, eventManager.getAvailableState(tid)); 386*77e6fe7aSGilbert Chen eventManager.updateAvailableState(tid, false); 387*77e6fe7aSGilbert Chen EXPECT_EQ(false, eventManager.getAvailableState(tid)); 388*77e6fe7aSGilbert Chen eventManager.updateAvailableState(2, false); 389*77e6fe7aSGilbert Chen EXPECT_EQ(false, eventManager.getAvailableState(tid)); 390*77e6fe7aSGilbert Chen } 391