# SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project """Unit tests for the `vllm launch` CLI subcommand.""" import argparse from unittest.mock import patch import pytest from vllm.entrypoints.cli.launch import ( LaunchSubcommand, RenderSubcommand, cmd_init, ) from vllm.utils.argparse_utils import FlexibleArgumentParser @pytest.fixture def launch_parser(): parser = FlexibleArgumentParser(description="test") subparsers = parser.add_subparsers(required=False, dest="subparser") LaunchSubcommand().subparser_init(subparsers) return parser def test_subcommand_name(): assert LaunchSubcommand().name == "launch" def test_cmd_init_returns_subcommand(): result = cmd_init() assert len(result) == 1 assert isinstance(result[0], LaunchSubcommand) # -- Parsing: `vllm launch render` -- def test_parse_launch_render(launch_parser): args = launch_parser.parse_args(["launch", "render", "--model", "test-model"]) assert args.launch_component == "render" def test_parse_launch_requires_component(launch_parser): with pytest.raises(SystemExit): launch_parser.parse_args(["launch", "--model", "test-model"]) def test_parse_launch_invalid_component(launch_parser): with pytest.raises(SystemExit): launch_parser.parse_args(["launch", "unknown", "--model", "test-model"]) # -- Dispatch -- def test_cmd_launch_render_calls_run(): args = argparse.Namespace(model_tag=None, model="test-model") with patch("vllm.entrypoints.cli.launch.uvloop.run") as mock_uvloop_run: RenderSubcommand.cmd(args) mock_uvloop_run.assert_called_once() def test_cmd_launch_model_tag_overrides(): args = argparse.Namespace( model_tag="tag-model", model="original-model", launch_command=lambda a: None, ) LaunchSubcommand.cmd(args) assert args.model == "tag-model" def test_cmd_launch_model_tag_none(): args = argparse.Namespace( model_tag=None, model="original-model", launch_command=lambda a: None, ) LaunchSubcommand.cmd(args) assert args.model == "original-model" def test_cmd_dispatches(): called = {} def fake_dispatch(args): called["args"] = args args = argparse.Namespace(launch_command=fake_dispatch) LaunchSubcommand.cmd(args) assert "args" in called # -- Module registration -- def test_subparser_init_returns_parser(): parser = FlexibleArgumentParser(description="test") subparsers = parser.add_subparsers(required=False, dest="subparser") result = LaunchSubcommand().subparser_init(subparsers) assert isinstance(result, FlexibleArgumentParser) def test_launch_registered_in_main(): """Verify that launch module is importable as a CLI module.""" import vllm.entrypoints.cli.launch as launch_module assert hasattr(launch_module, "cmd_init") subcmds = launch_module.cmd_init() assert any(s.name == "launch" for s in subcmds)