U
    ƒe@—  ã                   @   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* dd
œdd„Z+dd
œdd„Z,dd
œdd„Z-dd
œdd„Z.dd
œdd„Z/dd
œdd„Z0dd
œdd„Z1dd
œdd„Z2dd
œdd„Z3dd
œdd„Z4dd
œdd „Z5dd
œd!d"„Z6dd
œd#d$„Z7dd
œd%d&„Z8dd
œd'd(„Z9dd
œd)d*„Z:dd
œd+d,„Z;dd
œd-d.„Z<dd
œd/d0„Z=dd
œd1d2„Z>dd
œd3d4„Z?dd
œd5d6„Z@dd
œd7d8„ZAdd
œd9d:„ZBejC Dd;d<d=d>g¡eEdd?œd@dA„ƒZFejC Dd;d<d=dBg¡eEdd?œdCdD„ƒZGdd
œdEdF„ZHdd
œdGdH„ZIdS )Ié    )Ú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t‚t tddddgdƒr2t‚t tddddgdƒrLt‚t tddg ddƒrdt‚t td	g d
ƒsxt‚t td	dgd
ƒrŽt‚t td	dgd
ƒr¤t‚t td	g ddƒrºt‚d S )NÚGETú/)ÚHostzExample.com©ÚmethodÚtargetÚheaders©r   Úclose)r   za, b, cLOse, fooú1.0©r.   r/   r0   Úhttp_versionéÈ   ©Ústatus_coder0   ©r8   r0   r5   )r   r   ÚAssertionErrorr   © r;   r;   úZ/var/www/html/assets/scripts/venv/lib/python3.8/site-packages/h11/tests/test_connection.pyÚtest__keep_alive    s4    ÿýÿýÿÿÿr=   c                     s´  t t tttttf  dœdd„‰ dtt t ttdœ‡ fdd„} dt t ttdœ‡ fd	d
„}i ddiddidddœfD ]j}tt	tt
f |ƒ}d| f |Žfd| f ddi|—Žfd| f ddi|—ŽffD ]\}}t||ƒdksÄt‚qÄqvddidddœfD ]R}tt	tt
f |ƒ}d |f |Žfd| f |ŽffD ]\}}t||ƒdks&t‚q&qôd |ddfd| ddffD ]\}}t||ƒdksdt‚qdtd |ƒ ƒdksšt‚td| ƒ ƒdks°t‚d S )N)ÚclÚter)   c                 S   s0   g }| d k	r|  dt| ƒf¡ |r,|  d¡ |S )NúContent-Length©zTransfer-EncodingÚchunked)ÚappendÚstr)r>   r?   r0   r;   r;   r<   r0   ?   s    
z#test__body_framing.<locals>.headersr6   F)r8   r>   r?   r)   c                    s   t | ˆ ||ƒdS )Nr7   )r   )r8   r>   r?   ©r0   r;   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?   ÚhrE   r;   r<   ÚreqL   s    

ztest__body_framing.<locals>.reqr>   éd   r?   T)r>   r?   ó   HEADó   GETr8   éÌ   i0  )úcontent-length)r   )rB   r;   )r>   )rN   )rJ   )zhttp/1.0r;   )r6   NF)NF)r   ÚintÚboolr   r   rD   r   r   r   r   r   r
   r:   )rF   rI   ÚkwargsÚmethÚrr;   rE   r<   Útest__body_framing>   s4    "	     ÿ  þý$$rT   c               	   C   s  t  t¡ tdƒ W 5 Q R X tƒ } | jt jtks8t‚| jt j	t
ksLt‚| jt
 jt
