Isolate tenant readback cache and prepare verified runtime release
Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
This commit is contained in:
parent
c460e2b0df
commit
1bb7cacc98
10 changed files with 188 additions and 13 deletions
|
|
@ -3,6 +3,7 @@ import json
|
|||
import os
|
||||
import tempfile
|
||||
import unittest
|
||||
from dataclasses import replace
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from unittest.mock import patch
|
||||
from urllib.error import HTTPError, URLError
|
||||
|
|
@ -159,6 +160,21 @@ class ReaderTests(unittest.TestCase):
|
|||
reader.rows(_actor("alice"), "s1")
|
||||
self.assertEqual(len(readback.reads), 3)
|
||||
|
||||
def test_tenant_switch_cannot_reuse_another_tenants_allow(self):
|
||||
readback = _FakeReadback([
|
||||
ReadbackResult("informed-decision", "allow", NOW + timedelta(seconds=30), "decision:1"),
|
||||
])
|
||||
reader = self._reader(readback)
|
||||
actor = _actor()
|
||||
self.assertEqual(reader.rows(actor, "s1")[0].status, "available")
|
||||
readback.results = [ReadbackResult("informed-decision", "deny")]
|
||||
other_tenant = replace(actor, tenant="tenant-b")
|
||||
self.assertEqual(reader.rows(other_tenant, "s1")[0].status, "denied")
|
||||
self.assertEqual(len(readback.reads), 2)
|
||||
reader.forget("s1")
|
||||
reader.rows(actor, "s1")
|
||||
self.assertEqual(len(readback.reads), 3)
|
||||
|
||||
def test_read_failure_is_unchecked_and_not_reused(self):
|
||||
readback = _FakeReadback([], fail_read=True)
|
||||
reader = self._reader(readback)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue