Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_wsgiref.cpython-38.pyc
U

>��gjx�@s�ddlmZddlmZddlmZddlmZddlmZddl	m
Z
ddlmZm
Z
mZddlmZdd	lmZdd
lmZmZddlmZddlmZdd
lmZmZmZddlmZddlm Z ddl!Z!ddl"Z"ddl#Z#ddl$Z$ddl%Z%ddlZGdd�de�Z&Gdd�de�Z'dd�Z(dd�Z)e(dfdd�Z*dd�Z+Gdd�de�Z,Gd d!�d!e�Z-Gd"d#�d#e�Z.Gd$d%�d%e
�Z/Gd&d'�d'e/�Z0Gd(d)�d)e�Z1e2d*k�r�e�3�dS)+�)�mock)�support)�NoLogRequestHandler)�TestCase)�setup_testing_defaults)�Headers)�BaseHandler�BaseCGIHandler�
SimpleHandler)�util)�	validator)�
WSGIServer�WSGIRequestHandler)�make_server)�HTTPConnection)�StringIO�BytesIO�BufferedReader)�
BaseServer)�python_implementationNc@s eZdZdZdd�Zdd�ZdS)�
MockServerzNon-socket HTTP servercCst�|||�|��dS�N)r�__init__�server_bind)�self�server_addressZRequestHandlerClass�r�0/opt/cppython/lib/python3.8/test/test_wsgiref.pyrszMockServer.__init__cCs"|j\}}||_||_|��dSr)rZserver_nameZserver_port�
setup_environ)r�host�portrrrr s
zMockServer.server_bindN)�__name__�
__module__�__qualname__�__doc__rrrrrrrsrc@s eZdZdZdd�Zdd�ZdS)�MockHandlerzNon-socket HTTP handlercCs|j|_|j\|_|_dSr)�request�
connectionZrfileZwfile�rrrr�setup)szMockHandler.setupcCsdSrrr(rrr�finish-szMockHandler.finishN)r!r"r#r$r)r*rrrrr%'sr%cCs|dddg�dgS)N�200 OK��Content-Typez
text/plain��DatezMon, 05 Jun 2006 18:49:54 GMT�
Hello, world!r��environZstart_responserrr�	hello_app1s
�r3cCs2|dddg�d�|d|d|dg��d�gS)	Nr+r,r.�;ZHTTP_X_TEST_HEADER�QUERY_STRING�	PATH_INFO�
iso-8859-1)�join�encoder1rrr�
header_app9s���r:sGET / HTTP/1.0

cCsbtdd|tt�}tt|��}t�}tj}t�}t_z|�||fd�W5|t_X|�	�|�	�fS)N��P)�	127.0.0.1i�")
rrr%rr�sys�stderrrZfinish_request�getvalue)�app�data�serverZinp�outZolderr�errrrr�	run_amockDsrFcCs�|�}d}|D]}|||ks"t�|d7}qz||Wntk
rLYnXtd|��zttfWntk
rxYn^X|�}t|�|k	r�t�|D]}t|�|ks�t�q�zt|�Wntk
r�YnXtd|��dS)aUtility to compare a generic 2.1/2.2+ iterator with an iterable

    If running under Python 2.2+, this tests the iterator using iter()/next(),
    as well as __getitem__.  'make_it' must be a function returning a fresh
    iterator to be tested (since this may test the iterator twice).r�zToo many items from __getitem__zToo many items from .__next__()N)�AssertionError�
IndexError�iter�
StopIteration�	NameError�next)�make_it�match�it�n�itemrrr�compare_generic_iterRs4