ks`t‚| jt
 j	tkstt‚|  ttddddgd¡}|dksšt‚| jD ]}|jttt
tiks t‚q | jt jtksÐt‚| jt jtksät‚| jt
 jtksøt‚| jt
 jtkst‚| jt jd ks$t‚| jt
 jdks:t‚|  t
td	g d
¡}|dks\t‚|  t
tddgd
¡}|dks€t‚| jD ]}|jttt
tiks†t‚q†| jt jdks¼t‚| jt
 jdksÒt‚|  ttdd¡}|dksòt‚| jttddtddtƒ gd}|dks"t‚| jttƒ g d}|dksBt‚| jD ]}|jttt
tiksHt‚qH|  t
tdd¡}|dksˆt‚| jt
tddtddtƒ gd}|dks¸t‚| jt
tƒ g d}|dksØt‚| jD ]}|jttt
tiksÞt‚qÞd S )Nr   r*   r+   rG   ©r@   Ú10r-   s9   GET / HTTP/1.1
Host: example.com
Content-Length: 10

ó   1.1rJ   r7   s   HTTP/1.1 100 

r6   )r@   Z11s%   HTTP/1.1 200 
Content-Length: 11

ó   12345©Údataó   67890©Úexpectó    ó
   1234567890ó   1)ÚpytestÚraisesÚ
ValueErrorr   r%   Úconnr   Úour_roler:   Z
their_roler   Úsendr   ÚconnsÚstatesr   r   Ú	our_stateÚtheir_stateZtheir_http_versionr   r   r   r   r   ©ÚprZ   rd   r;   r;   r<   Ú)test_Connection_basics_and_content_lengthj   sl    ýþÿ

  ÿ
"
rm   c                  C   s  t ƒ } |  ttddddgd¡ |  ttdddd¡}|d	ksBt‚|  ttd
ddd¡}|dksdt‚| jttddg d}|dks†t‚|  ttdgd¡}|dks¦t‚|  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üt‚qüd S )Nr*   r+   rG   rA   r-   r_   T©rZ   Zchunk_startZ	chunk_ends   a
1234567890
s   abcdes
   5
abcde
r^   rY   r\   )ZhelloZthererE   s   0
hello: there

r6   r7   s   54321rX   )r%   rf   r   r   r   r:   r   r   r   rg   rh   r   rk   r;   r;   r<   Útest_chunked­   s4    ýþ ÿ
ro   c                  C   s8  t td} d}|  |¡ |  ¡ tddddgdks6t‚|  ¡ tksFt‚|  d¡ |  ¡ td	d
d
dksjt‚|  d¡ |  ¡ tdd
ddksŽt‚|  d¡ |  ¡ tddddks²t‚|  d¡ |  ¡ tddd
dksÖt‚|  d¡ |  ¡ td	d
d
dksút‚|  d¡ |  ¡ tkst‚|  d¡ |  ¡ tƒ ks4t‚d S )N©re   óB   POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

ÚPOSTr+   rG   rA   r-   s
   5
hello
s   helloTrn   s   5
hels   helFó   ls   o
ó   os   5
helloó   
s   0

)	r   r   Úreceive_dataÚ
next_eventr   r:   r   r   r   )rd   Úrequestr;   r;   r<   Útest_chunk_boundariesÌ   s0    
ÿ
ý






ry   c                  C   sÆ   t tƒ} |  tdddgd¡ |  tƒ ¡ | jtks8t‚t| dƒt	dg ddd	gksXt‚| jt
ksft‚t| d
ƒtd
dgks€t‚t| dƒtddgksšt‚t| dƒtƒ tƒ gks´t‚| jtksÂt‚d S )Nr*   r+   rG   r-   s   HTTP/1.0 200 OK

r6   r3   s   OK)r8   r0   r5   ÚreasonrX   rY   r[   r^   )r   r   rf   r   r   ri   r   r:   r'   r   r   r   r   rj   r   ©Úcr;   r;   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,t‚| jtks:t‚|  t	dg d¡dksTt‚|  t
d	d
¡d	kslt‚|  tƒ ¡dks€t‚| jtksŽt‚t tƒ} t| dƒtdddgddt
dd
gksÀt‚t| dƒt
dd
tƒ gksÞt‚| jtksìt‚t| dƒtƒ gkst‚d S )Nó   GET / HTTP/1.0

r*   r+   r3   r4   r6   r7   ó$   HTTP/1.1 200 
Connection: close

rX   rY   r^   s(   POST / HTTP/1.0
Content-Length: 10

1rr   rU   r`   s	   234567890)r   r   r'   r   r   r:   rj   r   rf   r   r   ri   r   r{   r;   r;   r<   Ú$test_server_talking_to_http10_client  s4    þ
ÿÿüù
	r€   c               	   C   sº   dgg ddgfD ]¤} 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sœt‚| tdd¡dkst‚qd S )NrA   ©r@   Ú100r*   r+   rG   r-   r6   r7   r\   r~   r   rX   rY   )r   r   r   rD   r%   rf   r   r   r   r   r   r   r'   r:   r   )Zuser_headersrl   r|   r;   r;   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ks,t‚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sxt‚qxd S )
