o
    US`c@—  ã                   @   s  d dl mZmZmZmZmZmZmZ d dlZddl	m
Z
mZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z& dd	l'm(Z(m)Z)m*Z* dFdd„Z+dFdd„Z,dFdd„Z-dFdd„Z.dFdd„Z/dFdd„Z0dFdd„Z1dFdd„Z2dFdd„Z3dFdd„Z4dFdd „Z5dFd!d"„Z6dFd#d$„Z7dFd%d&„Z8dFd'd(„Z9dFd)d*„Z:dFd+d,„Z;dFd-d.„Z<dFd/d0„Z=dFd1d2„Z>dFd3d4„Z?dFd5d6„Z@dFd7d8„ZAdFd9d:„ZBejC Dd;g d<¢¡d;eEd
dfd=d>„ƒZFejC Dd;g d?¢¡d;eEd
dfd@dA„ƒZGdFdBdC„ZHdFdDdE„ZIdS )Gé    )ÚAnyÚcastÚDictÚListÚOptionalÚTupleÚTypeNé   )Ú_body_framingÚ_keep_aliveÚ
ConnectionÚ	NEED_DATAÚPAUSED)ÚConnectionClosedÚDataÚEndOfMessageÚEventÚInformationalResponseÚRequestÚResponse)ÚCLIENTÚCLOSEDÚDONEÚERRORÚIDLEÚMIGHT_SWITCH_PROTOCOLÚ
MUST_CLOSEÚ	SEND_BODYÚSEND_RESPONSEÚSERVERÚSWITCHED_PROTOCOL)ÚLocalProtocolErrorÚRemoteProtocolErrorÚSentinelé   )ÚConnectionPairÚget_all_eventsÚreceive_and_getÚreturnc                   C   s¾   t tdddgdƒsJ ‚t tddddgdƒrJ ‚t tddddgdƒr&J ‚t tddg ddƒr2J ‚t td	g d
ƒs<J ‚t td	dgd
ƒrGJ ‚t td	dgd
ƒrRJ ‚t td	g ddƒr]J ‚d S )NÚGETú/)ÚHostzExample.com©ÚmethodÚtargetÚheaders©r   Úclose)r   za, b, cLOse, fooú1.0©r-   r.   r/   Úhttp_versionéÈ   ©Ústatus_coder/   ©r7   r/   r4   )r   r   r   © r9   r9   úD/usr/local/lib/python3.10/dist-packages/h11/tests/test_connection.pyÚtest__keep_alive    s4   ÿýÿýÿÿÿr;   c               	      sÄ  dt t dtdttttf  fdd„‰ 	ddtdt t dtdtf‡ fd	d
„} ddt t dtdtf‡ fdd„}i ddiddidddœfD ]7}tt	tt
f |ƒ}d| di |¤Žfd| dddi|¤Žfd| dddi|¤ŽffD ]\}}t||ƒdksyJ ‚qlqCddidddœfD ]+}tt	tt
f |ƒ}d |di |¤Žfd| di |¤ŽffD ]\}}t||ƒdks®J ‚q¡q„d |ddfd| ddffD ]\}}t||ƒdksËJ ‚q¾td |ƒ ƒdksÖJ ‚td| ƒ ƒdksàJ ‚d S )NÚclÚter(   c                 S   s0   g }| d ur|  dt| ƒf¡ |r|  d¡ |S )NúContent-Length©zTransfer-EncodingÚchunked)ÚappendÚstr)r<   r=   r/   r9   r9   r:   r/   ?   s   
z#test__body_framing.<locals>.headersr5   Fr7   c                    s   t | ˆ ||ƒdS )Nr6   )r   )r7   r<   r=   ©r/   r9   r:   ÚrespG   s   z test__body_framing.<locals>.respc                    s"   ˆ | |ƒ}|dg7 }t dd|dS )N©r+   zexample.comr)   r*   r,   )r   )r<   r=   ÚhrC   r9   r:   ÚreqL   s   

ztest__body_framing.<locals>.reqéd   T)r<   r=   ó   HEADó   GETéÌ   i0  )úcontent-length)r   )r@   r9   )r<   )rL   )rH   )zhttp/1.0r9   )r5   NF)NFr9   )r   ÚintÚboolr   r   rB   r   r   r   r   r   r
   )rD   rG   ÚkwargsÚmethÚrr9   rC   r:   Útest__body_framing>   s:   &	ÿÿÿÿþ ýû,ÿ$rR   c                  C   s  t  t¡ tdƒ W d   ƒ n1 sw   Y  tƒ } | jt jtu s&J ‚| jt jt	u s0J ‚| jt	 jt	u s:J ‚| jt	 jtu sDJ ‚|  
ttddddgd¡}|dksWJ ‚| jD ]}|jttt	tiksgJ ‚qZ| jt jtu srJ ‚| jt jtu s|J ‚| jt	 jtu s†J ‚| jt	 jtu sJ ‚| jt jd u sšJ ‚| jt	 jdks¤J ‚|  
t	td	g d
¡}|dks´J ‚|  
t	tddgd
¡}|dksÅJ ‚| jD ]}|jttt	tiksÕJ ‚qÈ| jt jdksàJ ‚| jt	 jdksêJ ‚|  
ttdd¡}|dksùJ ‚| j
ttddtddtƒ gd}|dksJ ‚| j
ttƒ g d}|dks!J ‚| jD ]}|jttt	tiks2J ‚q$|  
t	tdd¡}|dksDJ ‚| j
t	tddtddtƒ gd}|dks\J ‚| j
t	tƒ g d}|dkslJ ‚| jD ]}|jttt	tiks}J ‚qod S )Nr   r)   r*   rE   ©r>   Ú10r,   s9   GET / HTTP/1.1
Host: example.com
Content-Length: 10

ó   1.1rH   r6   s   HTTP/1.1 100 

r5   )r>   Z11s%   HTTP/1.1 200 
Content-Length: 11

ó   12345©Údataó   67890©Úexpectó    ó
   1234567890ó   1)ÚpytestÚraisesÚ
ValueErrorr   r%   Úconnr   Úour_roleZ
their_roler   Úsendr   ÚconnsÚstatesr   r   Ú	our_stateÚtheir_stateZtheir_http_versionr   r   r   r   r   ©ÚprX   rb   r9   r9   r:   Ú)test_Connection_basics_and_content_lengthj   sl   
ÿýþÿ

ÿ
"
ÿrk   c                  C   s  t ƒ } |  ttddddgd¡ |  ttdddd¡}|d	ks!J ‚|  ttd
ddd¡}|dks2J ‚| jttddg d}|dksCJ ‚|  ttdgd¡}|dksSJ ‚|  ttddgd¡ |  ttdddd¡ |  ttdddd¡ |  ttƒ ¡ | jD ]}|j	tt
tt
iks‹J ‚q~d S )Nr)   r*   rE   r?   r,   r]   T©rX   Zchunk_startZ	chunk_ends   a
1234567890
s   abcdes
   5
abcde
r\   rW   rZ   )ZhelloZthererC   s   0
hello: there

r5   r6   s   54321rV   )r%   rd   r   r   r   r   r   r   re   rf   r   ri   r9   r9   r:   Útest_chunked­   s4   ýþÿ
ÿrm   c                  C   s4  t td} d}|  |¡ |  ¡ tddddgdksJ ‚|  ¡ tu s#J ‚|  d¡ |  ¡ td	d
d
dks5J ‚|  d¡ |  ¡ tdd
ddksGJ ‚|  d¡ |  ¡ tddddksYJ ‚|  d¡ |  ¡ tddd
dkskJ ‚|  d¡ |  ¡ td	d
d
dks}J ‚|  d¡ |  ¡ tksŠJ ‚|  d¡ |  ¡ tƒ ks˜J ‚d S )N©rc   óB   POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

ÚPOSTr*   rE   r?   r,   s
   5
hello
s   helloTrl   s   5
hels   helFó   ls   o
ó   os   5
helloó   
s   0

)r   r   Úreceive_dataÚ
next_eventr   r   r   r   )rb   Úrequestr9   r9   r:   Útest_chunk_boundariesÌ   s0   
ÿ
ý






rw   c                  C   sÆ   t tƒ} |  tdddgd¡ |  tƒ ¡ | jtu sJ ‚t| dƒtdg ddd	gks,J ‚| jt	u s3J ‚t| d
ƒt
d
dgks@J ‚t| dƒt
ddgksMJ ‚t| dƒtƒ tƒ gksZJ ‚| jtu saJ ‚d S )Nr)   r*   rE   r,   s   HTTP/1.0 200 OK

r5   r2   s   OK)r7   r/   r4   ÚreasonrV   rW   rY   r\   )r   r   rd   r   r   rg   r   r'   r   r   r   r   rh   r   ©Úcr9   r9   r:   Ú$test_client_talking_to_http10_serveró   s   
ÿr{   c                  C   s  t tƒ} t| dƒtddg ddtƒ gksJ ‚| jtu sJ ‚|  tdg d¡dks*J ‚|  t	d	d
¡d	ks6J ‚|  tƒ ¡dks@J ‚| j
tu sGJ ‚t tƒ} t| dƒtdddgddt	dd
gks`J ‚t| dƒt	dd
tƒ gksoJ ‚| jtu svJ ‚t| dƒtƒ gksJ ‚d S )Nó   GET / HTTP/1.0

