mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-06 10:26:29 +08:00
feature(sysman): Support for reset event upon repair
Related-To: LOCI-3720 Signed-off-by: Bellekallu Rajkiran <bellekallu.rajkiran@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
31d68c42e6
commit
1c63753ebe
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2022 Intel Corporation
|
* Copyright (C) 2022-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
@@ -75,8 +75,6 @@ bool LinuxEventsImp::isResetRequired(void *dev, zes_event_type_flags_t &pEvent)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ZES_EVENT_TYPE_FLAG_DEVICE_RESET_REQUIRED event could also be received when, reset Reason is
|
|
||||||
// ZES_RESET_REASON_FLAG_REPAIR.
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,6 +284,16 @@ bool LinuxEventsImp::eventListen(zes_event_type_flags_t &pEvent, uint64_t timeou
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if any reset required for reason field repair
|
||||||
|
if (registeredEvents & ZES_EVENT_TYPE_FLAG_DEVICE_RESET_REQUIRED) {
|
||||||
|
zes_device_state_t deviceState = {};
|
||||||
|
pLinuxSysmanImp->getSysmanDeviceImp()->pGlobalOperations->deviceGetState(&deviceState);
|
||||||
|
if (deviceState.reset & ZES_RESET_REASON_FLAG_REPAIR) {
|
||||||
|
pEvent |= ZES_EVENT_TYPE_FLAG_DEVICE_RESET_REQUIRED;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return listenSystemEvents(pEvent, timeout);
|
return listenSystemEvents(pEvent, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "level_zero/tools/source/sysman/events/events_imp.h"
|
#include "level_zero/tools/source/sysman/events/events_imp.h"
|
||||||
#include "level_zero/tools/source/sysman/events/linux/os_events_imp_prelim.h"
|
#include "level_zero/tools/source/sysman/events/linux/os_events_imp_prelim.h"
|
||||||
|
#include "level_zero/tools/source/sysman/firmware_util/firmware_util.h"
|
||||||
|
|
||||||
namespace L0 {
|
namespace L0 {
|
||||||
namespace ult {
|
namespace ult {
|
||||||
@@ -211,6 +212,27 @@ class UdevLibMock : public UdevLib {
|
|||||||
ADDMETHOD_NOBASE_VOIDRETURN(dropDeviceReference, (void *dev));
|
ADDMETHOD_NOBASE_VOIDRETURN(dropDeviceReference, (void *dev));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct MockEventsFwInterface : public FirmwareUtil {
|
||||||
|
bool mockIfrStatus = false;
|
||||||
|
ze_result_t fwIfrApplied(bool &ifrStatus) override {
|
||||||
|
ifrStatus = mockIfrStatus;
|
||||||
|
return ZE_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
MockEventsFwInterface() = default;
|
||||||
|
|
||||||
|
ADDMETHOD_NOBASE(fwDeviceInit, ze_result_t, ZE_RESULT_SUCCESS, (void));
|
||||||
|
ADDMETHOD_NOBASE(getFirstDevice, ze_result_t, ZE_RESULT_SUCCESS, (igsc_device_info * info));
|
||||||
|
ADDMETHOD_NOBASE(getFwVersion, ze_result_t, ZE_RESULT_SUCCESS, (std::string fwType, std::string &firmwareVersion));
|
||||||
|
ADDMETHOD_NOBASE(flashFirmware, ze_result_t, ZE_RESULT_SUCCESS, (std::string fwType, void *pImage, uint32_t size));
|
||||||
|
ADDMETHOD_NOBASE(fwSupportedDiagTests, ze_result_t, ZE_RESULT_SUCCESS, (std::vector<std::string> & supportedDiagTests));
|
||||||
|
ADDMETHOD_NOBASE(fwRunDiagTests, ze_result_t, ZE_RESULT_SUCCESS, (std::string & osDiagType, zes_diag_result_t *pResult));
|
||||||
|
ADDMETHOD_NOBASE(fwGetMemoryErrorCount, ze_result_t, ZE_RESULT_SUCCESS, (zes_ras_error_type_t category, uint32_t subDeviceCount, uint32_t subDeviceId, uint64_t &count));
|
||||||
|
ADDMETHOD_NOBASE(fwGetEccConfig, ze_result_t, ZE_RESULT_SUCCESS, (uint8_t * currentState, uint8_t *pendingState));
|
||||||
|
ADDMETHOD_NOBASE(fwSetEccConfig, ze_result_t, ZE_RESULT_SUCCESS, (uint8_t newState, uint8_t *currentState, uint8_t *pendingState));
|
||||||
|
ADDMETHOD_NOBASE_VOIDRETURN(getDeviceSupportedFwTypes, (std::vector<std::string> & fwTypes));
|
||||||
|
ADDMETHOD_NOBASE_VOIDRETURN(fwGetMemoryHealthIndicator, (zes_mem_health_t * health));
|
||||||
|
};
|
||||||
|
|
||||||
class PublicLinuxEventsImp : public L0::LinuxEventsImp {
|
class PublicLinuxEventsImp : public L0::LinuxEventsImp {
|
||||||
public:
|
public:
|
||||||
PublicLinuxEventsImp(OsSysman *pOsSysman) : LinuxEventsImp(pOsSysman) {}
|
PublicLinuxEventsImp(OsSysman *pOsSysman) : LinuxEventsImp(pOsSysman) {}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
#include "shared/test/common/os_interface/linux/sys_calls_linux_ult.h"
|
#include "shared/test/common/os_interface/linux/sys_calls_linux_ult.h"
|
||||||
|
|
||||||
#include "level_zero/tools/source/sysman/global_operations/global_operations_imp.h"
|
|
||||||
#include "level_zero/tools/test/unit_tests/sources/sysman/events/linux/mock_events_prelim.h"
|
#include "level_zero/tools/test/unit_tests/sources/sysman/events/linux/mock_events_prelim.h"
|
||||||
#include "level_zero/tools/test/unit_tests/sources/sysman/linux/mock_sysman_fixture.h"
|
#include "level_zero/tools/test/unit_tests/sources/sysman/linux/mock_sysman_fixture.h"
|
||||||
|
|
||||||
@@ -28,8 +27,6 @@ class SysmanEventsFixture : public SysmanDeviceFixture {
|
|||||||
FsAccess *pFsAccessOriginal = nullptr;
|
FsAccess *pFsAccessOriginal = nullptr;
|
||||||
OsEvents *pOsEventsPrev = nullptr;
|
OsEvents *pOsEventsPrev = nullptr;
|
||||||
L0::EventsImp *pEventsImp;
|
L0::EventsImp *pEventsImp;
|
||||||
GlobalOperations *pGlobalOperationsOriginal = nullptr;
|
|
||||||
std::unique_ptr<GlobalOperationsImp> pGlobalOperations;
|
|
||||||
std::unique_ptr<MockEventsSysfsAccess> pSysfsAccess;
|
std::unique_ptr<MockEventsSysfsAccess> pSysfsAccess;
|
||||||
SysfsAccess *pSysfsAccessOriginal = nullptr;
|
SysfsAccess *pSysfsAccessOriginal = nullptr;
|
||||||
std::unique_ptr<MockPmuInterfaceImpForEvents> pPmuInterface;
|
std::unique_ptr<MockPmuInterfaceImpForEvents> pPmuInterface;
|
||||||
@@ -56,12 +53,6 @@ class SysmanEventsFixture : public SysmanDeviceFixture {
|
|||||||
pLinuxSysmanImp->pUdevLib = new UdevLibMock();
|
pLinuxSysmanImp->pUdevLib = new UdevLibMock();
|
||||||
pLinuxEventsImp = new PublicLinuxEventsImp(pOsSysman);
|
pLinuxEventsImp = new PublicLinuxEventsImp(pOsSysman);
|
||||||
pEventsImp->pOsEvents = pLinuxEventsImp;
|
pEventsImp->pOsEvents = pLinuxEventsImp;
|
||||||
|
|
||||||
pGlobalOperations = std::make_unique<GlobalOperationsImp>(pLinuxSysmanImp);
|
|
||||||
pGlobalOperationsOriginal = pSysmanDeviceImp->pGlobalOperations;
|
|
||||||
pSysmanDeviceImp->pGlobalOperations = pGlobalOperations.get();
|
|
||||||
pSysmanDeviceImp->pGlobalOperations->init();
|
|
||||||
|
|
||||||
pPmuInterface = std::make_unique<MockPmuInterfaceImpForEvents>(pLinuxSysmanImp);
|
pPmuInterface = std::make_unique<MockPmuInterfaceImpForEvents>(pLinuxSysmanImp);
|
||||||
pOriginalPmuInterface = pLinuxSysmanImp->pPmuInterface;
|
pOriginalPmuInterface = pLinuxSysmanImp->pPmuInterface;
|
||||||
pLinuxSysmanImp->pPmuInterface = pPmuInterface.get();
|
pLinuxSysmanImp->pPmuInterface = pPmuInterface.get();
|
||||||
@@ -94,7 +85,6 @@ class SysmanEventsFixture : public SysmanDeviceFixture {
|
|||||||
pEventsImp = nullptr;
|
pEventsImp = nullptr;
|
||||||
pLinuxSysmanImp->pSysfsAccess = pSysfsAccessOriginal;
|
pLinuxSysmanImp->pSysfsAccess = pSysfsAccessOriginal;
|
||||||
pLinuxSysmanImp->pFsAccess = pFsAccessOriginal;
|
pLinuxSysmanImp->pFsAccess = pFsAccessOriginal;
|
||||||
pSysmanDeviceImp->pGlobalOperations = pGlobalOperationsOriginal;
|
|
||||||
pLinuxSysmanImp->pPmuInterface = pOriginalPmuInterface;
|
pLinuxSysmanImp->pPmuInterface = pOriginalPmuInterface;
|
||||||
SysmanDeviceFixture::TearDown();
|
SysmanDeviceFixture::TearDown();
|
||||||
}
|
}
|
||||||
@@ -130,6 +120,10 @@ TEST_F(SysmanEventsFixture, GivenLibUdevLibraryNotFoundWhenListeningForEventsThe
|
|||||||
|
|
||||||
TEST_F(SysmanEventsFixture,
|
TEST_F(SysmanEventsFixture,
|
||||||
GivenValidDeviceHandleAndListeningForEventsWhenEventGenerationSourceDeviceIsNotDrmAndPlatformThenEventListenReturnFalse) {
|
GivenValidDeviceHandleAndListeningForEventsWhenEventGenerationSourceDeviceIsNotDrmAndPlatformThenEventListenReturnFalse) {
|
||||||
|
VariableBackup<FirmwareUtil *> backupFwUtil(&pLinuxSysmanImp->pFwUtilInterface);
|
||||||
|
auto pMockFwInterface = new MockEventsFwInterface;
|
||||||
|
pLinuxSysmanImp->pFwUtilInterface = pMockFwInterface;
|
||||||
|
|
||||||
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
||||||
return 1;
|
return 1;
|
||||||
});
|
});
|
||||||
@@ -180,6 +174,7 @@ TEST_F(SysmanEventsFixture,
|
|||||||
pEventsImp->pOsEvents = pOsEventOriginal;
|
pEventsImp->pOsEvents = pOsEventOriginal;
|
||||||
delete pUdevLibLocal;
|
delete pUdevLibLocal;
|
||||||
delete pPublicLinuxEventsImp;
|
delete pPublicLinuxEventsImp;
|
||||||
|
delete pMockFwInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanEventsFixture,
|
TEST_F(SysmanEventsFixture,
|
||||||
@@ -287,6 +282,10 @@ TEST_F(SysmanEventsFixture, GivenValidDeviceHandleAndListeningEventsWhenNullEven
|
|||||||
|
|
||||||
TEST_F(SysmanEventsFixture,
|
TEST_F(SysmanEventsFixture,
|
||||||
GivenValidDeviceHandleAndListeningForEventsWhenUdevCallToAllocateDeviceFailsThenEventListenReturnFalse) {
|
GivenValidDeviceHandleAndListeningForEventsWhenUdevCallToAllocateDeviceFailsThenEventListenReturnFalse) {
|
||||||
|
VariableBackup<FirmwareUtil *> backupFwUtil(&pLinuxSysmanImp->pFwUtilInterface);
|
||||||
|
auto pMockFwInterface = new MockEventsFwInterface;
|
||||||
|
pLinuxSysmanImp->pFwUtilInterface = pMockFwInterface;
|
||||||
|
|
||||||
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
||||||
return 1;
|
return 1;
|
||||||
});
|
});
|
||||||
@@ -335,9 +334,14 @@ TEST_F(SysmanEventsFixture,
|
|||||||
pEventsImp->pOsEvents = pOsEventOriginal;
|
pEventsImp->pOsEvents = pOsEventOriginal;
|
||||||
delete pUdevLibLocal;
|
delete pUdevLibLocal;
|
||||||
delete pPublicLinuxEventsImp;
|
delete pPublicLinuxEventsImp;
|
||||||
|
delete pMockFwInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanEventsFixture, GivenValidDeviceHandleWhenListeningForResetRequiredEventsThenEventListenAPIReturnsAfterReceivingEventWithinTimeout) {
|
TEST_F(SysmanEventsFixture, GivenValidDeviceHandleWhenListeningForResetRequiredEventsThenEventListenAPIReturnsAfterReceivingEventWithinTimeout) {
|
||||||
|
VariableBackup<FirmwareUtil *> backupFwUtil(&pLinuxSysmanImp->pFwUtilInterface);
|
||||||
|
auto pMockFwInterface = new MockEventsFwInterface;
|
||||||
|
pLinuxSysmanImp->pFwUtilInterface = pMockFwInterface;
|
||||||
|
|
||||||
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
||||||
return 1;
|
return 1;
|
||||||
});
|
});
|
||||||
@@ -389,6 +393,7 @@ TEST_F(SysmanEventsFixture, GivenValidDeviceHandleWhenListeningForResetRequiredE
|
|||||||
pEventsImp->pOsEvents = pOsEventOriginal;
|
pEventsImp->pOsEvents = pOsEventOriginal;
|
||||||
delete pUdevLibLocal;
|
delete pUdevLibLocal;
|
||||||
delete pPublicLinuxEventsImp;
|
delete pPublicLinuxEventsImp;
|
||||||
|
delete pMockFwInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanDeviceFixture, GivenValidDeviceHandleWhenEventRegisterIsCalledThenSuccessIsReturned) {
|
TEST_F(SysmanDeviceFixture, GivenValidDeviceHandleWhenEventRegisterIsCalledThenSuccessIsReturned) {
|
||||||
@@ -397,6 +402,10 @@ TEST_F(SysmanDeviceFixture, GivenValidDeviceHandleWhenEventRegisterIsCalledThenS
|
|||||||
|
|
||||||
TEST_F(SysmanEventsFixture,
|
TEST_F(SysmanEventsFixture,
|
||||||
GivenValidDeviceHandleWhenListeningForResetRequiredEventsAndIfUeventReceivedWithWrongPropertyValueThenEventListenAPIReturnsWithinTimeout) {
|
GivenValidDeviceHandleWhenListeningForResetRequiredEventsAndIfUeventReceivedWithWrongPropertyValueThenEventListenAPIReturnsWithinTimeout) {
|
||||||
|
VariableBackup<FirmwareUtil *> backupFwUtil(&pLinuxSysmanImp->pFwUtilInterface);
|
||||||
|
auto pMockFwInterface = new MockEventsFwInterface;
|
||||||
|
pLinuxSysmanImp->pFwUtilInterface = pMockFwInterface;
|
||||||
|
|
||||||
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
||||||
return 1;
|
return 1;
|
||||||
});
|
});
|
||||||
@@ -447,10 +456,15 @@ TEST_F(SysmanEventsFixture,
|
|||||||
pEventsImp->pOsEvents = pOsEventOriginal;
|
pEventsImp->pOsEvents = pOsEventOriginal;
|
||||||
delete pUdevLibLocal;
|
delete pUdevLibLocal;
|
||||||
delete pPublicLinuxEventsImp;
|
delete pPublicLinuxEventsImp;
|
||||||
|
delete pMockFwInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanEventsFixture,
|
TEST_F(SysmanEventsFixture,
|
||||||
GivenValidDeviceHandleWhenListeningForResetRequiredEventsAndIfDrmEventReceivedButChangeEventNotReceivedThenEventListenAPIReturnsWithinTimeout) {
|
GivenValidDeviceHandleWhenListeningForResetRequiredEventsAndIfDrmEventReceivedButChangeEventNotReceivedThenEventListenAPIReturnsWithinTimeout) {
|
||||||
|
VariableBackup<FirmwareUtil *> backupFwUtil(&pLinuxSysmanImp->pFwUtilInterface);
|
||||||
|
auto pMockFwInterface = new MockEventsFwInterface;
|
||||||
|
pLinuxSysmanImp->pFwUtilInterface = pMockFwInterface;
|
||||||
|
|
||||||
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
||||||
return 1;
|
return 1;
|
||||||
});
|
});
|
||||||
@@ -502,10 +516,15 @@ TEST_F(SysmanEventsFixture,
|
|||||||
pEventsImp->pOsEvents = pOsEventOriginal;
|
pEventsImp->pOsEvents = pOsEventOriginal;
|
||||||
delete pUdevLibLocal;
|
delete pUdevLibLocal;
|
||||||
delete pPublicLinuxEventsImp;
|
delete pPublicLinuxEventsImp;
|
||||||
|
delete pMockFwInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanEventsFixture,
|
TEST_F(SysmanEventsFixture,
|
||||||
GivenValidDeviceHandleWhenListeningForResetRequiredEventsAndIfUeventReceivedWithNullPropertyValueThenEventListenAPIReturnsWithinTimeout) {
|
GivenValidDeviceHandleWhenListeningForResetRequiredEventsAndIfUeventReceivedWithNullPropertyValueThenEventListenAPIReturnsWithinTimeout) {
|
||||||
|
VariableBackup<FirmwareUtil *> backupFwUtil(&pLinuxSysmanImp->pFwUtilInterface);
|
||||||
|
auto pMockFwInterface = new MockEventsFwInterface;
|
||||||
|
pLinuxSysmanImp->pFwUtilInterface = pMockFwInterface;
|
||||||
|
|
||||||
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
||||||
return 1;
|
return 1;
|
||||||
});
|
});
|
||||||
@@ -556,6 +575,68 @@ TEST_F(SysmanEventsFixture,
|
|||||||
pEventsImp->pOsEvents = pOsEventOriginal;
|
pEventsImp->pOsEvents = pOsEventOriginal;
|
||||||
delete pUdevLibLocal;
|
delete pUdevLibLocal;
|
||||||
delete pPublicLinuxEventsImp;
|
delete pPublicLinuxEventsImp;
|
||||||
|
delete pMockFwInterface;
|
||||||
|
}
|
||||||
|
|
||||||
|
HWTEST2_F(SysmanEventsFixture,
|
||||||
|
GivenValidDeviceHandleWhenListeningForResetRequiredEventsAfterInFieldRepairAndIfUeventReceivedWithNullPropertyValueThenEventListenAPIReturnsResetEvent, IsPVC) {
|
||||||
|
VariableBackup<FirmwareUtil *> backupFwUtil(&pLinuxSysmanImp->pFwUtilInterface);
|
||||||
|
auto pMockFwInterface = new MockEventsFwInterface;
|
||||||
|
pLinuxSysmanImp->pFwUtilInterface = pMockFwInterface;
|
||||||
|
|
||||||
|
VariableBackup<decltype(SysCalls::sysCallsPoll)> mockPoll(&SysCalls::sysCallsPoll, [](struct pollfd *pollFd, unsigned long int numberOfFds, int timeout) -> int {
|
||||||
|
return 1;
|
||||||
|
});
|
||||||
|
VariableBackup<decltype(SysCalls::sysCallsOpen)> mockOpen(&SysCalls::sysCallsOpen, [](const char *pathname, int flags) -> int {
|
||||||
|
if (strcmp(pathname, "i915.iaf.31/iaf_fabric_id") == 0) {
|
||||||
|
return fabricDeviceFd;
|
||||||
|
} else {
|
||||||
|
return drmDeviceFd;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
VariableBackup<decltype(NEO::SysCalls::sysCallsFstat)> mockFstat(&NEO::SysCalls::sysCallsFstat, [](int fd, struct stat *buf) -> int {
|
||||||
|
if (fd == fabricDeviceFd) {
|
||||||
|
buf->st_rdev = 10;
|
||||||
|
} else {
|
||||||
|
buf->st_rdev = 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Step 1: Initialize a mocked udev lib object for this test case
|
||||||
|
auto pUdevLibLocal = new UdevLibMock();
|
||||||
|
int a = 0;
|
||||||
|
void *ptr = &a; // Initialize a void pointer with dummy data
|
||||||
|
pUdevLibLocal->allocateDeviceToReceiveDataResult = ptr;
|
||||||
|
pUdevLibLocal->getEventGenerationSourceDeviceResult = 0;
|
||||||
|
pUdevLibLocal->getEventPropertyValueResult = nullptr;
|
||||||
|
|
||||||
|
// Step 2: Create a new PublicLinuxEventsImp, where we will attach the above created Udev Lib object
|
||||||
|
auto pPublicLinuxEventsImp = new PublicLinuxEventsImp(pOsSysman);
|
||||||
|
pPublicLinuxEventsImp->pUdevLib = pUdevLibLocal;
|
||||||
|
|
||||||
|
// Step 3: Backup original pOsEvent created during set up
|
||||||
|
auto pOsEventOriginal = pEventsImp->pOsEvents;
|
||||||
|
pEventsImp->pOsEvents = static_cast<OsEvents *>(pPublicLinuxEventsImp);
|
||||||
|
|
||||||
|
// Step 4: Call APIs for validation
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEventRegister(device->toHandle(), ZES_EVENT_TYPE_FLAG_DEVICE_RESET_REQUIRED));
|
||||||
|
zes_device_handle_t *phDevices = new zes_device_handle_t[1];
|
||||||
|
phDevices[0] = device->toHandle();
|
||||||
|
uint32_t numDeviceEvents = 0;
|
||||||
|
pMockFwInterface->mockIfrStatus = true;
|
||||||
|
zes_event_type_flags_t *pDeviceEvents = new zes_event_type_flags_t[1];
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDriverEventListen(driverHandle->toHandle(), 1u, 1u, phDevices, &numDeviceEvents, pDeviceEvents));
|
||||||
|
EXPECT_EQ(1u, numDeviceEvents);
|
||||||
|
EXPECT_EQ(ZES_EVENT_TYPE_FLAG_DEVICE_RESET_REQUIRED, pDeviceEvents[0]);
|
||||||
|
|
||||||
|
// Step 5: Cleanup
|
||||||
|
delete[] phDevices;
|
||||||
|
delete[] pDeviceEvents;
|
||||||
|
pEventsImp->pOsEvents = pOsEventOriginal;
|
||||||
|
delete pUdevLibLocal;
|
||||||
|
delete pPublicLinuxEventsImp;
|
||||||
|
delete pMockFwInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanEventsFixture, GivenValidDeviceHandleWhenListeningForCurrentlyUnsupportedEventsThenEventListenAPIWaitForTimeoutIfEventNotReceived) {
|
TEST_F(SysmanEventsFixture, GivenValidDeviceHandleWhenListeningForCurrentlyUnsupportedEventsThenEventListenAPIWaitForTimeoutIfEventNotReceived) {
|
||||||
|
|||||||
Reference in New Issue
Block a user