Nr*   r+   rG   r1   r-   rM   r7   )Ú
connectionr2   r\   )r%   rf   r   r   r   rg   rh   r   r:   r   r   ©rl   rd   r;   r;   r<   Ú(test_automagic_connection_close_handlingR  s,    ýúþ
þû

r†   c                  C   sÀ   t dœdd„} | ƒ }| ttdg d¡ |jD ]}|jr<t‚|jr.t‚q.| ƒ }| ttddgd¡ |jD ]}|jrxt‚|jrjt‚qj| ƒ }| t	t
dd	¡ |jD ]}|jr°t‚|jr¢t‚q¢d S )
Nr(   c               	   S   s\   t ƒ } |  ttdddddgd¡ | jD ]}|js(t‚q(| jt jrHt‚| jt	 jsXt‚| S )Nr*   r+   rG   r   )ZExpectz100-continuer-   )
r%   rf   r   r   rg   Ú"client_is_waiting_for_100_continuer:   rd   Ú!they_are_waiting_for_100_continuer   r…   r;   r;   r<   Úsetups  s"    ýýþ
z test_100_continue.<locals>.setuprJ   r7   r6   rA   rX   rY   )r%   rf   r   r   rg   r‡   r:   rˆ   r   r   r   ©r‰   rl   rd   r;   r;   r<   Útest_100_continuer  s&    

 ÿ



r‹   c               	   C   s  t tƒ} |  d¡ |  ¡ tks"t‚t t¡ |  d¡ |  ¡  q.W 5 Q R X t tdd} |  d¡ |  d¡ |  d¡ t	| ƒt
dd	d
dgdtƒ gksšt‚t tdd} |  d¡ |  d¡ t t¡ |  ¡  W 5 Q R X t tdd} |  d¡ |  ddd  ¡ t	| ƒt
dd	d
dgdtdd dtƒ gks2t‚t tdd} |  d¡ t	| ƒt
dddgdtƒ gkslt‚|  d¡ |  tdg d¡ |  tƒ ¡ |  ¡  t	| ƒt
dddgdtƒ gksÀt‚|  tdg d¡ |  tƒ ¡ |  ¡  t t¡ |  ¡  W 5 Q R X d S )Ns   GET / HTTP/1.0
Endless: s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiˆ  )Zmax_incomplete_event_sizes   GET / HTTP/1.0
Big: s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   

r*   r+   r3   )ÚbigA   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r.   r/   r5   r0   i   s%   GET / HTTP/1.0
Content-Length: 10000ó   ai'  )r@   Z10000rY   rJ   s   GET /1 HTTP/1.1
Host: a

GET /2 HTTP/1.1
Host: b

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXú/1)ÚhostÚar-   sè  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr6   r7   ú/2)r   Úb)r   r   rv   rw   r   r:   ra   rb   r"   r&   r   r   r   rf   r   Ústart_next_cycler{   r;   r;   r<   Ú-test_max_incomplete_event_size_countermeasureŸ  st    




   ÿü



