test: mock filesystem in setting manager

Related-To: NEO-14084
Signed-off-by: Marcel Skierkowski <marcel.skierkowski@intel.com>
This commit is contained in:
Marcel Skierkowski 2025-04-08 16:53:31 +00:00 committed by Compute-Runtime-Automation
parent 6a313a2f04
commit 4b75d9b218
5 changed files with 87 additions and 65 deletions

View File

@ -87,6 +87,7 @@ set(NEO_CORE_tests_mocks
${CMAKE_CURRENT_SOURCE_DIR}/mock_os_library.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_ostime.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_product_helper.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_settings_reader.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_sip.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_sip.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_submissions_aggregator.h

View File

@ -0,0 +1,59 @@
/*
* Copyright (C) 2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/debug_helpers.h"
#include "shared/source/utilities/debug_file_reader.h"
#include "shared/source/utilities/debug_settings_reader.h"
#include "shared/test/common/helpers/mock_file_io.h"
#include <fstream>
#include <vector>
namespace NEO {
class MockSettingsFileReader : public SettingsFileReader {
public:
MockSettingsFileReader(const char *filePath) : SettingsFileReader("") {
UNRECOVERABLE_IF(!filePath);
UNRECOVERABLE_IF(!virtualFileExists(filePath));
if (virtualFileExists(filePath)) {
size_t fileSize = 0;
std::unique_ptr<char[]> fileData = loadDataFromVirtualFile(filePath, fileSize);
if (fileData && fileSize > 0) {
std::istringstream settingsFile(std::string(fileData.get(), fileSize));
parseStream(settingsFile);
}
}
}
};
class MockSettingsReader : public SettingsReader {
public:
static SettingsReader *createFileReader() {
std::vector<const char *> fileName;
fileName.push_back(settingsFileName);
fileName.push_back(neoSettingsFileName);
for (const auto &file : fileName) {
if (virtualFileExists(file)) {
return new MockSettingsFileReader(file);
}
}
return nullptr;
}
static SettingsReader *create(const std::string &regKey) {
SettingsReader *readerImpl = MockSettingsReader::createFileReader();
if (readerImpl != nullptr)
return readerImpl;
return createOsReader(false, regKey);
}
};
} // namespace NEO

View File

@ -17,6 +17,7 @@
#include "shared/test/common/helpers/variable_backup.h"
#include "shared/test/common/mocks/mock_io_functions.h"
#include "shared/test/common/mocks/mock_product_helper.h"
#include "shared/test/common/mocks/mock_settings_reader.h"
#include "shared/test/common/test_macros/test.h"
#include "shared/test/common/utilities/base_object_utils.h"
@ -370,16 +371,11 @@ TEST(DebugSettingsManager, givenDisabledDebugManagerWhenCreateThenOnlyReleaseVar
}
TEST(DebugSettingsManager, givenEnabledDebugManagerWhenCreateThenAllVariablesAreRead) {
bool settingsFileExists = fileExists(SettingsReader::settingsFileName);
if (!settingsFileExists) {
const char data[] = "LogApiCalls = 1\nMakeAllBuffersResident = 1";
std::ofstream file;
file.open(SettingsReader::settingsFileName);
file << data;
file.close();
}
const char data[] = "LogApiCalls = 1\nMakeAllBuffersResident = 1";
writeDataToFile(SettingsReader::settingsFileName, &data, sizeof(data));
SettingsReader *reader = MockSettingsReader::createFileReader();
SettingsReader *reader = SettingsReader::createFileReader();
EXPECT_NE(nullptr, reader);
FullyEnabledTestDebugManager debugManager;
@ -389,9 +385,7 @@ TEST(DebugSettingsManager, givenEnabledDebugManagerWhenCreateThenAllVariablesAre
EXPECT_EQ(1, debugManager.flags.MakeAllBuffersResident.get());
EXPECT_EQ(1, debugManager.flags.LogApiCalls.get());
if (!settingsFileExists) {
std::remove(SettingsReader::settingsFileName);
}
removeVirtualFile(SettingsReader::settingsFileName);
}
TEST(DebugSettingsManager, GivenLogsEnabledAndDumpToFileWhenPrintDebuggerLogCalledThenStringPrintedToFile) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2024 Intel Corporation
* Copyright (C) 2020-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@ -10,6 +10,7 @@
#include "shared/test/common/debug_settings/debug_settings_manager_fixture.h"
#include "shared/test/common/helpers/variable_backup.h"
#include "shared/test/common/mocks/mock_io_functions.h"
#include "shared/test/common/mocks/mock_settings_reader.h"
#include "shared/test/common/test_macros/test.h"
#include <fstream>
@ -18,15 +19,11 @@
namespace NEO {
TEST(DebugSettingsManager, givenDisabledDebugManagerAndMockEnvVariableWhenCreateThenAllVariablesAreRead) {
bool settingsFileExists = fileExists(SettingsReader::settingsFileName);
if (!settingsFileExists) {
const char data[] = "LogApiCalls = 1\nMakeAllBuffersResident = 1";
std::ofstream file;
file.open(SettingsReader::settingsFileName);
file << data;
file.close();
}
SettingsReader *reader = SettingsReader::createFileReader();
const char data[] = "LogApiCalls = 1\nMakeAllBuffersResident = 1";
writeDataToFile(SettingsReader::settingsFileName, &data, sizeof(data));
SettingsReader *reader = MockSettingsReader::createFileReader();
EXPECT_NE(nullptr, reader);
VariableBackup<uint32_t> mockGetenvCalledBackup(&IoFunctions::mockGetenvCalled, 0);
@ -40,9 +37,7 @@ TEST(DebugSettingsManager, givenDisabledDebugManagerAndMockEnvVariableWhenCreate
EXPECT_EQ(1, debugManager.flags.MakeAllBuffersResident.get());
EXPECT_EQ(1, debugManager.flags.LogApiCalls.get());
if (!settingsFileExists) {
remove(SettingsReader::settingsFileName);
}
removeVirtualFile(SettingsReader::settingsFileName);
}
TEST(DebugSettingsManager, givenPrintDebugSettingsAndDebugKeysReadEnabledOnDisabledDebugManagerWhenCallingDumpFlagsThenFlagsAreWrittenToDumpFile) {

View File

@ -1,15 +1,12 @@
/*
* Copyright (C) 2018-2024 Intel Corporation
* Copyright (C) 2018-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/helpers/api_specific_config.h"
#include "shared/source/helpers/file_io.h"
#include "shared/source/utilities/debug_file_reader.h"
#include "shared/source/utilities/debug_settings_reader.h"
#include "shared/test/common/mocks/mock_settings_reader.h"
#include "shared/test/common/test_macros/test.h"
#include "gtest/gtest.h"
@ -19,39 +16,15 @@
using namespace NEO;
class MockSettingsReader : public SettingsReader {
public:
std::string getSetting(const char *settingName, const std::string &value, DebugVarPrefix &type) override {
return value;
}
std::string getSetting(const char *settingName, const std::string &value) override {
return value;
}
bool getSetting(const char *settingName, bool defaultValue, DebugVarPrefix &type) override { return defaultValue; };
bool getSetting(const char *settingName, bool defaultValue) override { return defaultValue; };
int64_t getSetting(const char *settingName, int64_t defaultValue, DebugVarPrefix &type) override { return defaultValue; };
int64_t getSetting(const char *settingName, int64_t defaultValue) override { return defaultValue; };
int32_t getSetting(const char *settingName, int32_t defaultValue, DebugVarPrefix &type) override { return defaultValue; };
int32_t getSetting(const char *settingName, int32_t defaultValue) override { return defaultValue; };
const char *appSpecificLocation(const std::string &name) override { return name.c_str(); };
};
namespace SettingsReaderTests {
void writeDataToFile(const char *filename, const void *pData, size_t dataSize) {
std::ofstream file;
file.open(filename);
file.write(static_cast<const char *>(pData), dataSize);
file.close();
}
TEST(SettingsReader, WhenCreatingSettingsReaderThenReaderIsCreated) {
auto reader = std::unique_ptr<SettingsReader>(SettingsReader::create(ApiSpecificConfig::getRegistryPath()));
EXPECT_NE(nullptr, reader.get());
}
TEST(SettingsReader, GivenNoSettingsFileWhenCreatingSettingsReaderThenOsReaderIsCreated) {
ASSERT_FALSE(fileExists(SettingsReader::settingsFileName));
ASSERT_FALSE(virtualFileExists(SettingsReader::settingsFileName));
auto fileReader = std::unique_ptr<SettingsReader>(SettingsReader::createFileReader());
EXPECT_EQ(nullptr, fileReader.get());
@ -61,40 +34,40 @@ TEST(SettingsReader, GivenNoSettingsFileWhenCreatingSettingsReaderThenOsReaderIs
}
TEST(SettingsReader, GivenSettingsFileExistsWhenCreatingSettingsReaderThenReaderIsCreated) {
ASSERT_FALSE(fileExists(SettingsReader::settingsFileName));
ASSERT_FALSE(virtualFileExists(SettingsReader::settingsFileName));
const char data[] = "ProductFamilyOverride = test";
writeDataToFile(SettingsReader::settingsFileName, &data, sizeof(data));
auto reader = std::unique_ptr<SettingsReader>(SettingsReader::create(ApiSpecificConfig::getRegistryPath()));
auto reader = std::unique_ptr<SettingsReader>(MockSettingsReader::create(ApiSpecificConfig::getRegistryPath()));
EXPECT_NE(nullptr, reader.get());
std::string defaultValue("unk");
EXPECT_STREQ("test", reader->getSetting("ProductFamilyOverride", defaultValue).c_str());
std::remove(SettingsReader::settingsFileName);
removeVirtualFile(SettingsReader::settingsFileName);
}
TEST(SettingsReader, WhenCreatingFileReaderThenReaderIsCreated) {
ASSERT_FALSE(fileExists(SettingsReader::settingsFileName));
ASSERT_FALSE(virtualFileExists(SettingsReader::settingsFileName));
char data = 0;
writeDataToFile(SettingsReader::settingsFileName, &data, 0);
auto reader = std::unique_ptr<SettingsReader>(SettingsReader::createFileReader());
auto reader = std::unique_ptr<SettingsReader>(MockSettingsReader::createFileReader());
EXPECT_NE(nullptr, reader.get());
std::remove(SettingsReader::settingsFileName);
removeVirtualFile(SettingsReader::settingsFileName);
}
TEST(SettingsReader, WhenCreatingFileReaderUseNeoFileIfNoDefault) {
ASSERT_FALSE(fileExists(SettingsReader::settingsFileName));
ASSERT_FALSE(fileExists(SettingsReader::neoSettingsFileName));
ASSERT_FALSE(virtualFileExists(SettingsReader::settingsFileName));
ASSERT_FALSE(virtualFileExists(SettingsReader::neoSettingsFileName));
char data = 0;
writeDataToFile(SettingsReader::neoSettingsFileName, &data, 0);
auto reader = std::unique_ptr<SettingsReader>(SettingsReader::createFileReader());
auto reader = std::unique_ptr<SettingsReader>(MockSettingsReader::createFileReader());
EXPECT_NE(nullptr, reader.get());
std::remove(SettingsReader::neoSettingsFileName);
removeVirtualFile(SettingsReader::neoSettingsFileName);
}
TEST(SettingsReader, WhenCreatingOsReaderThenReaderIsCreated) {