Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 24 additions & 18 deletions tests/test_install_worker_holds.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,6 @@
from agent_comms.maintenance_barrier import HOLDER_NONCE, MaintenanceClaimHolder


@dataclass(frozen=True)
class HolderSeenProbe(RuntimeProbe[str]):
def run(self) -> str:
return os.environ.get(HOLDER_NONCE, "")


@pytest.mark.parametrize("command", [StartCliCommand, StopCliCommand])
def test_owner_actions_decode_in_the_selected_worker(comms, command):
runtime = LaunchRuntime.running()
Expand Down Expand Up @@ -73,18 +67,30 @@ def test_probes_under_successive_holds_share_one_worker():


def test_worker_answers_each_request_as_that_request_s_holder(monkeypatch, tmp_path):
holders = (ClaimId.mint(), ClaimId.mint(), "")
lines = "".join(FieldCodec.compact(FieldCodec.encode(ProbeRequest(HolderSeenProbe(), holder)))
+ "\n" for holder in holders)
# serve() takes over the descriptor of its stdout, so the answers need a real file.
answers = tmp_path / "answers"
monkeypatch.setattr("sys.stdin", io.StringIO(lines))
monkeypatch.setattr("sys.stdout", answers.open("w"))
monkeypatch.setenv(HOLDER_NONCE, ClaimId.mint())
serve()
assert [FieldCodec.decode(HolderSeenProbe().answer_type(),
FieldCodec.decode(ProbeReply, FieldCodec.parse(line)).answer)
for line in answers.read_text().splitlines()] == list(holders)
# The probe is a family member only while this test runs, so later tests reading the
# installer's probes (OutgoingWire) never see it.
@dataclass(frozen=True)
class HolderSeenProbe(RuntimeProbe[str]):
def run(self) -> str:
return os.environ.get(HOLDER_NONCE, "")

try:
holders = (ClaimId.mint(), ClaimId.mint(), "")
lines = "".join(
FieldCodec.compact(FieldCodec.encode(ProbeRequest(HolderSeenProbe(), holder))) + "\n"
for holder in holders
)
# serve() takes over the descriptor of its stdout, so the answers need a real file.
answers = tmp_path / "answers"
monkeypatch.setattr("sys.stdin", io.StringIO(lines))
monkeypatch.setattr("sys.stdout", answers.open("w"))
monkeypatch.setenv(HOLDER_NONCE, ClaimId.mint())
serve()
assert [FieldCodec.decode(HolderSeenProbe().answer_type(),
FieldCodec.decode(ProbeReply, FieldCodec.parse(line)).answer)
for line in answers.read_text().splitlines()] == list(holders)
finally:
RuntimeProbe.__registry__.pop(HolderSeenProbe.declared_name)


def test_a_raising_probe_ends_its_worker_and_refuses_with_its_traceback():
Expand Down
1 change: 1 addition & 0 deletions tests/test_repairs.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@


def tree(root: Path) -> Path:
(root / "pyproject.toml").write_text('[project.scripts]\nac = "agent_comms.cli:main"\n')
for name, source in PACKAGE.items():
path = root / "src" / "agent_comms" / name
path.parent.mkdir(parents=True, exist_ok=True)
Expand Down
Loading