r)   r*   r2   r3   r5   r6   ó$   HTTP/1.1 200 
Connection: close

rV   rW   r\   s(   POST / HTTP/1.0
Content-Length: 10

1rp   rS   r^   s	   234567890)r   r   r'   r   r   rh   r   rd   r   r   rg   r   ry   r9   r9   r:   Ú$test_server_talking_to_http10_client  s4   
þÿÿü
ù	r~   c               	   C   sº   dgg ddgfD ]R} t ttttf  | ƒ} tƒ }| ttdddgdtƒ g¡ |jt	t
d| dt
ddgdd	 tt	ƒ}t|d
ƒ | t
d| d¡dksNJ ‚| tdd¡dksZJ ‚qd S )Nr?   ©r>   Ú100r)   r*   rE   r,   r5   r6   rZ   r|   r}   rV   rW   )r   r   r   rB   r%   rd   r   r   r   r   r   r   r'   r   )Zuser_headersrj   rz   r9   r9   r:   Ú,test_automatic_transfer_encoding_in_response(  s6   ûþþ	
ÿý

ÿÿÞr   c                  C   s˜   t ƒ } |  ttddddgdtƒ g¡ | jD ]}|jt tu s!J ‚q| jtt	dg dtƒ gt	ddgdtƒ gd	 | jD ]}|jttttiksIJ ‚q<d S )
Nr)   r*   rE   r0   r,   rK   r6   )Ú
connectionr1   rZ   )
r%   rd   r   r   r   re   rf   r   r   r   ©rj   rb   r9   r9   r:   Ú(test_automagic_connection_close_handlingR  s.   ýúþ
þû

ÿr„   c                  C   sÀ   dt fdd„} | ƒ }| ttdg d¡ |jD ]}|jrJ ‚|jr#J ‚q| ƒ }| ttddgd¡ |jD ]}|jr<J ‚|jrAJ ‚q5| ƒ }| tt	dd	¡ |jD ]}|jrXJ ‚|jr]J ‚qQd S )
Nr(   c                  S   sZ   t ƒ } |  ttddg d¢d¡ | jD ]}|jsJ ‚q| jt jr#J ‚| jt js+J ‚| S )Nr)   r*   )rE   r   )ZExpectz100-continuer,   )	r%   rd   r   r   re   Ú"client_is_waiting_for_100_continuerb   Ú!they_are_waiting_for_100_continuer   rƒ   r9   r9   r:   Úsetups  s   ýþ
z test_100_continue.<locals>.setuprH   r6   r5   r?   rV   rW   )
r%   rd   r   r   re   r…   r†   r   r   r   ©r‡   rj   rb   r9   r9   r:   Útest_100_continuer  s&   

