205 lines
8.5 KiB
C++
205 lines
8.5 KiB
C++
/*
|
|
* Copyright (C) 2018-2021 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
#include "shared/source/memory_manager/graphics_allocation.h"
|
|
#include "shared/source/utilities/debug_file_reader.h"
|
|
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
|
#include "shared/test/unit_test/utilities/base_object_utils.h"
|
|
|
|
#include "test.h"
|
|
|
|
#include "debug_settings_manager_fixture.h"
|
|
|
|
#include <cstdio>
|
|
#include <memory>
|
|
#include <sstream>
|
|
#include <string>
|
|
|
|
TEST(DebugSettingsManager, WhenDebugManagerIsCreatedThenInjectFcnIsNull) {
|
|
FullyEnabledTestDebugManager debugManager;
|
|
|
|
EXPECT_FALSE(debugManager.disabled());
|
|
|
|
EXPECT_EQ(nullptr, debugManager.injectFcn);
|
|
}
|
|
|
|
TEST(DebugSettingsManager, WhenDebugManagerIsCreatedThenSettingsReaderIsAvailable) {
|
|
FullyEnabledTestDebugManager debugManager;
|
|
// SettingsReader created
|
|
EXPECT_NE(nullptr, debugManager.getSettingsReader());
|
|
}
|
|
|
|
TEST(DebugSettingsManager, WhenDebugManagerIsDisabledThenDebugFunctionalityIsNotAvailable) {
|
|
FullyDisabledTestDebugManager debugManager;
|
|
|
|
// Should not be enabled without debug functionality
|
|
EXPECT_TRUE(debugManager.disabled());
|
|
|
|
// debug variables / flags set to default
|
|
#define DECLARE_DEBUG_VARIABLE(dataType, variableName, defaultValue, description) \
|
|
{ \
|
|
bool isEqual = TestDebugFlagsChecker::isEqual(debugManager.flags.variableName.get(), static_cast<dataType>(defaultValue)); \
|
|
EXPECT_TRUE(isEqual); \
|
|
}
|
|
#include "shared/source/debug_settings/release_variables.inl"
|
|
|
|
#include "debug_variables.inl"
|
|
#undef DECLARE_DEBUG_VARIABLE
|
|
}
|
|
|
|
TEST(DebugSettingsManager, whenDebugManagerIsDisabledThenDebugFunctionalityIsNotAvailableAtCompileTime) {
|
|
TestDebugSettingsManager<DebugFunctionalityLevel::None> debugManager;
|
|
|
|
static_assert(debugManager.disabled(), "");
|
|
static_assert(false == debugManager.registryReadAvailable(), "");
|
|
}
|
|
|
|
TEST(DebugSettingsManager, whenDebugManagerIsFullyEnabledThenAllDebugFunctionalityIsAvailableAtCompileTime) {
|
|
TestDebugSettingsManager<DebugFunctionalityLevel::Full> debugManager;
|
|
|
|
static_assert(false == debugManager.disabled(), "");
|
|
static_assert(debugManager.registryReadAvailable(), "");
|
|
}
|
|
|
|
TEST(DebugSettingsManager, whenOnlyRegKeysAreEnabledThenAllOtherDebugFunctionalityIsNotAvailableAtCompileTime) {
|
|
TestDebugSettingsManager<DebugFunctionalityLevel::RegKeys> debugManager;
|
|
|
|
static_assert(false == debugManager.disabled(), "");
|
|
static_assert(debugManager.registryReadAvailable(), "");
|
|
}
|
|
|
|
TEST(DebugSettingsManager, givenTwoPossibleVariantsOfHardwareInfoOverrideStringThenOutputStringIsTheSame) {
|
|
FullyEnabledTestDebugManager debugManager;
|
|
std::string hwInfoConfig;
|
|
|
|
// Set HardwareInfoOverride as regular string (i.e. as in Windows Registry)
|
|
std::string str1 = "1x4x8";
|
|
debugManager.flags.HardwareInfoOverride.set(str1);
|
|
debugManager.getHardwareInfoOverride(hwInfoConfig);
|
|
EXPECT_EQ(str1, hwInfoConfig);
|
|
|
|
// Set HardwareInfoOverride as quoted string (i.e. as in igdrcl.config file)
|
|
std::string str2 = "\"1x4x8\"";
|
|
debugManager.flags.HardwareInfoOverride.set(str2);
|
|
hwInfoConfig = debugManager.flags.HardwareInfoOverride.get();
|
|
EXPECT_EQ(str2, hwInfoConfig);
|
|
debugManager.getHardwareInfoOverride(hwInfoConfig);
|
|
EXPECT_EQ(str1, hwInfoConfig);
|
|
}
|
|
|
|
TEST(DebugSettingsManager, givenStringDebugVariableWhenLongValueExeedingSmallStringOptimizationIsAssignedThenMemoryLeakIsNotReported) {
|
|
DebugManagerStateRestore debugManagerStateRestore;
|
|
DebugManager.flags.AUBDumpCaptureFileName.set("ThisIsVeryLongStringValueThatExceedSizeSpecifiedBySmallStringOptimizationAndCausesInternalStringBufferResize");
|
|
}
|
|
|
|
TEST(DebugSettingsManager, givenNullAsReaderImplInDebugManagerWhenSettingReaderImplThenItsSetProperly) {
|
|
FullyDisabledTestDebugManager debugManager;
|
|
auto readerImpl = SettingsReader::create("");
|
|
debugManager.setReaderImpl(readerImpl);
|
|
EXPECT_EQ(readerImpl, debugManager.getReaderImpl());
|
|
}
|
|
TEST(DebugSettingsManager, givenReaderImplInDebugManagerWhenSettingDifferentReaderImplThenItsSetProperly) {
|
|
FullyDisabledTestDebugManager debugManager;
|
|
auto readerImpl = SettingsReader::create("");
|
|
debugManager.setReaderImpl(readerImpl);
|
|
|
|
auto readerImpl2 = SettingsReader::create("");
|
|
debugManager.setReaderImpl(readerImpl2);
|
|
EXPECT_EQ(readerImpl2, debugManager.getReaderImpl());
|
|
}
|
|
|
|
TEST(DebugSettingsManager, givenPrintDebugSettingsEnabledWhenCallingDumpFlagsThenFlagsAreWrittenToDumpFile) {
|
|
testing::internal::CaptureStdout();
|
|
FullyEnabledTestDebugManager debugManager;
|
|
debugManager.flags.PrintDebugSettings.set(true);
|
|
debugManager.flags.LoopAtDriverInit.set(true);
|
|
debugManager.flags.Enable64kbpages.set(1);
|
|
debugManager.flags.TbxServer.set("192.168.0.1");
|
|
|
|
// Clear dump files and generate new
|
|
std::remove(FullyEnabledTestDebugManager::settingsDumpFileName);
|
|
debugManager.dumpFlags();
|
|
|
|
// Validate allSettingsDumpFile
|
|
SettingsFileReader allSettingsReader{FullyEnabledTestDebugManager::settingsDumpFileName};
|
|
#define DECLARE_DEBUG_VARIABLE(dataType, varName, defaultValue, description) \
|
|
EXPECT_EQ(debugManager.flags.varName.get(), allSettingsReader.getSetting(#varName, defaultValue));
|
|
|
|
#include "debug_variables.inl"
|
|
#undef DECLARE_DEBUG_VARIABLE
|
|
std::remove(FullyEnabledTestDebugManager::settingsDumpFileName);
|
|
std::string output = testing::internal::GetCapturedStdout();
|
|
ASSERT_NE(0u, output.size());
|
|
|
|
EXPECT_NE(std::string::npos, output.find("Non-default value of debug variable: TbxServer = 192.168.0.1"));
|
|
EXPECT_NE(std::string::npos, output.find("Non-default value of debug variable: LoopAtDriverInit = 1"));
|
|
EXPECT_NE(std::string::npos, output.find("Non-default value of debug variable: PrintDebugSettings = 1"));
|
|
EXPECT_NE(std::string::npos, output.find("Non-default value of debug variable: Enable64kbpages = 1"));
|
|
}
|
|
|
|
TEST(DebugSettingsManager, givenPrintDebugSettingsEnabledOnDisabledDebugManagerWhenCallingDumpFlagsThenFlagsAreNotWrittenToDumpFile) {
|
|
testing::internal::CaptureStdout();
|
|
FullyDisabledTestDebugManager debugManager;
|
|
debugManager.flags.PrintDebugSettings.set(true);
|
|
|
|
std::remove(FullyDisabledTestDebugManager::settingsDumpFileName);
|
|
debugManager.dumpFlags();
|
|
std::remove(FullyDisabledTestDebugManager::settingsDumpFileName);
|
|
|
|
std::string output = testing::internal::GetCapturedStdout();
|
|
ASSERT_EQ(0u, output.size());
|
|
}
|
|
|
|
TEST(AllocationInfoLogging, givenBaseGraphicsAllocationWhenGettingImplementationSpecificAllocationInfoThenReturnEmptyInfoString) {
|
|
GraphicsAllocation graphicsAllocation(0, GraphicsAllocation::AllocationType::UNKNOWN, nullptr, 0ull, 0ull, 0, MemoryPool::MemoryNull);
|
|
EXPECT_STREQ(graphicsAllocation.getAllocationInfoString().c_str(), "");
|
|
}
|
|
|
|
TEST(DebugSettingsManager, givenDisabledDebugManagerWhenCreateThenOnlyReleaseVariablesAreRead) {
|
|
bool settingsFileExists = fileExists(SettingsReader::settingsFileName);
|
|
if (!settingsFileExists) {
|
|
const char data[] = "LogApiCalls = 1\nMakeAllBuffersResident = 1";
|
|
writeDataToFile(SettingsReader::settingsFileName, &data, sizeof(data));
|
|
}
|
|
|
|
SettingsReader *reader = SettingsReader::createFileReader();
|
|
EXPECT_NE(nullptr, reader);
|
|
|
|
FullyDisabledTestDebugManager debugManager;
|
|
debugManager.setReaderImpl(reader);
|
|
debugManager.injectSettingsFromReader();
|
|
|
|
EXPECT_EQ(1, debugManager.flags.MakeAllBuffersResident.get());
|
|
EXPECT_EQ(0, debugManager.flags.LogApiCalls.get());
|
|
|
|
if (!settingsFileExists) {
|
|
remove(SettingsReader::settingsFileName);
|
|
}
|
|
}
|
|
|
|
TEST(DebugSettingsManager, givenEnabledDebugManagerWhenCreateThenAllVariablesAreRead) {
|
|
bool settingsFileExists = fileExists(SettingsReader::settingsFileName);
|
|
if (!settingsFileExists) {
|
|
const char data[] = "LogApiCalls = 1\nMakeAllBuffersResident = 1";
|
|
writeDataToFile(SettingsReader::settingsFileName, &data, sizeof(data));
|
|
}
|
|
|
|
SettingsReader *reader = SettingsReader::createFileReader();
|
|
EXPECT_NE(nullptr, reader);
|
|
|
|
FullyEnabledTestDebugManager debugManager;
|
|
debugManager.setReaderImpl(reader);
|
|
debugManager.injectSettingsFromReader();
|
|
|
|
EXPECT_EQ(1, debugManager.flags.MakeAllBuffersResident.get());
|
|
EXPECT_EQ(1, debugManager.flags.LogApiCalls.get());
|
|
|
|
if (!settingsFileExists) {
|
|
remove(SettingsReader::settingsFileName);
|
|
}
|
|
}
|