[CI] Allowlist-shrink batch 1: wire 17 root-level tests + drop 5 stale watermarking entries into misc.yaml (#58055)
Signed-off-by: Turner Jabbour <doubleujabbour@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Turner Jabbour committed
Sep 27, 2026 at 23:23 UTC
2407f405b51abd23adbf0203b98464f448c58edf
8 files changed
+133
-61
.buildkite/test_areas/misc.yaml
+46
@@ -496,15 +496,22 @@ steps:
496
- vllm/assets/
497
- vllm/config/
498
- vllm/device_allocator/
499
+ - vllm/connections.py
500
- vllm/engine/arg_utils.py
501
- vllm/entrypoints/chat_utils.py
502
- vllm/entrypoints/mcp/
503
- vllm/entrypoints/openai/chat_completion/protocol.py
504
+ - vllm/entrypoints/openai/completion/protocol.py
505
+ - vllm/entrypoints/openai/responses/protocol.py
506
- vllm/entrypoints/generate/base/protocol.py
507
+ - vllm/env_override.py
508
- vllm/envs.py
509
- vllm/exceptions.py
510
- vllm/inputs/
511
+ - vllm/logging_utils/
512
+ - vllm/logprobs.py
513
- vllm/model_executor/layers/quantization/quark/
514
+ - vllm/model_executor/model_loader/tensorizer.py
515
- vllm/multimodal/
516
- vllm/outputs.py
517
- vllm/parser/
@@ -514,17 +521,38 @@ steps:
521
- vllm/reasoning/
522
- vllm/renderers/
523
- vllm/sampling_params.py
524
+ - vllm/scalar_type.py
525
- vllm/tokenizers/
526
- vllm/tool_parsers/
527
- vllm/transformers_utils/
528
+ - vllm/triton_utils/
529
- vllm/utils/
530
- vllm/v1/
531
+ - vllm/version.py
532
+ - cmake/utils.cmake
533
+ - tests/test_access_log_filter.py
534
+ - tests/test_attention_backend_registry.py
535
+ - tests/test_audio_media_size_precheck.py
536
+ - tests/test_cmake_utils.py
537
+ - tests/test_connections.py
538
+ - tests/test_embedded_commit.py
539
- tests/test_envs.py
540
+ - tests/test_force_first_config.py
541
+ - tests/test_fxgraphcache_pickle_patch.py
542
+ - tests/test_logprobs.py
543
- tests/test_outputs.py
544
- tests/test_pcp_dp.py
545
- tests/test_pooling_params.py
546
+ - tests/test_quantization_revision_pin.py
547
- tests/test_ray_env.py
548
+ - tests/test_ray_env_utils.py
549
+ - tests/test_request_input_bounds.py
550
- tests/test_sampling_params.py
551
+ - tests/test_scalartype.py
552
+ - tests/test_tensorizer_revision_pin.py
553
+ - tests/test_triton_utils.py
554
+ - tests/test_version.py
555
+ - tests/test_zen_cpu_platform_detection.py
556
- tests/multimodal
557
- tests/renderers
558
- tests/standalone_tests/lazy_imports.py
@@ -540,14 +568,32 @@ steps:
568
- tests/device_allocator
569
device: cpu-small
570
commands:
571
+ - pip install cmake # test_cmake_utils.py shells out to cmake; the CPU image has none
572
- python3 standalone_tests/lazy_imports.py
573
- pytest -v -s device_allocator
574
+ - pytest -v -s test_access_log_filter.py
575
+ - pytest -v -s test_attention_backend_registry.py
576
+ - pytest -v -s test_audio_media_size_precheck.py
577
+ - pytest -v -s test_cmake_utils.py
578
+ - pytest -v -s test_connections.py
579
+ - pytest -v -s test_embedded_commit.py
580
- pytest -v -s test_envs.py
581
+ - pytest -v -s test_force_first_config.py
582
+ - pytest -v -s test_fxgraphcache_pickle_patch.py
583
+ - pytest -v -s test_logprobs.py
584
- pytest -v -s test_outputs.py
585
- pytest -v -s test_pcp_dp.py
586
- pytest -v -s test_pooling_params.py
587
+ - pytest -v -s test_quantization_revision_pin.py
588
- pytest -v -s test_ray_env.py
589
+ - pytest -v -s test_ray_env_utils.py
590
+ - pytest -v -s test_request_input_bounds.py
591
- pytest -v -s test_sampling_params.py
592
+ - pytest -v -s test_scalartype.py
593
+ - pytest -v -s test_tensorizer_revision_pin.py
594
+ - pytest -v -s test_triton_utils.py
595
+ - pytest -v -s test_version.py
596
+ - pytest -v -s test_zen_cpu_platform_detection.py
597
- pytest -v -s tokenizers_
598
- pytest -v -s parser
599
- pytest -v -s transformers_utils
docker/Dockerfile.cpu
+2
@@ -433,6 +433,8 @@ ADD ./benchmarks/ ./benchmarks/
433
ADD ./vllm/collect_env.py .
434
ADD ./docker/ ./docker/
435
ADD ./.buildkite/ ./.buildkite/
436
+# cmake/ is needed by tests/test_cmake_utils.py, which includes cmake/utils.cmake.
437
+ADD ./cmake/ ./cmake/
438
# tools/ carries repo-tooling code that a few tests exercise directly
439
# (e.g. tests/tools/test_check_test_tethering.py imports
440
# tools.pre_commit.check_test_tethering).
tests/test_request_input_bounds.py
+2
-3
@@ -43,6 +43,7 @@ def prompt_embeds_processor():
43
logits_processors=None,
44
is_diffusion=False,
45
return_sampling_mask=False,
46
+ supports_multimodal_inputs=False,
47
)
48
model_config.get_vocab_size.return_value = 32
49
model_config.try_get_generation_config.return_value = {}
@@ -53,9 +54,7 @@ def prompt_embeds_processor():
54
)
55
renderer = Mock(tokenizer=None)
56
renderer.get_eos_token_id.return_value = None
56
- registry = Mock()
57
- registry.supports_multimodal_inputs.return_value = False
58
- return InputProcessor(config, renderer, mm_registry=registry)
57
+ return InputProcessor(config, renderer, mm_registry=Mock())
58
59
60
@pytest.mark.parametrize("mask_len", [0, 1, 2, 4])
tests/test_triton_utils.py
+51
-16
@@ -10,10 +10,13 @@ from vllm.triton_utils import importing as triton_importing
10
from vllm.triton_utils.importing import TritonLanguagePlaceholder, TritonPlaceholder
11
12
13
-def _has_triton_for_backends(**drivers: bool) -> bool:
13
+def _has_triton_for_backends(*, vllm_version: str = "0.0.0", **drivers: bool) -> bool:
14
"""Re-evaluate ``HAS_TRITON`` against a synthetic ``triton.backends`` map.
15
16
``drivers`` maps backend name to whether its driver reports itself active.
17
+ ``vllm_version`` selects the build type: importing.py takes its Triton-CPU
18
+ branch only when "cpu" is in the installed vLLM version, so pin it rather
19
+ than depending on the real install (the CPU CI image is a "+cpu" build).
20
"""
21
backends = {}
22
for name, is_active in drivers.items():
@@ -34,6 +37,7 @@ def _has_triton_for_backends(**drivers: bool) -> bool:
37
with (
38
mock.patch.dict(sys.modules, patched_modules),
39
mock.patch.dict("os.environ", {}, clear=True),
40
+ mock.patch("importlib.metadata.version", return_value=vllm_version),
41
):
42
return importlib.reload(triton_importing).HAS_TRITON
43
finally:
@@ -129,19 +133,50 @@ def test_cpu_backend_alone_disables_triton():
133
assert _has_triton_for_backends(cpu=True) is False
134
135
136
+def test_cpu_build_with_cpu_backend_keeps_triton():
137
+ assert _has_triton_for_backends(vllm_version="0.0.0+cpu", cpu=True) is True
138
+
139
+
140
+def test_cpu_build_without_cpu_backend_disables_triton():
141
+ assert _has_triton_for_backends(vllm_version="0.0.0+cpu", amd=True) is False
142
+
143
+
144
def test_no_triton_fallback():
133
- # clear existing triton modules
134
- sys.modules.pop("triton", None)
135
- sys.modules.pop("triton.language", None)
136
- sys.modules.pop("vllm.triton_utils", None)
137
- sys.modules.pop("vllm.triton_utils.importing", None)
138
-
139
- # mock triton not being installed
140
- with mock.patch.dict(sys.modules, {"triton": None}):
141
- from vllm.triton_utils import HAS_TRITON, tl, triton
142
-
143
- assert HAS_TRITON is False
144
- assert triton.__class__.__name__ == "TritonPlaceholder"
145
- assert triton.language.__class__.__name__ == "TritonLanguagePlaceholder"
146
- assert tl.__class__.__name__ == "TritonLanguagePlaceholder"
147
- assert tl.constexpr(2**31 - 1) == 2**31 - 1
145
+ # Save the real modules so they can be put back afterward - popping them
146
+ # (rather than mock.patch.dict alone) is what forces vllm.triton_utils to
147
+ # be freshly, unmemoized re-imported under the "triton is absent"
148
+ # condition below.
149
+ saved_modules = {
150
+ name: sys.modules.get(name)
151
+ for name in (
152
+ "triton",
153
+ "triton.language",
154
+ "vllm.triton_utils",
155
+ "vllm.triton_utils.importing",
156
+ )
157
+ }
158
+ for name in saved_modules:
159
+ sys.modules.pop(name, None)
160
+
161
+ try:
162
+ # mock triton not being installed
163
+ with mock.patch.dict(sys.modules, {"triton": None}):
164
+ from vllm.triton_utils import HAS_TRITON, tl, triton
165
+
166
+ assert HAS_TRITON is False
167
+ assert triton.__class__.__name__ == "TritonPlaceholder"
168
+ assert triton.language.__class__.__name__ == "TritonLanguagePlaceholder"
169
+ assert tl.__class__.__name__ == "TritonLanguagePlaceholder"
170
+ assert tl.constexpr(2**31 - 1) == 2**31 - 1
171
+ finally:
172
+ # The pops above are outside mock.patch.dict's scope, so exiting the
173
+ # `with` restores "triton" to absent, not to the real module - unlike
174
+ # _has_triton_for_backends above, nothing here puts it back. Left
175
+ # alone, every subsequent import of vllm.triton_utils in this process
176
+ # (including other test files, and other tests' cleanup fixtures that
177
+ # need real triton) would get this fake, HAS_TRITON=False module.
178
+ for name, module in saved_modules.items():
179
+ if module is not None:
180
+ sys.modules[name] = module
181
+ else:
182
+ sys.modules.pop(name, None)
tests/test_version.py
+4
-1
@@ -13,7 +13,10 @@ def test_version_is_defined():
13
14
15
def test_version_tuple():
16
- assert len(version.__version_tuple__) in (3, 4, 5)
16
+ # (major, minor, patch) plus optional pre-release tag, dev-distance, and
17
+ # git-hash components - setuptools_scm can emit any combination of them,
18
+ # e.g. 6 when a dev build sits on top of an rc-tagged commit.
19
+ assert len(version.__version_tuple__) >= 3
20
21
22
@pytest.mark.parametrize(
tests/test_zen_cpu_platform_detection.py
+28
-11
@@ -13,6 +13,23 @@ from vllm.platforms import (
13
)
14
15
16
+@pytest.fixture
17
+def caplog_vllm(caplog):
18
+ """`caplog`, but also captures vLLM's loggers.
19
+
20
+ vllm/logger.py configures the "vllm" logger with propagate=False, so
21
+ records from child loggers like "vllm.platforms" reach vLLM's own
22
+ handler but never bubble up to the root logger where plain `caplog`
23
+ listens. Attach caplog's handler directly to "vllm" to see them too.
24
+ """
25
+ logger = logging.getLogger("vllm")
26
+ logger.addHandler(caplog.handler)
27
+ try:
28
+ yield caplog
29
+ finally:
30
+ logger.removeHandler(caplog.handler)
31
+
32
+
33
def test_is_amd_zen_cpu_detects_amd_with_avx512():
34
cpuinfo = "vendor_id: AuthenticAMD\nflags: avx avx2 avx512f avx512bw"
35
with (
@@ -65,7 +82,7 @@ def test_cpu_target_selects_cpu_platform_from_non_cpu_wheel(
82
rocm_plugin.assert_not_called()
83
84
68
-def test_broken_zentorch_falls_back_to_cpu_platform(caplog):
85
+def test_broken_zentorch_falls_back_to_cpu_platform(caplog_vllm):
86
original_import = builtins.__import__
87
88
def import_with_broken_zentorch(name, *args, **kwargs):
@@ -84,16 +101,16 @@ def test_broken_zentorch_falls_back_to_cpu_platform(caplog):
101
patch("vllm.platforms.vllm_version_matches_substr", return_value=True),
102
patch("vllm.platforms._is_amd_zen_cpu", return_value=True),
103
patch.object(builtins, "__import__", side_effect=import_with_broken_zentorch),
87
- caplog.at_level(logging.DEBUG, logger="vllm.platforms"),
104
+ caplog_vllm.at_level(logging.DEBUG, logger="vllm.platforms"),
105
):
106
platform = resolve_current_platform_cls_qualname()
107
108
assert platform == "vllm.platforms.cpu.CpuPlatform"
92
- assert "zentorch failed to import" in caplog.text
93
- assert "OSError: incompatible shared library" in caplog.text
109
+ assert "zentorch failed to import" in caplog_vllm.text
110
+ assert "OSError: incompatible shared library" in caplog_vllm.text
111
112
96
-def test_zentorch_failure_other_than_oserror_is_not_recovered(caplog):
113
+def test_zentorch_failure_other_than_oserror_is_not_recovered(caplog_vllm):
114
original_import = builtins.__import__
115
116
def import_with_broken_zentorch(name, *args, **kwargs):
@@ -112,15 +129,15 @@ def test_zentorch_failure_other_than_oserror_is_not_recovered(caplog):
129
patch("vllm.platforms.vllm_version_matches_substr", return_value=True),
130
patch("vllm.platforms._is_amd_zen_cpu", return_value=True),
131
patch.object(builtins, "__import__", side_effect=import_with_broken_zentorch),
115
- caplog.at_level(logging.DEBUG, logger="vllm.platforms"),
132
+ caplog_vllm.at_level(logging.DEBUG, logger="vllm.platforms"),
133
):
134
platform = resolve_current_platform_cls_qualname()
135
136
assert platform == "vllm.platforms.interface.UnspecifiedPlatform"
120
- assert "RuntimeError: unknown zentorch failure" in caplog.text
137
+ assert "RuntimeError: unknown zentorch failure" in caplog_vllm.text
138
139
123
-def test_platform_plugin_failure_is_logged(caplog):
140
+def test_platform_plugin_failure_is_logged(caplog_vllm):
141
def failing_plugin():
142
raise RuntimeError("plugin exploded")
143
@@ -132,10 +149,10 @@ def test_platform_plugin_failure_is_logged(caplog):
149
clear=True,
150
),
151
patch("vllm.platforms.load_plugins_by_group", return_value={}),
135
- caplog.at_level(logging.DEBUG, logger="vllm.platforms"),
152
+ caplog_vllm.at_level(logging.DEBUG, logger="vllm.platforms"),
153
):
154
platform = resolve_current_platform_cls_qualname()
155
156
assert platform == "vllm.platforms.interface.UnspecifiedPlatform"
140
- assert "Platform plugin cpu failed during detection" in caplog.text
141
- assert "RuntimeError: plugin exploded" in caplog.text
157
+ assert "Platform plugin cpu failed during detection" in caplog_vllm.text
158
+ assert "RuntimeError: plugin exploded" in caplog_vllm.text
tools/pre_commit/test_tethering_allowlist.txt
-28
@@ -59,27 +59,6 @@ tests/models/test_dspark_mla.py # no models_*.yaml job collects this path
59
tests/models/test_language_model_cache_is_weak.py # no models_*.yaml job collects this path
60
tests/models/transformers/test_layer_registry.py # no models_*.yaml job collects this path
61
62
-# tests/ root-level - misc.yaml runs a hand-picked set of these by name
63
-# (test_regression.py, test_envs.py, test_outputs.py, test_pooling_params.py);
64
-# the rest are unreferenced.
65
-tests/test_access_log_filter.py # root test_*.py not in misc.yaml's by-name list
66
-tests/test_attention_backend_registry.py # root test_*.py not in misc.yaml's by-name list
67
-tests/test_audio_media_size_precheck.py # root test_*.py not in misc.yaml's by-name list
68
-tests/test_cmake_utils.py # root test_*.py not in misc.yaml's by-name list
69
-tests/test_connections.py # root test_*.py not in misc.yaml's by-name list
70
-tests/test_embedded_commit.py # root test_*.py not in misc.yaml's by-name list
71
-tests/test_force_first_config.py # root test_*.py not in misc.yaml's by-name list
72
-tests/test_fxgraphcache_pickle_patch.py # root test_*.py not in misc.yaml's by-name list
73
-tests/test_logprobs.py # root test_*.py not in misc.yaml's by-name list
74
-tests/test_quantization_revision_pin.py # root test_*.py not in misc.yaml's by-name list
75
-tests/test_ray_env_utils.py # root test_*.py not in misc.yaml's by-name list
76
-tests/test_request_input_bounds.py # root test_*.py not in misc.yaml's by-name list
77
-tests/test_scalartype.py # root test_*.py not in misc.yaml's by-name list
78
-tests/test_tensorizer_revision_pin.py # root test_*.py not in misc.yaml's by-name list
79
-tests/test_triton_utils.py # root test_*.py not in misc.yaml's by-name list
80
-tests/test_version.py # root test_*.py not in misc.yaml's by-name list
81
-tests/test_zen_cpu_platform_detection.py # root test_*.py not in misc.yaml's by-name list
82
-
62
# tests/v1/ - the v1 subtree is otherwise covered by many `pytest v1/...` jobs.
63
tests/v1/e2e/test_replayssm_decode.py # ReplaySSM decode test (#52506) wired into no job
64
tests/v1/ec_connector/integration/test_epd_correctness.py # run_epd_correctness_test.sh exists but no Buildkite job invokes it
@@ -91,10 +70,3 @@ tests/platforms/test_cpu.py # CPU-only unit test; no job targets tests/platform
70
71
# tests/tools/
72
tests/tools/test_config_validator.py # logic covered by the validate-config pre-commit hook; no test_areas job
94
-
95
-# tests/watermarking/ - added by #54053 (2026-09-09), no Buildkite job collects the dir yet
96
-tests/watermarking/test_detection.py # watermarking feature (#54053); no job collects tests/watermarking/
97
-tests/watermarking/test_gumbel.py # watermarking feature (#54053); no job collects tests/watermarking/
98
-tests/watermarking/test_prf.py # watermarking feature (#54053); no job collects tests/watermarking/
99
-tests/watermarking/test_watermarking.py # watermarking feature (#54053); no job collects tests/watermarking/
100
-tests/watermarking/test_watermarking_e2e.py # watermarking hardening (#56309); no job collects tests/watermarking/
vllm/version.py
-2
@@ -26,8 +26,6 @@ def _prev_minor_version_was(version_str):
26
if __version_tuple__[0:2] == (0, 0):
27
return True
28
29
- # Note - this won't do the right thing when we release 1.0!
30
- assert __version_tuple__[0] == 0
29
assert isinstance(__version_tuple__[1], int)
30
return version_str == f"{__version_tuple__[0]}.{__version_tuple__[1] - 1}"
31