177e6fe7aSGilbert Chen #include "libpldm/base.h"
277e6fe7aSGilbert Chen #include "libpldm/entity.h"
377e6fe7aSGilbert Chen #include "libpldm/platform.h"
477e6fe7aSGilbert Chen
577e6fe7aSGilbert Chen #include "common/instance_id.hpp"
677e6fe7aSGilbert Chen #include "common/types.hpp"
777e6fe7aSGilbert Chen #include "mock_event_manager.hpp"
877e6fe7aSGilbert Chen #include "mock_terminus_manager.hpp"
977e6fe7aSGilbert Chen #include "platform-mc/platform_manager.hpp"
1077e6fe7aSGilbert Chen #include "platform-mc/terminus_manager.hpp"
1177e6fe7aSGilbert Chen #include "test/test_instance_id.hpp"
1277e6fe7aSGilbert Chen
1377e6fe7aSGilbert Chen #include <gtest/gtest.h>
1477e6fe7aSGilbert Chen
1577e6fe7aSGilbert Chen using ::testing::_;
1677e6fe7aSGilbert Chen using ::testing::Return;
1777e6fe7aSGilbert Chen
1877e6fe7aSGilbert Chen class EventManagerTest : public testing::Test
1977e6fe7aSGilbert Chen {
2077e6fe7aSGilbert Chen protected:
EventManagerTest()2177e6fe7aSGilbert Chen EventManagerTest() :
2277e6fe7aSGilbert Chen bus(pldm::utils::DBusHandler::getBus()),
2377e6fe7aSGilbert Chen event(sdeventplus::Event::get_default()), instanceIdDb(),
2477e6fe7aSGilbert Chen reqHandler(pldmTransport, event, instanceIdDb, false,
2577e6fe7aSGilbert Chen std::chrono::seconds(1), 2, std::chrono::milliseconds(100)),
2677e6fe7aSGilbert Chen terminusManager(event, reqHandler, instanceIdDb, termini, nullptr),
2777e6fe7aSGilbert Chen eventManager(terminusManager, termini),
2877e6fe7aSGilbert Chen platformManager(terminusManager, termini)
2977e6fe7aSGilbert Chen {}
3077e6fe7aSGilbert Chen
3177e6fe7aSGilbert Chen PldmTransport* pldmTransport = nullptr;
32*39a0e71aSPatrick Williams sdbusplus::bus_t& bus;
3377e6fe7aSGilbert Chen sdeventplus::Event event;
3477e6fe7aSGilbert Chen TestInstanceIdDb instanceIdDb;
3577e6fe7aSGilbert Chen pldm::requester::Handler<pldm::requester::Request> reqHandler;
3677e6fe7aSGilbert Chen pldm::platform_mc::MockTerminusManager terminusManager;
3777e6fe7aSGilbert Chen pldm::platform_mc::MockEventManager eventManager;
3877e6fe7aSGilbert Chen pldm::platform_mc::PlatformManager platformManager;
3977e6fe7aSGilbert Chen pldm::platform_mc::TerminiMapper termini{};
4077e6fe7aSGilbert Chen };
4177e6fe7aSGilbert Chen
TEST_F(EventManagerTest,processNumericSensorEventTest)4277e6fe7aSGilbert Chen TEST_F(EventManagerTest, processNumericSensorEventTest)
4377e6fe7aSGilbert Chen {
4477e6fe7aSGilbert Chen #define SENSOR_READING 50
4577e6fe7aSGilbert Chen #define WARNING_HIGH 45
4677e6fe7aSGilbert Chen pldm_tid_t tid = 1;
4777e6fe7aSGilbert Chen termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
4877e6fe7aSGilbert Chen tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM);
4977e6fe7aSGilbert Chen std::vector<uint8_t> pdr1{
5077e6fe7aSGilbert Chen 0x1,
5177e6fe7aSGilbert Chen 0x0,
5277e6fe7aSGilbert Chen 0x0,
5377e6fe7aSGilbert Chen 0x0, // record handle
5477e6fe7aSGilbert Chen 0x1, // PDRHeaderVersion
5577e6fe7aSGilbert Chen PLDM_NUMERIC_SENSOR_PDR, // PDRType
5677e6fe7aSGilbert Chen 0x0,
5777e6fe7aSGilbert Chen 0x0, // recordChangeNumber
5877e6fe7aSGilbert Chen PLDM_PDR_NUMERIC_SENSOR_PDR_MIN_LENGTH,
5977e6fe7aSGilbert Chen 0, // dataLength
6077e6fe7aSGilbert Chen 0,
6177e6fe7aSGilbert Chen 0, // PLDMTerminusHandle
6277e6fe7aSGilbert Chen 0x1,
6377e6fe7aSGilbert Chen 0x0, // sensorID=1
6477e6fe7aSGilbert Chen PLDM_ENTITY_POWER_SUPPLY,
6577e6fe7aSGilbert Chen 0, // entityType=Power Supply(120)
6677e6fe7aSGilbert Chen 1,
6777e6fe7aSGilbert Chen 0, // entityInstanceNumber
6877e6fe7aSGilbert Chen 1,
6977e6fe7aSGilbert Chen 0, // containerID=1
7077e6fe7aSGilbert Chen PLDM_NO_INIT, // sensorInit
7177e6fe7aSGilbert Chen false, // sensorAuxiliaryNamesPDR
7277e6fe7aSGilbert Chen PLDM_SENSOR_UNIT_DEGRESS_C, // baseUint(2)=degrees C
7377e6fe7aSGilbert Chen 0, // unitModifier = 0
7477e6fe7aSGilbert Chen 0, // rateUnit
7577e6fe7aSGilbert Chen 0, // baseOEMUnitHandle
7677e6fe7aSGilbert Chen 0, // auxUnit
7777e6fe7aSGilbert Chen 0, // auxUnitModifier
7877e6fe7aSGilbert Chen 0, // auxRateUnit
7977e6fe7aSGilbert Chen 0, // rel
8077e6fe7aSGilbert Chen 0, // auxOEMUnitHandle
8177e6fe7aSGilbert Chen true, // isLinear
8277e6fe7aSGilbert Chen PLDM_SENSOR_DATA_SIZE_UINT8, // sensorDataSize
8377e6fe7aSGilbert Chen 0,
8477e6fe7aSGilbert Chen 0,
8577e6fe7aSGilbert Chen 0x80,
8677e6fe7aSGilbert Chen 0x3f, // resolution=1.0
8777e6fe7aSGilbert Chen 0,
8877e6fe7aSGilbert Chen 0,
8977e6fe7aSGilbert Chen 0,
9077e6fe7aSGilbert Chen 0, // offset=0
9177e6fe7aSGilbert Chen 0,
9277e6fe7aSGilbert Chen 0, // accuracy
9377e6fe7aSGilbert Chen 0, // plusTolerance
9477e6fe7aSGilbert Chen 0, // minusTolerance
9577e6fe7aSGilbert Chen 2, // hysteresis = 2
9677e6fe7aSGilbert Chen 0x1b, // supportedThresholds
9777e6fe7aSGilbert Chen 0, // thresholdAndHysteresisVolatility
9877e6fe7aSGilbert Chen 0,
9977e6fe7aSGilbert Chen 0,
10077e6fe7aSGilbert Chen 0x80,
10177e6fe7aSGilbert Chen 0x3f, // stateTransistionInterval=1.0
10277e6fe7aSGilbert Chen 0,
10377e6fe7aSGilbert Chen 0,
10477e6fe7aSGilbert Chen 0x80,
10577e6fe7aSGilbert Chen 0x3f, // updateInverval=1.0
10677e6fe7aSGilbert Chen 255, // maxReadable
10777e6fe7aSGilbert Chen 0, // minReadable
10877e6fe7aSGilbert Chen PLDM_RANGE_FIELD_FORMAT_UINT8, // rangeFieldFormat
10977e6fe7aSGilbert Chen 0x18, // rangeFieldsupport
11077e6fe7aSGilbert Chen 0, // nominalValue
11177e6fe7aSGilbert Chen 0, // normalMax
11277e6fe7aSGilbert Chen 0, // normalMin
11377e6fe7aSGilbert Chen WARNING_HIGH, // warningHigh
11477e6fe7aSGilbert Chen 20, // warningLow
11577e6fe7aSGilbert Chen 60, // criticalHigh
11677e6fe7aSGilbert Chen 10, // criticalLow
11777e6fe7aSGilbert Chen 0, // fatalHigh
11877e6fe7aSGilbert Chen 0 // fatalLow
11977e6fe7aSGilbert Chen };
12077e6fe7aSGilbert Chen
12177e6fe7aSGilbert Chen std::vector<uint8_t> pdr2{
12277e6fe7aSGilbert Chen 0x1, 0x0, 0x0,
12377e6fe7aSGilbert Chen 0x0, // record handle
12477e6fe7aSGilbert Chen 0x1, // PDRHeaderVersion
12577e6fe7aSGilbert Chen PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType
12677e6fe7aSGilbert Chen 0x1,
12777e6fe7aSGilbert Chen 0x0, // recordChangeNumber
12877e6fe7aSGilbert Chen 0x11,
12977e6fe7aSGilbert Chen 0, // dataLength
13077e6fe7aSGilbert Chen /* Entity Auxiliary Names PDR Data*/
13177e6fe7aSGilbert Chen 3,
13277e6fe7aSGilbert Chen 0x80, // entityType system software
13377e6fe7aSGilbert Chen 0x1,
13477e6fe7aSGilbert Chen 0x0, // Entity instance number =1
13577e6fe7aSGilbert Chen 0,
13677e6fe7aSGilbert Chen 0, // Overal system
13777e6fe7aSGilbert Chen 0, // shared Name Count one name only
13877e6fe7aSGilbert Chen 01, // nameStringCount
13977e6fe7aSGilbert Chen 0x65, 0x6e, 0x00,
14077e6fe7aSGilbert Chen 0x00, // Language Tag "en"
14177e6fe7aSGilbert Chen 0x53, 0x00, 0x30, 0x00,
14277e6fe7aSGilbert Chen 0x00 // Entity Name "S0"
14377e6fe7aSGilbert Chen };
14477e6fe7aSGilbert Chen
14577e6fe7aSGilbert Chen // add dummy numeric sensor
14677e6fe7aSGilbert Chen termini[tid]->pdrs.emplace_back(pdr1);
14777e6fe7aSGilbert Chen termini[tid]->pdrs.emplace_back(pdr2);
14877e6fe7aSGilbert Chen termini[tid]->parseTerminusPDRs();
14977e6fe7aSGilbert Chen EXPECT_EQ(1, termini[tid]->numericSensors.size());
15077e6fe7aSGilbert Chen
15177e6fe7aSGilbert Chen uint8_t platformEventStatus = 0;
15277e6fe7aSGilbert Chen
15377e6fe7aSGilbert Chen std::vector<uint8_t> eventData{
15477e6fe7aSGilbert Chen 0x1,
15577e6fe7aSGilbert Chen 0x0, // sensor id
15677e6fe7aSGilbert Chen PLDM_NUMERIC_SENSOR_STATE,
15777e6fe7aSGilbert Chen PLDM_SENSOR_UPPERWARNING,
15877e6fe7aSGilbert Chen PLDM_SENSOR_NORMAL,
15977e6fe7aSGilbert Chen PLDM_SENSOR_DATA_SIZE_UINT8,
16077e6fe7aSGilbert Chen SENSOR_READING};
16177e6fe7aSGilbert Chen auto rc = eventManager.handlePlatformEvent(
16277e6fe7aSGilbert Chen tid, 0x00, PLDM_SENSOR_EVENT, eventData.data(), eventData.size());
16377e6fe7aSGilbert Chen EXPECT_EQ(PLDM_SUCCESS, rc);
16477e6fe7aSGilbert Chen EXPECT_EQ(PLDM_EVENT_NO_LOGGING, platformEventStatus);
16577e6fe7aSGilbert Chen }
16677e6fe7aSGilbert Chen
TEST_F(EventManagerTest,SetEventReceiverTest)16777e6fe7aSGilbert Chen TEST_F(EventManagerTest, SetEventReceiverTest)
16877e6fe7aSGilbert Chen {
16977e6fe7aSGilbert Chen // Add terminus
17077e6fe7aSGilbert Chen auto mappedTid = terminusManager.mapTid(pldm::MctpInfo(10, "", "", 1));
17177e6fe7aSGilbert Chen auto tid = mappedTid.value();
17277e6fe7aSGilbert Chen termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
17377e6fe7aSGilbert Chen tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM);
17477e6fe7aSGilbert Chen auto terminus = termini[tid];
17577e6fe7aSGilbert Chen
17677e6fe7aSGilbert Chen /* Set supported command by terminus */
17777e6fe7aSGilbert Chen auto size = PLDM_MAX_TYPES * (PLDM_MAX_CMDS_PER_TYPE / 8);
17877e6fe7aSGilbert Chen std::vector<uint8_t> pldmCmds(size);
17977e6fe7aSGilbert Chen uint8_t type = PLDM_PLATFORM;
18077e6fe7aSGilbert Chen uint8_t cmd = PLDM_GET_PDR_REPOSITORY_INFO;
18177e6fe7aSGilbert Chen auto idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8);
18277e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8));
18377e6fe7aSGilbert Chen cmd = PLDM_GET_PDR;
18477e6fe7aSGilbert Chen idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8);
18577e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8));
18677e6fe7aSGilbert Chen cmd = PLDM_EVENT_MESSAGE_SUPPORTED;
18777e6fe7aSGilbert Chen idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8);
18877e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8));
18977e6fe7aSGilbert Chen cmd = PLDM_EVENT_MESSAGE_BUFFER_SIZE;
19077e6fe7aSGilbert Chen idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8);
19177e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8));
19277e6fe7aSGilbert Chen cmd = PLDM_SET_EVENT_RECEIVER;
19377e6fe7aSGilbert Chen idx = type * (PLDM_MAX_CMDS_PER_TYPE / 8) + (cmd / 8);
19477e6fe7aSGilbert Chen pldmCmds[idx] = pldmCmds[idx] | (1 << (cmd % 8));
19577e6fe7aSGilbert Chen termini[tid]->setSupportedCommands(pldmCmds);
19677e6fe7aSGilbert Chen
19777e6fe7aSGilbert Chen EXPECT_EQ(true, termini[tid]->doesSupportCommand(PLDM_PLATFORM,
19877e6fe7aSGilbert Chen PLDM_SET_EVENT_RECEIVER));
19977e6fe7aSGilbert Chen EXPECT_EQ(true, termini[tid]->doesSupportCommand(
20077e6fe7aSGilbert Chen PLDM_PLATFORM, PLDM_EVENT_MESSAGE_BUFFER_SIZE));
20177e6fe7aSGilbert Chen EXPECT_EQ(true, termini[tid]->doesSupportCommand(
20277e6fe7aSGilbert Chen PLDM_PLATFORM, PLDM_EVENT_MESSAGE_SUPPORTED));
20377e6fe7aSGilbert Chen EXPECT_EQ(true,
20477e6fe7aSGilbert Chen termini[tid]->doesSupportCommand(PLDM_PLATFORM, PLDM_GET_PDR));
20577e6fe7aSGilbert Chen EXPECT_EQ(true, termini[tid]->doesSupportCommand(
20677e6fe7aSGilbert Chen PLDM_PLATFORM, PLDM_GET_PDR_REPOSITORY_INFO));
20777e6fe7aSGilbert Chen
20877e6fe7aSGilbert Chen // queue getPDRRepositoryInfo response
20977e6fe7aSGilbert Chen const size_t getPDRRepositoryInfoLen =
21077e6fe7aSGilbert Chen PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES;
21177e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + getPDRRepositoryInfoLen>
21277e6fe7aSGilbert Chen getPDRRepositoryInfoResp{
21377e6fe7aSGilbert Chen 0x0, 0x02, 0x50, PLDM_SUCCESS,
21477e6fe7aSGilbert Chen 0x0, // repositoryState
21577e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
21677e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // updateTime
21777e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
21877e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // OEMUpdateTime
21977e6fe7aSGilbert Chen 2, 0x0, 0x0, 0x0, // recordCount
22077e6fe7aSGilbert Chen 0x0, 0x1, 0x0, 0x0, // repositorySize
22177e6fe7aSGilbert Chen 59, 0x0, 0x0, 0x0, // largestRecordSize
22277e6fe7aSGilbert Chen 0x0 // dataTransferHandleTimeout
22377e6fe7aSGilbert Chen };
22477e6fe7aSGilbert Chen auto rc = terminusManager.enqueueResponse(
22577e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(getPDRRepositoryInfoResp.data()),
22677e6fe7aSGilbert Chen sizeof(getPDRRepositoryInfoResp));
22777e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS);
22877e6fe7aSGilbert Chen
22977e6fe7aSGilbert Chen // queue getPDR responses
23077e6fe7aSGilbert Chen const size_t getPdrRespLen = 81;
23177e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + getPdrRespLen> getPdrResp{
23277e6fe7aSGilbert Chen 0x0, 0x02, 0x51, PLDM_SUCCESS, 0x1, 0x0, 0x0, 0x0, // nextRecordHandle
23377e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, // nextDataTransferHandle
23477e6fe7aSGilbert Chen 0x5, // transferFlag
23577e6fe7aSGilbert Chen 69, 0x0, // responseCount
23677e6fe7aSGilbert Chen // numeric Sensor PDR
23777e6fe7aSGilbert Chen 0x0, 0x0, 0x0,
23877e6fe7aSGilbert Chen 0x0, // record handle
23977e6fe7aSGilbert Chen 0x1, // PDRHeaderVersion
24077e6fe7aSGilbert Chen PLDM_NUMERIC_SENSOR_PDR, // PDRType
24177e6fe7aSGilbert Chen 0x0,
24277e6fe7aSGilbert Chen 0x0, // recordChangeNumber
24377e6fe7aSGilbert Chen PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +
24477e6fe7aSGilbert Chen PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH +
24577e6fe7aSGilbert Chen PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH,
24677e6fe7aSGilbert Chen 0, // dataLength
24777e6fe7aSGilbert Chen 0,
24877e6fe7aSGilbert Chen 0, // PLDMTerminusHandle
24977e6fe7aSGilbert Chen 0x1,
25077e6fe7aSGilbert Chen 0x0, // sensorID=1
25177e6fe7aSGilbert Chen 120,
25277e6fe7aSGilbert Chen 0, // entityType=Power Supply(120)
25377e6fe7aSGilbert Chen 1,
25477e6fe7aSGilbert Chen 0, // entityInstanceNumber
25577e6fe7aSGilbert Chen 0x1,
25677e6fe7aSGilbert Chen 0x0, // containerID=1
25777e6fe7aSGilbert Chen PLDM_NO_INIT, // sensorInit
25877e6fe7aSGilbert Chen false, // sensorAuxiliaryNamesPDR
25977e6fe7aSGilbert Chen PLDM_SENSOR_UNIT_DEGRESS_C, // baseUint(2)=degrees C
26077e6fe7aSGilbert Chen 1, // unitModifier = 1
26177e6fe7aSGilbert Chen 0, // rateUnit
26277e6fe7aSGilbert Chen 0, // baseOEMUnitHandle
26377e6fe7aSGilbert Chen 0, // auxUnit
26477e6fe7aSGilbert Chen 0, // auxUnitModifier
26577e6fe7aSGilbert Chen 0, // auxRateUnit
26677e6fe7aSGilbert Chen 0, // rel
26777e6fe7aSGilbert Chen 0, // auxOEMUnitHandle
26877e6fe7aSGilbert Chen true, // isLinear
26977e6fe7aSGilbert Chen PLDM_SENSOR_DATA_SIZE_UINT8, // sensorDataSize
27077e6fe7aSGilbert Chen 0, 0, 0xc0,
27177e6fe7aSGilbert Chen 0x3f, // resolution=1.5
27277e6fe7aSGilbert Chen 0, 0, 0x80,
27377e6fe7aSGilbert Chen 0x3f, // offset=1.0
27477e6fe7aSGilbert Chen 0,
27577e6fe7aSGilbert Chen 0, // accuracy
27677e6fe7aSGilbert Chen 0, // plusTolerance
27777e6fe7aSGilbert Chen 0, // minusTolerance
27877e6fe7aSGilbert Chen 2, // hysteresis
27977e6fe7aSGilbert Chen 0, // supportedThresholds
28077e6fe7aSGilbert Chen 0, // thresholdAndHysteresisVolatility
28177e6fe7aSGilbert Chen 0, 0, 0x80,
28277e6fe7aSGilbert Chen 0x3f, // stateTransistionInterval=1.0
28377e6fe7aSGilbert Chen 0, 0, 0x80,
28477e6fe7aSGilbert Chen 0x3f, // updateInverval=1.0
28577e6fe7aSGilbert Chen 255, // maxReadable
28677e6fe7aSGilbert Chen 0, // minReadable
28777e6fe7aSGilbert Chen PLDM_RANGE_FIELD_FORMAT_UINT8, // rangeFieldFormat
28877e6fe7aSGilbert Chen 0, // rangeFieldsupport
28977e6fe7aSGilbert Chen 0, // nominalValue
29077e6fe7aSGilbert Chen 0, // normalMax
29177e6fe7aSGilbert Chen 0, // normalMin
29277e6fe7aSGilbert Chen 0, // warningHigh
29377e6fe7aSGilbert Chen 0, // warningLow
29477e6fe7aSGilbert Chen 0, // criticalHigh
29577e6fe7aSGilbert Chen 0, // criticalLow
29677e6fe7aSGilbert Chen 0, // fatalHigh
29777e6fe7aSGilbert Chen 0 // fatalLow
29877e6fe7aSGilbert Chen };
29977e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse(
30077e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(getPdrResp.data()), sizeof(getPdrResp));
30177e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS);
30277e6fe7aSGilbert Chen
30377e6fe7aSGilbert Chen const size_t getPdrAuxNameRespLen = 39;
30477e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + getPdrAuxNameRespLen>
30577e6fe7aSGilbert Chen getPdrAuxNameResp{
30677e6fe7aSGilbert Chen 0x0, 0x02, 0x51, PLDM_SUCCESS, 0x0, 0x0, 0x0,
30777e6fe7aSGilbert Chen 0x0, // nextRecordHandle
30877e6fe7aSGilbert Chen 0x0, 0x0, 0x0, 0x0, // nextDataTransferHandle
30977e6fe7aSGilbert Chen 0x5, // transferFlag
31077e6fe7aSGilbert Chen 0x1b, 0x0, // responseCount
31177e6fe7aSGilbert Chen // Common PDR Header
31277e6fe7aSGilbert Chen 0x1, 0x0, 0x0,
31377e6fe7aSGilbert Chen 0x0, // record handle
31477e6fe7aSGilbert Chen 0x1, // PDRHeaderVersion
31577e6fe7aSGilbert Chen PLDM_ENTITY_AUXILIARY_NAMES_PDR, // PDRType
31677e6fe7aSGilbert Chen 0x1,
31777e6fe7aSGilbert Chen 0x0, // recordChangeNumber
31877e6fe7aSGilbert Chen 0x11,
31977e6fe7aSGilbert Chen 0, // dataLength
32077e6fe7aSGilbert Chen /* Entity Auxiliary Names PDR Data*/
32177e6fe7aSGilbert Chen 3,
32277e6fe7aSGilbert Chen 0x80, // entityType system software
32377e6fe7aSGilbert Chen 0x1,
32477e6fe7aSGilbert Chen 0x0, // Entity instance number =1
32577e6fe7aSGilbert Chen 0,
32677e6fe7aSGilbert Chen 0, // Overal system
32777e6fe7aSGilbert Chen 0, // shared Name Count one name only
32877e6fe7aSGilbert Chen 01, // nameStringCount
32977e6fe7aSGilbert Chen 0x65, 0x6e, 0x00,
33077e6fe7aSGilbert Chen 0x00, // Language Tag "en"
33177e6fe7aSGilbert Chen 0x53, 0x00, 0x30, 0x00,
33277e6fe7aSGilbert Chen 0x00 // Entity Name "S0"
33377e6fe7aSGilbert Chen };
33477e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse(
33577e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(getPdrAuxNameResp.data()),
33677e6fe7aSGilbert Chen sizeof(getPdrAuxNameResp));
33777e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS);
33877e6fe7aSGilbert Chen
33977e6fe7aSGilbert Chen // queue eventMessageBufferSize response(bufferSize=32)
34077e6fe7aSGilbert Chen const size_t eventMessageBufferSizeRespLen = 3;
34177e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + eventMessageBufferSizeRespLen>
34277e6fe7aSGilbert Chen eventMessageBufferSizeResp{0x0, 0x02, 0x0d, PLDM_SUCCESS, 32, 0};
34377e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse(
34477e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(eventMessageBufferSizeResp.data()),
34577e6fe7aSGilbert Chen sizeof(eventMessageBufferSizeResp));
34677e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS);
34777e6fe7aSGilbert Chen
34877e6fe7aSGilbert Chen // queue eventMessageSupported response
34977e6fe7aSGilbert Chen const size_t eventMessageSupportedLen = 7;
35077e6fe7aSGilbert Chen PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES;
35177e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + eventMessageSupportedLen>
35277e6fe7aSGilbert Chen eventMessageSupportedResp{0x0, 0x02, 0x0c, PLDM_SUCCESS,
35377e6fe7aSGilbert Chen 0x0, // synchronyConfiguration
35477e6fe7aSGilbert Chen 0x06, // synchronyConfigurationSupported
35577e6fe7aSGilbert Chen 3, // numberEventClassReturned
35677e6fe7aSGilbert Chen 0x0, 0x5, 0xfa};
35777e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse(
35877e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(eventMessageSupportedResp.data()),
35977e6fe7aSGilbert Chen sizeof(eventMessageSupportedResp));
36077e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS);
36177e6fe7aSGilbert Chen
36277e6fe7aSGilbert Chen // queue SetEventReceiver response
36377e6fe7aSGilbert Chen const size_t SetEventReceiverLen = 1;
36477e6fe7aSGilbert Chen PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES;
36577e6fe7aSGilbert Chen std::array<uint8_t, sizeof(pldm_msg_hdr) + SetEventReceiverLen>
36677e6fe7aSGilbert Chen SetEventReceiverResp{0x0, 0x02, 0x04, PLDM_SUCCESS};
36777e6fe7aSGilbert Chen rc = terminusManager.enqueueResponse(
36877e6fe7aSGilbert Chen reinterpret_cast<pldm_msg*>(SetEventReceiverResp.data()),
36977e6fe7aSGilbert Chen sizeof(SetEventReceiverResp));
37077e6fe7aSGilbert Chen EXPECT_EQ(rc, PLDM_SUCCESS);
37177e6fe7aSGilbert Chen
37277e6fe7aSGilbert Chen // should finish immediately
37377e6fe7aSGilbert Chen stdexec::sync_wait(platformManager.initTerminus());
37477e6fe7aSGilbert Chen EXPECT_EQ(true, terminus->initialized);
37577e6fe7aSGilbert Chen EXPECT_EQ(32, terminus->maxBufferSize);
37677e6fe7aSGilbert Chen EXPECT_EQ(0x06, terminus->synchronyConfigurationSupported.byte);
37777e6fe7aSGilbert Chen EXPECT_EQ(2, terminus->pdrs.size());
37877e6fe7aSGilbert Chen EXPECT_EQ(1, terminus->numericSensors.size());
37977e6fe7aSGilbert Chen }
38077e6fe7aSGilbert Chen
TEST_F(EventManagerTest,updateAvailableState)38177e6fe7aSGilbert Chen TEST_F(EventManagerTest, updateAvailableState)
38277e6fe7aSGilbert Chen {
38377e6fe7aSGilbert Chen pldm_tid_t tid = 1;
38477e6fe7aSGilbert Chen eventManager.updateAvailableState(tid, true);
38577e6fe7aSGilbert Chen EXPECT_EQ(true, eventManager.getAvailableState(tid));
38677e6fe7aSGilbert Chen eventManager.updateAvailableState(tid, false);
38777e6fe7aSGilbert Chen EXPECT_EQ(false, eventManager.getAvailableState(tid));
38877e6fe7aSGilbert Chen eventManager.updateAvailableState(2, false);
38977e6fe7aSGilbert Chen EXPECT_EQ(false, eventManager.getAvailableState(tid));
39077e6fe7aSGilbert Chen }
391