okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
122feb9
main
1"""Catches a daemon connection reset surfacing as ``ResponseNotReady``. 2 3``_Response.close`` read headers that ``begin()`` never set, which replaced the 4reset, so the ``OSError`` retry in the listener-restart test failed. That reset 5only lands inside a restart window, so E2E reaches it rarely; this drives the 6real connection against a socket that resets every request. 7""" 8 9import socket 10import struct 11import sys 12import threading 13import unittest 14from pathlib import Path 15 16ROOT = Path (__file__ ).resolve ().parents [2 ] 17sys .path .insert (0 ,str (ROOT / "test" / "e2e" )) 18import harness # noqa: E402 19 20 21class ResetTest (unittest .TestCase ): 22def reset_server (self ): 23"""Returns the port of a listener that resets each connection.""" 24server = socket .socket () 25server .bind (("127.0.0.1" ,0 )) 26server .listen () 27self .addCleanup (server .close ) 28 29def reset_each_request (): 30while True : 31try : 32peer ,_ = server .accept () 33except OSError : 34return 35peer .recv (4096 ) 36peer .setsockopt ( 37socket .SOL_SOCKET ,socket .SO_LINGER ,struct .pack ("ii" ,1 ,0 ) 38 ) 39peer .close () 40 41threading .Thread (target = reset_each_request ,daemon = True ).start () 42return server .getsockname ()[1 ] 43 44def test_a_reset_before_the_status_line_is_raised_as_the_reset (self ): 45connection = harness ._Connection (self .reset_server (),"token" ) 46self .addCleanup (connection .close ) 47connection .request ("GET" ,"/server" ) 48with self .assertRaises (ConnectionError ): 49connection .getresponse () 50 51 52if __name__ == "__main__" : 53unittest .main ()