jarvis / tests /test_runtime_bootstrap.py
Jonathan Haas
refactor: close waves 108-112 runtime and reliability hardening
d6acd97
Raw
History Blame Contribute Delete
3.35 kB
from __future__ import annotations
from types import SimpleNamespace
from jarvis.runtime_bootstrap import (
apply_cli_overrides,
build_observability_store,
build_skill_registry,
build_voice_attention_controller,
initialize_runtime_fields,
telemetry_defaults,
)
def test_apply_cli_overrides_respects_disable_flags() -> None:
config = SimpleNamespace(motion_enabled=True, home_enabled=True, hand_track_enabled=True)
args = SimpleNamespace(no_motion=True, no_home=True, no_hands=False)
apply_cli_overrides(config, args)
assert config.motion_enabled is False
assert config.home_enabled is False
assert config.hand_track_enabled is True
def test_build_voice_attention_controller_uses_config_values() -> None:
config = SimpleNamespace(
wake_words=["jarvis", "hey jarvis"],
wake_mode="wake_word",
wake_calibration_profile="balanced",
wake_word_sensitivity=0.42,
voice_followup_window_sec=4.0,
voice_timeout_profile="normal",
voice_timeout_short_sec=3.0,
voice_timeout_normal_sec=8.0,
voice_timeout_long_sec=20.0,
barge_threshold_always_listening=0.55,
barge_threshold_wake_word=0.65,
barge_threshold_push_to_talk=0.75,
voice_min_post_wake_chars=2,
voice_room_default="office",
)
controller = build_voice_attention_controller(config)
snapshot = controller.status(now=0.0)
assert controller.mode == "wake_word"
assert snapshot["wake_words"] == ["jarvis", "hey jarvis"]
assert controller.active_room == "office"
def test_build_skill_registry_discovers_empty_directory(tmp_path) -> None:
skills_dir = tmp_path / "skills"
skills_dir.mkdir()
config = SimpleNamespace(
skills_dir=str(skills_dir),
skills_allowlist=[],
skills_require_signature=False,
skills_signature_key="",
skills_enabled=True,
skills_state_path=str(tmp_path / "skills-state.json"),
)
registry = build_skill_registry(config)
assert registry.enabled is True
assert registry.status_snapshot()["loaded_count"] == 0
def test_build_observability_store_disabled_returns_none(tmp_path) -> None:
config = SimpleNamespace(
observability_enabled=False,
observability_db_path=str(tmp_path / "observability.db"),
observability_state_path=str(tmp_path / "observability-state.json"),
observability_event_log_path=str(tmp_path / "observability-events.jsonl"),
observability_failure_burst_threshold=3,
)
assert build_observability_store(config) is None
def test_initialize_runtime_fields_sets_defaults() -> None:
runtime = SimpleNamespace(_default_stt_diagnostics=lambda: {"confidence_band": "unknown"})
initialize_runtime_fields(
runtime,
state_idle_value="idle",
conversation_trace_maxlen=3,
episodic_timeline_maxlen=4,
runtime_invariant_history_maxlen=5,
)
assert runtime._turn_choreography["phase"] == "idle"
assert runtime._tts_gain == 1.0
assert runtime._active_control_preset == "custom"
assert runtime._telemetry == telemetry_defaults()
assert runtime._conversation_traces.maxlen == 3
assert runtime._episodic_timeline.maxlen == 4
assert runtime._runtime_invariant_recent.maxlen == 5