|
19 | 19 | @ECHO OFF |
20 | 20 | SETLOCAL EnableDelayedExpansion |
21 | 21 |
|
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 | +) |
23 | 111 |
|
24 | 112 | @REM If sharding is not enabled, run test binary directly |
25 | 113 | 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! |
28 | 117 | ) |
29 | 118 |
|
30 | 119 | @REM Touch status file to advertise sharding support to Bazel |
31 | 120 | IF NOT "%TEST_SHARD_STATUS_FILE%"=="" ( |
32 | | - ECHO.>"%TEST_SHARD_STATUS_FILE%" |
| 121 | + TYPE NUL > "%TEST_SHARD_STATUS_FILE%" |
33 | 122 | ) |
34 | 123 |
|
35 | 124 | @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 |
37 | 126 |
|
38 | 127 | @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!" |
40 | 133 |
|
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= |
46 | 137 |
|
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% |
59 | 141 | 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 | + ) |
61 | 147 | ) |
62 | | - |
63 | | - SET /A "INDEX+=1" |
| 148 | + SET /A INDEX=!INDEX! + 1 |
64 | 149 | ) |
65 | 150 |
|
66 | | -DEL "%TEMP_LIST%" 2>NUL |
| 151 | +DEL "!TEMP_LIST!" 2>NUL |
67 | 152 |
|
68 | 153 | @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 | +) |
70 | 158 |
|
71 | 159 | @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