rSc@sfeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�IntegrationTestsTcCsFt�dtj��d}|�|d|d|r0dp2dd�d��dS)	N�/rz(HTTP/1.0 200 OK
Server: WSGIServer/0.2 zA
Content-Type: text/plain
Date: Mon, 05 Jun 2006 18:49:54 GMT
zContent-Length: 13
r;z
Hello, world!r7)rr>�version�split�assertEqualr9)rrD�
has_length�pyverrrr�check_helloys ���
����zIntegrationTests.check_hellocCst�\}}|�|�dSr)rFr[�rrDrErrr�test_plain_hello�s
z!IntegrationTests.test_plain_hellocCs*d}tt|�\}}|�|��dd�dS)NsmGET /p%61th/?query=test HTTP/1.0
X-Test-Header: Python test 
X-Test-Header: Python test 2
Content-Length: 0

���s+Python test,Python test 2;query=test;/path/)rFr:rX�
splitlines)rr&rDrErrr�test_environ�s�
�zIntegrationTests.test_environcCs2tddddd�\}}|�|��dd�dS)NsGET �xis HTTP/1.0

�rBrs!HTTP/1.0 414 Request-URI Too Long)rFrXr_r\rrr�test_request_length�s�z$IntegrationTests.test_request_lengthcCs"ttt��\}}|j|dd�dS)NF)rY)rFrr3r[r\rrr�test_validated_hello�sz%IntegrationTests.test_validated_hellocCs@dd�}tt|��\}}|�|�d��|�|��dd�dS)NcSs|dd�dgS)Nr+r,z
Hello, world!rr1rrr�bad_app�s
z>IntegrationTests.test_simple_validation_error.<locals>.bad_app�;A server error occurred.  Please contact the administrator.���z^AssertionError: Headers (('Content-Type', 'text/plain')) must be of type list: <class 'tuple'>�rFr�
assertTrue�endswithrXr_�rrerDrErrr�test_simple_validation_error�s�
�z-IntegrationTests.test_simple_validation_errorc
Cspdd�}dddg}|D]T\}}|j|d��:t||��\}}|�|�d��|�|��d|�W5QRXqdS)	Ncs�fdd�}|S)Ncs|�dg�dgS)N�r-ztext/plain; charset=utf-8r0rr1��statusrrre�szWIntegrationTests.test_status_validation_errors.<locals>.create_bad_app.<locals>.bad_appr)rorerrnr�create_bad_app�szFIntegrationTests.test_status_validation_errors.<locals>.create_bad_app)Z200z4AssertionError: Status must be at least 4 characters)z20X OKz8AssertionError: Status message must begin w/3-digit code)Z200OKz;AssertionError: Status message must have a space after codernrfrg)�subTestrFrirjrXr_)rrpZtestsroZexc_messagerDrErrr�test_status_validation_errors�s��z.IntegrationTests.test_status_validation_errorscCs@dd�}tt|��\}}|�|�d��|�|��dd�dS)NcSs|d��|ddg�dgS)N�
wsgi.inputr+rm�data)�read��e�srrrre�sz1IntegrationTests.test_wsgi_input.<locals>.bad_apprfrgrHrhrkrrr�test_wsgi_input�s�
�z IntegrationTests.test_wsgi_inputcCsldd�}tt|��\}}|�|�d��tj��d�d�}t��d�}|d|}|�	d|d|�dS)	NcSs|dddg�dgS)Nr+rm�r/zWed, 24 Dec 2008 13:29:32 GMTrtrrvrrrrA�s
�z3IntegrationTests.test_bytes_validation.<locals>.appz"GET / HTTP/1.0" 200 4
r�ascii�/s(HTTP/1.0 200 OK
Server: WSGIServer/0.2 sV
Content-Type: text/plain; charset=utf-8
Date: Wed, 24 Dec 2008 13:29:32 GMT

data)
rFrrirjr>rVrWr9rrX)rrArDrE�ver�pyrZrrr�test_bytes_validation�s���z&IntegrationTests.test_bytes_validationcCs>dd�}tt|�dd�\}}|�dtjdddd	g|���dS)
NcSs|dddg�|d�d�gS)Nr+r,rzr6�latin1�r9rvrrrrA�s
�z-IntegrationTests.test_cp1252_url.<locals>.appsGET /�%80 HTTP/1.0rbsHTTP/1.0 200 OKsContent-Type: text/plains#Date: Wed, 24 Dec 2008 13:29:32 GMT�s/��)rFrrXr�ANYr_)rrArDrErrr�test_cp1252_url�s	�
��z IntegrationTests.test_cp1252_urlcs�t�td��dd�}Gdd�dtt�}ttjd||d��|��j�t	�
���fdd	�}t�tj|�}|�tjtj|�d�t	��������fd
d�}t	j
|d�}|�����|��|��tjd
�dS)N�pthread_killcSs|dg�dtjgS)Nr+�)r�
SOCK_MAX_SIZEr1rrrrAs
z4IntegrationTests.test_interrupted_write.<locals>.appc@seZdZdS)z<IntegrationTests.test_interrupted_write.<locals>.WsgiHandlerN�r!r"r#rrrr�WsgiHandlersr�r)Z
handler_classcs���dSr)�set)�signum�frame)�interruptedrr�signal_handlersz?IntegrationTests.test_interrupted_write.<locals>.signal_handlerc	slt�j�}|�dd�|���<}|�d���tj��jtd�d�r*qJq*t	|����W5QRX|�
�dS)N�GETrU�drG)�timeout)rrr&Zgetresponseru�signal�SIGUSR1�wait�float�len�close)�http�response�r��main_threadr�ZreceivedrCrr�
run_clients