üøÿþ
þ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s`t
‚| ¡  qF|  ttdd	dgdtƒ g¡ |  ttd
dgdtƒ g¡ d S )Nr*   r+   ©r,   r   r-   r6   ©s   transfer-encodings   chunkedr7   ÚDELETEú/fooé”  )r%   rf   r   r   r   r   r   rg   rh   r   r:   r“   r…   r;   r;   r<   Útest_reuse_simpleë  s4    þþþ

þþþþrš   c               	   C   s  t tƒ} |  ¡ tkst‚|  d¡ t| ƒtddddgdtddt	ƒ gksNt‚| j
tks\t‚| jtksjt‚|  ¡ tkszt‚|  td	g d
¡ |  t	ƒ ¡ | j
tks¦t‚| jtks´t‚|  ¡  t| ƒtddddgdtddt	ƒ gksèt‚|  ¡ tksøt‚|  td	g d
¡ |  t	ƒ ¡ |  ¡  t| ƒtdddgdt	ƒ gksBt‚|  ¡ tksTt‚|  td	g d
¡ |  t	ƒ ¡ |  ¡ tks„t‚|  d¡ |  ¡ tks t‚| jdks°t‚|  d¡ | jdksÊt‚|  ¡ tksÜt‚|  d¡ |  ¡ tksøt‚t t¡ |  d¡ W 5 Q R X 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-   rX   rY   r6   r7   r‘   r[   z/3ó   SADF)r   Fr^   )r   Ts   FDSA)r   r   rw   r   r:   rv   r&   r   r   r   rj   r   ri   r   r   rf   r   r“   Útrailing_datara   rb   ÚRuntimeErrorr{   r;   r;   r<   Útest_pipelining  sj    ÿýù
	ýù
	þ


r    c               
      sX  t ddddgdtddgdtd	dgdft d
ddddgdtd	dgdtddgdft dddddgdtddgdtd	dgdft dddddgdtddgdtddgdffD ]ž\‰ } }tdœ‡ fdd„}|ƒ }| t| ¡ |jD ]}|jtt	tt
iksèt‚qè| ttƒ ¡ |jD ]}| ¡  q|ƒ }| t|¡ |jD ]f}|jttttiks\t‚| d¡ | ¡ tksxt‚| d¡ | ¡ tks”t‚|jdks@t‚q@|ƒ }|jt }| d¡ | ¡ tksÔt‚|jdksät‚| | ¡ | ¡ tks t‚| tƒ ¡ | ¡  t|ƒt d
dg ddtƒ gks8t‚|ƒ }|jt }| d¡ | ¡ tksdt‚|jdkstt‚| t|¡ | ¡ tks’t‚|ƒ }|jt }| d¡ | ¡ tks¾t‚| | ¡ | ¡ tƒ ksÜt‚|ƒ }t t¡" |jt  t d
ddgd¡ W 5 Q R X |ƒ }| t|¡ t t¡ |jt  tdd¡ W 5 Q R X q²d S )NZCONNECTzexample.com:443)r,   Zfoo)r@   Ú1r-   r™   r–   r7   r6   r*   r+   )ÚUpgradeza, bée   )r¢   r   )r¢   r’   r(   c                     s€   t ƒ } |  tˆ ¡ | jD ]}|jt tkst‚q|  ttddtƒ g¡ | jD ]}|jt t	ksNt‚qN| j
t  ¡ tks|t‚| S )Nr`   rY   )r%   rf   r   rg   rh   r   r:   r   r   r   rd   r   rw   r   r…   ©rI   r;   r<   r‰   ~  s    

z#test_protocol_switch.<locals>.setupó   123s   456)s   123456Fr~   )r~   Fr3   r4   r^   )r^   Tr•   rY   )r   r   r   r%   rf   r   rg   rh   r   r   r   r:   r   r“   r    rv   rw   r   rž   rd   r&   r   ra   rb   r!   r   )ZdenyÚacceptr‰   rl   rd   Úscr;   r¤   r<   Útest_protocol_switchT  sª    ýù
ýù
ýøýøã)







þ





ÿr¨   c               
      s4  t tftt ffD ]\‰ ‰tdœ‡ ‡fdd„} | ƒ }|jˆ  ¡ tƒ ksLt‚|jˆ  ¡ tƒ ksdt‚|jˆ  d¡ |jˆ  ¡ tƒ ksŒt‚| ƒ }| ˆtƒ ¡ |j	D ] }|j
tks¸t‚|jtks¦t‚q¦| ƒ }t t¡ |jˆ  d¡ W 5 Q R X | ƒ }|jˆ   d¡ t t¡ |jˆ   ¡  W 5 Q R X qd S )Nr(   c                     s:   t ƒ } |  ˆ tƒ ¡ | jD ]}|jˆ tˆtikst‚q| S ©N)r%   rf   r   rg   rh   r   r   r:   r…   ©Zwho_shot_firstZwho_shot_secondr;   r<   r‰   Ö  s    
  þz test_close_simple.<locals>.setupr^   r¥   rL   )r   r   r%   rd   rw   r   r:   rv   rf   rg   ri   r   rj   ra   rb   rŸ   r"   rŠ   r;   rª   r<   Útest_close_simpleÑ  s&    
r«   c               	   C   s8  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sDt‚qDtƒ }| t| ¡ | ttƒ ¡ |jD ]}|jtt	t
tiks†t‚q†tƒ }| t| ¡ t t¡ |jt
  tƒ ¡ W 5 Q R X |jt  d¡ t t¡ |jt  ¡  W 5 Q R X tƒ }| t| ¡ | t
