/* * Copyright (C) 2018-2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/test/common/helpers/variable_backup.h" #include "opencl/source/sharings/va/va_device.h" #include "opencl/source/sharings/va/va_sharing_functions.h" #include "opencl/test/unit_test/linux/mock_os_layer.h" #include "test.h" #include using namespace NEO; TEST(VaTests, whenLibvaSo2IsNotInstalledThenFail) { VariableBackup dlopenBackup(&VASharingFunctions::fdlopen); VariableBackup dlcloseBackup(&VASharingFunctions::fdlclose); VariableBackup dlsymBackup(&VASharingFunctions::fdlsym); VASharingFunctions::fdlopen = [&](const char *filename, int flag) -> void * { if (!strncmp(filename, "libva.so.2", 10)) { return (void *)0xdeadbeef; } else return 0; }; VASharingFunctions::fdlclose = [&](void *handle) -> int { return 0; }; VASharingFunctions::fdlsym = [&](void *handle, const char *symbol) -> void * { return nullptr; }; VADisplay vaDisplay = nullptr; VASharingFunctions va(vaDisplay); EXPECT_EQ(true, va.isVaLibraryAvailable()); } TEST(VaTests, givenVADeviceWhenGetDeviceFromVAIsCalledThenProperSyscallsAreUsed) { VariableBackup backupAccessCalledTimes(&accessCalledTimes); VariableBackup backupReadLinkCalledTimes(&readLinkCalledTimes); VariableBackup backupFstatCalledTimes(&fstatCalledTimes); accessCalledTimes = 0; readLinkCalledTimes = 0; fstatCalledTimes = 0; auto vaDisplay = std::make_unique(); vaDisplay->vadpy_magic = 0x56414430; auto contextPtr = std::make_unique(); auto drmState = std::make_unique(); vaDisplay->pDriverContext = contextPtr.get(); contextPtr->drm_state = drmState.get(); *static_cast(contextPtr->drm_state) = 1; VADevice vaDevice{}; auto clDevice = vaDevice.getDeviceFromVA(nullptr, vaDisplay.get()); EXPECT_EQ(clDevice, nullptr); EXPECT_EQ(accessCalledTimes, 1); EXPECT_EQ(readLinkCalledTimes, 1); EXPECT_EQ(fstatCalledTimes, 1); }