Skip to content

Commit c23d0dc

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

File tree

1 file changed

+119
-30
lines changed

1 file changed

+119
-30
lines changed

rust/private/test_sharding_wrapper.bat

Lines changed: 119 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,55 +19,144 @@
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 Diagnostics
26+
ECHO [DEBUG] Current directory: %CD%
27+
ECHO [DEBUG] TEST_BINARY_RAW: !TEST_BINARY_RAW!
28+
ECHO [DEBUG] TEST_BINARY_PATH: !TEST_BINARY_PATH!
29+
ECHO [DEBUG] TEST_TOTAL_SHARDS: %TEST_TOTAL_SHARDS%
30+
ECHO [DEBUG] TEST_SHARD_INDEX: %TEST_SHARD_INDEX%
31+
ECHO [DEBUG] RUNFILES_DIR: %RUNFILES_DIR%
32+
ECHO [DEBUG] RUNFILES_MANIFEST_FILE: %RUNFILES_MANIFEST_FILE%
33+
34+
@REM List current directory contents
35+
ECHO [DEBUG] Current directory contents:
36+
DIR /B 2>NUL
37+
IF ERRORLEVEL 1 ECHO [DEBUG] (directory is empty or error listing)
38+
39+
@REM List parent directory contents
40+
ECHO [DEBUG] Parent directory contents:
41+
DIR /B .. 2>NUL
42+
43+
@REM Check if manifest exists
44+
IF EXIST "%RUNFILES_MANIFEST_FILE%" (
45+
ECHO [DEBUG] Manifest file exists, searching for test binary...
46+
FINDSTR /I "sharded_test_enabled" "%RUNFILES_MANIFEST_FILE%"
47+
)
48+
49+
@REM Try to find the binary using RUNFILES_DIR if set
50+
IF DEFINED RUNFILES_DIR (
51+
SET TEST_BINARY_IN_RUNFILES=!RUNFILES_DIR!\!TEST_BINARY_PATH!
52+
ECHO [DEBUG] Trying RUNFILES_DIR path: !TEST_BINARY_IN_RUNFILES!
53+
IF EXIST "!TEST_BINARY_IN_RUNFILES!" (
54+
ECHO [DEBUG] Binary exists at: !TEST_BINARY_IN_RUNFILES!
55+
SET TEST_BINARY_PATH=!TEST_BINARY_IN_RUNFILES!
56+
)
57+
)
58+
59+
@REM The short_path is like: test/unit/test_sharding/test-2586318641/sharded_test_enabled.exe
60+
@REM But on Windows, the binary is at grandparent/test-XXX/name.exe (sibling of runfiles dir)
61+
@REM Extract just the last two components (test-XXX/name.exe)
62+
FOR %%F IN ("!TEST_BINARY_PATH!") DO SET BINARY_NAME=%%~nxF
63+
FOR %%F IN ("!TEST_BINARY_PATH!\..") DO SET BINARY_DIR=%%~nxF
64+
ECHO [DEBUG] BINARY_NAME: !BINARY_NAME!
65+
ECHO [DEBUG] BINARY_DIR: !BINARY_DIR!
66+
67+
@REM Try various path resolutions
68+
SET FOUND_BINARY=0
69+
70+
@REM Try 1: Direct path (might work in some configurations)
71+
IF EXIST "!TEST_BINARY_PATH!" (
72+
ECHO [DEBUG] Binary exists at: !TEST_BINARY_PATH!
73+
SET FOUND_BINARY=1
74+
)
75+
76+
@REM Try 2: Grandparent + last two path components
77+
IF !FOUND_BINARY! EQU 0 (
78+
FOR %%F IN ("!TEST_BINARY_PATH!") DO (
79+
SET TEMP_PATH=%%~dpF
80+
SET TEMP_PATH=!TEMP_PATH:~0,-1!
81+
FOR %%D IN ("!TEMP_PATH!") DO SET PARENT_DIR=%%~nxD
82+
)
83+
SET TEST_BINARY_GP=..\..\!PARENT_DIR!\!BINARY_NAME!
84+
ECHO [DEBUG] Trying grandparent + dir: !TEST_BINARY_GP!
85+
IF EXIST "!TEST_BINARY_GP!" (
86+
ECHO [DEBUG] Binary exists at: !TEST_BINARY_GP!
87+
SET TEST_BINARY_PATH=!TEST_BINARY_GP!
88+
SET FOUND_BINARY=1
89+
)
90+
)
91+
92+
@REM Try 3: RUNFILES_DIR based path
93+
IF !FOUND_BINARY! EQU 0 IF DEFINED RUNFILES_DIR (
94+
SET TEST_BINARY_RF=!RUNFILES_DIR!\_main\!TEST_BINARY_PATH!
95+
SET TEST_BINARY_RF=!TEST_BINARY_RF:/=\!
96+
ECHO [DEBUG] Trying RUNFILES_DIR\_main: !TEST_BINARY_RF!
97+
IF EXIST "!TEST_BINARY_RF!" (
98+
ECHO [DEBUG] Binary exists at: !TEST_BINARY_RF!
99+
SET TEST_BINARY_PATH=!TEST_BINARY_RF!
100+
SET FOUND_BINARY=1
101+
)
102+
)
103+
104+
IF !FOUND_BINARY! EQU 0 (
105+
ECHO [DEBUG] ERROR: Could not find test binary
106+
ECHO [DEBUG] Tried paths:
107+
ECHO [DEBUG] - !TEST_BINARY_PATH!
108+
ECHO [DEBUG] - !TEST_BINARY_GP!
109+
IF DEFINED TEST_BINARY_RF ECHO [DEBUG] - !TEST_BINARY_RF!
110+
)
23111