|¡ | t
tƒ ¡ |jD ]}|jttt
t	iksBt‚qBtƒ }| 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 5 Q R X |jt
  d¡ t t¡ |jt
  ¡  W 5 Q R X d S )Nr*   r˜   r•   r-   r6   r–   r7   r^   r+   rU   )r   r   r   r%   rf   r   r   rg   rh   r   r   r   r:   r   ra   rb   r!   rd   rv   r"   rw   )rI   rF   rl   rd   r;   r;   r<   Útest_close_different_statesú  sb    þþ


  ÿþr¬   c                  C   s6  t tƒ} |  d¡ |  d¡ t| ƒtddddgdtdd	tƒ gksHt‚| jt	 t
ksZt‚|  td
g d¡ |  tƒ ¡ | jt t
ksŠt‚|  ¡  t| ƒtddddgdtdd	tƒ tƒ gksÂt‚| jt	tttiksØt‚|  td
g d¡ |  tƒ ¡ | jt	tttikst‚|  tƒ ¡ | jt	tttiks2t‚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›   )rN   rœ   r-   rX   rY   r6   r7   r‘   r[   )r   r   rv   r&   r   r   r   r:   rh   r   r   rf   r   r“   r   r   r   r   r{   r;   r;   r<   Útest_pipelined_close<  sF    ÿ
ýù
	ýø

r­   c                     sÒ   G dd„ dƒ} | ƒ ‰ t ttf tt tttt  f dœ‡ fdd„}|ddƒ\}}|ˆ gks^t‚| tƒ ¡ |ddƒ\}}ˆ |ks„t‚d	|| 	ˆ ¡< d
 
|¡dks¤t‚|d dƒ\}}|ˆ gksÀt‚|jtksÎt‚d S )Nc                   @   s   e Zd Zedœdd„ZdS )z*test_sendfile.<locals>.SendfilePlaceholderr(   c                 S   s   dS )Né
   r;   )Úselfr;   r;   r<   Ú__len__h  s    z2test_sendfile.<locals>.SendfilePlaceholder.__len__N)Ú__name__Ú
__module__Ú__qualname__rO   r°   r;   r;   r;   r<   ÚSendfilePlaceholderg  s   r´   )Úheaderr5   r)   c                    sV   t tƒ}t|d |¡ d¡ƒ g }| r0| | ¡ | td|d¡ || t	ˆ d¡fS )NzGET / HTTP/{}
Host: a

Úasciir6   r7   rY   )
r   r   r'   ÚformatÚencoderC   rf   r   Zsend_with_data_passthroughr   )rµ   r5   r|   r0   ©Úplaceholderr;   r<   r‰   m  s     ÿ
ztest_sendfile.<locals>.setuprU   z1.1rA   s
   xxxxxxxxxxr^   s   a
xxxxxxxxxx
r3   )r   rD   r   r   r   Úbytesr:   rf   r   ÚindexÚjoinri   r   )r´   r‰   r|   rZ   Ú_r;   r¹   r<   Útest_sendfilef  s     
 þr¿   c               
   C   s   t tfD ]ž} t| d}| d¡ t t¡ | ¡  W 5 Q R X |jt	ksLt
‚|jt	k	sZt
‚t|jjƒ t t¡ | ¡  W 5 Q R X | tkr| tdg d¡dkst
‚qtt tdœdd„}t tfD ]4} | t krötd	d
dgd}td	d
dgdd}n$| tkrtdg d}tdg dd}|| ƒ}| |¡ |jt	k	s<t
‚|| ƒ}t t¡ | |¡ W 5 Q R X |jt	kstt
‚|jt	k	s„t
‚t t¡ | |¡ W 5 Q R X || ƒ}| ¡  |jt	ksÄt
‚|jt	k	sÔt
‚| ¡  |jt	ksìt
‚|jt	k	sÄt
‚qÄd S )Nrp   s   gibberish

i  r7   s$   HTTP/1.1 400 
Connection: close

)Úroler)   c                 S   s.   t | d}| tkr*t|dƒ |jtks*t‚|S )Nrp   r~   )r   r   r'   ri   r   r:   ©rÀ   r|   r;   r;   r<   rd   ¡  s
    

ztest_errors.<locals>.connr*   r+   rG   r-   r3   r4   r6   r9   )r   r   r   rv   ra   rb   r"   rw   rj   r   r:   ri   ÚprintZ_cstaterh   rf   r   r   r#   r   r!   Zsend_failed)rÀ   r|   rd   ZgoodÚbadr;   r;   r<   Útest_errorsŠ  sZ    

