a
    ZŠÝ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* 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;g d<¢¡eEdd=œd>d?„ƒZFejC Dd;g d@¢¡eEdd=œdAdB„ƒZGdd
œdCdD„ZHdd
œdEdF„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ƒr2J ‚t tddddgdƒrLJ ‚t tddg ddƒrdJ ‚t td	g d
ƒsxJ ‚t td	dgd
ƒrŽJ ‚t td	dgd
ƒr¤J ‚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/   r0   Úhttp_versionéÈ   ©Ústatus_coder0   ©r8   r0   r5   )r   r   r   © r:   r:   úg/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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 ]n}tt	tt
f |ƒ}d| f i |¤Žfd| f ddi|¤Žfd| f ddi|¤ŽffD ]\}}t||ƒdksÈJ ‚qÈqvddidddœfD ]\}tt	tt
f |ƒ}d |f i |¤Žfd| f i |¤ŽffD ]\}}t||ƒdks2J ‚q2 qød |ddfd| ddffD ]\}}t||ƒdksrJ ‚qrt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>   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>   ÚhrD   r:   r;   ÚreqL   s    

ztest__body_framing.<locals>.reqr=   éd   r>   T)r=   r>   ó   HEADó   GETr8   éÌ   i0  )úcontent-length)r   )rA   r:   )r=   )rM   )rI   )zhttp/1.0r:   )r6   NF)NF)r   ÚintÚboolr   r   rC   r   r   r   r   r   r
   )rE   rH   ÚkwargsÚmethÚrr:   rD   r;   Útest__body_framing>   s,    "	 ÿ