ÿ



þr‰   c                  C   s6  t tƒ} |  d¡ |  ¡ tu sJ ‚t t¡ 	 |  d¡ |  ¡  q1 s%w   Y  t tdd} |  d¡ |  d¡ |  d¡ t| ƒt	d	d
ddgdt
ƒ gksQJ ‚t tdd} |  d¡ |  d¡ t t¡ |  ¡  W d   ƒ n1 suw   Y  t tdd} |  d¡ |  ddd  ¡ t| ƒt	d	d
ddgdtdd dt
ƒ gks¦J ‚t tdd} |  d¡ t| ƒt	d	ddgdt
ƒ gksÂJ ‚|  d¡ |  tdg d¡ |  t
ƒ ¡ |  ¡  t| ƒt	d	ddgdt
ƒ gksëJ ‚|  tdg d¡ |  t
ƒ ¡ |  ¡  t t¡ |  ¡  W d   ƒ d S 1 sw   Y  d S )Ns   GET / HTTP/1.0
Endless: Ts   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiˆ  )Zmax_incomplete_event_sizes   GET / HTTP/1.0
Big: s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   

r)   r*   r2   )ÚbigA   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r-   r.   r4   r/   i   s%   GET / HTTP/1.0
Content-Length: 10000ó   ai'  )r>   Z10000rW   rH   s   GET /1 HTTP/1.1
Host: a

