Test-only fix continuing #2523. Updates two stale regression tests so the current broad Python pytest baseline is restored without changing production code.
92 lines
3.8 KiB
Python
92 lines
3.8 KiB
Python
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
def _read(rel_path: str) -> str:
|
|
return (ROOT / rel_path).read_text(encoding="utf-8")
|
|
|
|
|
|
def test_backend_status_treats_download_exit_zero_as_completed():
|
|
source = _read("routes/cookbook_routes.py")
|
|
|
|
assert "exit_match = re.search(r\"=== process exited with code\\s+(-?\\d+)\"" in source
|
|
assert "elif has_exit and task_type == \"download\":" in source
|
|
assert "status = \"completed\" if exit_code == 0 else \"error\"" in source
|
|
|
|
|
|
def test_background_status_poll_reconciles_into_local_tasks():
|
|
source = _read("static/js/cookbookRunning.js")
|
|
|
|
assert "const statusById = new Map(tasks.map(t => [t.session_id, t]));" in source
|
|
assert "const nextStatus = live.status === 'completed'" in source
|
|
assert "? 'done'" in source
|
|
assert ": (live.status === 'error'" in source
|
|
assert "? 'error'" in source
|
|
assert "_saveTasks(localTasks);" in source
|
|
assert "completedDeps.forEach(t => _refreshDepsAfterInstall(t));" in source
|
|
|
|
|
|
def test_local_windows_session_commands_use_local_powershell_log_dir():
|
|
source = _read("static/js/cookbookRunning.js")
|
|
|
|
assert "const host = task.remoteHost;" in source
|
|
assert "host ? '$env:TEMP\\\\odysseus-sessions' : '$env:TEMP\\\\odysseus-tmux'" in source
|
|
assert "return host ? `ssh ${pf}${host}" in source
|
|
assert ": `powershell -Command \"${ps}\"`;" in source
|
|
|
|
|
|
def test_dep_install_success_recognized_from_exit_sentinel():
|
|
"""A pip dependency install reports success via the runner's exit-0
|
|
sentinel / pip's "Successfully installed" line, not the HuggingFace
|
|
download markers. The shared helper must key off those, so an install
|
|
whose tmux pane is gone isn't misread as crashed."""
|
|
source = _read("static/js/cookbookRunning.js")
|
|
|
|
assert "function _depInstallSucceeded(output) {" in source
|
|
assert "=== Process exited with code" in source
|
|
assert "Successfully installed" in source
|
|
|
|
|
|
def test_session_gone_heuristic_honors_dep_install_success():
|
|
"""The reconnect loop's session-gone branch (download tasks need an HF
|
|
marker to look successful) must also accept a finished dependency install,
|
|
otherwise a clean pip install with no HF markers is marked crashed."""
|
|
source = _read("static/js/cookbookRunning.js")
|
|
|
|
assert "const depInstallSucceeded = !!task.payload?._dep && _depInstallSucceeded(lastOutput);" in source
|
|
# Whitespace-normalized so the check survives line-wrapping/formatting while
|
|
# still proving the invariant: a finished dependency install short-circuits
|
|
# looksSuccessful ahead of the download/serve branch.
|
|
normalized = " ".join(source.split())
|
|
assert (
|
|
"const looksSuccessful = depInstallSucceeded "
|
|
"|| (task.type === 'download'"
|
|
) in normalized
|
|
|
|
|
|
def test_background_poll_recovers_done_for_stopped_dependency_install():
|
|
"""When the backend reports a finished dependency install as "stopped"
|
|
(its pip package is never in the HF cache the dead-session check inspects),
|
|
the reconciler must recover "done" from the retained output instead of
|
|
downgrading the card to crashed."""
|
|
source = _read("static/js/cookbookRunning.js")
|
|
|
|
assert "const depDone = !!task.payload?._dep && _depInstallSucceeded(task.output);" in source
|
|
assert "depDone ? 'done' : (task.type === 'download' ? 'crashed' : 'stopped')" in source
|
|
|
|
|
|
def test_dependency_install_payload_keeps_env_path_for_refresh():
|
|
source = _read("static/js/cookbook.js")
|
|
|
|
assert "env_path: _envState.envPath || ''" in source
|
|
|
|
|
|
def test_local_dependency_probe_refreshes_user_site_visibility():
|
|
source = _read("routes/shell_routes.py")
|
|
|
|
assert "importlib.invalidate_caches()" in source
|
|
assert "user_site = site.getusersitepackages()" in source
|
|
assert "if user_site and os.path.isdir(user_site) and user_site not in sys.path:" in source
|