þý,$rS   c                  C   s  t  t¡ tdƒ W d   ƒ n1 s(0    Y  tƒ } | jt jtu sLJ ‚| jt jt	u s`J ‚| jt	 jt	u stJ ‚| jt	 jtu sˆJ ‚|  
ttddddgd¡}|dks®J ‚| jD ]}|jttt	tiks´J ‚q´| jt jtu säJ ‚| jt jtu søJ ‚| jt	 jtu sJ ‚| jt	 jtu s$J ‚| jt jd u s:J ‚| jt	 jdksPJ ‚|  
t	td	g d
¡}|dksrJ ‚|  
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s8J ‚| j
ttƒ g d}|dksXJ ‚| jD ]}|jttt	tiks^J ‚q^|  
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sôJ ‚qôd S )Nr   r*   r+   rF   ©r?   Ú10r-   s9   GET / HTTP/1.1
Host: example.com
Content-Length: 10

ó   1.1rI   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_roleZ
their_roler   Úsendr   ÚconnsÚstatesr   r   Ú	our_stateÚtheir_stateZtheir_http_versionr   r   r   r   r   ©ÚprY   rc   r:   r:   r;   Ú)test_Connection_basics_and_content_lengthj   sh    &ýþÿ

ÿ
"
rl   c                  C   s  t ƒ } |  ttddddgd¡ |  ttdddd¡}|d	ksBJ ‚|  ttd
ddd¡}|dksdJ ‚| jttddg d}|dks†J ‚|  ttdgd¡}|dks¦J ‚|  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+   rF   r@   r-   r^   T©rY   Zchunk_startZ	chunk_ends   a
1234567890
s   abcdes
   5
abcde
r]   rX   r[   )ZhelloZthererD   s   0
hello: there

r6   r7   s   54321rW   )r%   re   r   r   r   r   r   r   rf   rg   r   rj   r:   r:   r;   Útest_chunked­   s2    ýþÿ
rn   c                  C   s8  t td} d}|  |¡ |  ¡ tddddgdks6J ‚|  ¡ tu sFJ ‚|  d¡ |  ¡ td	d
d
dksjJ ‚|  d¡ |  ¡ tdd
ddksŽJ ‚|  d¡ |  ¡ tddddks²J ‚|  d¡ |  ¡ tddd
dksÖJ ‚|  d¡ |  ¡ td	d
d
dksúJ ‚|  d¡ |  ¡ tksJ ‚|  d¡ |  ¡ tƒ ks4J ‚d S )N©rd   óB   POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

ÚPOSTr+   rF   r@   r-   s
   5
hello
s   helloTrm   s   5
hels   helFó   ls   o
ó   os   5
helloó   
s   0

)r   r   Úreceive_dataÚ
next_eventr   r   r   r   )rc   Úrequestr:   r:   r;   Útest_chunk_boundariesÌ   s0    
ÿ
ý






rx   c                  C   sÆ   t tƒ} |  tdddgd¡ |  tƒ ¡ | jtu s8J ‚t| dƒtdg ddd	gksXJ ‚| jt	u sfJ ‚t| d
ƒt
d
dgks€J ‚t| dƒt
ddgksšJ ‚t| dƒtƒ tƒ gks´J ‚| jtu sÂJ ‚d S )Nr*   r+   rF   r-   s   HTTP/1.0 200 OK

r6   r3   s   OK)r8   r0   r5   ÚreasonrW   rX   rZ   r]   )r   r   re   r   r   rh   r   r'   r   r   r   r   ri   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,J ‚| jtu s:J ‚|  tdg d¡dksTJ ‚|  t	d	d
¡d	kslJ ‚|  tƒ ¡dks€J ‚| j
tu sŽJ ‚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sÞJ ‚| jtu sìJ ‚t| dƒtƒ gksJ ‚d S )Nó   GET / HTTP/1.0

r*   r+   r3   r4   r6   r7   ó$   HTTP/1.1 200 
Connection: close

rW   rX   r]   s(   POST / HTTP/1.0
Content-Length: 10

1rq   rT   r_   s	   234567890)r   r   r'   r   r   ri   r   re   r   r   rh   r   rz   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œJ ‚| tdd¡dksJ ‚qd S )Nr@   ©r?   Ú100r*   r+   rF   r-   r6   r7   r[   r}   r~   rW   rX   )r   r   r   rC   r%   re   r   r   r   r   r   r   r'   r   )Zuser_headersrk   r{   r:   r:   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sxJ ‚qxd S )
Nr*   r+   rF   r1   r-   rL   r7   )Ú
connectionr2   r[   )
r%   re   r   r   r   rf   rg   r   r   r   ©rk   rc   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<J ‚|jr.J ‚q.| ƒ }| ttddgd¡ |jD ]}|jrxJ ‚|jrjJ ‚qj| ƒ }| tt	dd	¡ |jD ]}|jr°J ‚|jr¢J ‚q¢d S )
Nr(   c                  S   sZ   t ƒ } |  ttddg d¢d¡ | jD ]}|js&J ‚q&| jt jrFJ ‚| jt jsVJ ‚| S )Nr*   r+   )rF   r€   )ZExpectz100-continuer-   )	r%   re   r   r   rf   Ú"client_is_waiting_for_100_continuerc   Ú!they_are_waiting_for_100_continuer   r„   r:   r:   r;   Úsetups  s    ýþ
z test_100_continue.<locals>.setuprI   r7   r6   r@   rW   rX   )
r%   re   r   r   rf   r†   r‡   r   r   r   ©rˆ   rk   rc   r:   r:   r;   Útest_100_continuer  s$    

ÿ



rŠ   c                  C   sF  t tƒ} |  d¡ |  ¡ tu s"J ‚t t¡$ |  d¡ |  ¡  q.W d   ƒ n1 sV0    Y  t tdd} |  d¡ |  d¡ |  d¡ t| ƒt	dd	d
dgdt
ƒ gks®J ‚t tdd} |  d¡ |  d¡ t t¡ |  ¡  W d   ƒ n1 sö0    Y  t tdd} |  d¡ |  ddd  ¡ t| ƒt	dd	d
dgdtdd dt
ƒ gksZJ ‚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   ƒ n1 s80    Y  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10000rX   rI   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   ru   rv   r   r`   ra   r"   r&   r   r   r   re   r   Ústart_next_cyclerz   r:   r:   r;   Ú-test_max_incomplete_event_size_countermeasureŸ  sn    