z;IntegrationTests.test_interrupted_write.<locals>.run_client)�targetr�)rZ
get_attributer�rrrZHOSTZ
addCleanupZserver_close�	threading�Eventr��	get_ident�Thread�startZhandle_requestr8rXr�)rrAr�r�Zoriginalr�Z
backgroundrr�r�test_interrupted_write�s"z'IntegrationTests.test_interrupted_writeN)T)r!r"r#r[r]r`rcrdrlrrryrr�r�rrrrrTws



rTc@s�eZdZdd�Zd$dd�Zdd�Zdd	�Zd%dd�Zej	e
d
�dd��Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�ZdS)&�UtilityTestscCsJ||d�}t�|�|�t�|�|�|�|d|�|�|d|�|S)N��SCRIPT_NAMEr6r6r�)rrrXZshift_path_info)rZsn_inZpi_in�partZsn_outZpi_out�envrrr�
checkShift1s

zUtilityTests.checkShiftNcCs|i}t�|�t|t�r*|�||t�n,t|t�rF|�||t�n|�|||�||i}t�|�|�|||�dSr)rr�
isinstancerZassertIsInstancerrXZassertIs)r�key�value�altr�rrr�checkDefault9s



zUtilityTests.checkDefaultcKst�|�|�|||�dSr)rrrX)rr�r��kwrrr�checkCrossDefaultIs
zUtilityTests.checkCrossDefaultcKs t�|�|�t�|�|�dSr)rrrXZapplication_uri)r�urir�rrr�checkAppURIMs
zUtilityTests.checkAppURIrGcKs"t�|�|�t�||�|�dSr)rrrXZrequest_uri)rr�Zqueryr�rrr�checkReqURIQs
zUtilityTests.checkReqURI)�categorycCs^||fdd�}t||�|�}|�|jj�|D]}q0|�|jj�|��|�|jj�dS)NcSst�t|�|�Sr)r�FileWrapperr)�text�sizerrrrNXsz%UtilityTests.checkFW.<locals>.make_it)rS�assertFalseZfilelike�closedr�ri)rr�r�rOrNrPrRrrr�checkFWUs
zUtilityTests.checkFWc	Cs<t�td�d�}|�td��|�|dd�W5QRXdS)NZfoobar�zUse iterator protocol insteadrG�foo)rr�r�assertWarnsRegex�DeprecationWarningrX)r�wrapperrrr�$test_filewrapper_getitem_deprecationhs
�z1UtilityTests.test_filewrapper_getitem_deprecationcCs^|�ddddd�|�ddddd�|�ddddd�|�ddddd�|�dd	ddd�dS)
Nr;rUz/x�x�/az/x/yz/a/x�/yz/x/�r�r(rrr�testSimpleShiftsos
zUtilityTests.testSimpleShiftscCs�|�ddddd�|�ddddd�|�dddd	d�|�dd
dd	d�|�dddd	d�|�dd
dd	d�|�ddddd�|�ddddd�|�ddddd�|�ddddd�|�ddddd�dS)Nz/a/bz/../yz..r�r�r;z//y�yz/a/b/yz//y/rUz/./yz/./y/z///./..//y/.//z/y/z///z/a/b/z/.//z/x//r�z/a/b/xz/.r�r(rrr�testNormalizedShiftsvsz!UtilityTests.testNormalizedShiftscCsFddddddddd	d
ddt�fd
t�fdfD]\}}|�||�q,dS)N)�SERVER_NAMEr=)�SERVER_PORT�80)�SERVER_PROTOCOL�HTTP/1.0)�	HTTP_HOSTr=)ZREQUEST_METHODr�)r�r;)r6rU)�wsgi.version�rGr)�
wsgi.run_oncer)�wsgi.multithreadr)�wsgi.multiprocessrrs�wsgi.errors)�wsgi.url_schemer�)rrr�)rr�r�rrr�testDefaults�s �zUtilityTests.testDefaultscCst|jdddd�|jdddd�|jdddd�|jddd	d�|jdd
dd�|jdd
dd�|jdddd�dS)Nr�zfoo.bar�r�r��https�on��HTTPS�1�yesr�r�r�r�Z443)r�r(rrr�testCrossDefaults�szUtilityTests.testCrossDefaultscCsn|�t�i�d�|�t�ddi�d�|�t�ddi�d�|�t�ddi�d�|�t�ddi�d�dS)Nr�r�r�r�r�r�r�)rXrZguess_schemer(rrr�testGuessScheme�s
zUtilityTests.testGuessSchemecCsv|�d�|jddd�|jddd�|jddd	d
�|jddd
�|jdddd�|jddd�|jdddd�dS)N�http://127.0.0.1/�http://127.0.0.1/spam�/spam�r��http://127.0.0.1/sp%E4m�/spämzhttp://spam.example.com:2071/zspam.example.com:2071Z2071)r�r�zhttp://spam.example.com/zspam.example.comr�r=)r�r�zhttps://127.0.0.1/r�r�zhttp://127.0.0.1:8000/Z8000)r�r�)r�r(rrr�testAppURIs�s$
����zUtilityTests.testAppURIscCs�|�d�|jddd�|jddd�|jdddd	�|jd
ddd	�|jdddd	�|jd
ddd	�|jddddd�|jddddd�|jdddddd�dS)Nr�r�r�r�r�r�zhttp://127.0.0.1/spammity/spamz	/spammityr�z http://127.0.0.1/spammity/sp%E4mz"http://127.0.0.1/spammity/spam;hamz	/spam;hamz/http://127.0.0.1/spammity/spam;cookie=1234,5678z/spam;cookie=1234,5678z%http://127.0.0.1/spammity/spam?say=nizsay=ni)r�r6r5z'http://127.0.0.1/spammity/spam?s%E4y=nizs%E4y=nir)r�r(rrr�testReqURIs�sD
�������zUtilityTests.testReqURIscCs|�ddddg�dS)NZ�xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz�xZxxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzZxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz)r�r(rrr�testFileWrapper�szUtilityTests.testFileWrappercCs|d��D]2}||��|��|��fD]}|�t�|��q$qd��D]2}||��|��|��fD]}|�t�|��q`qDdS)NzbConnection Keep-Alive Proxy-Authenticate Proxy-Authorization TE Trailers Transfer-Encoding Upgradez4Accept Cache-Control Date Pragma Trailer Via Warning)rW�title�upper�lowerrirZ
is_hop_by_hopr�)rZhopr�rrr�testHopByHop�s�
�
zUtilityTests.testHopByHop)N)rG)r!r"r#r�r�r�r�r�rZignore_warningsr�r�r�r�r�r�r�r�r�r�r�r�rrrrr�/s"




	r�c@s$eZdZdd�Zdd�Zdd�ZdS)�HeaderTestscCs�dg}|�tt��d�|�ttg��d�|�tt|dd���d�|�t|dd����dg�|�t|dd����dg�|�t|dd����|�|�t|���|�t�}|d=d|d<|j|j|j	|j
fD]<}|�|d��|�|d��|�|d	��|�|d��q�|�|dd�d
|d<|�|d	d
�|�|�	d�d
g�|�|�dd�d
�|�|�dd�d�|�|�
dd�d
�|�|�
dd�d�|�|dd
�|�|dd�dS)
N)r�r�rrGr�r�r��bar�FooZFOO�bazZwheeZzoo)rXr�r�keys�values�itemsZassertIsNot�__contains__�get�get_all�__getitem__rir��
setdefault)r�test�h�mrrr�testMappingInterface�s4z HeaderTests.testMappingInterfacecCs|�ttd�dS)Nr�)�assertRaises�	TypeErrorrr(rrr�testRequireList�szHeaderTests.testRequireListcCs�t�}|�t|�d�|jdddd�|�|dd�|�t|�d�|jdddd	�|�|�d�dd
g�|�t|�d�dS)Nz
r�r�Zspam)r�zbar; baz="spam"zfoo: bar; baz="spam"

r�)Zcheesezbar; cheesez*foo: bar; baz="spam"
Foo: bar; cheese

)rrX�strZ
add_headerr��rr�rrr�
testExtras�s�
�zHeaderTests.testExtrasN)r!r"r#r�r�rrrrrr��s r�c@s&eZdZdZeej���Zdd�Z	dS)�ErrorHandlerz/Simple handler subclass for testing BaseHandlerc	Ks*t|�tj|t�t�t�|ddd�dS)NT)�multithread�multiprocess)rr	rrr)rr�rrrrs�zErrorHandler.__init__N)
r!r"r#r$�dict�osr2r��
os_environrrrrrrsrc@seZdZdZdd�ZdS)�TestHandlerzASimple handler subclass for testing BaseHandler, w/error passthrucCs�dSrrr(rrr�handle_error"szTestHandler.handle_errorN)r!r"r#r$r
rrrrr	sr	c@sxeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�HandlerTestsi�cCs�dddddd�}t�td|��tdd	d
�}|��W5QRXdD]$}|�t|d|�|jd
|�qBi}t|�|��D]\}}||kr||||<q||�	dd	dd|�
�|��dddddtj
d��|�|j|�dS)Nz/my/homez/my/pathzfr_FR.UTF-8Ztest_script_nameZtest_server_name)�HOME�PATH�LANGr�r�r�Yz/override/home)�Xr)rVrrZrun_onceZfile_wrapperZwsgi_zwsgi.r;r=r�Fr�T)rrr�r�rsr�r�r�r�r�r�zwsgi.file_wrapper)rZ	swap_attrr	rrX�getattrr2rr��update�	get_stdin�
get_stderrrr�ZassertDictEqual)rr�handler�attrZexpectedr�r�rrr�testEnviron*sB��
�zHandlerTests.testEnvironcCs2tdddi�}|��dD]}|�||j�qdS)N)r�rsr�)r	r�assertInr2)rr�r�rrr�testCGIEnviron`szHandlerTests.testCGIEnvironcCsHtdd�}|��|�|jdd�t�}|��|�|jdd�dS)Nr�r�r�r�r�)r	rrXr2rrrr�
testSchemefs
zHandlerTests.testSchemecCs6t�}dD]}|�tt||��q
|�t|jd�dS)N)Z_flushrrZadd_cgi_varsr�)rr��NotImplementedErrorr�_write)rr��namerrr�testAbstractMethodslsz HandlerTests.testAbstractMethodscCs�dd�}dd�}dd�}dd�}t�}|�|�|�|j��d	�d
��t�}|�|�|�|j��d�d
��t�}|�|�|�|j��d�t�}|�|�|�|j��d
�dS)NcSs|dg�|d�d�gS�Nr+r�r7r�rvrrr�trivial_app1ws
z4HandlerTests.testContentLength.<locals>.trivial_app1cSs|dg�|d�d��gSrr�rvrrr�trivial_app2{sz4HandlerTests.testContentLength.<locals>.trivial_app2cSs|dg�d�d�gS)Nr+uтестzutf-8r�rvrrr�trivial_app3s
z4HandlerTests.testContentLength.<locals>.trivial_app3cSs|ddg�gS)Nr+)zContent-LengthZ12345rrvrrr�trivial_app4�sz4HandlerTests.testContentLength.<locals>.trivial_app4z)Status: 200 OK
Content-Length: 4

