From 09209f98a2951a56c0bd6ac0100a0d6eeb02e3d7 Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Wed, 11 Jun 2025 22:37:39 -0400 Subject: Fix unit tests to account for Actions runners: - Handle extra-long paths being normalized to either \\?\\ and "normal." - Rewrite PathGetTempPathTest test because it's not a good test: - By overwriting `TMP` with an extra-long path, it causes `::GetTempPath[2]W` to fall back to the value of `TEMP` instead. - But that's testing `::GetTempPath[2]W`, not `PathGetTempPath`. - It also assumes `TMP` and `TEMP` are set typically. - It also assumes it's not running as LocalSystem. - Instead, just compare the values you get from `::GetTempPathW` and `PathGetTempPath`. Fixes https://github.com/wixtoolset/issues/issues/9087 --- src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp | 76 ++++++++++------------ 1 file changed, 36 insertions(+), 40 deletions(-) (limited to 'src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp') diff --git a/src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp b/src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp index 381ea39a..12a2aaf1 100644 --- a/src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp +++ b/src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp @@ -142,7 +142,15 @@ namespace DutilTests else { NativeAssert::Succeeded(hr, "Failed to canonicalize path"); - NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + + if ('\\' == *sczCanonicalized) + { + NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + } + else + { + NativeAssert::StringEqual(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + } } hr = PathCanonicalizeForComparison(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", 0, &sczCanonicalized); @@ -153,7 +161,15 @@ namespace DutilTests else { NativeAssert::Succeeded(hr, "Failed to canonicalize path"); - NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + + if ('\\' == *sczCanonicalized) + { + NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + } + else + { + NativeAssert::StringEqual(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + } } hr = PathCanonicalizeForComparison(L"\\\\server", PATH_CANONICALIZE_KEEP_UNC_ROOT, &sczCanonicalized); @@ -288,7 +304,15 @@ namespace DutilTests { hr = PathAllocCanonicalizePath(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", PATHCCH_ALLOW_LONG_PATHS, &sczCanonicalized); NativeAssert::Succeeded(hr, "Failed to canonicalize path"); - NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + + if ('\\' == *sczCanonicalized) + { + NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + } + else + { + NativeAssert::StringEqual(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); + } hr = PathAllocCanonicalizePath(L"abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", PATHCCH_ALLOW_LONG_PATHS, &sczCanonicalized); NativeAssert::Succeeded(hr, "Failed to canonicalize path"); @@ -937,50 +961,22 @@ namespace DutilTests void PathGetTempPathTest() { HRESULT hr = S_OK; - LPCWSTR wzEnvName = L"TMP"; - LPCWSTR wzEnvName2 = L"TEMP"; - LPCWSTR wzLongTempPath = L"C:\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\"; LPWSTR sczTempPath = NULL; - WCHAR wzOriginalTemp[MAX_PATH + 1] = { }; - WCHAR wzOriginalTemp2[MAX_PATH + 1] = { }; DWORD cch = 0; - DWORD cch2 = 0; SIZE_T cchTemp = 0; - size_t cchTemp2 = 0; - - try - { - cch = ::GetEnvironmentVariableW(wzEnvName, wzOriginalTemp, countof(wzOriginalTemp)); - Assert::NotEqual(0, cch); - - if (!::SetEnvironmentVariableW(wzEnvName, wzLongTempPath)) - { - Assert::Equal(0xFFFFFFFF, ::GetLastError()); - } + WCHAR wzPath[MAX_PATH + 1]; - cch2 = ::GetEnvironmentVariableW(wzEnvName2, wzOriginalTemp2, countof(wzOriginalTemp2)); - Assert::NotEqual(0, cch2); + hr = PathGetTempPath(&sczTempPath, &cchTemp); + NativeAssert::Succeeded(hr, "Failed to get temp path."); - hr = PathGetTempPath(&sczTempPath, &cchTemp); - NativeAssert::Succeeded(hr, "Failed to get temp path."); + cch = countof(wzPath); + cch = ::GetTempPathW(cch, wzPath); + Assert::NotEqual((DWORD)0, cch); - PathFixedBackslashTerminate(wzOriginalTemp2, countof(wzOriginalTemp2)); + // normalize trailing backslash + PathFixedBackslashTerminate(wzPath, cch); - hr = ::StringCchLengthW(wzOriginalTemp2, countof(wzOriginalTemp2), &cchTemp2); - NativeAssert::Succeeded(hr, "Failed to get temp path length."); - - NativeAssert::StringEqual(wzOriginalTemp2, sczTempPath); - Assert::Equal(cchTemp2, cchTemp); - } - finally - { - if (cch) - { - ::SetEnvironmentVariableW(wzEnvName, wzOriginalTemp); - } - - ReleaseStr(sczTempPath); - } + NativeAssert::StringEqual(wzPath, sczTempPath); } [Fact] -- cgit v1.2.3-55-g6feb