(



ÿü


&
üøÿþ
þ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`J ‚| 
¡  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%   re   r   r   r   r   r   rf   rg   r   r’   r„   r:   r:   r;   Útest_reuse_simpleë  s4    þþþ

þþþþr™   c                  C   s2  t tƒ} |  ¡ tu sJ ‚|  d¡ t| ƒtddddgdtddtƒ gksNJ ‚| j	t
u s\J ‚| jtu sjJ ‚|  ¡ tu szJ ‚|  td	g d
¡ |  tƒ ¡ | j	t
u s¦J ‚| jt
u s´J ‚|  ¡  t| ƒtddddgdtddtƒ gksèJ ‚|  ¡ tu søJ ‚|  td	g d
¡ |  tƒ ¡ |  ¡  t| ƒtdddgdtƒ gksBJ ‚|  ¡ tu sTJ ‚|  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   ƒ n1 s$0    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   r6   r7   r   rZ   z/3ó   SADF)rœ   Fr]   )rœ   Ts   FDSA)r   r   rv   r   ru   r&   r   r   r   ri   r   rh   r   r   re   r   r’   Útrailing_datar`   ra   ÚRuntimeErrorrz   r:   r:   r;   Útest_pipelining  sj    ÿýù
	ýù
	þ


rŸ   c               	      s~  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 ]Ê\‰ } }tdœ‡ fdd„}|ƒ }| t| ¡ |jD ]}|jtt	tt
iksâJ ‚qâ| ttƒ ¡ |jD ]}| ¡  q|ƒ }| t|¡ |jD ]f}|jttttiksVJ ‚| d¡ | ¡ tu srJ ‚| 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s2J ‚|ƒ }|jt }| d¡ | ¡ tu s^J ‚|jdksnJ ‚| t|¡ | ¡ tu sŒJ ‚|ƒ }|jt }| d¡ | ¡ tu s¸J ‚| | ¡ | ¡ tƒ ksÖJ ‚|ƒ }t t¡, |jt  t d
ddgd¡ W d   ƒ n1 s0    Y  |ƒ }| t|¡ t t¡& |jt  tdd¡ W d   ƒ q¬1 sn0    Y  q¬d S )NZCONNECTzexample.com:443©r,   Zfoo©r?   Ú1r-   r˜   r•   r7   r6   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 sNJ ‚qN| j	t
  ¡ tu s|J ‚| S )Nr_   rX   )r%   re   r   rf   rg   r   r   r   r   rc   r   rv   r   r„   ©rH   r:   r;   rˆ   ~  s    

z#test_protocol_switch.<locals>.setupó   123s   456)s   123456Fr}   )r}   Fr3   r4   r]   )r]   Tr”   rX   )r   r   r   r%   re   r   rf   rg   r   r   r   r   r’   r    ru   rv   r   r   rc   r&   r   r`   ra   r!   r   )ZdenyÚacceptrˆ   rk   rc   Úscr:   r¥   r;   Útest_protocol_switchT  sª    ýù
ýù
ýøýøã)







þ





