cmux/tests/test_sidebar_log_parsing.py
Lawrence Chen 20c62b3b9a
Fix CI race condition on self-hosted runner (#19)
* Fix zsh ZDOTDIR wrapper + log parsing with -- messages

* Fix CI race condition: serialize self-hosted builds with concurrency group

Two workflows racing on the same self-hosted runner caused DerivedData
corruption (release's rm -rf nuked DerivedData while CI was building).
Add shared concurrency group and scope DerivedData cleanup to project.
2026-02-06 22:32:14 -08:00

64 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""
Regression: sidebar log messages must preserve tokens that start with `--`.
TerminalController.parseOptions() treats `--*` tokens as options until a `--`
separator. The log command must therefore send options before the message and
use `--` so arbitrary message contents round-trip correctly.
Run with a tagged instance to avoid unix socket conflicts:
CMUX_TAG=<tag> python3 tests/test_sidebar_log_parsing.py
"""
from __future__ import annotations
import os
import sys
import time
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from cmux import cmux, cmuxError # noqa: E402
def _assert_contains(text: str, needle: str) -> None:
if needle not in (text or ""):
raise AssertionError(f"Expected to find: {needle}\n\nGot:\n{text}")
def main() -> int:
try:
with cmux() as client:
tab_id = client.new_tab()
client.select_tab(tab_id)
time.sleep(0.7)
client._send_command(f"clear_log --tab={tab_id}")
msg1 = "hello --force mid -- --level=not-an-option end"
client.log(msg1, level="warning", source="test", tab=tab_id)
msg2 = "--force starts-with-dashdash"
client.log(msg2, level="info", source="test", tab=tab_id)
time.sleep(0.2)
out = client._send_command(f"list_log --tab={tab_id} --limit=2")
_assert_contains(out, f"[warning] {msg1} (source=test)")
_assert_contains(out, f"[info] {msg2} (source=test)")
try:
client.close_tab(tab_id)
except Exception:
pass
print("PASS: log messages preserve `--*` tokens")
return 0
except (cmuxError, AssertionError) as exc:
print(f"FAIL: {exc}")
return 1
if __name__ == "__main__":
raise SystemExit(main())