httpr7zStatus: 200 OK

https-Status: 200 OK
Content-Length: 8

тестs)Status: 200 OK
Content-Length: 12345

)r	�runrX�stdoutr@r9)rr r!r"r#r�rrr�testContentLengthts8
��
��
�
�zHandlerTests.testContentLengthcCs�dd�}dd�}t�}|�|�|�|j��d�d��|�|j��d�t�}|�|�|�|j��d|jt|j	�f�d�|j	�|�
d	|j���dS)
NcSs|dg�gS�Nr+rrvrrr�
non_error_app�s
z8HandlerTests.testBasicErrorOutput.<locals>.non_error_appcSstd��dS)N� This should be caught by handler�rHrvrrr�	error_app�sz4HandlerTests.testBasicErrorOutput.<locals>.error_app�%Status: 200 OK
Content-Length: 0

r7r;z<Status: %s
Content-Type: text/plain
Content-Length: %d

rH)rr$rXr%r@r9r?Zerror_statusr�Z
error_bodyr)rr(r+r�rrr�testBasicErrorOutput�s,
��
����z!HandlerTests.testBasicErrorOutputcsRd��fdd�}t�}|�|�|�|j��d�d���|�d|j���dS)N�Some output has been sentcs|dg���td��dS)Nr+r)r*rv��MSGrrr+�sz4HandlerTests.testErrorAfterOutput.<locals>.error_appzStatus: 200 OK

