| |
| |
| """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) |
|
|
|
|
| |
|
|
|
|
| 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"]) |
|
|
|
|
| |
|
|
|
|
| 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 |
|
|
|
|
| |
|
|
|
|
| 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) |
|
|