09393b354b
Completes the de-sidecar cleanup: no live code, test, current doc, script, or nix file mentions or is named "sidecar" any more. Only the dated PRD/research docs keep the term as historical record (agreed on the #385 thread). - Rename `sidecar_init.py`→`gateway_init.py` was done earlier; this pass sweeps the remaining descriptive uses: the egress / git-gate / supervise components are the gateway's *daemons*, the shared container is the *gateway*, the old per-bottle container was the *companion container*. - Rename `tests/integration/test_sidecar_bundle_image.py`→`test_gateway_image.py` and its class; update `docs/ci.md` + `tests/README.md` for the renamed/ removed integration tests. - `SIDECAR_PORTS` shell var in `scripts/firecracker-netpool.sh`→`GATEWAY_PORTS`. Full unit suite green (bar the pre-existing `/bin/sleep`-missing env errors in test_gateway_init); docker integration — gateway singleton, broker, real two-bottle multitenant isolation, and the gateway-image build — all pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WBMWTEtQdJ4W5UrWuLHCck
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
"""Unit-test package init.
|
|
|
|
Isolates ``HOME`` to a throwaway directory for the entire unit suite so
|
|
no test ever reads or writes the real ``~/.bot-bottle`` (state, queue,
|
|
and audit dirs all derive from ``paths.bot_bottle_root()`` →
|
|
``Path.home()``). Without this, a test that takes a ``flock`` on the
|
|
real audit log can **block indefinitely** when a live bottle's supervise
|
|
gateway holds that lock — observed as a hung ``coverage run`` at 0% CPU —
|
|
and unisolated tests otherwise pollute the developer's home dir.
|
|
|
|
Individual tests that need their own ``HOME`` still override
|
|
``os.environ['HOME']`` and restore it; they now restore to this isolated
|
|
dir rather than the real one, so isolation holds either way.
|
|
|
|
Tests that need their own app-data root call ``use_bottle_root`` (below),
|
|
which sets ``BOT_BOTTLE_ROOT`` — the supported override read by
|
|
``paths.bot_bottle_root`` — instead of monkey-patching. One env setting
|
|
covers every module and every flat/package copy of the helper.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import atexit
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
from collections.abc import Callable
|
|
from pathlib import Path
|
|
from unittest import mock
|
|
|
|
_real_home = os.environ.get("HOME")
|
|
_tmp_home = tempfile.mkdtemp(prefix="bot-bottle-unit-home.")
|
|
os.environ["HOME"] = _tmp_home
|
|
|
|
|
|
def _restore_home() -> None:
|
|
if _real_home is None:
|
|
os.environ.pop("HOME", None)
|
|
else:
|
|
os.environ["HOME"] = _real_home
|
|
shutil.rmtree(_tmp_home, ignore_errors=True)
|
|
|
|
|
|
atexit.register(_restore_home)
|
|
|
|
|
|
def use_bottle_root(root: Path) -> Callable[[], None]:
|
|
"""Redirect ``paths.bot_bottle_root()`` to ``root`` by setting
|
|
``BOT_BOTTLE_ROOT`` — the supported override. Returns a callable that
|
|
undoes it (store it as the test's restore hook, or pass to addCleanup).
|
|
|
|
Replaces monkey-patching ``paths.bot_bottle_root``; one env var covers
|
|
every module and the flat/package copies alike (they all read it)."""
|
|
patcher = mock.patch.dict(os.environ, {"BOT_BOTTLE_ROOT": str(root)})
|
|
patcher.start()
|
|
return patcher.stop
|