24112
@REM If sharding is not enabled, run test binary directly
25113
IF "%TEST_TOTAL_SHARDS%"=="" (
26-
"%TEST_BINARY%" %*
27-
EXIT /B %ERRORLEVEL%
114+
ECHO [DEBUG] Sharding not enabled, running directly: !TEST_BINARY_PATH! %*
115+
!TEST_BINARY_PATH! %*
116+
EXIT /B !ERRORLEVEL!
28117
)
29118

30119
@REM Touch status file to advertise sharding support to Bazel
31120
IF NOT "%TEST_SHARD_STATUS_FILE%"=="" (
32-
ECHO.>"%TEST_SHARD_STATUS_FILE%"
121+
TYPE NUL > "%TEST_SHARD_STATUS_FILE%"
33122
)
34123

35124
@REM Create a temporary file for test list
36-
SET "TEMP_LIST=%TEMP%\rust_test_list_%RANDOM%.txt"
125+
SET TEMP_LIST=%TEMP%\rust_test_list_%RANDOM%.txt
37126

38127
@REM Enumerate all tests using libtest's --list flag
39-
"%TEST_BINARY%" --list --format terse 2>NUL | FINDSTR /R ": test$" > "%TEMP_LIST%"
128+
ECHO [DEBUG] Running: !TEST_BINARY_PATH! --list --format terse
129+
!TEST_BINARY_PATH! --list --format terse 2>NUL > "!TEMP_LIST!"
130+
ECHO [DEBUG] Test list exit code: !ERRORLEVEL!
131+
ECHO [DEBUG] Test list contents:
132+
TYPE "!TEMP_LIST!"
40133

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-
)
134+
@REM Count tests and filter for this shard
135+
SET INDEX=0
136+
SET SHARD_TESTS=
46137

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-
138+
FOR /F "tokens=1 delims=:" %%T IN ('TYPE "!TEMP_LIST!" ^| FINDSTR /E ": test"') DO (
139+
SET /A MOD=!INDEX! %% %TEST_TOTAL_SHARDS%
140+
ECHO [DEBUG] Test %%T: index=!INDEX! mod=!MOD! shard_index=%TEST_SHARD_INDEX%
59141
IF !MOD! EQU %TEST_SHARD_INDEX% (
60-
SET "SHARD_TESTS=!SHARD_TESTS! "!TEST_NAME!""
142+
IF "!SHARD_TESTS!"=="" (
143+
SET SHARD_TESTS=%%T
144+
) ELSE (
145+
SET SHARD_TESTS=!SHARD_TESTS! %%T
146+
)
61147
)
62-
63-
SET /A "INDEX+=1"
148+
SET /A INDEX=!INDEX! + 1
64149
)
65150

66-
DEL "%TEMP_LIST%" 2>NUL
151+
DEL "!TEMP_LIST!" 2>NUL
67152

68153
@REM If no tests for this shard, exit successfully
69-
IF "%SHARD_TESTS%"=="" EXIT /B 0
154+
IF "!SHARD_TESTS!"=="" (
155+
ECHO [DEBUG] No tests for this shard, exiting successfully
156+
EXIT /B 0
157+
)
70158

71159
@REM Run the filtered tests with --exact to match exact test names
72-
"%TEST_BINARY%" %SHARD_TESTS% --exact %*
73-
EXIT /B %ERRORLEVEL%
160+
ECHO [DEBUG] Running: !TEST_BINARY_PATH! !SHARD_TESTS! --exact %*
161+
!TEST_BINARY_PATH! !SHARD_TESTS! --exact %*
162+
EXIT /B !ERRORLEVEL!

0 commit comments

Comments
 (0)