ÿÿü

rÄ   c                  C   s*   t tfD ]} t| ƒ}| ¡ tkst‚qd S r©   )r   r   r   rw   r   r:   rÁ   r;   r;   r<   Útest_idle_receive_nothingÐ  s    rÅ   c               	   C   sN   t tƒ} |  d¡ |  ¡ tks"t‚|  d¡ t t¡ |  ¡  W 5 Q R X d S )Ns   GET /r^   )	r   r   rv   rw   r   r:   ra   rb   r"   r{   r;   r;   r<   Útest_connection_drop×  s    

rÆ   c                  C   s    t ƒ } |  ttddgd¡ d S )Ni˜  )s
   connections   closer7   )r%   rf   r   r   )rl   r;   r;   r<   Útest_408_request_timeoutà  s    rÇ   c               	   C   s4   t tƒ} |  d¡ t t¡ |  ¡  W 5 Q R X d S )Nru   ©r   r   rv   ra   rb   r"   rw   r{   r;   r;   r<   Útest_empty_requestè  s    
rÉ   c               	   C   sJ   t tƒ} |  tdddgd¡ |  d¡ t t¡ |  ¡  W 5 Q R X d S )Nr*   r+   r•   r-   ru   )	r   r   rf   r   rv   ra   rb   r"   rw   r{   r;   r;   r<   Útest_empty_responseð  s
    
rÊ   rZ   ó    ó    s    ¥)rZ   r)   c              	   C   s4   t tƒ}| | ¡ t t¡ | ¡  W 5 Q R X d S r©   rÈ   ©rZ   r|   r;   r;   r<   Ú'test_early_detection_of_invalid_requestø  s    	
rÎ   s    1c              	   C   s4   t tƒ}| | ¡ t t¡ | ¡  W 5 Q R X d S r©   )r   r   rv   ra   rb   r"   rw   rÍ   r;   r;   r<   Ú(test_early_detection_of_invalid_response  s    	
rÏ   c                  C   s   t t tdœdd„} dD ]t}| |dƒ}| tdg d¡dks>t‚| |d	ƒ}| tdg d¡d
ksbt‚| |dƒ}| tdddgd¡dkst‚qd S )N)r.   r5   r)   c                 S   sN   t tƒ}| | d | d d ¡ t| ¡ ƒtks6t‚t| ¡ ƒtksJt‚|S )Ns    / HTTP/ru   s   Host: example.com

)r   r   rv   Útyperw   r   r:   r   )r.   r5   r|   r;   r;   r<   r‰     s    ÿz(test_HEAD_framing_headers.<locals>.setup)rL   rK   rW   r6   r7   s-   HTTP/1.1 200 
Transfer-Encoding: chunked

s   1.0r   r   rA   )r»   r   rf   r   r:   )r‰   r.   r|   r;   r;   r<   Útest_HEAD_framing_headers  s(    	
ÿ
ÿ
þþÿ	÷ÿrÑ   c               	   C   s4  t tƒ} |  d¡ t|  ¡ ƒtks&t‚|  ¡ tks6t‚|  d¡ |  ¡ tddksVt‚|  d¡ t	 
t¡}|  ¡  W 5 Q R X dt|jƒkst‚dt|jƒks¢t‚t tƒ} |  d¡ t|  ¡ ƒtksÈt‚|  ¡ tksØt‚|  d¡ |  ¡ jd	ksôt‚|  d¡ t	 
t¡}|  ¡  W 5 Q R X d
t|jƒks0t‚d S )Ns;   POST / HTTP/1.1
Host: example.com
Content-Length: 100

rX   rY   r^   zreceived 5 byteszexpected 100rq   s	   8
012345s   012345zincomplete chunked read)r   r   rv   rÐ   rw   r   r:   r   r   ra   rb   r"   rD   ÚvaluerZ   )r|   Úexcinfor;   r;   r<   Ú;test_special_exceptions_for_lost_connection_in_message_bodyF  s2    ÿ

ÿ

rÔ   )JÚtypingr   r   r   r   r   r   r   ra   Ú_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=   rT   rm   ro   ry   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Ô   r;   r;   r;   r<   Ú<module>   s`   $$	4,C'%* -L!H})B*$F	ýþýþ*