Add trace_agg/tests/test_core.py

This commit is contained in:
Mika 2026-01-14 15:28:05 +00:00
parent 4d325f19d8
commit bcfe946ef2

View file

@ -0,0 +1,63 @@
import json
import pytest
from pathlib import Path
import src.trace_agg.core as core
# --- Fixtures ---
@pytest.fixture
def sample_trace_data(tmp_path):
data = {
"correlation_id": "corr01",
"events": [
{"had_sched_switch": 1, "had_irq": 0, "had_softirq": 0, "cpu_ids_seen": [0]},
{"had_sched_switch": 0, "had_irq": 1, "had_softirq": 0, "cpu_ids_seen": [1]},
{"had_sched_switch": 0, "had_irq": 0, "had_softirq": 1, "cpu_ids_seen": [2]}
]
}
sample_path = tmp_path / "sample_trace.json"
with open(sample_path, "w", encoding="utf-8") as fh:
json.dump(data, fh)
return sample_path
# --- Tests ---
def test_aggregate_trace_data_nominal(sample_trace_data, monkeypatch):
def mock_open_file(path: str):
with open(path, "r", encoding="utf-8") as fh:
return json.load(fh)
monkeypatch.setattr(core, "open", open)
result = core.aggregate_trace_data("corr01")
assert isinstance(result, dict)
assert "had_sched_switch" in result
assert "had_irq" in result
assert "had_softirq" in result
assert "cpu_ids_seen" in result
# Ensure aggregation logic makes sense
assert result["had_sched_switch"] in (0, 1)
assert result["had_irq"] in (0, 1)
assert result["had_softirq"] in (0, 1)
assert all(isinstance(cpu, int) for cpu in result["cpu_ids_seen"])
def test_aggregate_trace_data_edge_case_empty(monkeypatch):
def mock_open_file(path: str):
return {"correlation_id": "empty_case", "events": []}
monkeypatch.setattr(core, "open", lambda path, *_args, **_kwargs: open(__file__, "r")) # Dummy but unused
# Monkeypatch json.load since we're not actually reading
monkeypatch.setattr(json, "load", lambda fh: {"correlation_id": "empty_case", "events": []})
result = core.aggregate_trace_data("empty_case")
assert result["had_sched_switch"] == 0
assert result["had_irq"] == 0
assert result["had_softirq"] == 0
assert result["cpu_ids_seen"] == []
def test_aggregate_trace_data_invalid_input(monkeypatch):
monkeypatch.setattr(json, "load", lambda fh: {"correlation_id": "bad", "events": [{"had_sched_switch": "wrong"}]})
with pytest.raises((ValueError, TypeError)):
core.aggregate_trace_data("bad")