Add artifact.retry_analysis/tests/test_core.py
This commit is contained in:
parent
49252400d7
commit
b59154d6dc
1 changed files with 69 additions and 0 deletions
69
artifact.retry_analysis/tests/test_core.py
Normal file
69
artifact.retry_analysis/tests/test_core.py
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
import json
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from artifact_retry_analysis import core
|
||||
|
||||
|
||||
def make_temp_logfile(tmp_path, entries):
|
||||
file_path = tmp_path / "retry_log.json"
|
||||
with file_path.open('w', encoding='utf-8') as f:
|
||||
json.dump(entries, f)
|
||||
return file_path
|
||||
|
||||
|
||||
def test_analyze_retry_data_basic_success(tmp_path):
|
||||
entries = [
|
||||
{"retry_taken": True, "retry_total_overhead_ms": 50.0, "stratum": "pinned", "expires_at_dist_hours": 1.5, "delta_t": 0.1},
|
||||
{"retry_taken": True, "retry_total_overhead_ms": 70.0, "stratum": "unpinned", "expires_at_dist_hours": 2.5, "delta_t": 0.2},
|
||||
{"retry_taken": False, "retry_total_overhead_ms": 0.0, "stratum": "pinned", "expires_at_dist_hours": 1.0, "delta_t": 0.0}
|
||||
]
|
||||
log_file = make_temp_logfile(tmp_path, entries)
|
||||
|
||||
report = core.analyze_retry_data(str(log_file))
|
||||
assert isinstance(report, core.RetryAnalysisReport)
|
||||
assert report.total_retries == 2
|
||||
assert 0.0 <= report.success_rate <= 100.0
|
||||
assert 0.0 <= report.failure_rate <= 100.0
|
||||
json_out = json.loads(report.to_json())
|
||||
assert set(json_out.keys()) == {"total_retries", "success_rate", "failure_rate", "details"}
|
||||
|
||||
|
||||
def test_analyze_retry_data_empty_file(tmp_path):
|
||||
log_file = make_temp_logfile(tmp_path, [])
|
||||
report = core.analyze_retry_data(str(log_file))
|
||||
assert report.total_retries == 0
|
||||
assert report.success_rate == 0.0
|
||||
assert report.failure_rate == 0.0
|
||||
|
||||
|
||||
def test_analyze_retry_data_invalid_json(tmp_path):
|
||||
bad_file = tmp_path / "bad.json"
|
||||
bad_file.write_text('{invalid json}', encoding='utf-8')
|
||||
with pytest.raises((json.JSONDecodeError, ValueError)):
|
||||
_ = core.analyze_retry_data(str(bad_file))
|
||||
|
||||
|
||||
def test_report_to_json_roundtrip():
|
||||
report = core.RetryAnalysisReport(
|
||||
total_retries=10,
|
||||
success_rate=80.0,
|
||||
failure_rate=20.0,
|
||||
details="All systems stable"
|
||||
)
|
||||
json_str = report.to_json()
|
||||
data = json.loads(json_str)
|
||||
assert data['total_retries'] == 10
|
||||
assert abs(data['success_rate'] - 80.0) < 1e-6
|
||||
assert 'details' in data
|
||||
|
||||
|
||||
def test_edge_case_failure_rate(tmp_path):
|
||||
entries = [
|
||||
{"retry_taken": True, "retry_total_overhead_ms": 30.0, "stratum": "pinned", "expires_at_dist_hours": 1.5, "delta_t": 0.1},
|
||||
{"retry_taken": True, "retry_total_overhead_ms": 25.0, "stratum": "unpinned", "expires_at_dist_hours": 2.0, "delta_t": 0.2},
|
||||
{"retry_taken": True, "retry_total_overhead_ms": 40.0, "stratum": "unpinned", "expires_at_dist_hours": 3.0, "delta_t": 0.3}
|
||||
]
|
||||
log_file = make_temp_logfile(tmp_path, entries)
|
||||
report = core.analyze_retry_data(str(log_file))
|
||||
assert isinstance(report.total_retries, int)
|
||||
assert report.success_rate + report.failure_rate <= 100.0 + 1e-6
|
||||
Loading…
Reference in a new issue