From: Charles Giessen Date: Tue, 15 Mar 2022 05:19:13 +0000 (-0600) Subject: Tests close layer handles when necessary X-Git-Tag: upstream/1.3.208~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6b3cb3705f3a36d5e88aefec86522cd290e66e3a;p=platform%2Fupstream%2FVulkan-Loader.git Tests close layer handles when necessary The fs::FolderManager can't close objects that are in use, thus if the tests keep open a binary then the destructor will fail to delete the file. This commit manually cleans out the FrameworkEnvironment's loaded layers to prevent this from happening. --- diff --git a/tests/framework/test_util.cpp b/tests/framework/test_util.cpp index 5c1bbcf5..f0b041ae 100644 --- a/tests/framework/test_util.cpp +++ b/tests/framework/test_util.cpp @@ -349,7 +349,7 @@ int create_folder(path const& path) { #endif } -int delete_folder(path const& folder) { +int delete_folder_contents(path const& folder) { #if defined(WIN32) if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(folder.c_str()) && GetLastError() == ERROR_FILE_NOT_FOUND) { // nothing to delete @@ -371,7 +371,6 @@ int delete_folder(path const& folder) { } } while (::FindNextFile(hFind, &fd)); ::FindClose(hFind); - _rmdir(folder.c_str()); } return 0; #else @@ -399,13 +398,23 @@ int delete_folder(path const& folder) { ret = ret2; } closedir(dir); - - if (!ret) ret = rmdir(folder.c_str()); return ret; #endif } +int delete_folder(path const& folder) { + int ret = delete_folder_contents(folder); + if (ret != 0) return ret; +#if defined(WIN32) + _rmdir(folder.c_str()); + return 0; +#else + return rmdir(folder.c_str()); +#endif +} + FolderManager::FolderManager(path root_path, std::string name, DebugMode debug) : debug(debug), folder(root_path / name) { + delete_folder_contents(folder); create_folder(folder); } FolderManager::~FolderManager() { diff --git a/tests/loader_layer_tests.cpp b/tests/loader_layer_tests.cpp index 5241ea17..743e63bd 100644 --- a/tests/loader_layer_tests.cpp +++ b/tests/loader_layer_tests.cpp @@ -955,6 +955,7 @@ TEST_F(OverrideMetaLayer, BasicOverridePaths) { FillDebugUtilsCreateDetails(inst.create_info, env->debug_log); inst.CheckCreate(); ASSERT_TRUE(env->debug_log.find(std::string("Insert instance layer ") + regular_layer_name)); + env->layers.clear(); } TEST_F(OverrideMetaLayer, BasicOverridePathsIgnoreOtherLayers) { @@ -995,6 +996,7 @@ TEST_F(OverrideMetaLayer, BasicOverridePathsIgnoreOtherLayers) { FillDebugUtilsCreateDetails(inst.create_info, env->debug_log); inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); ASSERT_FALSE(env->debug_log.find(std::string("Insert instance layer ") + regular_layer_name)); + env->layers.clear(); } TEST_F(OverrideMetaLayer, OverridePathsInteractionWithVK_LAYER_PATH) { @@ -1041,6 +1043,7 @@ TEST_F(OverrideMetaLayer, OverridePathsInteractionWithVK_LAYER_PATH) { inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); ASSERT_FALSE(env->debug_log.find(std::string("Insert instance layer ") + env_var_layer_name)); + env->layers.clear(); remove_env_var("VK_LAYER_PATH"); } @@ -1084,6 +1087,7 @@ TEST_F(OverrideMetaLayer, OverridePathsEnableImplicitLayerInDefaultPaths) { ASSERT_FALSE(env->debug_log.find(std::string("Insert instance layer ") + implicit_layer_name)); ASSERT_TRUE( env->debug_log.find("Removing meta-layer VK_LAYER_LUNARG_override from instance layer list since it appears invalid.")); + env->layers.clear(); } TEST_F(OverrideMetaLayer, ManifestFileFormatVersionTooOld) { @@ -1115,6 +1119,7 @@ TEST_F(OverrideMetaLayer, ManifestFileFormatVersionTooOld) { inst.CheckCreate(); ASSERT_TRUE(env->debug_log.find(std::string("Insert instance layer ") + regular_layer_name)); ASSERT_TRUE(env->debug_log.find("Indicating meta-layer-specific override paths, but using older JSON file version.")); + env->layers.clear(); } // This test makes sure that any layer calling GetPhysicalDeviceProperties2 inside of CreateInstance