GET /2 HTTP/1.1
Host: b

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXú/1)ÚhostÚar,   sè  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr5   r6   ú/2)r   Úb)r   r   rt   ru   r   r_   r`   r"   r&   r   r   r   rd   r   Ústart_next_cyclery   r9   r9   r:   Ú-test_max_incomplete_event_size_countermeasureŸ  sx   

þÿ



ÿ
ü


ÿ
ü
øÿ
þ

þ
$ÿr’   c                  C   s¨   t ƒ } |  ttdddgdtƒ g¡ |  ttddgdtƒ g¡ | jD ]}|jtt	tt	iks0J ‚| 
¡  q#|  ttdd	dgdtƒ g¡ |  ttd
dgdtƒ g¡ d S )Nr)   r*   ©r+   rŽ   r,   r5   ©s   transfer-encodings   chunkedr6   ÚDELETEú/fooé”  )r%   rd   r   r   r   r   r   re   rf   r   r‘   rƒ   r9   r9   r:   Útest_reuse_simpleë  s4   þþþ

þþþþr˜   c                  C   s$  t tƒ} |  ¡ tu sJ ‚|  d¡ t| ƒtddddgdtddtƒ gks'J ‚| j	t
u s.J ‚| jtu s5J ‚|  ¡ tu s=J ‚|  td	g d
¡ |  tƒ ¡ | j	t
u sSJ ‚| jt
u sZJ ‚|  ¡  t| ƒtddddgdtddtƒ gkstJ ‚|  ¡ tu s|J ‚|  td	g d
¡ |  tƒ ¡ |  ¡  t| ƒtdddgdtƒ gks J ‚|  ¡ tu s¨J ‚|  td	g d
¡ |  tƒ ¡ |  ¡ tu s¿J ‚|  d¡ |  ¡ tu sÌJ ‚| jdksÓJ ‚|  d¡ | jdksßJ ‚|  ¡ tu sçJ ‚|  d¡ |  ¡ tu sôJ ‚t t¡ |  d¡ W d   ƒ d S 1 sw   Y  d S )Ns   GET /1 HTTP/1.1
Host: a.com
Content-Length: 5

12345GET /2 HTTP/1.1
Host: a.com
Content-Length: 5

67890GET /3 HTTP/1.1
Host: a.com

r)   rŒ   )r+   úa.com)r>   Ú5r,   rV   rW   r5   r6   r   rY   z/3ó   SADF)r›   Fr\   )r›   Ts   FDSA)r   r   ru   r   rt   r&   r   r   r   rh   r   rg   r   r   rd   r   r‘   Útrailing_datar_   r`   ÚRuntimeErrorry   r9   r9   r:   Útest_pipelining  sl   ÿý
ù	ý
ù	
þ


$ÿrž   c               	      sl  t ddddgdtddgdtd	dgdft d
dg d¢dtd	dgdtddgdft ddg d¢dtddgdtd	dgdft ddg d¢dtddgdtddgdffD ]\\‰ } }dtf‡ fdd„}|ƒ }| t| ¡ |jD ]}|jtt	tt
iks~J ‚qq| ttƒ ¡ |jD ]}| ¡  q‰|ƒ }| t|¡ |jD ].}|jttttiks©J ‚| d¡ | ¡ tu s¶J ‚| d¡ | ¡ tu sÃJ ‚|jdksÊJ ‚qœ|ƒ }|jt }| d¡ | ¡ tu sàJ ‚|jdksçJ ‚| | ¡ | ¡ tu sôJ ‚| tƒ ¡ | ¡  t|ƒt d
dg ddtƒ gksJ ‚|ƒ }|jt }| d¡ | ¡ tu s&J ‚|jdks.J ‚| t|¡ | ¡ tu s=J ‚|ƒ }|jt }| d¡ | ¡ tu sSJ ‚| | ¡ | ¡ tƒ ksbJ ‚|ƒ }t t¡ |jt  t d
ddgd¡ W d   ƒ n	1 s„w   Y  |ƒ }| t|¡ t t¡ |jt  tdd¡ W d   ƒ n	1 s®w   Y  qVd S )NZCONNECTzexample.com:443©r+   Zfoo©r>   Ú1r,   r—   r”   r6   r5   r)   r*   )rŸ   r    )ÚUpgradeza, bée   )r¢   rŽ   )r¢   r   r(   c                     s€   t ƒ } |  tˆ ¡ | jD ]}|jt tu sJ ‚q|  ttddtƒ g¡ | jD ]}|jt tu s2J ‚q'| j	t
  ¡ tu s>J ‚| S )Nr^   rW   )r%   rd   r   re   rf   r   r   r   r   rb   r   ru   r   rƒ   ©rG   r9   r:   r‡   ~  s   

