| """Unit tests for ScriptedDefender — CPU-only.""" | |
| from __future__ import annotations | |
| import pytest | |
| from sre_arena_env.models import DefenderAction | |
| from sre_arena_env.training.scripted_defender import ScriptedDefender | |
| class TestScriptedDefender: | |
| def test_act_returns_defender_action(self): | |
| d = ScriptedDefender() | |
| assert isinstance(d.act(), DefenderAction) | |
| def test_act_always_returns_read_log(self): | |
| d = ScriptedDefender(seed=0) | |
| for _ in range(20): | |
| assert d.act().action_type == "read_log" | |
| def test_different_seeds_same_action_type(self): | |
| d1 = ScriptedDefender(seed=1) | |
| d2 = ScriptedDefender(seed=999) | |
| assert d1.act().action_type == d2.act().action_type == "read_log" | |
| def test_log_tail_lines_is_positive(self): | |
| d = ScriptedDefender() | |
| assert d.act().log_tail_lines >= 1 | |
| def test_multiple_calls_same_instance_consistent(self): | |
| d = ScriptedDefender(seed=42) | |
| actions = [d.act() for _ in range(5)] | |
| assert all(a.action_type == "read_log" for a in actions) | |