test(AUDIT-WP-0008): exercise T02 driver over HTTP
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a02991-be07-7bb3-8b6d-e9701b5621de
This commit is contained in:
tegwick 2026-08-22 16:55:37 +02:00
parent 88b1adeabc
commit 83637965fd
2 changed files with 42 additions and 0 deletions

View file

@ -1,9 +1,15 @@
import importlib.util
import sys
import threading
from pathlib import Path
from wsgiref.simple_server import WSGIRequestHandler, make_server
import pytest
from audit_core.ingestion import IngestionApplication
from audit_core.senders import SenderIdentity, SenderRegistry
from audit_core.sqlite_backend import SQLiteAuditBackend
SCRIPT = Path(__file__).parents[1] / "scripts" / "t02_synthetic_load_driver.py"
SPEC = importlib.util.spec_from_file_location("t02_synthetic_load_driver", SCRIPT)
@ -127,3 +133,34 @@ def test_wrong_contract_is_refused_without_reading_token(tmp_path):
env = {"AUDIT_T02_FIXTURE_ID": "audit-t02-recovery-20260822"}
with pytest.raises(DRIVER.DriverError, match="not approved"):
DRIVER.run_phase("cleanup", "some-other-contract", env=env)
class QuietHandler(WSGIRequestHandler):
def log_message(self, format, *args):
pass
def test_real_receiver_accepts_then_reconciles_the_same_fixture(tmp_path):
env = environment(tmp_path)
registry = SenderRegistry([
SenderIdentity(
name="t02-recovery",
tokens=("opaque-test-value",),
sources=frozenset({env["AUDIT_T02_SOURCE"]}),
tenants=frozenset({env["AUDIT_T02_TENANT"]}),
)
])
app = IngestionApplication(
SQLiteAuditBackend(str(tmp_path / "events.db")), registry
)
server = make_server("127.0.0.1", 0, app, handler_class=QuietHandler)
worker = threading.Thread(target=server.serve_forever, daemon=True)
worker.start()
env["AUDIT_T02_BASE_URL"] = f"http://127.0.0.1:{server.server_port}"
try:
config = DRIVER.load_config(env)
assert DRIVER.request_event(config) == (202, "accepted")
assert DRIVER.request_event(config) == (200, "duplicate")
finally:
server.shutdown()
worker.join(timeout=5)