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 ^ |