ÿ$r©   c               	      s^  t tftt ffD ]F\‰ ‰tdœ‡ ‡fdd„} | ƒ }|jˆ  ¡ tƒ ksLJ ‚|jˆ  ¡ tƒ ksdJ ‚|jˆ  d¡ |jˆ  ¡ tƒ ksŒJ ‚| ƒ }| ˆtƒ ¡ |jD ] }|j	t
u s¸J ‚|jt
u s¦J ‚q¦| ƒ }t t¡  |jˆ  d¡ W d   ƒ n1 sþ0    Y  | ƒ }|jˆ   d¡ t t¡ |jˆ   ¡  W d   ƒ q1 sN0    Y  qd S )Nr(   c                     s:   t ƒ } |  ˆ tƒ ¡ | jD ]}|jˆ tˆtiksJ ‚q| S ©N)r%   re   r   rf   rg   r   r   r„   ©Zwho_shot_firstZwho_shot_secondr:   r;   rˆ   Ö  s    
þz test_close_simple.<locals>.setupr]   r¦   rK   )r   r   r%   rc   rv   r   ru   re   rf   rh   r   ri   r`   ra   rž   r"   r‰   r:   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sDJ ‚qDtƒ }| t| ¡ | ttƒ ¡ |jD ]}|jtt	t
tiks†J ‚q†tƒ }| t| ¡ t t¡" |jt
  tƒ ¡ W d   ƒ n1 sæ0    Y  |jt  d¡ t t¡ |jt  ¡  W d   ƒ n1 s00    Y  tƒ }| t| ¡ | t
|¡ | t
tƒ ¡ |jD ]}|jttt
t	ikslJ ‚qltƒ }| 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 s60    Y  |jt
  d¡ t t¡ |jt
  ¡  W d   ƒ n1 s€0    Y  d S )Nr*   r—   r”   r-   r6   r•   r7   r]   r+   rT   )r   r   r   r%   re   r   r   rf   rg   r   r   r   r   r`   ra   r!   rc   ru   r"   rv   )rH   rE   rk   rc   r:   r:   r;   Útest_close_different_statesú  s^    þþ

0.

ÿþ2r­   c                  C   s6  t tƒ} |  d¡ |  d¡ t| ƒtddddgdtdd	tƒ gksHJ ‚| jt t	u sZJ ‚|  
td
g d¡ |  
tƒ ¡ | jt t	u sŠJ ‚|  ¡  t| ƒtddddgdtdd	tƒ tƒ gksÂJ ‚| jttttiksØJ ‚|  
td
g d¡ |  
tƒ ¡ | jttttiksJ ‚|  
tƒ ¡ | jttttiks2J ‚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š   )rM   r›   r-   rW   rX   r6   r7   r   rZ   )r   r   ru   r&   r   r   r   rg   r   r   re   r   r’   r   r   r   r   rz   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^J ‚| tƒ ¡ |ddƒ\}}ˆ |v s„J ‚d	|| ˆ ¡< d
 	|¡dks¤J ‚|d dƒ\}}|ˆ gksÀJ ‚|j
tu sÎJ ‚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__rN   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   rX   )
r   r   r'   ÚformatÚencoderB   re   r   Zsend_with_data_passthroughr   )r¶   r5   r{   r0   ©Úplaceholderr:   r;   rˆ   m  s    ÿ
ztest_sendfile.<locals>.setuprT   z1.1r@   s
   xxxxxxxxxxr]   s   a
xxxxxxxxxx
r3   )r   rC   r   r   r   Úbytesre   r   ÚindexÚjoinrh   r   )rµ   rˆ   r{   rY   Ú_r:   rº   r;   Útest_sendfilef  s    þrÀ   c               	   C   sV  t tfD ]Æ} t| d}| d¡ t t¡ | ¡  W d   ƒ n1 sH0    Y  |jt	u s`J ‚|j
t	usnJ ‚t|jjƒ t t¡ | ¡  W d   ƒ n1 s¢0    Y  | tu r| tdg d¡dksJ ‚qtt tdœdd„}t tfD ]b} | t u r td	d
dgd}td	d
dgdd}n$| tu rDtdg d}tdg dd}|| ƒ}| |¡ |j
t	usfJ ‚|| ƒ}t t¡ | |¡ W d   ƒ n1 sš0    Y  |j
t	u s´J ‚|jt	usÄJ ‚t t¡ | |¡ W d   ƒ n1 sð0    Y  || ƒ}| ¡  |j
t	u sJ ‚|jt	us*J ‚| ¡  |j
t	u sBJ ‚|jt	usìJ ‚qìd S )Nro   s   gibberish

i  r7   s$   HTTP/1.1 400 
Connection: close

)Úroler)   c                 S   s.   t | d}| tu r*t|dƒ |jtu s*J ‚|S )Nro   r}   )r   r   r'   rh   r   ©rÁ   r{   r:   r:   r;   rc   ¡  s
    

ztest_errors.<locals>.connr*   r+   rF   r-   r3   r4   r6   r9   )r   r   r   ru   r`   ra   r"   rv   ri   r   rh   ÚprintZ_cstaterg   re   r   r   r#   r   r!   Zsend_failed)rÁ   r{   rc   ZgoodÚbadr:   r:   r;   Útest_errorsŠ  sZ    