r7rH)rr$rXr%r@r9rr?�rr+r�rr/r�testErrorAfterOutput�s
���z!HandlerTests.testErrorAfterOutputc	
Csdd�}d}d�d�}dD]�}|r*d|p,d}d	D]�}d
D]�}t|d�}d|_||_||_|�|�|�||j���t|d�}d
|_||_||_|�|�|dkr�|�|j��d�q:|�	t
�|||f�d�|j���|||f�d�|j��f�q:q2qdS)NcSs|dg�gSr'rrvrrrr(�s
z5HandlerTests.testHeaderFormats.<locals>.non_error_appzfHTTP/%s 200 OK\r\nDate: \w{3}, [ 0123]\d \w{3} \d{4} \d\d:\d\d:\d\d GMT\r\n%sContent-Length: 0\r\n\r\nr,r7)z
FooBar/1.0NzServer: %s
r;)z1.0z1.1)�HTTP/0.9r�zHTTP/1.1)r�FTr3r�)r9r	Z
origin_serverZhttp_versionZserver_softwarer$rXr%r@ri�rerO)	rr(ZstdpatZshortpatZssw�swrV�protor�rrr�testHeaderFormats�s@���



���zHandlerTests.testHeaderFormatscCs.dd�}t�}|�|�|�d|j���dS)NcSs|ddg�dgS)Nr+rmrtrrvrrrrA�s�z'HandlerTests.testBytesData.<locals>.appsRStatus: 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 4