z#test_protocol_switch.<locals>.setupó   123s   456)s   123456Fr|   )r|   Fr2   r3   r\   )r\   Tr“   rW   )r   r   r   r%   rd   r   re   rf   r   r   r   r   r‘   r    rt   ru   r   rœ   rb   r&   r   r_   r`   r!   r   )ZdenyÚacceptr‡   rj   rb   Úscr9   r¤   r:   Útest_protocol_switchT  s²   ýù
ýù
ýøýøã)








þ





ÿÿÿ€ˆr¨   c               	      sZ  t tftt ffD ]¢\‰ ‰dtf‡ ‡fdd„} | ƒ }|jˆ  ¡ tƒ ks%J ‚|jˆ  ¡ tƒ ks1J ‚|jˆ  d¡ |jˆ  ¡ tƒ ksEJ ‚| ƒ }| ˆtƒ ¡ |jD ]}|j	t
u s[J ‚|jt
u sbJ ‚qR| ƒ }t t¡ |jˆ  d¡ W d   ƒ n1 s~w   Y  | ƒ }|jˆ   d¡ t t¡ |jˆ   ¡  W d   ƒ n1 s¥w   Y  qd S )Nr(   c                     s:   t ƒ } |  ˆ tƒ ¡ | jD ]}|jˆ tˆtiksJ ‚q| S ©N)r%   rd   r   re   rf   r   r   rƒ   ©Zwho_shot_firstZwho_shot_secondr9   r:   r‡   Ö  s   
þz test_close_simple.<locals>.setupr\   r¥   rJ   )r   r   r%   rb   ru   r   rt   rd   re   rg   r   rh   r_   r`   r   r"   rˆ   r9   rª   r:   Útest_close_simpleÑ  s.   
ÿÿ€Þr«   c                  C   sŠ  t dddgdtƒ g} tddgdtƒ g}tƒ }| ttƒ ¡ |jD ]}|jtt	t
tiks/J ‚q"tƒ }| t| ¡ | ttƒ ¡ |jD ]}|jtt	t
tiksPJ ‚qCtƒ }| t| ¡ t t¡ |jt
  tƒ ¡ W d   ƒ n1 ssw   Y  |jt  d¡ t t¡ |jt  ¡  W d   ƒ n1 s—w   Y  tƒ }| t| ¡ | t
|¡ | t
tƒ ¡ |jD ]}|jttt
t	iksÂJ ‚qµtƒ }| t| ¡ | t
|¡ | ttƒ ¡ | t
tƒ ¡ | ttƒ ¡ | t
tƒ ¡ tƒ }| tt dd	dd
gd¡ t t¡ |jt  tƒ ¡ W d   ƒ n	1 sw   Y  |jt
  d¡ t t¡ |jt
  ¡  W d   ƒ d S 1 s>w   Y  d S )Nr)   r–   r“   r,   r5   r”   r6   r\   r*   rS   )r   r   r   r%   rd   r   r   re   rf   r   r   r   r   r_   r`   r!   rb   rt   r"   ru   )rG   rD   rj   rb   r9   r9   r:   Útest_close_different_statesú  sf   þþ

ÿÿ

ÿþÿ$ÿr¬   c                  C   s2  t tƒ} |  d¡ |  d¡ t| ƒtddddgdtdd	tƒ gks$J ‚| jt t	u s-J ‚|  
td
g d¡ |  
tƒ ¡ | jt t	u sEJ ‚|  ¡  t| ƒtddddgdtdd	tƒ tƒ gksaJ ‚| jttttikslJ ‚|  
td
g d¡ |  
tƒ ¡ | jttttiks†J ‚|  
tƒ ¡ | jttttiks—J ‚d S )Nsp   GET /1 HTTP/1.1
Host: a.com
Content-Length: 5

