Skip to content

Commit e5f5391

Browse files
committed
test(lifecycle): pin runtime storage authority SQL
1 parent fa9f61d commit e5f5391

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

tests/test_context_lifecycle_outbox_relation_topology.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,43 @@ def test_load_uses_only_canonical_outbox_relation() -> None:
5353
)
5454
assert "LEFT JOIN ONLY public.llm_context_lifecycle_outbox AS admitted_outbox" in relation_reads[1]
5555
assert "admitted_outbox.tableoid OPERATOR(pg_catalog.=) %s::pg_catalog.oid" in relation_reads[1]
56+
57+
58+
def test_runtime_admission_reproves_canonical_relation_storage_authority() -> None:
59+
"""Every I/O must re-prove logged heap storage and no inheritance topology."""
60+
store = PostgresContextLifecycleOutboxStore(
61+
"postgresql://unit",
62+
tenant_scope="tenant-a",
63+
tenant_scope_sha256="a" * 64,
64+
)
65+
cursor = RecordingCursor()
66+
67+
assert store.load_in_transaction(cursor, "event-1") is None
68+
69+
admission_sql = next(
70+
sql
71+
for sql in cursor.calls
72+
if sql.startswith("SELECT admitted_role.rolsuper")
73+
)
74+
assert (
75+
"admitted_relation.relkind::pg_catalog.text OPERATOR(pg_catalog.<>) 'r'"
76+
in admission_sql
77+
)
78+
assert (
79+
"admitted_relation.relpersistence::pg_catalog.text OPERATOR(pg_catalog.<>) 'p'"
80+
in admission_sql
81+
)
82+
assert "JOIN pg_catalog.pg_namespace AS admitted_namespace" in admission_sql
83+
assert (
84+
"admitted_namespace.nspname OPERATOR(pg_catalog.<>) 'public'" in admission_sql
85+
)
86+
assert "JOIN pg_catalog.pg_am AS admitted_table_access_method" in admission_sql
87+
assert (
88+
"admitted_table_access_method.amname OPERATOR(pg_catalog.<>) 'heap'"
89+
in admission_sql
90+
)
91+
assert (
92+
"admitted_table_access_method.amtype::pg_catalog.text OPERATOR(pg_catalog.<>) 't'"
93+
in admission_sql
94+
)
95+
assert "FROM pg_catalog.pg_inherits AS live_outbox_inheritance" in admission_sql

0 commit comments

Comments
 (0)