fix(warmup_test): poll for canary records in live_gui test
The live_gui subprocess spawns the desktop GUI, which creates AppController with defer_warmup=True (src/gui_2.py:318). Warmup is deferred until the first frame is painted (src/gui_2.py:1076). The previous test queried /api/warmup_canaries immediately after wait_for_server, racing against the first frame - canary list was empty until start_warmup() ran. Replace the immediate assert with a poll-with-retry loop (15s deadline, 0.5s interval) per workflow.md 'Async Setters Need Poll-For-State' rule.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||||
@@ -108,10 +109,23 @@ def test_get_warmup_canaries_handles_empty_response() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_live_warmup_canaries_endpoint(live_gui) -> None:
|
def test_live_warmup_canaries_endpoint(live_gui) -> None:
|
||||||
"""Live: GET /api/warmup_canaries returns canary records with thread + status info."""
|
"""Live: GET /api/warmup_canaries returns canary records with thread + status info.
|
||||||
|
|
||||||
|
The canary list is populated by WarmupManager.submit() which is called
|
||||||
|
from AppController.start_warmup(). For the live_gui subprocess the warmup
|
||||||
|
is deferred until the first frame is painted (src/gui_2.py:1076). This
|
||||||
|
test polls until at least one canary appears, with a 15s deadline, to
|
||||||
|
handle the race between server-ready and first-frame-painted.
|
||||||
|
"""
|
||||||
client = ApiHookClient()
|
client = ApiHookClient()
|
||||||
assert client.wait_for_server(timeout=10)
|
assert client.wait_for_server(timeout=10)
|
||||||
canaries = client.get_warmup_canaries()
|
canaries: list = []
|
||||||
|
deadline = time.time() + 15.0
|
||||||
|
while time.time() < deadline:
|
||||||
|
canaries = client.get_warmup_canaries()
|
||||||
|
if canaries:
|
||||||
|
break
|
||||||
|
time.sleep(0.5)
|
||||||
assert isinstance(canaries, list)
|
assert isinstance(canaries, list)
|
||||||
assert len(canaries) >= 1, "expected at least one canary record from live warmup"
|
assert len(canaries) >= 1, "expected at least one canary record from live warmup"
|
||||||
for c in canaries:
|
for c in canaries:
|
||||||
|
|||||||
Reference in New Issue
Block a user