|
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 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 | +) |
23 | 75 |
|
24 | 76 | @REM If sharding is not enabled, run test binary directly |
25 | 77 | IF "%TEST_TOTAL_SHARDS%"=="" ( |
26 | | - "%TEST_BINARY%" %* |
27 | | - EXIT /B %ERRORLEVEL% |
| 78 | + !TEST_BINARY_PATH! %* |
| 79 | + EXIT /B !ERRORLEVEL! |
28 | 80 | ) |
29 | 81 |
|
30 | 82 | @REM Touch status file to advertise sharding support to Bazel |
31 | 83 | IF NOT "%TEST_SHARD_STATUS_FILE%"=="" ( |
32 | | - ECHO.>"%TEST_SHARD_STATUS_FILE%" |
| 84 | + TYPE NUL > "%TEST_SHARD_STATUS_FILE%" |
33 | 85 | ) |
34 | 86 |
|
35 | 87 | @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 |
37 | 89 |
|
38 | 90 | @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!" |
40 | 92 |
|
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= |
46 | 96 |
|
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% |
59 | 99 | 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 | + ) |
61 | 105 | ) |
62 | | - |
63 | | - SET /A "INDEX+=1" |
| 106 | + SET /A INDEX=!INDEX! + 1 |
64 | 107 | ) |
65 | 108 |
|
66 | | -DEL "%TEMP_LIST%" 2>NUL |
| 109 | +DEL "!TEMP_LIST!" 2>NUL |
67 | 110 |
|
68 | 111 | @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 | +) |
70 | 115 |
|
71 | 116 | @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