fix: guard reserved sessions and bounded response state
This commit is contained in:
parent
0e85c399bb
commit
745a29d979
3 changed files with 62 additions and 3 deletions
|
|
@ -196,6 +196,31 @@ class RestContractTests(unittest.TestCase):
|
|||
self.assertEqual(sent[0]["status"], 413)
|
||||
self.assertIn(b"PAYLOAD_TOO_LARGE", sent[1]["body"])
|
||||
|
||||
def test_overflow_after_response_start_sends_no_second_start(self):
|
||||
"""A body that overflows after headers began must not start again."""
|
||||
import anyio
|
||||
|
||||
from transport import BodyLimit
|
||||
|
||||
async def app(scope, receive, send):
|
||||
await send({"type": "http.response.start", "status": 200, "headers": []})
|
||||
await receive()
|
||||
await send({"type": "http.response.body", "body": b"ok"})
|
||||
|
||||
sent = []
|
||||
|
||||
async def receive():
|
||||
return {"type": "http.request", "body": b"x" * 40, "more_body": False}
|
||||
|
||||
async def send(message):
|
||||
sent.append(message)
|
||||
|
||||
anyio.run(BodyLimit(app, 8), {"type": "http"}, receive, send)
|
||||
starts = [message for message in sent if message.get("type") == "http.response.start"]
|
||||
self.assertEqual(len(starts), 1)
|
||||
self.assertEqual(starts[0]["status"], 200)
|
||||
self.assertFalse(any(message.get("status") == 413 for message in sent))
|
||||
|
||||
def test_classify_and_inspect_roundtrip(self):
|
||||
recognized = self.client.post(
|
||||
"/v1/recognize?classify=false", content=jpeg_bytes(),
|
||||
|
|
@ -360,6 +385,16 @@ class WebSocketProtocolTests(unittest.TestCase):
|
|||
finally:
|
||||
engine.shutdown()
|
||||
|
||||
def test_lifespan_shutdown_skips_a_reserved_slot(self):
|
||||
"""A reservation is None until setup finishes. Shutdown must not call it."""
|
||||
client, engine = make_app()
|
||||
client.app.state.sessions["reserved"] = None
|
||||
try:
|
||||
with client:
|
||||
pass
|
||||
finally:
|
||||
engine.shutdown()
|
||||
|
||||
|
||||
class LegacyRouteTests(unittest.TestCase):
|
||||
def test_legacy_sessions_still_respond(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue