Skip to content

Commit 221856c

Browse files
Add --version flag to guidellm
Signed-off-by: Harshith-umesh <[email protected]>
1 parent 72374ef commit 221856c

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed

src/guidellm/__main__.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,32 @@
1919
from guidellm.utils import DefaultGroupHandler
2020
from guidellm.utils import cli as cli_tools
2121

22+
try:
23+
from guidellm.version import version
24+
except ImportError:
25+
version = "unknown"
26+
2227
STRATEGY_PROFILE_CHOICES = list(
2328
set(list(get_args(ProfileType)) + list(get_args(StrategyType)))
2429
)
2530

2631

32+
def _version_callback(ctx: click.Context, _param: click.Parameter, value: bool) -> None:
33+
"""Callback for --version flag."""
34+
if value:
35+
click.echo(f"guidellm version: {version}")
36+
ctx.exit()
37+
38+
2739
@click.group()
40+
@click.option(
41+
"--version",
42+
is_flag=True,
43+
expose_value=False,
44+
is_eager=True,
45+
help="Show the version and exit.",
46+
callback=_version_callback,
47+
)
2848
def cli():
2949
pass
3050

tests/unit/test_cli.py

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
"""
2+
Unit tests for CLI functionality, specifically the version flag.
3+
"""
4+
5+
import pytest
6+
from click.testing import CliRunner
7+
8+
from guidellm.__main__ import cli
9+
10+
11+
@pytest.mark.smoke
12+
def test_version_flag_long():
13+
"""Test that --version flag works correctly."""
14+
runner = CliRunner()
15+
result = runner.invoke(cli, ["--version"])
16+
17+
assert result.exit_code == 0
18+
assert "guidellm version:" in result.output
19+
assert result.output.strip().startswith("guidellm version:")
20+
21+
22+
@pytest.mark.smoke
23+
def test_version_flag_displays_actual_version():
24+
"""Test that --version displays the actual version from version.py."""
25+
runner = CliRunner()
26+
result = runner.invoke(cli, ["--version"])
27+
28+
assert result.exit_code == 0
29+
import re
30+
31+
version_pattern = r"guidellm version: \d+\.\d+"
32+
assert re.search(version_pattern, result.output)
33+
34+
35+
@pytest.mark.smoke
36+
def test_version_flag_exits_cleanly():
37+
"""Test that --version exits without processing other commands."""
38+
runner = CliRunner()
39+
result = runner.invoke(cli, ["--version", "benchmark"])
40+
41+
assert result.exit_code == 0
42+
assert "guidellm version:" in result.output
43+
assert "Commands to run a new benchmark" not in result.output
44+
45+
46+
@pytest.mark.smoke
47+
def test_help_shows_version_option():
48+
"""Test that --help shows the --version option."""
49+
runner = CliRunner()
50+
result = runner.invoke(cli, ["--help"])
51+
52+
assert result.exit_code == 0
53+
assert "--version" in result.output
54+
assert "Show the version and exit" in result.output
55+
56+
57+
@pytest.mark.smoke
58+
def test_other_commands_still_work():
59+
"""Test that other CLI commands still work after adding version flag."""
60+
runner = CliRunner()
61+
result = runner.invoke(cli, ["--help"])
62+
63+
assert result.exit_code == 0
64+
assert "benchmark" in result.output
65+
assert "config" in result.output
66+
assert "preprocess" in result.output
67+
68+
69+
@pytest.mark.smoke
70+
def test_version_flag_case_sensitivity():
71+
"""Test that --version flag is case sensitive."""
72+
runner = CliRunner()
73+
74+
result = runner.invoke(cli, ["--version"])
75+
assert result.exit_code == 0
76+
assert "guidellm version:" in result.output
77+
78+
# --VERSION should not work
79+
result = runner.invoke(cli, ["--VERSION"])
80+
assert result.exit_code != 0
81+
assert "No such option" in result.output
82+
83+
84+
@pytest.mark.integration
85+
def test_version_integration_with_actual_version():
86+
"""Integration test to verify version matches what's in version.py."""
87+
try:
88+
from guidellm.version import version as actual_version
89+
90+
runner = CliRunner()
91+
result = runner.invoke(cli, ["--version"])
92+
93+
assert result.exit_code == 0
94+
expected_output = f"guidellm version: {actual_version}"
95+
assert expected_output in result.output
96+
except ImportError:
97+
runner = CliRunner()
98+
result = runner.invoke(cli, ["--version"])
99+
100+
assert result.exit_code == 0
101+
assert "guidellm version: unknown" in result.output

0 commit comments

Comments
 (0)