test_system_state_registry.py 2.12 KB
from __future__ import annotations

from apps.web_api.runtime import system_state


def test_registry_prepare_start_and_shutdown_flow():
    registry = system_state.SystemStateRegistry()

    assert registry.snapshot() == {
        "started": False,
        "starting": False,
        "shutdown_requested": False,
    }

    allowed, message = registry.prepare_start()

    assert allowed is True
    assert message == "\u7cfb\u7edf\u542f\u52a8\u4e2d"
    assert registry.snapshot()["starting"] is True

    registry.set_state(started=True, starting=False)
    assert registry.snapshot() == {
        "started": True,
        "starting": False,
        "shutdown_requested": False,
    }

    assert registry.request_shutdown() is True
    assert registry.request_shutdown() is False
    assert registry.snapshot()["shutdown_requested"] is True


def test_module_level_wrappers_remain_compatible(monkeypatch):
    registry = system_state.SystemStateRegistry()
    assert registry.request_shutdown() is True
    monkeypatch.setattr(system_state, "SYSTEM_STATE_REGISTRY", registry)

    system_state.set_system_state(started=True, starting=False)
    assert system_state.get_system_state() == {
        "started": True,
        "starting": False,
        "shutdown_requested": False,
    }

    system_state.set_system_state(started=False, starting=False)
    assert system_state.mark_shutdown_requested() is True
    assert system_state.mark_shutdown_requested() is False

    allowed, message = system_state.prepare_system_start()
    assert allowed is True
    assert message == "\u7cfb\u7edf\u542f\u52a8\u4e2d"
    assert system_state.get_system_state() == {
        "started": False,
        "starting": True,
        "shutdown_requested": False,
    }


def test_prepare_system_start_blocks_when_already_starting(monkeypatch):
    registry = system_state.SystemStateRegistry()
    registry.set_state(starting=True)
    monkeypatch.setattr(system_state, "SYSTEM_STATE_REGISTRY", registry)

    allowed, message = system_state.prepare_system_start()

    assert allowed is False
    assert message == "\u7cfb\u7edf\u6b63\u5728\u542f\u52a8\uff0c\u8bf7\u7a0d\u5019"