Activate scoped user-engine mail and finish EMAIL-WP-0008
Some checks failed
Transactional mail acceptance / mail (push) Failing after 16s
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a11fd9-caf6-7a63-b578-9daaaa134ff2
This commit is contained in:
tegwick 2026-10-09 20:23:43 +02:00
parent 42e8b2040b
commit e9b9d1c708
17 changed files with 651 additions and 19 deletions

View file

@ -29,7 +29,7 @@ def test_caller_writer_uses_cas0_and_revokes_on_every_outcome(monkeypatch, failu
if args[0] == "token":
return json.dumps({"auth": {"client_token": "synthetic-writer",
"policies": [caller.WRITER], "lease_duration": 300}}).encode()
if "auth/token/revoke-self" in args:
if args == ["token", "revoke", "-self"]:
return b"{}"
if "platform/metadata/workloads/email-connect/callers/user-engine" in args:
return None
@ -48,7 +48,7 @@ def test_caller_writer_uses_cas0_and_revokes_on_every_outcome(monkeypatch, failu
receipt = caller.provision(transport)
assert receipt["kv_version"] == 1 and receipt["readback_equal"]
assert value not in json.dumps(receipt)
assert calls[-1][0] == ["write", "auth/token/revoke-self"]
assert calls[-1][0] == ["token", "revoke", "-self"]
assert calls[-1][2] == "synthetic-writer"
@ -64,7 +64,7 @@ def test_caller_writer_rejects_inherited_authority_before_any_secret_access(monk
return b"{}"
with pytest.raises(caller.Refused, match="bounded_writer_required"):
caller.provision(transport)
assert len(seen) == 2 and seen[-1] == ["write", "auth/token/revoke-self"]
assert len(seen) == 2 and seen[-1] == ["token", "revoke", "-self"]
def test_unreviewed_plan_refuses_before_decision_network_call(monkeypatch):
@ -74,6 +74,53 @@ def test_unreviewed_plan_refuses_before_decision_network_call(monkeypatch):
caller.approved_plan({}, "unreviewed", None, "http://synthetic.invalid")
def test_caller_self_revocation_reaches_actual_bao_cli_endpoint(monkeypatch):
import shutil
from http.server import BaseHTTPRequestHandler, HTTPServer
from threading import Thread
if not shutil.which("bao"):
pytest.skip("OpenBao CLI integration requires installed bao")
caller = module("admit-scoped-caller", monkeypatch)
seen = []
class Handler(BaseHTTPRequestHandler):
def do_POST(self):
seen.append((self.path, self.headers.get("X-Vault-Token")))
self.send_response(204)
self.end_headers()
def do_PUT(self):
self.do_POST()
def log_message(self, *args):
pass
server = HTTPServer(("127.0.0.1", 0), Handler)
worker = Thread(target=server.serve_forever, daemon=True)
worker.start()
monkeypatch.setenv("BAO_ADDR", f"http://127.0.0.1:{server.server_port}")
monkeypatch.setenv("VAULT_ADDR", f"http://127.0.0.1:{server.server_port}")
monkeypatch.delenv("BAO_NAMESPACE", raising=False)
monkeypatch.delenv("VAULT_NAMESPACE", raising=False)
try:
caller.bao(["token", "revoke", "-self"], token="synthetic-only-writer")
finally:
server.shutdown()
server.server_close()
worker.join(timeout=2)
assert seen == [("/v1/auth/token/revoke-self", "synthetic-only-writer")]
def test_caller_failure_receipt_allows_only_static_diagnostic_codes(monkeypatch):
caller = module("admit-scoped-caller", monkeypatch)
assert caller.failure_receipt(caller.Refused("caller_readback_differs"))["failure_code"] == "caller_readback_differs"
for error in [caller.Refused("synthetic-sensitive-value"), ValueError("synthetic-sensitive-value")]:
receipt = caller.failure_receipt(error)
assert receipt["failure_code"] == "contained_operation_failed"
assert "synthetic-sensitive-value" not in json.dumps(receipt)
@pytest.mark.parametrize("protected,ephemeral,corrupt", [
(True, None, False), (False, None, False), (True, {}, False), (True, None, True),
])