data)r	r$rXr%r@)rrAr�rrr�
testBytesData�s
�zHandlerTests.testBytesDatacs>ddi�d���fdd�}t�}|�|�|��dd�dS)N�close_calledFr.cs(|dg���G�fdd�dt�}|�S)Nr+cs eZdZdd�Z�fdd�ZdS)zHHandlerTests.testCloseOnError.<locals>.error_app.<locals>.CrashyIterablecssdVtd��qdS)Nsblahr)r*r(rrr�__iter__szQHandlerTests.testCloseOnError.<locals>.error_app.<locals>.CrashyIterable.__iter__csd�d<dS)NTr9rr(��side_effectsrrr�szNHandlerTests.testCloseOnError.<locals>.error_app.<locals>.CrashyIterable.closeN)r!r"r#r:r�rr;rr�CrashyIterablesr=)�object)rwrxr=�r0r<rrr+
sz0HandlerTests.testCloseOnError.<locals>.error_appT)rr$rXr1rr?r�testCloseOnError
s
zHandlerTests.testCloseOnErrorc	sjt��G�fdd�d�}ddi}tt�|�tj|�}d}|�t|��|�t�W5QRX|�	d��dS)Ncs eZdZ�fdd�Zdd�ZdS)z4HandlerTests.testPartialWrite.<locals>.PartialWritercs|dd�}��|�t|�S)N�)�extendr�)r�b�partial�Zwrittenrr�write s
z:HandlerTests.testPartialWrite.<locals>.PartialWriter.writecSsdSrrr(rrr�flush%sz:HandlerTests.testPartialWrite.<locals>.PartialWriter.flushN)r!r"r#rFrGrrErr�
PartialWritersrHr�r�zshould not do partial writesssHTTP/1.0 200 OK
Content-Type: text/plain
Date: Mon, 05 Jun 2006 18:49:54 GMT
Content-Length: 13