12345GET /2 HTTP/1.1
Host: a.com
Content-Length: 5

67890r\   r)   rŒ   )r   r™   )rL   rš   r,   rV   rW   r5   r6   r   rY   )r   r   rt   r&   r   r   r   rf   r   r   rd   r   r‘   r   r   r   r   ry   r9   r9   r:   Útest_pipelined_close<  sF   ÿ
ý
ù	ý
ø
r­   c               
      sÖ   G dd„ dƒ} | ƒ ‰ dt ttf dtdt tttt  f f‡ fdd„}|dd	ƒ\}}|ˆ gks1J ‚| tƒ ¡ |d
d	ƒ\}}ˆ |v sDJ ‚d|| ˆ ¡< d 	|¡dksTJ ‚|d dƒ\}}|ˆ gksbJ ‚|j
tu siJ ‚d S )Nc                   @   s   e Zd Zdefdd„ZdS )z*test_sendfile.<locals>.SendfilePlaceholderr(   c                 S   s   dS )Né
   r9   )Úselfr9   r9   r:   Ú__len__h  s   z2test_sendfile.<locals>.SendfilePlaceholder.__len__N)Ú__name__Ú
__module__Ú__qualname__rM   r°   r9   r9   r9   r:   ÚSendfilePlaceholderg  s    r´   Úheaderr4   r(   c                    sV   t tƒ}t|d |¡ d¡ƒ g }| r| | ¡ | td|d¡ || t	ˆ d¡fS )NzGET / HTTP/{}
Host: a

Úasciir5   r6   rW   )
r   r   r'   ÚformatÚencoderA   rd   r   Zsend_with_data_passthroughr   )rµ   r4   rz   r/   ©Úplaceholderr9   r:   r‡   m  s   ÿ
ztest_sendfile.<locals>.setuprS   z1.1r?   s
   xxxxxxxxxxr\   s   a
xxxxxxxxxx
r2   )r   rB   r   r   r   Úbytesrd   r   ÚindexÚjoinrg   r   )r´   r‡   rz   rX   Ú_r9   r¹   r:   Útest_sendfilef  s&   
ÿÿþr¿   c               	   C   sJ  t tfD ]c} t| d}| d¡ t t¡ | ¡  W d   ƒ n1 s$w   Y  |jt	u s0J ‚|j
t	us7J ‚t|jjƒ t t¡ | ¡  W d   ƒ n1 sQw   Y  | tu rg| tdg d¡dksgJ ‚qdtt dtfdd	„}t tfD ]«} | t u rtd
ddgd}td
ddgdd}n| tu r tdg d}tdg dd}|| ƒ}| |¡ |j
t	us°J ‚|| ƒ}t t¡ | |¡ W d   ƒ n1 sÉw   Y  |j
t	u sÕJ ‚|jt	usÜJ ‚t t¡ | |¡ W d   ƒ n1 sñw   Y  || ƒ}| ¡  |j
t	u sJ ‚|jt	usJ ‚| ¡  |j
t	u sJ ‚|jt	us"J ‚qwd S )Nrn   s   gibberish

i  r6   s$   HTTP/1.1 400 
Connection: close

Úroler(   c                 S   s.   t | d}| tu rt|dƒ |jtu sJ ‚|S )Nrn   r|   )r   r   r'   rg   r   ©rÀ   rz   r9   r9   r:   rb   ¡  s
   

ztest_errors.<locals>.connr)   r*   rE   r,   r2   r3   r5   r8   )r   r   r   rt   r_   r`   r"   ru   rh   r   rg   ÚprintZ_cstaterf   rd   r   r   r#   r   r!   Zsend_failed)rÀ   rz   rb   ZgoodÚbadr9   r9   r:   Útest_errorsŠ  sf   


ÿ
ÿÿÿ€ü
ÿÿÜrÄ   c                  C   s*   t tfD ]} t| ƒ}| ¡ tu sJ ‚qd S r©   )r   r   r   ru   r   rÁ   r9   r9   r:   Útest_idle_receive_nothingÐ  s   þrÅ   c                  C   sd   t tƒ} |  d¡ |  ¡ tu sJ ‚|  d¡ t t¡ |  ¡  W d   ƒ d S 1 s+w   Y  d S )Ns   GET /r\   )r   r   rt   ru   r   r_   r`   r"   ry   r9   r9   r:   Útest_connection_drop×  s   


