o
    À{g@—  ã                   @   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   úv/var/www/bot.gig.net.ua/public_html/telegram/P1/HellBot/venv/lib/python3.10/site-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>   Ú11s%   HTTP/1.1 200 
Content-Length: 11

ó   12345©Údataó   67890©Úexpectó    ó
   1234567890ó   1)ÚpytestÚraisesÚ
ValueErrorr   r%   Úconnr   Úour_roleÚ
their_roler   Úsendr   ÚconnsÚstatesr   r   Ú	our_stateÚtheir_stateÚtheir_http_versionr   r   r   r   r   ©ÚprY   rc   r9   r9   r:   Ú)test_Connection_basics_and_content_lengthj   sl   
ÿýþÿ

ÿ
"
ÿrn   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©rY   Úchunk_startÚ	chunk_ends   a
1234567890
s   abcdes
   5
abcde
r]   rX   r[   )ÚhelloÚthererC   s   0
hello: there

r5   r6   s   54321rW   )r%   rf   r   r   r   r   r   r   rg   rh   r   rl   r9   r9   r:   Útest_chunked­   s4   ýþÿ
ÿrt   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©rd   óB   POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

ÚPOSTr*   rE   r?   r,   s
   5
hello
s   helloTro   s   5
hels   helFó   ls   o
ó   os   5
helloó   
s   0

)r   r   Úreceive_dataÚ
next_eventr   r   r   r   )rc   Úrequestr9   r9   r:   Útest_chunk_boundariesÌ   s0   
ÿ
ý






r~   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   ÚreasonrW   rX   rZ   r]   )r   r   rf   r   r   ri   r   r'   r   r   r   r   rj   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

rW   rX   r]   s(   POST / HTTP/1.0
Content-Length: 10

1rw   rS   r_   s	   234567890)r   r   r'   r   r   rj   r   rf   r   r   ri   r   r€   r9   r9   r:   Ú$test_server_talking_to_http10_client  s2   
þÿü
ù	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   r[   rƒ   r„   rW   rX   )r   r   r   rB   r%   rf   r   r   r   r   r   r   r'   r   )Úuser_headersrm   r   r9   r9   r:   Ú,test_automatic_transfer_encoding_in_response(  s4   ûþþ	
ÿý

ÿÞ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   r[   )
r%   rf   r   r   r   rg   rh   r   r   r   ©rm   rc   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†   )ÚExpectz100-continuer,   )	r%   rf   r   r   rg   Ú"client_is_waiting_for_100_continuerc   Ú!they_are_waiting_for_100_continuer   r‹   r9   r9   r:   Úsetups  s   ýþ
z test_100_continue.<locals>.setuprH   r6   r5   r?   rW   rX   )
r%   rf   r   r   rg   rŽ   r   r   r   r   ©r   rm   rc   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ˆ  )Úmax_incomplete_event_sizes   GET / HTTP/1.0
Big: s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   

r)   r*   r2   )ÚbigÁ   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r-   r.   r4   r/   i   s%   GET / HTTP/1.0
Content-Length: 10000ó   ai'  )r>   Ú10000rX   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   r{   r|   r   r`   ra   r"   r&   r   r   r   rf   r   Ústart_next_cycler€   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%   rf   r   r   r   r   r   rg   rh   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,   rW   rX   r5   r6   r›   rZ   z/3ó   SADF)r§   Fr]   )r§   Ts   FDSA)r   r   r|   r   r{   r&   r   r   r   rj   r   ri   r   r   rf   r   r   Útrailing_datar`   ra   ÚRuntimeErrorr€   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 )NÚCONNECTzexample.com:443©r+   Ú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_   rX   )r%   rf   r   rg   rh   r   r   r   r   rc   r   r|   r   r‹   ©rG   r9   r:   r   ~  s   

z#test_protocol_switch.<locals>.setupó   123s   456)s   123456Frƒ   )rƒ   Fr2   r3   r]   )r]   TrŸ   rX   )r   r   r   r%   rf   r   rg   rh   r   r   r   r   r   r    r{   r|   r   r¨   rc   r&   r   r`   ra   r!   r   )ÚdenyÚacceptr   rm   rc   Ú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%   rf   r   rg   rh   r   r   r‹   ©Úwho_shot_firstÚwho_shot_secondr9   r:   r   Ö  s   
þz test_close_simple.<locals>.setupr]   r³   rJ   )r   r   r%   rc   r|   r   r{   rf   rg   ri   r   rj   r`   ra   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%   rf   r   r   rg   rh   r   r   r   r   r`   ra   r!   rc   r{   r"   r|   )rG   rD   rm   rc   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,   rW   rX   r5   r6   r›   rZ   )r   r   r{   r&   r   r   r   rh   r   r   rf   r   r   r   r   r   r   r€   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   rX   )
r   r   r'   ÚformatÚencoderA   rf   r   Úsend_with_data_passthroughr   )rÆ   r4   r   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   Úbytesrf   r   ÚindexÚjoinri   r   )rÅ   r   r   rY   Ú_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 )Nru   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 )Nru   rƒ   )r   r   r'   ri   r   ©rÒ   r   r9   r9   r:   rc   ¡  s
   

ztest_errors.<locals>.connr)   r*   rE   r,   r2   r3   r5   r8   )r   r   r   r{   r`   ra   r"   r|   rj   r   ri   ÚprintÚ_cstaterh   rf   r   r   r#   r   r!   Úsend_failed)rÒ   r   rc   ÚgoodÚbadr9   r9   r:   Útest_errorsŠ  sd   


ÿ
ÿÿ€ü
ÿÿÜrÙ   c                  C   s*   t tfD ]} t| ƒ}| ¡ tu sJ ‚qd S r¸   )r   r   r   r|   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   r{   r|   r   r`   ra   r"   r€   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%   rf   r   r   )rm   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 )Nrz   ©r   r   r{   r`   ra   r"   r|   r€   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,   rz   )	r   r   rf   r   r{   r`   ra   r"   r|   r€   r9   r9   r:   Útest_empty_responseð  s   

"ÿrß   rY   )ó    ó    s    ¥c                 C   óJ   t tƒ}| | ¡ t t¡ | ¡  W d   ƒ d S 1 sw   Y  d S r¸   rÝ   ©rY   r   r9   r9   r:   Ú'test_early_detection_of_invalid_requestø  ó
   	

"ÿrä   )rà   rá   s    1c                 C   râ   r¸   )r   r   r{   r`   ra   r"   r|   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/rz   s   Host: example.com

)r   r   r{   Útyper|   r   r   )r-   r4   r   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   rf   r   )r   r-   r   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

rW   rX   r]   zreceived 5 byteszexpected 100rv   s	   8
012345s   012345zincomplete chunked read)r   r   r{   rç   r|   r   r   r   r`   ra   r"   rB   ÚvaluerY   )r   Ú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   Ú_eventsr   r   r   r   r   r   r   Ú_stater   r   r   r   r   r   r   r   r   r   r    Ú_utilr!   r"   r#   Úhelpersr%   r&   r'   r;   rR   rn   rt   r~   r‚   r…   r‰   rŒ   r’   rž   r¤   rª   r·   r¼   r½   r¾   rÑ   rÙ   rÚ   rÛ   rÜ   rÞ   rß   ÚmarkÚparametrizerÍ   rä   ræ   rè   rë   r9   r9   r9   r:   Ú<module>   sV   $ $4	


,
C

'

%
*
 
-
L
!
H
}
)
B
*
$
F

	

þþ
*