Skip to content

Commit 92e0da9

Browse files
committed
Add additional CLI tests for vec-inf status
1 parent ec4d6dc commit 92e0da9

File tree

1 file changed

+106
-1
lines changed

1 file changed

+106
-1
lines changed

tests/vec_inf/cli/test_cli.py

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def test_list_single_model(runner):
135135

136136

137137
def test_status_command(runner):
138-
"""Test status command."""
138+
"""Test status command with job ID argument."""
139139
with patch("vec_inf.cli._cli.VecInfClient") as mock_client_class:
140140
mock_client = MagicMock()
141141
mock_client_class.return_value = mock_client
@@ -154,6 +154,111 @@ def test_status_command(runner):
154154
assert "Meta-Llama-3.1-8B" in result.output
155155

156156

157+
def test_status_command_no_job_id_no_running_jobs(runner):
158+
"""Test status command with no argument when no jobs are running."""
159+
with patch("vec_inf.cli._cli.VecInfClient") as mock_client_class:
160+
mock_client = MagicMock()
161+
mock_client_class.return_value = mock_client
162+
mock_client.fetch_running_jobs.return_value = []
163+
164+
result = runner.invoke(cli, ["status"])
165+
166+
assert result.exit_code == 0
167+
assert "No running jobs found." in result.output
168+
169+
170+
def test_status_command_no_job_id_single_running_job(runner):
171+
"""Test status command with no argument when one job is running."""
172+
with patch("vec_inf.cli._cli.VecInfClient") as mock_client_class:
173+
mock_client = MagicMock()
174+
mock_client_class.return_value = mock_client
175+
mock_client.fetch_running_jobs.return_value = ["12345"]
176+
177+
mock_status = MagicMock()
178+
mock_status.model_name = "test-model-1"
179+
mock_status.server_status = "READY"
180+
mock_status.base_url = "http://localhost:8000"
181+
mock_status.pending_reason = None
182+
mock_status.failed_reason = None
183+
mock_client.get_status.return_value = mock_status
184+
185+
result = runner.invoke(cli, ["status"])
186+
187+
assert result.exit_code == 0
188+
assert "test-model-1" in result.output
189+
mock_client.fetch_running_jobs.assert_called_once()
190+
mock_client.get_status.assert_called_once_with("12345")
191+
192+
193+
def test_status_command_no_job_id_multiple_running_jobs(runner):
194+
"""Test status command with no argument when multiple jobs are running."""
195+
with patch("vec_inf.cli._cli.VecInfClient") as mock_client_class:
196+
mock_client = MagicMock()
197+
mock_client_class.return_value = mock_client
198+
mock_client.fetch_running_jobs.return_value = ["12345", "67890"]
199+
200+
mock_status_1 = MagicMock()
201+
mock_status_1.model_name = "test-model-1"
202+
mock_status_1.server_status = "READY"
203+
mock_status_1.base_url = "http://localhost:8000"
204+
mock_status_1.pending_reason = None
205+
mock_status_1.failed_reason = None
206+
207+
mock_status_2 = MagicMock()
208+
mock_status_2.model_name = "test-model-2"
209+
mock_status_2.server_status = "PENDING"
210+
mock_status_2.base_url = None
211+
mock_status_2.pending_reason = "Waiting for resources"
212+
mock_status_2.failed_reason = None
213+
214+
mock_client.get_status.side_effect = [mock_status_1, mock_status_2]
215+
216+
result = runner.invoke(cli, ["status"])
217+
218+
assert result.exit_code == 0
219+
assert "test-model-1" in result.output
220+
assert "test-model-2" in result.output
221+
assert "12345" in result.output
222+
assert "67890" in result.output
223+
mock_client.fetch_running_jobs.assert_called_once()
224+
assert mock_client.get_status.call_count == 2
225+
226+
227+
def test_status_command_no_job_id_multiple_jobs_json_mode(runner):
228+
"""Test status command with no argument and JSON mode for multiple jobs."""
229+
with patch("vec_inf.cli._cli.VecInfClient") as mock_client_class:
230+
mock_client = MagicMock()
231+
mock_client_class.return_value = mock_client
232+
mock_client.fetch_running_jobs.return_value = ["12345", "67890"]
233+
234+
mock_status_1 = MagicMock()
235+
mock_status_1.model_name = "test-model-1"
236+
mock_status_1.server_status = "READY"
237+
mock_status_1.base_url = "http://localhost:8000"
238+
mock_status_1.pending_reason = None
239+
mock_status_1.failed_reason = None
240+
241+
mock_status_2 = MagicMock()
242+
mock_status_2.model_name = "test-model-2"
243+
mock_status_2.server_status = "FAILED"
244+
mock_status_2.base_url = None
245+
mock_status_2.pending_reason = None
246+
mock_status_2.failed_reason = "Out of memory"
247+
248+
mock_client.get_status.side_effect = [mock_status_1, mock_status_2]
249+
250+
result = runner.invoke(cli, ["status", "--json-mode"])
251+
252+
assert result.exit_code == 0
253+
output = json.loads(result.output)
254+
assert isinstance(output, list)
255+
assert len(output) == 2
256+
assert output[0]["model_name"] == "test-model-1"
257+
assert output[0]["model_status"] == "READY"
258+
assert output[1]["model_name"] == "test-model-2"
259+
assert output[1]["model_status"] == "FAILED"
260+
261+
157262
def test_shutdown_command(runner):
158263
"""Test shutdown command."""
159264
with patch("vec_inf.cli._cli.VecInfClient") as mock_client_class:

0 commit comments

Comments
 (0)