zeroshotGPU / tests /test_preflight.py
Arjunvir Singh
Initial commit: zeroshotGPU MVP with full eval surface
db06ffa
"""Tests for the preflight runner."""
from __future__ import annotations
import unittest
from unittest.mock import patch
from zsgdp.preflight import StepResult, format_failures, format_summary, run_preflight
class FormatSummaryTests(unittest.TestCase):
def test_pass_summary_lists_each_step(self):
from zsgdp.preflight import PreflightResult
result = PreflightResult(
steps=[
StepResult(name="unit", passed=True, elapsed_seconds=0.5),
StepResult(name="regression", passed=True, elapsed_seconds=0.7),
]
)
summary = format_summary(result)
self.assertIn("[ok] unit", summary)
self.assertIn("[ok] regression", summary)
self.assertIn("preflight: PASS", summary)
def test_fail_summary_marks_failed_step(self):
from zsgdp.preflight import PreflightResult
result = PreflightResult(
steps=[
StepResult(name="unit", passed=True, elapsed_seconds=0.5),
StepResult(name="regression", passed=False, elapsed_seconds=1.2, output="snapshot drift"),
]
)
summary = format_summary(result)
self.assertIn("[FAIL] regression", summary)
self.assertIn("preflight: FAIL", summary)
def test_skipped_steps_render_as_skip(self):
from zsgdp.preflight import PreflightResult
result = PreflightResult(
steps=[StepResult(name="unit", passed=True, elapsed_seconds=0.0, skipped=True)]
)
self.assertIn("[skip] unit", format_summary(result))
def test_format_failures_concatenates_outputs(self):
from zsgdp.preflight import PreflightResult
result = PreflightResult(
steps=[
StepResult(name="unit", passed=False, elapsed_seconds=0.0, output="boom"),
StepResult(name="regression", passed=False, elapsed_seconds=0.0, output="snapshot off"),
]
)
text = format_failures(result)
self.assertIn("--- unit output ---", text)
self.assertIn("boom", text)
self.assertIn("--- regression output ---", text)
self.assertIn("snapshot off", text)
class RunPreflightTests(unittest.TestCase):
def test_skip_flags_mark_steps_skipped(self):
with patch("zsgdp.preflight._run_step") as run_step:
run_step.return_value = StepResult(name="unit", passed=True, elapsed_seconds=0.0)
result = run_preflight(
skip_unit=True,
skip_regression=True,
skip_space_check=True,
skip_parsers=True,
)
self.assertEqual(run_step.call_count, 0)
self.assertTrue(all(step.skipped for step in result.steps))
self.assertTrue(result.passed)
def test_aggregates_pass_when_all_steps_succeed(self):
with patch(
"zsgdp.preflight._run_step",
side_effect=lambda name, command, cwd: StepResult(name=name, passed=True, elapsed_seconds=0.1),
):
result = run_preflight()
self.assertTrue(result.passed)
# No benchmark by default => 4 steps.
self.assertEqual(len(result.steps), 4)
def test_failure_in_one_step_fails_overall(self):
def _step(name, command, cwd):
return StepResult(name=name, passed=(name != "regression"), elapsed_seconds=0.1, output="boom" if name == "regression" else "")
with patch("zsgdp.preflight._run_step", side_effect=_step):
result = run_preflight()
self.assertFalse(result.passed)
failed_names = [step.name for step in result.failed_steps]
self.assertEqual(failed_names, ["regression"])
def test_benchmark_step_added_when_enabled(self):
with patch(
"zsgdp.preflight._run_step",
side_effect=lambda name, command, cwd: StepResult(name=name, passed=True, elapsed_seconds=0.1),
):
result = run_preflight(run_benchmark=True)
names = [step.name for step in result.steps]
self.assertEqual(names, ["unit", "regression", "space_check", "parsers", "benchmark"])
if __name__ == "__main__":
unittest.main()