diff --git a/.pipelines/build-job.yml b/.pipelines/build-job.yml index f883f0b4bb..6ace42272b 100644 --- a/.pipelines/build-job.yml +++ b/.pipelines/build-job.yml @@ -124,7 +124,7 @@ jobs: displayName: "CMake ${{ parameters.platform }}" inputs: workingDirectory: "." - cmakeArgs: . --fresh -A ${{ parameters.platform }} -DCMAKE_BUILD_TYPE=Release -DCMAKE_SYSTEM_VERSION=10.0.26100.0 -DPACKAGE_VERSION=$(version.WSL_PACKAGE_VERSION) -DWSL_NUGET_PACKAGE_VERSION=$(version.WSL_NUGET_PACKAGE_VERSION) -DSKIP_PACKAGE_SIGNING=${{ parameters.isRelease }} -DOFFICIAL_BUILD=${{ parameters.isRelease }} -DINCLUDE_PACKAGE_STAGE=${{ or(parameters.isRelease, parameters.isNightly) }} -DPIPELINE_BUILD_ID=$(Build.BuildId) -DVSO_ORG=${{ parameters.vsoOrg }} -DVSO_PROJECT=${{ parameters.vsoProject }} -DWSL_BUILD_WSL_SETTINGS=true -DWSL_INCLUDE_SDK_CSHARP=true $(packageInputDirArg)\${{ parameters.platform }} + cmakeArgs: . --fresh -A ${{ parameters.platform }} -DCMAKE_BUILD_TYPE=Release -DCMAKE_SYSTEM_VERSION=10.0.26100.0 -DPACKAGE_VERSION=$(version.WSL_PACKAGE_VERSION) -DWSL_NUGET_PACKAGE_VERSION=$(version.WSL_NUGET_PACKAGE_VERSION) -DSKIP_PACKAGE_SIGNING=${{ parameters.isRelease }} -DOFFICIAL_BUILD=${{ parameters.isRelease }} -DINCLUDE_PACKAGE_STAGE=${{ or(parameters.isRelease, parameters.isNightly) }} -DPIPELINE_BUILD_ID=$(Build.BuildId) -DVSO_ORG=${{ parameters.vsoOrg }} -DVSO_PROJECT=${{ parameters.vsoProject }} -DWSL_BUILD_WSL_SETTINGS=true -DWSL_INCLUDE_SDK_CSHARP=true -DWSL_E2E_UNITY_BUILD=ON $(packageInputDirArg)\${{ parameters.platform }} # Workaround for WSL Settings NuGet restore authentication issue - script: _deps\nuget.exe restore -NonInteractive diff --git a/test/windows/WSLCTests.cpp b/test/windows/WSLCTests.cpp index 2d09e66462..3028dc87e7 100644 --- a/test/windows/WSLCTests.cpp +++ b/test/windows/WSLCTests.cpp @@ -359,38 +359,35 @@ class WSLCTests { auto sessionManager = OpenSessionManager(); - // Act: list sessions - { - wil::unique_cotaskmem_array_ptr sessions; - VERIFY_SUCCEEDED(sessionManager->ListSessions(&sessions, sessions.size_address())); - - // Assert - VERIFY_ARE_EQUAL(sessions.size(), 1u); - const auto& info = sessions[0]; - - // SessionId is implementation detail (starts at 1), so we only assert DisplayName here. - VERIFY_ARE_EQUAL(std::wstring(info.DisplayName), c_testSessionName); - } - - // List multiple sessions. - { - auto session2 = CreateSession(GetDefaultSessionSettings(L"wslc-test-list-2")); - + auto listDisplayNames = [&]() { wil::unique_cotaskmem_array_ptr sessions; VERIFY_SUCCEEDED(sessionManager->ListSessions(&sessions, sessions.size_address())); - VERIFY_ARE_EQUAL(sessions.size(), 2); - std::vector displayNames; for (const auto& e : sessions) { displayNames.push_back(e.DisplayName); } + return displayNames; + }; + + auto contains = [](const std::vector& names, std::wstring_view target) { + return std::ranges::find(names, target) != names.end(); + }; - std::ranges::sort(displayNames); + // Act: list sessions + { + auto displayNames = listDisplayNames(); + VERIFY_IS_TRUE(contains(displayNames, c_testSessionName)); + } + + // List multiple sessions. + { + auto session2 = CreateSession(GetDefaultSessionSettings(L"wslc-test-list-2")); - VERIFY_ARE_EQUAL(displayNames[0], c_testSessionName); - VERIFY_ARE_EQUAL(displayNames[1], L"wslc-test-list-2"); + auto displayNames = listDisplayNames(); + VERIFY_IS_TRUE(contains(displayNames, c_testSessionName)); + VERIFY_IS_TRUE(contains(displayNames, L"wslc-test-list-2")); } } diff --git a/test/windows/wslc/CMakeLists.txt b/test/windows/wslc/CMakeLists.txt index 23418d7cbc..4dbc6acc39 100644 --- a/test/windows/wslc/CMakeLists.txt +++ b/test/windows/wslc/CMakeLists.txt @@ -18,6 +18,26 @@ set_source_files_properties(${WSLC_TEST_SOURCES} COMPILE_FLAGS "/Yuprecomp.h" ) +# Opt-in unity build for the e2e tests (~2x faster clean recompile; CI enables it). +option(WSL_E2E_UNITY_BUILD "Unity-batch the wslc e2e test sources" OFF) +set(WSL_E2E_UNITY_BATCH_SIZE 8 CACHE STRING "Unity batch size for wslc e2e tests") + +if(WSL_E2E_UNITY_BUILD) + # GROUP mode only batches sources tagged with UNITY_GROUP, so tag e2e sources and leave every other wsltests source untouched. + set_target_properties(wsltests PROPERTIES UNITY_BUILD ON UNITY_BUILD_MODE GROUP) + + file(GLOB WSLC_E2E_SOURCES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/e2e/*.cpp) + set(_e2eIndex 0) + foreach(_e2eSource IN LISTS WSLC_E2E_SOURCES) + math(EXPR _e2eGroup "${_e2eIndex} / ${WSL_E2E_UNITY_BATCH_SIZE}") + set_source_files_properties(${_e2eSource} + TARGET_DIRECTORY wsltests + PROPERTIES UNITY_GROUP "wslc_e2e_${_e2eGroup}" + ) + math(EXPR _e2eIndex "${_e2eIndex} + 1") + endforeach() +endif() + # Add include directories needed for WSLC tests. target_include_directories(wsltests PRIVATE ${CMAKE_SOURCE_DIR}/test diff --git a/test/windows/wslc/e2e/WSLCE2EPushPullTests.cpp b/test/windows/wslc/e2e/WSLCE2EPushPullTests.cpp index 9491bb0ba4..d2d38211bd 100644 --- a/test/windows/wslc/e2e/WSLCE2EPushPullTests.cpp +++ b/test/windows/wslc/e2e/WSLCE2EPushPullTests.cpp @@ -58,7 +58,7 @@ class WSLCE2EPushPullTests auto session = OpenDefaultElevatedSession(); { - auto [registryContainer, registryAddress] = StartLocalRegistry(*session, "", "", 15003); + auto [registryContainer, registryAddress] = StartLocalRegistry(*session, "", "", 15004); auto registryAddressW = string::MultiByteToWide(registryAddress); // Tag the image for the local registry.