Skip to content

Commit adb3e34

Browse files
committed
Fix Windows batch script for test sharding
1 parent 2b822a5 commit adb3e34

File tree

1 file changed

+75
-30
lines changed

1 file changed

+75
-30
lines changed

rust/private/test_sharding_wrapper.bat

Lines changed: 75 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,55 +19,100 @@
1919
@ECHO OFF
2020
SETLOCAL EnableDelayedExpansion
2121

22-
SET "TEST_BINARY={{TEST_BINARY}}"
22+
SET TEST_BINARY_RAW={{TEST_BINARY}}
23+
SET TEST_BINARY_PATH=!TEST_BINARY_RAW:/=\!
24+
25+
@REM Try to find the binary using RUNFILES_DIR if set
26+
IF DEFINED RUNFILES_DIR (
27+
SET TEST_BINARY_IN_RUNFILES=!RUNFILES_DIR!\!TEST_BINARY_PATH!
28+
IF EXIST "!TEST_BINARY_IN_RUNFILES!" (
29+
SET TEST_BINARY_PATH=!TEST_BINARY_IN_RUNFILES!
30+
)
31+
)
32+
33+
@REM The short_path is like: test/unit/test_sharding/test-2586318641/sharded_test_enabled.exe
34+
@REM But on Windows, the binary is at grandparent/test-XXX/name.exe (sibling of runfiles dir)
35+
@REM Extract just the last two components (test-XXX/name.exe)
36+
FOR %%F IN ("!TEST_BINARY_PATH!") DO SET BINARY_NAME=%%~nxF
37+
FOR %%F IN ("!TEST_BINARY_PATH!\..") DO SET BINARY_DIR=%%~nxF
38+
39+
@REM Try various path resolutions
40+
SET FOUND_BINARY=0
41+
42+
@REM Try 1: Direct path (might work in some configurations)
43+
IF EXIST "!TEST_BINARY_PATH!" (
44+
SET FOUND_BINARY=1
45+
)
46+
47+
@REM Try 2: Grandparent + last two path components
48+
IF !FOUND_BINARY! EQU 0 (
49+
FOR %%F IN ("!TEST_BINARY_PATH!") DO (
50+
SET TEMP_PATH=%%~dpF
51+
SET TEMP_PATH=!TEMP_PATH:~0,-1!
52+
FOR %%D IN ("!TEMP_PATH!") DO SET PARENT_DIR=%%~nxD
53+
)
54+
SET TEST_BINARY_GP=..\..\!PARENT_DIR!\!BINARY_NAME!
55+
IF EXIST "!TEST_BINARY_GP!" (
56+
SET TEST_BINARY_PATH=!TEST_BINARY_GP!
57+
SET FOUND_BINARY=1
58+
)
59+
)
60+
61+
@REM Try 3: RUNFILES_DIR based path
62+
IF !FOUND_BINARY! EQU 0 IF DEFINED RUNFILES_DIR (
63+
SET TEST_BINARY_RF=!RUNFILES_DIR!\_main\!TEST_BINARY_PATH!
64+
SET TEST_BINARY_RF=!TEST_BINARY_RF:/=\!
65+
IF EXIST "!TEST_BINARY_RF!" (
66+
SET TEST_BINARY_PATH=!TEST_BINARY_RF!
67+
SET FOUND_BINARY=1
68+
)
69+
)
70+
71+
IF !FOUND_BINARY! EQU 0 (
72+
ECHO ERROR: Could not find test binary at any expected location
73+
EXIT /B 1
74+
)
2375

2476
@REM If sharding is not enabled, run test binary directly
2577
IF "%TEST_TOTAL_SHARDS%"=="" (
26-
"%TEST_BINARY%" %*
27-
EXIT /B %ERRORLEVEL%
78+
!TEST_BINARY_PATH! %*
79+
EXIT /B !ERRORLEVEL!
2880
)
2981

3082
@REM Touch status file to advertise sharding support to Bazel
3183
IF NOT "%TEST_SHARD_STATUS_FILE%"=="" (
32-
ECHO.>"%TEST_SHARD_STATUS_FILE%"
84+
TYPE NUL > "%TEST_SHARD_STATUS_FILE%"
3385
)
3486

3587
@REM Create a temporary file for test list
36-
SET "TEMP_LIST=%TEMP%\rust_test_list_%RANDOM%.txt"
88+
SET TEMP_LIST=%TEMP%\rust_test_list_%RANDOM%.txt
3789

3890
@REM Enumerate all tests using libtest's --list flag
39-
"%TEST_BINARY%" --list --format terse 2>NUL | FINDSTR /R ": test$" > "%TEMP_LIST%"
91+
!TEST_BINARY_PATH! --list --format terse 2>NUL > "!TEMP_LIST!"
4092

41-
@REM Check if any tests were found
42-
FOR %%A IN ("%TEMP_LIST%") DO IF %%~zA==0 (
43-
DEL "%TEMP_LIST%" 2>NUL
44-
EXIT /B 0
45-
)
93+
@REM Count tests and filter for this shard
94+
SET INDEX=0
95+
SET SHARD_TESTS=
4696

47-
@REM Filter tests for this shard and build argument list
48-
SET "INDEX=0"
49-
SET "SHARD_TESTS="
50-
51-
FOR /F "usebackq delims=" %%T IN ("%TEMP_LIST%") DO (
52-
SET "TEST_LINE=%%T"
53-
@REM Strip ": test" suffix
54-
SET "TEST_NAME=!TEST_LINE:: test=!"
55-
56-
@REM Calculate index % TEST_TOTAL_SHARDS
57-
SET /A "MOD=INDEX %% TEST_TOTAL_SHARDS"
58-
97+
FOR /F "tokens=1 delims=:" %%T IN ('TYPE "!TEMP_LIST!" ^| FINDSTR /E ": test"') DO (
98+
SET /A MOD=!INDEX! %% %TEST_TOTAL_SHARDS%
5999
IF !MOD! EQU %TEST_SHARD_INDEX% (
60-
SET "SHARD_TESTS=!SHARD_TESTS! "!TEST_NAME!""
100+
IF "!SHARD_TESTS!"=="" (
101+
SET SHARD_TESTS=%%T
102+
) ELSE (
103+
SET SHARD_TESTS=!SHARD_TESTS! %%T
104+
)
61105
)
62-
63-
SET /A "INDEX+=1"
106+
SET /A INDEX=!INDEX! + 1
64107
)
65108

66-
DEL "%TEMP_LIST%" 2>NUL
109+
DEL "!TEMP_LIST!" 2>NUL
67110

68111
@REM If no tests for this shard, exit successfully
69-
IF "%SHARD_TESTS%"=="" EXIT /B 0
112+
IF "!SHARD_TESTS!"=="" (
113+
EXIT /B 0
114+
)
70115

71116
@REM Run the filtered tests with --exact to match exact test names
72-
"%TEST_BINARY%" %SHARD_TESTS% --exact %*
73-
EXIT /B %ERRORLEVEL%
117+
!TEST_BINARY_PATH! !SHARD_TESTS! --exact %*
118+
EXIT /B !ERRORLEVEL!

0 commit comments

Comments
 (0)