Hello, world!)
�	bytearrayr
rr>r?r�r�r$r3rX)rrHr2r��msgrrEr�testPartialWrites	�zHandlerTests.testPartialWritec
svddi}tttfD]^�|j�d��HG�fdd�d�}t�}tt�|�||�}|�t�|�	|�
��W5QRXqdS)Nr�r���	exceptioncseZdZ�fdd�ZdS)zEHandlerTests.testClientConnectionTerminations.<locals>.AbortingWritercs��dSrr�rrCrLrrrF>szKHandlerTests.testClientConnectionTerminations.<locals>.AbortingWriter.writeN�r!r"r#rFrrLrr�AbortingWriter=srP)�ConnectionAbortedError�BrokenPipeError�ConnectionResetErrorrqrr
rr$r3r�r@)rr2rPr?r�rrLr� testClientConnectionTerminations5s�
z-HandlerTests.testClientConnectionTerminationscs�Gdd�dt��G�fdd�d�}t�}ddi}tt�|�||�}|�t�|�d|���|�|j	�|�|j
�|�|j�|�|j�dS)Nc@seZdZdS)zKHandlerTests.testDontResetInternalStateOnException.<locals>.CustomExceptionNr�rrrr�CustomExceptionHsrUcseZdZ�fdd�ZdS)zJHandlerTests.testDontResetInternalStateOnException.<locals>.AbortingWritercs��dSrrrN�rUrrrFPszPHandlerTests.testDontResetInternalStateOnException.<locals>.AbortingWriter.writeNrOrrVrrrPOsrPr�r�)
�
ValueErrorrr
rr$r3rr@ZassertIsNotNone�resultZheadersror2)rrPr?r2r�rrVr�%testDontResetInternalStateOnExceptionGs
z2HandlerTests.testDontResetInternalStateOnExceptionN)r!r"r#ZmaxDiffrrrrr&r-r2r7r8r@rKrTrYrrrrr&s62
+r�__main__)4Zunittestrr�rZtest.test_httpserversrrZwsgiref.utilrZwsgiref.headersrZwsgiref.handlersrr	r
ZwsgirefrZwsgiref.validaterZwsgiref.simple_serverr
rrZhttp.clientr�iorrr�socketserverr�platformrrr4r�r>r�rr%r3r:rFrSrTr�r�rr	rr!�mainrrrr�<module>sL
%9+7=


F1le Man4ger