diff options
| author | Bob Arnson <bob@firegiant.com> | 2025-06-11 22:37:39 -0400 |
|---|---|---|
| committer | Bob Arnson <bob@firegiant.com> | 2025-06-11 22:46:10 -0400 |
| commit | 09209f98a2951a56c0bd6ac0100a0d6eeb02e3d7 (patch) | |
| tree | 585b9df56e9bf1c3e213e35605c9fc6522268260 | |
| parent | ccf2b7bf8b60dbb4ece85167ff1f1c6564fc5b6c (diff) | |
| download | wix-bob/PayloadsHarvesting.tar.gz wix-bob/PayloadsHarvesting.tar.bz2 wix-bob/PayloadsHarvesting.zip | |
Fix unit tests to account for Actions runners:bob/PayloadsHarvesting
- 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
| -rw-r--r-- | src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp | 76 | ||||
| -rw-r--r-- | src/libs/libs.cmd | 1 |
2 files changed, 37 insertions, 40 deletions
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 | |||
| 142 | else | 142 | else |
| 143 | { | 143 | { |
| 144 | NativeAssert::Succeeded(hr, "Failed to canonicalize path"); | 144 | NativeAssert::Succeeded(hr, "Failed to canonicalize path"); |
| 145 | NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | 145 | |
| 146 | if ('\\' == *sczCanonicalized) | ||
| 147 | { | ||
| 148 | NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | ||
| 149 | } | ||
| 150 | else | ||
| 151 | { | ||
| 152 | NativeAssert::StringEqual(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | ||
| 153 | } | ||
| 146 | } | 154 | } |
| 147 | 155 | ||
| 148 | hr = PathCanonicalizeForComparison(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", 0, &sczCanonicalized); | 156 | hr = PathCanonicalizeForComparison(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", 0, &sczCanonicalized); |
| @@ -153,7 +161,15 @@ namespace DutilTests | |||
| 153 | else | 161 | else |
| 154 | { | 162 | { |
| 155 | NativeAssert::Succeeded(hr, "Failed to canonicalize path"); | 163 | NativeAssert::Succeeded(hr, "Failed to canonicalize path"); |
| 156 | NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | 164 | |
| 165 | if ('\\' == *sczCanonicalized) | ||
| 166 | { | ||
| 167 | NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | ||
| 168 | } | ||
| 169 | else | ||
| 170 | { | ||
| 171 | NativeAssert::StringEqual(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | ||
| 172 | } | ||
| 157 | } | 173 | } |
| 158 | 174 | ||
| 159 | hr = PathCanonicalizeForComparison(L"\\\\server", PATH_CANONICALIZE_KEEP_UNC_ROOT, &sczCanonicalized); | 175 | hr = PathCanonicalizeForComparison(L"\\\\server", PATH_CANONICALIZE_KEEP_UNC_ROOT, &sczCanonicalized); |
| @@ -288,7 +304,15 @@ namespace DutilTests | |||
| 288 | { | 304 | { |
| 289 | hr = PathAllocCanonicalizePath(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", PATHCCH_ALLOW_LONG_PATHS, &sczCanonicalized); | 305 | hr = PathAllocCanonicalizePath(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", PATHCCH_ALLOW_LONG_PATHS, &sczCanonicalized); |
| 290 | NativeAssert::Succeeded(hr, "Failed to canonicalize path"); | 306 | NativeAssert::Succeeded(hr, "Failed to canonicalize path"); |
| 291 | NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | 307 | |
| 308 | if ('\\' == *sczCanonicalized) | ||
| 309 | { | ||
| 310 | NativeAssert::StringEqual(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | ||
| 311 | } | ||
| 312 | else | ||
| 313 | { | ||
| 314 | NativeAssert::StringEqual(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", sczCanonicalized); | ||
| 315 | } | ||
| 292 | 316 | ||
| 293 | hr = PathAllocCanonicalizePath(L"abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", PATHCCH_ALLOW_LONG_PATHS, &sczCanonicalized); | 317 | hr = PathAllocCanonicalizePath(L"abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", PATHCCH_ALLOW_LONG_PATHS, &sczCanonicalized); |
| 294 | NativeAssert::Succeeded(hr, "Failed to canonicalize path"); | 318 | NativeAssert::Succeeded(hr, "Failed to canonicalize path"); |
| @@ -937,50 +961,22 @@ namespace DutilTests | |||
| 937 | void PathGetTempPathTest() | 961 | void PathGetTempPathTest() |
| 938 | { | 962 | { |
| 939 | HRESULT hr = S_OK; | 963 | HRESULT hr = S_OK; |
| 940 | LPCWSTR wzEnvName = L"TMP"; | ||
| 941 | LPCWSTR wzEnvName2 = L"TEMP"; | ||
| 942 | LPCWSTR wzLongTempPath = L"C:\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\"; | ||
| 943 | LPWSTR sczTempPath = NULL; | 964 | LPWSTR sczTempPath = NULL; |
| 944 | WCHAR wzOriginalTemp[MAX_PATH + 1] = { }; | ||
| 945 | WCHAR wzOriginalTemp2[MAX_PATH + 1] = { }; | ||
| 946 | DWORD cch = 0; | 965 | DWORD cch = 0; |
| 947 | DWORD cch2 = 0; | ||
| 948 | SIZE_T cchTemp = 0; | 966 | SIZE_T cchTemp = 0; |
| 949 | size_t cchTemp2 = 0; | 967 | WCHAR wzPath[MAX_PATH + 1]; |
| 950 | |||
| 951 | try | ||
| 952 | { | ||
| 953 | cch = ::GetEnvironmentVariableW(wzEnvName, wzOriginalTemp, countof(wzOriginalTemp)); | ||
| 954 | Assert::NotEqual<DWORD>(0, cch); | ||
| 955 | |||
| 956 | if (!::SetEnvironmentVariableW(wzEnvName, wzLongTempPath)) | ||
| 957 | { | ||
| 958 | Assert::Equal<DWORD>(0xFFFFFFFF, ::GetLastError()); | ||
| 959 | } | ||
| 960 | 968 | ||
| 961 | cch2 = ::GetEnvironmentVariableW(wzEnvName2, wzOriginalTemp2, countof(wzOriginalTemp2)); | 969 | hr = PathGetTempPath(&sczTempPath, &cchTemp); |
| 962 | Assert::NotEqual<DWORD>(0, cch2); | 970 | NativeAssert::Succeeded(hr, "Failed to get temp path."); |
| 963 | 971 | ||
| 964 | hr = PathGetTempPath(&sczTempPath, &cchTemp); | 972 | cch = countof(wzPath); |
| 965 | NativeAssert::Succeeded(hr, "Failed to get temp path."); | 973 | cch = ::GetTempPathW(cch, wzPath); |
| 974 | Assert::NotEqual((DWORD)0, cch); | ||
| 966 | 975 | ||
| 967 | PathFixedBackslashTerminate(wzOriginalTemp2, countof(wzOriginalTemp2)); | 976 | // normalize trailing backslash |
| 977 | PathFixedBackslashTerminate(wzPath, cch); | ||
| 968 | 978 | ||
| 969 | hr = ::StringCchLengthW(wzOriginalTemp2, countof(wzOriginalTemp2), &cchTemp2); | 979 | NativeAssert::StringEqual(wzPath, sczTempPath); |
| 970 | NativeAssert::Succeeded(hr, "Failed to get temp path length."); | ||
| 971 | |||
| 972 | NativeAssert::StringEqual(wzOriginalTemp2, sczTempPath); | ||
| 973 | Assert::Equal<SIZE_T>(cchTemp2, cchTemp); | ||
| 974 | } | ||
| 975 | finally | ||
| 976 | { | ||
| 977 | if (cch) | ||
| 978 | { | ||
| 979 | ::SetEnvironmentVariableW(wzEnvName, wzOriginalTemp); | ||
| 980 | } | ||
| 981 | |||
| 982 | ReleaseStr(sczTempPath); | ||
| 983 | } | ||
| 984 | } | 980 | } |
| 985 | 981 | ||
| 986 | [Fact] | 982 | [Fact] |
diff --git a/src/libs/libs.cmd b/src/libs/libs.cmd index d8b81f54..acf5ff55 100644 --- a/src/libs/libs.cmd +++ b/src/libs/libs.cmd | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | msbuild -Restore libs_t.proj -p:Configuration=%_C% -tl -nologo -m -warnaserror -bl:%_L%\libs_build.binlog || exit /b | 22 | msbuild -Restore libs_t.proj -p:Configuration=%_C% -tl -nologo -m -warnaserror -bl:%_L%\libs_build.binlog || exit /b |
| 23 | 23 | ||
| 24 | dotnet test ^ | 24 | dotnet test ^ |
| 25 | --results-directory %_L%\TestResults --blame-hang-timeout 1min --blame-hang-dump-type mini -l:"console;verbosity=detailed" ^ | ||
| 25 | %_B%\net6.0\WixToolsetTest.Versioning.dll ^ | 26 | %_B%\net6.0\WixToolsetTest.Versioning.dll ^ |
| 26 | %_B%\x86\DUtilUnitTest.dll ^ | 27 | %_B%\x86\DUtilUnitTest.dll ^ |
| 27 | %_B%\x64\DUtilUnitTest.dll ^ | 28 | %_B%\x64\DUtilUnitTest.dll ^ |
