Skip to content

Commit 09209f9

Browse files
committed
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 wixtoolset/issues#9087
1 parent ccf2b7b commit 09209f9

File tree

2 files changed

+37
-40
lines changed

2 files changed

+37
-40
lines changed

src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,15 @@ namespace DutilTests
142142
else
143143
{
144144
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+
}
146154
}
147155

148156
hr = PathCanonicalizeForComparison(L"\\\\?\\C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", 0, &sczCanonicalized);
@@ -153,7 +161,15 @@ namespace DutilTests
153161
else
154162
{
155163
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+
}
157173
}
158174

159175
hr = PathCanonicalizeForComparison(L"\\\\server", PATH_CANONICALIZE_KEEP_UNC_ROOT, &sczCanonicalized);
@@ -288,7 +304,15 @@ namespace DutilTests
288304
{
289305
hr = PathAllocCanonicalizePath(L"C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", PATHCCH_ALLOW_LONG_PATHS, &sczCanonicalized);
290306
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+
}
292316

293317
hr = PathAllocCanonicalizePath(L"abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", PATHCCH_ALLOW_LONG_PATHS, &sczCanonicalized);
294318
NativeAssert::Succeeded(hr, "Failed to canonicalize path");
@@ -937,50 +961,22 @@ namespace DutilTests
937961
void PathGetTempPathTest()
938962
{
939963
HRESULT hr = S_OK;
940-
LPCWSTR wzEnvName = L"TMP";
941-
LPCWSTR wzEnvName2 = L"TEMP";
942-
LPCWSTR wzLongTempPath = L"C:\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\";
943964
LPWSTR sczTempPath = NULL;
944-
WCHAR wzOriginalTemp[MAX_PATH + 1] = { };
945-
WCHAR wzOriginalTemp2[MAX_PATH + 1] = { };
946965
DWORD cch = 0;
947-
DWORD cch2 = 0;
948966
SIZE_T cchTemp = 0;
949-
size_t cchTemp2 = 0;
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-
}
967+
WCHAR wzPath[MAX_PATH + 1];
960968

961-
cch2 = ::GetEnvironmentVariableW(wzEnvName2, wzOriginalTemp2, countof(wzOriginalTemp2));
962-
Assert::NotEqual<DWORD>(0, cch2);
969+
hr = PathGetTempPath(&sczTempPath, &cchTemp);
970+
NativeAssert::Succeeded(hr, "Failed to get temp path.");
963971

964-
hr = PathGetTempPath(&sczTempPath, &cchTemp);
965-
NativeAssert::Succeeded(hr, "Failed to get temp path.");
972+
cch = countof(wzPath);
973+
cch = ::GetTempPathW(cch, wzPath);
974+
Assert::NotEqual((DWORD)0, cch);
966975

967-
PathFixedBackslashTerminate(wzOriginalTemp2, countof(wzOriginalTemp2));
976+
// normalize trailing backslash
977+
PathFixedBackslashTerminate(wzPath, cch);
968978

969-
hr = ::StringCchLengthW(wzOriginalTemp2, countof(wzOriginalTemp2), &cchTemp2);
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-
}
979+
NativeAssert::StringEqual(wzPath, sczTempPath);
984980
}
985981

986982
[Fact]

src/libs/libs.cmd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
msbuild -Restore libs_t.proj -p:Configuration=%_C% -tl -nologo -m -warnaserror -bl:%_L%\libs_build.binlog || exit /b
2323

2424
dotnet test ^
25+
--results-directory %_L%\TestResults --blame-hang-timeout 1min --blame-hang-dump-type mini -l:"console;verbosity=detailed" ^
2526
%_B%\net6.0\WixToolsetTest.Versioning.dll ^
2627
%_B%\x86\DUtilUnitTest.dll ^
2728
%_B%\x64\DUtilUnitTest.dll ^

0 commit comments

Comments
 (0)