fix: add warning when IGC_* env vars are set

Related-To: NEO-12721
Signed-off-by: Aleksandra Nizio <aleksandra.nizio@intel.com>
This commit is contained in:
Aleksandra Nizio
2025-07-08 11:35:02 +00:00
committed by Compute-Runtime-Automation
parent 0bca8782c2
commit ff00896801
3 changed files with 72 additions and 21 deletions

View File

@@ -391,7 +391,7 @@ TEST(ClCacheDefaultConfigLinuxTest, GivenNeoCachePersistentSetToZeroWhenGetDefau
TEST(ClCacheDefaultConfigLinuxTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigIsEnabledOrDisabledAsExpected) {
DebugManagerStateRestore restorer;
debugManager.flags.PrintDebugMessages.set(true);
debugManager.flags.PrintDebugMessages.set(false);
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["NEO_CACHE_PERSISTENT"] = "1";
@@ -423,15 +423,9 @@ TEST(ClCacheDefaultConfigLinuxTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigIsEna
VariableBackup<std::unordered_map<std::string, std::string> *> mockableEnvValuesBackup(&NEO::IoFunctions::mockableEnvValues, &mockableEnvs);
VariableBackup<decltype(NEO::SysCalls::sysCallsStat)> statBackup(&NEO::SysCalls::sysCallsStat, statMock);
StreamCapture capture;
capture.captureStdout();
auto cacheConfig = NEO::getDefaultCompilerCacheConfig();
std::string output = capture.getCapturedStdout();
EXPECT_TRUE(cacheConfig.enabled);
EXPECT_EQ(cacheConfig.cacheDir, "ult/directory/");
EXPECT_STREQ(output.c_str(), "NEO_CACHE_PERSISTENT is enabled. Cache is located in: ult/directory/\n\n");
mockableEnvs["IGC_DEBUG"] = "1";
environVec = buildEnviron(mockableEnvs, envStorage);
@@ -442,14 +436,57 @@ TEST(ClCacheDefaultConfigLinuxTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigIsEna
mockableEnvs.erase("IGC_DEBUG");
environVec = buildEnviron(mockableEnvs, envStorage);
NEO::ULT::setMockEnviron(environVec.data());
capture.captureStdout();
cacheConfig = NEO::getDefaultCompilerCacheConfig();
output = capture.getCapturedStdout();
EXPECT_TRUE(cacheConfig.enabled);
EXPECT_EQ(cacheConfig.cacheDir, "ult/directory/");
EXPECT_STREQ(output.c_str(), "NEO_CACHE_PERSISTENT is enabled. Cache is located in: ult/directory/\n\n");
NEO::ULT::setMockEnviron(nullptr);
}
TEST(ClCacheDefaultConfigLinuxTest, GivenIgcEnvVarSetWhenGetDefaultCacheConfigThenWarningIsPrinted) {
DebugManagerStateRestore restorer;
debugManager.flags.PrintDebugMessages.set(true);
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["NEO_CACHE_PERSISTENT"] = "1";
mockableEnvs["NEO_CACHE_MAX_SIZE"] = "22";
mockableEnvs["NEO_CACHE_DIR"] = "ult/directory/";
mockableEnvs["IGC_DEBUG"] = "1";
auto statMock = [](const std::string &filePath, struct stat *statbuf) noexcept {
statbuf->st_mode = S_IFDIR;
return 0;
};
auto buildEnviron = [](const std::unordered_map<std::string, std::string> &envs, std::vector<std::string> &storage) {
storage.clear();
for (const auto &kv : envs) {
storage.push_back(kv.first + "=" + kv.second);
}
std::vector<char *> result;
for (auto &str : storage) {
result.push_back(const_cast<char *>(str.c_str()));
}
result.push_back(nullptr);
return result;
};
std::vector<std::string> envStorage;
auto environVec = buildEnviron(mockableEnvs, envStorage);
NEO::ULT::setMockEnviron(environVec.data());
VariableBackup<std::unordered_map<std::string, std::string> *> mockableEnvValuesBackup(&NEO::IoFunctions::mockableEnvValues, &mockableEnvs);
VariableBackup<decltype(NEO::SysCalls::sysCallsStat)> statBackup(&NEO::SysCalls::sysCallsStat, statMock);
StreamCapture capture;
capture.captureStdout();
auto cacheConfig = NEO::getDefaultCompilerCacheConfig();
std::string output = capture.getCapturedStdout();
EXPECT_FALSE(cacheConfig.enabled);
EXPECT_STREQ(output.c_str(), "WARNING: Detected IGC_* environment variable(s). Compiler cache is disabled.\n");
NEO::ULT::setMockEnviron(nullptr);
}
} // namespace NEO

View File

@@ -293,7 +293,7 @@ TEST_F(ClCacheDefaultConfigWindowsTest, GivenPrintDebugMessagesWhenCacheIsEnable
TEST_F(ClCacheDefaultConfigWindowsTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigIsEnabledOrDisabledAsExpected) {
DebugManagerStateRestore restorer;
debugManager.flags.PrintDebugMessages.set(true);
debugManager.flags.PrintDebugMessages.set(false);
mockableEnvs["NEO_CACHE_PERSISTENT"] = "1";
mockableEnvs["NEO_CACHE_MAX_SIZE"] = "22";
@@ -303,15 +303,10 @@ TEST_F(ClCacheDefaultConfigWindowsTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigI
wchar_t envBlockNoIgc[] = L"NEO_CACHE_PERSISTENT=1\0NEO_CACHE_MAX_SIZE=22\0NEO_CACHE_DIR=ult\\directory\\\0\0";
SysCalls::mockEnvStringsW = envBlockNoIgc;
StreamCapture capture;
capture.captureStdout();
auto cacheConfig = getDefaultCompilerCacheConfig();
std::string output = capture.getCapturedStdout();
EXPECT_TRUE(cacheConfig.enabled);
EXPECT_EQ(cacheConfig.cacheDir, "ult\\directory\\");
EXPECT_STREQ(output.c_str(), "NEO_CACHE_PERSISTENT is enabled. Cache is located in: ult\\directory\\\n\n");
wchar_t envBlockWithIgc[] = L"IGC_DEBUG=1\0NEO_CACHE_PERSISTENT=1\0NEO_CACHE_MAX_SIZE=22\0NEO_CACHE_DIR=ult\\directory\\\0\0";
SysCalls::mockEnvStringsW = envBlockWithIgc;
@@ -320,14 +315,32 @@ TEST_F(ClCacheDefaultConfigWindowsTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigI
EXPECT_FALSE(cacheConfig.enabled);
SysCalls::mockEnvStringsW = envBlockNoIgc;
StreamCapture capture2;
capture2.captureStdout();
cacheConfig = getDefaultCompilerCacheConfig();
output = capture2.getCapturedStdout();
EXPECT_TRUE(cacheConfig.enabled);
EXPECT_EQ(cacheConfig.cacheDir, "ult\\directory\\");
EXPECT_STREQ(output.c_str(), "NEO_CACHE_PERSISTENT is enabled. Cache is located in: ult\\directory\\\n\n");
}
TEST_F(ClCacheDefaultConfigWindowsTest, GivenIgcEnvVarSetWhenGetDefaultCacheConfigThenWarningIsPrinted) {
DebugManagerStateRestore restorer;
debugManager.flags.PrintDebugMessages.set(true);
mockableEnvs["NEO_CACHE_PERSISTENT"] = "1";
mockableEnvs["NEO_CACHE_MAX_SIZE"] = "22";
mockableEnvs["NEO_CACHE_DIR"] = "ult\\directory\\";
DWORD getFileAttributesResultMock = FILE_ATTRIBUTE_DIRECTORY;
VariableBackup<DWORD> pathExistsMockBackup(&SysCalls::getFileAttributesResult, getFileAttributesResultMock);
wchar_t envBlockWithIgc[] = L"IGC_DEBUG=1\0NEO_CACHE_PERSISTENT=1\0NEO_CACHE_MAX_SIZE=22\0NEO_CACHE_DIR=ult\\directory\\\0\0";
SysCalls::mockEnvStringsW = envBlockWithIgc;
StreamCapture capture;
capture.captureStdout();
auto cacheConfig = getDefaultCompilerCacheConfig();
std::string output = capture.getCapturedStdout();
EXPECT_FALSE(cacheConfig.enabled);
EXPECT_STREQ(output.c_str(), "WARNING: Detected IGC_* environment variable(s). Compiler cache is disabled.\n");
}
} // namespace NEO