"ÿrÆ   c                  C   s    t ƒ } |  ttddgd¡ d S )Ni˜  )s
   connections   closer6   )r%   rd   r   r   )rj   r9   r9   r:   Útest_408_request_timeoutà  s   rÇ   c                  C   sJ   t tƒ} |  d¡ t t¡ |  ¡  W d   ƒ d S 1 sw   Y  d S )Nrs   ©r   r   rt   r_   r`   r"   ru   ry   r9   r9   r:   Útest_empty_requestè  s
   

"ÿrÉ   c                  C   s`   t tƒ} |  tdddgd¡ |  d¡ t t¡ |  ¡  W d   ƒ d S 1 s)w   Y  d S )Nr)   r*   r“   r,   rs   )	r   r   rd   r   rt   r_   r`   r"   ru   ry   r9   r9   r:   Útest_empty_responseð  s   

"ÿrÊ   rX   )ó    ó    s    ¥c                 C   óJ   t tƒ}| | ¡ t t¡ | ¡  W d   ƒ d S 1 sw   Y  d S r©   rÈ   ©rX   rz   r9   r9   r:   Ú'test_early_detection_of_invalid_requestø  ó
   	

"ÿrÏ   )rË   rÌ   s    1c                 C   rÍ   r©   )r   r   rt   r_   r`   r"   ru   rÎ   r9   r9   r:   Ú(test_early_detection_of_invalid_response  rÐ   rÑ   c                  C   s”   dt dt dtfdd„} dD ]:}| |dƒ}| tdg d	¡d
ks!J ‚| |dƒ}| tdg d	¡dks3J ‚| |dƒ}| tdddgd	¡d
ksGJ ‚qd S )Nr-   r4   r(   c                 S   sN   t tƒ}| | d | d d ¡ t| ¡ ƒtu sJ ‚t| ¡ ƒtu s%J ‚|S )Ns    / HTTP/rs   s   Host: example.com

)r   r   rt   Útyperu   r   r   )r-   r4   rz   r9   r9   r:   r‡     s   ÿz(test_HEAD_framing_headers.<locals>.setup)rJ   rI   rU   r5   r6   s-   HTTP/1.1 200 
Transfer-Encoding: chunked

s   1.0r}   r   r?   )r»   r   rd   r   )r‡   r-   rz   r9   r9   r:   Útest_HEAD_framing_headers  s*   	
ÿ
ÿ
þþÿ	÷ÿïrÓ   c                  C   sZ  t tƒ} |  d¡ t|  ¡ ƒtu sJ ‚|  ¡ tu sJ ‚|  d¡ |  ¡ tddks+J ‚|  d¡ t 	t
¡}|  ¡  W d   ƒ n1 sDw   Y  dt|jƒv sRJ ‚dt|jƒv s[J ‚t tƒ} |  d¡ t|  ¡ ƒtu snJ ‚|  ¡ tu svJ ‚|  d¡ |  ¡ jd	ks„J ‚|  d¡ t 	t
¡}|  ¡  W d   ƒ n1 sw   Y  d
t|jƒv s«J ‚d S )Ns;   POST / HTTP/1.1
Host: example.com
Content-Length: 100

rV   rW   r\   zreceived 5 byteszexpected 100ro   s	   8
012345s   012345zincomplete chunked read)r   r   rt   rÒ   ru   r   r   r   r_   r`   r"   rB   ÚvaluerX   )rz   Úexcinfor9   r9   r:   Ú;test_special_exceptions_for_lost_connection_in_message_bodyF  s6   ÿ


ÿÿ


ÿrÖ   )r(   N)JÚtypingr   r   r   r   r   r   r   r_   Ú_connectionr
   r   r   r   r   Z_eventsr   r   r   r   r   r   r   Ú_stater   r   r   r   r   r   r   r   r   r   r    Z_utilr!   r"   r#   Úhelpersr%   r&   r'   r;   rR   rk   rm   rw   r{   r~   r   r„   r‰   r’   r˜   rž   r¨   r«   r¬   r­   r¿   rÄ   rÅ   rÆ   rÇ   rÉ   rÊ   ÚmarkZparametrizer»   rÏ   rÑ   rÓ   rÖ   r9   r9   r9   r:   Ú<module>   sV   $ $4	


,
C

'

%
*
 
-
L
!
H
}
)
B
*
$
F

	

þþ
*