&&ÿÿ
ü

**rÅ   c                  C   s*   t tfD ]} t| ƒ}| ¡ tu sJ ‚qd S rª   )r   r   r   rv   r   rÂ   r:   r:   r;   Útest_idle_receive_nothingÐ  s    rÆ   c                  C   sb   t tƒ} |  d¡ |  ¡ tu s"J ‚|  d¡ t t¡ |  ¡  W d   ƒ n1 sT0    Y  d S )Ns   GET /r]   )r   r   ru   rv   r   r`   ra   r"   rz   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%   re   r   r   )rk   r:   r:   r;   Útest_408_request_timeoutà  s    rÈ   c                  C   sH   t tƒ} |  d¡ t t¡ |  ¡  W d   ƒ n1 s:0    Y  d S )Nrt   ©r   r   ru   r`   ra   r"   rv   rz   r:   r:   r;   Útest_empty_requestè  s    
rÊ   c                  C   s^   t tƒ} |  tdddgd¡ |  d¡ t t¡ |  ¡  W d   ƒ n1 sP0    Y  d S )Nr*   r+   r”   r-   rt   )	r   r   re   r   ru   r`   ra   r"   rv   rz   r:   r:   r;   Útest_empty_responseð  s
    
rË   rY   )ó    ó    s    ¥)rY   r)   c                 C   sH   t tƒ}| | ¡ t t¡ | ¡  W d   ƒ n1 s:0    Y  d S rª   rÉ   ©rY   r{   r:   r:   r;   Ú'test_early_detection_of_invalid_requestø  s    	
rÏ   )rÌ   rÍ   s    1c                 C   sH   t tƒ}| | ¡ t t¡ | ¡  W d   ƒ n1 s:0    Y  d S rª   )r   r   ru   r`   ra   r"   rv   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>J ‚| |d	ƒ}| tdg d¡d
ksbJ ‚| |dƒ}| tdddgd¡dksJ ‚qd S )N)r.   r5   r)   c                 S   sN   t tƒ}| | d | d d ¡ t| ¡ ƒtu s6J ‚t| ¡ ƒtu sJJ ‚|S )Ns    / HTTP/rt   s   Host: example.com

)r   r   ru   Útyperv   r   r   )r.   r5   r{   r:   r:   r;   rˆ     s    ÿz(test_HEAD_framing_headers.<locals>.setup)rK   rJ   rV   r6   r7   s-   HTTP/1.1 200 
Transfer-Encoding: chunked

s   1.0r~   r€   r@   )r¼   r   re   r   )rˆ   r.   r{   r:   r:   r;   Útest_HEAD_framing_headers  s(    	
ÿ
ÿ
þþÿ	÷ÿrÒ   c                  C   s`  t tƒ} |  d¡ t|  ¡ ƒtu s&J ‚|  ¡ tu s6J ‚|  d¡ |  ¡ tddksVJ ‚|  d¡ t 	t
¡}|  ¡  W d   ƒ n1 sˆ0    Y  dt|jƒv s¤J ‚dt|jƒv s¶J ‚t tƒ} |  d¡ t|  ¡ ƒtu sÜJ ‚|  ¡ tu sìJ ‚|  d¡ |  ¡ jd	ks
J ‚|  d¡ t 	t
¡}|  ¡  W d   ƒ n1 s>0    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 100rp   s	   8
012345s   012345zincomplete chunked read)r   r   ru   rÑ   rv   r   r   r   r`   ra   r"   rC   ÚvaluerY   )r{   Úexcinfor:   r:   r;   Ú;test_special_exceptions_for_lost_connection_in_message_bodyF  s2    ÿ

&ÿ

(rÕ   )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<   rS   rl   rn   rx   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>   sT   $$	4,C'%* -L!H})B*$F	þþ*