
     f@                     J   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Z+d*dZ,d*dZ-d*dZ.d*dZ/d*dZ0d*dZ1d*dZ2d*dZ3d*dZ4d*dZ5d*dZ6d*dZ7d*dZ8d*dZ9d*dZ:d*dZ;d*dZ<d*dZ=d*dZ>d*dZ?d*d Z@d*d!ZAd*d"ZBejC        D                    d#g d$          d#eEd
dfd%            ZFejC        D                    d#g d&          d#eEd
dfd'            ZGd*d(ZHd*d)ZIdS )+    )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                      t          t          dddg                    sJ t          t          ddddg                    rJ t          t          ddddg                    rJ t          t          ddg d                    rJ t          t          d	g 
                    sJ t          t          d	dg
                    rJ t          t          d	dg
                    rJ t          t          d	g d                    rJ d S )NGET/)HostzExample.commethodtargetheadersr   close)r   za, b, cLOse, foo1.0r/   r0   r1   http_version   status_coder1   r9   r1   r6   )r   r   r        \/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/h11/tests/test_connection.pytest__keep_aliver>       s   uS3J2KLLL     ,.EF	
 	
 	
     ,.PQ	
 	
 	
     uS"5III     xC<<<=====8>U=VWWWXXXXXS+M*NOOO     8ReTTTUUUUUUUr<   c            	         dt           t                   dt          dt          t          t
          t
          f                  fd	 ddt          dt           t                   dt          dt          ffd} ddt           t                   dt          dt          ffd	}i dd
iddid
ddfD ]f}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    sJ gddid
ddfD ]Y}t          t          t
          t          f         |          }d  |di |fd | di |ffD ]\  }}t          ||          dk    sJ Zd  |d
          fd | d
          ffD ]\  }}t          ||          dk    sJ t          d  |                      dk    sJ t          d |                       dk    sJ d S )Nclter)   c                     g }| $|                     dt          |           f           |r|                     d           |S )NContent-LengthzTransfer-Encodingchunked)appendstr)r@   rA   r1   s      r=   r1   z#test__body_framing.<locals>.headers?   sJ    >NN,c"gg6777 	=NN;<<<r<   r7   Fr9   c                 :    t          |  ||                    S )Nr8   )r   )r9   r@   rA   r1   s      r=   respz test__body_framing.<locals>.respG   s"     KRIIIIr<   c                 L     | |          }|dgz  }t          dd|          S )Nr-   zexample.comr+   r,   r.   )r   )r@   rA   hr1   s      r=   reqztest__body_framing.<locals>.reqL   s5    GBOO	%&&eC;;;;r<   d   T)r@   rA      HEAD   GET   i0  )content-length)r   )rE   r;   )r@   )rR   )rN   )zhttp/1.0r;   )r7   NF)NFr;   )r   intboolr   r   rG   r   r   r   r   r   r   )rI   rM   kwargsmethrr1   s        @r=   test__body_framingrX   >   s   HSM t U38_0E     FKJ JJ$,SMJ>BJ	J J J J J J
< < <$ <7 < < < < < < c{T4LD2I2IJ F Fd38nf--ddnnVnn%TT44c4V445TT44c4V445
 	F 	FGD!
 !q))-EEEEEE	F $<4!8!89 = =d38nf--ss}}V}}-v/GH 	= 	=GD! q))_<<<<<	= 33#;;;'&$$#,,,)?@ D DaT1%%)CCCCCC ssuu%%)AAAAA((,<<<<<<<r<   c            	         t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t	                      } | 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 | 
                    t          t          ddddg                    }|dk    sJ | j        D ]'}|j        t          t          t          t          ik    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        t          u sJ | j        t                   j        J | j        t                   j        dk    sJ | 
                    t          t'          d	g 
                    }|dk    sJ | 
                    t          t)          ddg
                    }|dk    sJ | j        D ]'}|j        t          t          t          t          ik    sJ (| j        t                   j        dk    sJ | j        t                   j        dk    sJ | 
                    t          t+          d                    }|dk    sJ | 
                    t          t+          d          t+          d          t-                      g          }|dk    sJ | 
                    t          t-                      g           }|dk    sJ | j        D ]'}|j        t          t.          t          t          ik    sJ (| 
                    t          t+          d                    }|dk    sJ | 
                    t          t+          d          t+          d          t-                      g          }|dk    sJ | 
                    t          t-                      g           }|dk    sJ | j        D ]'}|j        t          t.          t          t.          ik    sJ (d S )Nr   r+   r,   rK   rC   10r.   s9   GET / HTTP/1.1
Host: example.com
Content-Length: 10

   1.1rN   r8   s   HTTP/1.1 100 

r7   )rC   11s%   HTTP/1.1 200 
Content-Length: 11

   12345data   67890expectr<   
   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   pr`   ri   s      r=   )test_Connection_basics_and_content_lengthrt   j   s   	z	"	"  8               	A6&>"f,,,,6&>$....6&>"f,,,,6&>$....66,.FG	
 	
 	
 D T     I I{vy&-HHHHHH6&>#y00006&>%66666&>#}44446&>%22226&>,4446&>,666666&/CLLLMMD+++++66&(s=U<VWWWXXDAAAAA E E{vy&)DDDDDD6&>,66666&>,666666&$H---..D866(###Tx-@-@-@,..,Q   D 866&,..644D3;;;; @ @{vtVY??????66&$M22233D=    66&$D///4T???LNN2S6TTD4<<<<66&,..644D3;;;; ; ;{vtVT::::::; ;s   6::c            	         t                      } |                     t          t          ddddg                     |                     t          t	          ddd                    }|d	k    sJ |                     t          t	          d
dd                    }|dk    sJ |                     t          t	          d          g           }|dk    sJ |                     t          t          dg                    }|dk    sJ |                     t          t          ddg                     |                     t          t	          ddd                     |                     t          t	          ddd                     |                     t          t                                 | j        D ]'}|j	        t          t          t          t          ik    sJ (d S )Nr+   r,   rK   rD   r.   rd   Tr`   chunk_start	chunk_ends   a
1234567890
s   abcdes
   5
abcde
r<   r_   rb   )hellothere)r1   s   0
hello: there

r7   r8   s   54321r^   )r&   rl   r   r   r   r   r    r   rm   rn   r   rr   s      r=   test_chunkedr{      s   AFF,.NO	
 	
 	
   66&$MttTTTUUD)))))66&$H$$OOOPPD$$$$$66&$C...644D3;;;;66&,0B/CDDDEED/////FFS3S2TUUU   FF64X44HHHIIIFF64X44HHHIIIFF6<>>""" ; ;{vtVT::::::; ;r<   c                  D   t          t                    } d}|                     |           |                                 t	          ddddg          k    sJ |                                 t
          u sJ |                     d           |                                 t          d	d
d
          k    sJ |                     d           |                                 t          dd
d          k    sJ |                     d           |                                 t          ddd          k    sJ |                     d           |                                 t          ddd
          k    sJ |                     d           |                                 t          d	d
d
          k    sJ |                     d           |                                 t
          k    sJ |                     d           |                                 t                      k    sJ d S )Nrj   B   POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

POSTr,   rK   rD   r.   s
   5
hello
s   helloTrv   s   5
hels   helF   ls   o
   os   5
hello   
s   0

)r   r    receive_data
next_eventr   r   r   r   )ri   requests     r=   test_chunk_boundariesr      s1   v&&&D	  	g??(*JK! ! !    
 ??	))))'(((??(PT U U UUUUUk"""??&de T T TTTTTd??$EU S S SSSSSh??$ET R R RRRRRm$$$??(PT U U UUUUUg??	))))l###??......r<   c                  `   t          t                    } |                     t          dddg                     |                     t	                                 | j        t          u sJ t          | d          t          dg dd	          gk    sJ | j        t          u sJ t          | d
          t          d
          gk    sJ t          | d          t          d          gk    sJ t          | d          t	                      t                      gk    sJ | j        t          u sJ d S )Nr+   r,   rK   r.   s   HTTP/1.0 200 OK

r7   r4   s   OK)r9   r1   r6   reasonr^   r_   ra   r<   )r   r   rl   r   r   ro   r   r(   r   r   r   r   rp   r   cs    r=   $test_client_talking_to_http10_serverr      sC   6AFF7%6M5NOOOPPPFF<>>;$1899S"5OOO>     ;*$$$$1h''Dh,?,?,?+@@@@@1h''Dh,?,?,?+@@@@@1c""|~~7G7I7I&JJJJJ=F""""""r<   c                  .   t          t                    } t          | d          t          ddg d          t	                      gk    sJ | j        t          u sJ |                     t          dg                     dk    sJ |                     t          d	
                    d	k    sJ |                     t	                                dk    sJ | j
        t          u sJ t          t                    } t          | d          t          dddgd          t          d
          gk    sJ t          | d          t          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,   r4   r5   r7   r8   $   HTTP/1.1 200 
Connection: close

r^   r_   r<   s(   POST / HTTP/1.0
Content-Length: 10

1r   rZ   re   s	   234567890)r   r    r(   r   r   rp   r   rl   r   r   ro   r   r   s    r=   $test_server_talking_to_http10_clientr     s   6A 1788uS"5III=     =J&&&& 	
xC444558	9 	9 	9 	9 66$H%%%&&(222266,..!!S((((;*$$$$ 	6A1OPP-.		
 	
 	
 	$U     1l++,0G0G0G/XXXXX=J&&&&1c""'7'9'9&:::::::r<   c            	      z   dgg ddgfD ]0} t          t          t          t          t          f                  |           } t	                      }|                    t          t          dddg          t                      g           |                    t          t          d|           t          ddg          	           t          t                    }t          |d
           |                    t          d|                     dk    sJ |                    t          d                    dk    sJ 2d S )NrD   rC   100r+   r,   rK   r.   r7   r8   rb   r   r   r^   r_   )r   r   r   rG   r&   rl   r   r   r   r    r   r   r(   r   )user_headersrs   r   s      r=   ,test_automatic_transfer_encoding_in_responser   (  sc    
**
 
*+DE "7 "7 DsCx1<@@	uS;R:STTT	
 	
 	
 	
l;;;*J)K   	 	
 	
 	
 v4555FF8\BBBCC<= = = = vvd)))**h66666E"7 "7r<   c            	         t                      } |                     t          t          ddddg          t	                      g           | j        D ]}|j        t                   t          u sJ |                     t          t          dg           t	                      gt          ddg          t	                      g	           | j        D ]'}|j        t          t          t          t          ik    sJ (d S )
Nr+   r,   rK   r2   r.   rQ   r8   )
connectionr3   rb   )
r&   rl   r   r   r   rm   rn   r   r    r   rs   ri   s     r=   (test_automagic_connection_close_handlingr   R  s   A FF02IJ  
 NN	

 
 
  1 1{6"j00000FF	c2	.	.	.? /F.GHHHNN
  	 	 	  G G{vz6:FFFFFFG Gr<   c                     dt           fd}  |             }|                    t          t          dg                      |j        D ]}|j        rJ |j        rJ  |             }|                    t          t          ddg                     |j        D ]}|j        rJ |j        rJ  |             }|                    t          t          d                     |j        D ]}|j        rJ |j        rJ d S )	Nr)   c            	         t                      } |                     t          t          ddg d                     | j        D ]}|j        sJ | j        t                   j        rJ | j        t                   j        sJ | S )Nr+   r,   )rK   r   )Expectz100-continuer.   )	r&   rl   r   r   rm   "client_is_waiting_for_100_continueri   !they_are_waiting_for_100_continuer    r   s     r=   setupz test_100_continue.<locals>.setups  s    	    	
 	
 	
 G 	; 	;D:::::6&>CCCCvf~????r<   rN   r8   r7   rD   r^   r_   )
r&   rl   r    r   rm   r   r   r   r   r   )r   rs   ri   s      r=   test_100_continuer   r  sS   >    * 	AFF6(S"EEEFFF : :::::99999 	AFFS3S2TUUU    : :::::99999 	AFF64X&&&''' : :::::99999: :r<   c                     t          t                    } |                     d           |                                 t          u sJ t          j        t                    5  	 |                     d           |                                  *# 1 swxY w Y   t          t          d          } |                     d           |                     d           |                     d           t          |           t          d	d
ddg          t                      gk    sJ t          t          d          } |                     d           |                     d           t          j        t                    5  |                                  d d d            n# 1 swxY w Y   t          t          d          } |                     d           |                     dddz  z              t          |           t          d	d
ddg          t          ddz            t                      gk    sJ t          t          d          } |                     d           t          |           t          d	ddg          t                      gk    sJ |                     d           |                     t          dg                      |                     t                                 |                                  t          |           t          d	ddg          t                      gk    sJ |                     t          dg                      |                     t                                 |                                  t          j        t                    5  |                                  d d d            d S # 1 swxY 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,   r4   )big  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r/   r0   r6   r1   i  s%   GET / HTTP/1.0
Content-Length: 10000   ai'  )rC   10000r_   rN   s   GET /1 HTTP/1.1
Host: a

GET /2 HTTP/1.1
Host: b

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/1)hostar.   s  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr7   r8   /2)r   b)r   r    r   r   r   rf   rg   r#   r'   r   r   r   rl   r   start_next_cycler   s    r=   -test_max_incomplete_event_size_countermeasurer     sc   6ANN1222<<>>Y&&&&	*	+	+  	NN;'''LLNNN	        	6T:::ANN-...NN;NN;!5CVBW	
 	
 	
 		!     	6T:::ANN-...NN;	*	+	+  	              
 	6T:::ANN=>>>NN;-...!01		
 	
 	
 	$,	! 	 	 	 	 	6S999A NN	<   !uTM?CCC!    
 NN;FF8R000111FF<>>!uTM?CCC!     FF8R000111FF<>>	*	+	+  	                 s6    ,BBB:FF"F&OOOc                  t   t                      } |                     t          t          dddg          t	                      g           |                     t
          t          ddg          t	                      g           | j        D ];}|j        t          t          t
          t          ik    sJ |
                                 <|                     t          t          dd	dg          t	                      g           |                     t
          t          d
dg          t	                      g           d S )Nr+   r,   r-   r   r.   r7   s   transfer-encodings   chunkedr8   DELETE/foo  )r&   rl   r   r   r   r    r   rm   rn   r   r   r   s     r=   test_reuse_simpler     s@   AFF	cM?	C	C	C\^^T   FF/Q.RSSSNN	
       {vtVT:::::FF8F]OLLLNN	
   FF/Q.RSSSNN	
    r<   c                  N   t          t                    } |                                 t          u sJ |                     d           t          |           t          ddddg          t          d          t                      gk    sJ | j	        t          u sJ | j        t          u sJ |                                 t          u sJ |                     t          d	g 
                     |                     t                                 | j	        t          u sJ | j        t          u sJ |                                  t          |           t          ddddg          t          d          t                      gk    sJ |                                 t          u sJ |                     t          d	g 
                     |                     t                                 |                                  t          |           t          dddg          t                      gk    sJ |                                 t          u sJ |                     t          d	g 
                     |                     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%          j        t(                    5  |                     d           d d d            d S # 1 swxY 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)rC   5r.   r^   r_   r7   r8   r   ra   z/3   SADF)r   Fr<   )r   Ts   FDSA)r   r    r   r   r   r'   r   r   r   rp   r   ro   r   r   rl   r   r   trailing_datarf   rg   RuntimeErrorr   s    r=   test_pipeliningr     s   6A<<>>Y&&&&NN	2   !&(?@	
 	
 	

 	(!     =D    ;-''''<<>>V####FF8R000111FF<>>=D    ;$!&(?@	
 	
 	

 	(!     <<>>V####FF8R000111FF<>>!uT4E3FGGG!    
 <<>>Y&&&&FF8R000111FF<>> <<>>Y&&&&NN7<<>>V####?.....NN3?o----<<>>V####NN3<<>>V####	|	$	$    	w                                   s   7NN!Nc            	      
   t          ddddg          t          ddg          t          d	dg          ft          d
dg d          t          d	dg          t          ddg          ft          ddg d          t          ddg          t          d	dg          ft          ddg d          t          ddg          t          ddg          ffD ]~\  } }dt          ffd} |            }|                    t
          |            |j        D ]'}|j        t          t          t
          t          ik    sJ (|                    t
          t                                 |j        D ]}|                                  |            }|                    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  |            }|j        t
                   }|                    d           |                                t           u sJ |j        dk    sJ |                    |            |                                t           u sJ |                    t                                 |                                 t'          |          t          d
dg 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 sJ |                    |            |                                t)                      k    sJ  |            }t+          j        t.                    5  |j        t                                       t          d
ddg                     d d d            n# 1 swxY w Y    |            }|                    t
          |           t+          j        t.                    5  |j        t
                                       t1          d                     d d d            n# 1 swxY w Y   d S )NCONNECTzexample.com:443r-   foorC   1r.   r   r   r8   r7   r+   r,   )r   r   )Upgradeza, be   )r   r   )r   r   r)   c                     t                      } |                     t                     | j        D ]}|j        t                   t
          u sJ |                     t          t          d          t                      g           | j        D ]}|j        t                   t          u sJ | j	        t                                                   t          u sJ | S )Nre   r_   )r&   rl   r   rm   rn   r   r   r   r   ri   r    r   r   )rs   ri   rM   s     r=   r   z#test_protocol_switch.<locals>.setup~  s      AFF63  8 8{6*i77777FF6DdOOO\^^<=== D D{6*.CCCCCC6&>,,..&8888Hr<      123s   456)s   123456Fr   )r   Fr4   r5   r<   )r<   Tr   r_   )r   r   r   r&   rl   r    rm   rn   r   r   r   r   r   r!   r   r   r   r   ri   r'   r   rf   rg   r"   r   )denyacceptr   rs   ri   scrM   s         @r=   test_protocol_switchr   T  s     ((*AB  
 /Q.RSSS/Q.RSSS	
 WWW  
 /Q.RSSS!c<L;MNNN	
  (WWW  
 /Q.RSSS/Q.RSSS		
  (WWW  
 /Q.RSSS!c<L;MNNN		
;'  y3 y3dFR	~ 	 	 	 	 	 	 EGG	vtG 	D 	DD;64"CCCCCC	v|~~&&&G 	$ 	$D!!#### EGG	vvG 	< 	<D;6+<fFW"XXXXXf%%%??$$....f%%%??$$....%);;;;;; EGGVF^
1222}}&((((#EEEEE
}}&((((

b!!5buMMMNN&
 
 
 
 
 EGGVF^
}}&((((;....	vv}}&((((EGGVF^
}}&((((
}}"2"4"44444 EGG]-.. 	 	F6NuS=/JJJ  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 EGG	vv]-.. 	3 	3F6N& 1 1 1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3qy3 y3s$   7SS
	S
	4UU	U	c                  >   t           t          ft          t           ffD ]\  dt          ffd}  |             }|j                                                 t                      k    sJ |j                                                 t                      k    sJ |j                                     d           |j                                                 t                      k    sJ  |             }|                    t                                 |j        D ]"}|j	        t          u sJ |j        t          u sJ # |             }t          j        t                    5  |j                                     d           d d d            n# 1 swxY w Y    |             }|j                                     d           t          j        t                    5  |j                                                  d d d            n# 1 swxY w Y   d S )Nr)   c                      t                      } |                     t                                 | j        D ]}|j        t
          t          ik    sJ | S N)r&   rl   r   rm   rn   r   r   )rs   ri   who_shot_firstwho_shot_seconds     r=   r   z test_close_simple.<locals>.setup  sn      AFF>#3#5#5666  {"F#Z'      Hr<   r<   r   rP   )r   r    r&   ri   r   r   r   rl   rm   ro   r   rp   rf   rg   r   r#   )r   rs   ri   r   r   s      @@r=   test_close_simpler     s    06v.>@P-Q #0 #0)	~ 	 	 	 	 	 	 	 EGGvo&11337G7I7IIIIIvo&11337G7I7IIIII	,,S111vo&11337G7I7IIIIIEGG	 0 2 2333G 	. 	.D>V++++#v----- EGG]<(( 	9 	9F?#00888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 EGG	~++F333].// 	0 	0F>"--///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0E#0 #0s$   )!FF	F	$ HH	H	c            	      |	   t          dddg          t                      g} t          ddg          t                      g}t                      }|                    t
          t                                 |j        D ]'}|j        t
          t          t          t          ik    sJ (t                      }|                    t
          |            |                    t
          t                                 |j        D ]'}|j        t
          t          t          t          ik    sJ (t                      }|                    t
          |            t          j        t                    5  |j        t                                       t                                 d d d            n# 1 swxY w Y   |j        t
                                       d           t          j        t$                    5  |j        t
                                                    d d d            n# 1 swxY w Y   t                      }|                    t
          |            |                    t          |           |                    t          t                                 |j        D ]'}|j        t
          t          t          t          ik    sJ (t                      }|                    t
          |            |                    t          |           |                    t
          t                                 |                    t          t                                 |                    t
          t                                 |                    t          t                                 t                      }|                    t
          t          dd	dd
g                     t          j        t                    5  |j        t
                                       t                                 d d d            n# 1 swxY w Y   |j        t                                       d           t          j        t$                    5  |j        t                                                    d d d            d S # 1 swxY w Y   d S )Nr+   r   r   r.   r7   r   r8   r<   r,   rZ   )r   r   r   r&   rl   r   r   rm   rn   r   r    r   r   rf   rg   r"   ri   r   r#   r   )rM   rI   rs   ri   s       r=   test_close_different_statesr     s   uVm_EEEC
 	S+M*NOOOD 	AFF6#%%&&& C C{vvvzBBBBBB 	AFF63FF6#%%&&& F F{vvv}EEEEEE 	AFF63	)	*	* 0 0	v,..///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0F6N$$$	*	+	+ $ $	v!!###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 	AFF63FF64FF6#%%&&& C C{vz66BBBBBB 	AFF63FF64FF6#%%&&&FF6#%%&&&FF6#%%&&&FF6#%%&&& 	AFF}>V.W	
 	
 	
   
)	*	* 0 0	v,..///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0F6N$$$	*	+	+ $ $	v!!###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sH   '2F%%F),F).%HH#&H#82P66P:=P:?%R11R58R5c                  t   t          t                    } |                     d           |                     d           t          |           t	          ddddg          t          d	          t                      gk    sJ | j        t                   t          u sJ | 
                    t          d
g                      | 
                    t                                 | j        t                   t          u sJ |                                  t          |           t	          ddddg          t          d	          t                      t                      gk    sJ | j        t          t          t          t          ik    sJ | 
                    t          d
g                      | 
                    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   )rR   r   r.   r^   r_   r7   r8   r   ra   )r   r    r   r'   r   r   r   rn   r   r   rl   r   r   r   r   r   r   r   s    r=   test_pipelined_closer   <  s"   6ANN	   NN3!&(?@	
 	
 	

 	(!     8Ft####FF8R000111FF<>>8Ft####!&(?@	
 	
 	

 	(	! 	 	 	 	 8>>>>>FF8R000111FF<>>8
;;;;;FF87777777r<   c            
      2    G d d          }  |             dt           t          t          f         dt          dt           t          t          t          t
                            f         ff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                       e Zd ZdefdZdS )*test_sendfile.<locals>.SendfilePlaceholderr)   c                     dS )N
   r;   )selfs    r=   __len__z2test_sendfile.<locals>.SendfilePlaceholder.__len__h  s    2r<   N)__name__
__module____qualname__rS   r   r;   r<   r=   SendfilePlaceholderr   g  s/        	S 	 	 	 	 	 	r<   r   headerr6   r)   c                 \   t          t                    }t          |d                    |                              d                     g }| r|                    |            |                    t          d|                     ||                    t                              fS )NzGET / HTTP/{}
Host: a

asciir7   r8   r_   )
r   r    r(   formatencoderF   rl   r   send_with_data_passthroughr   )r   r6   r   r1   placeholders       r=   r   ztest_sendfile.<locals>.setupm  s     v188FFMMgVV	
 	
 	
  	#NN6"""	xC999:::!..t/E/E/EFFFFr<   rZ   z1.1rD   s
   xxxxxxxxxxr<   s   a
xxxxxxxxxx
r4   )r   rG   r   r   r   bytesrl   r   indexjoinro   r   )r   r   r   r`   _r   s        @r=   test_sendfiler   f  sr           &%''KGc3hG/2G	z8DK00	1G G G G G G e,e44GAtK=     FF<>>e4e<<GAt$$-DK	 	 !88D>>33333eD%  GAtK=    ;)######r<   c                  0   t           t          fD ]} t          |           }|                    d           t	          j        t                    5  |                                 d d d            n# 1 swxY w Y   |j        t          u sJ |j
        t          usJ t          |j        j                   t	          j        t                    5  |                                 d d d            n# 1 swxY w Y   | t          u r*|                    t          dg                     dk    sJ  dt           t"                   dt          fd}t           t          fD ]} | t           u r(t%          d	d
dg          }t%          d	d
dgd          }n,| t          u r#t          dg           }t          dg d          } ||           }|                    |           |j
        t          usJ  ||           }t	          j        t&                    5  |                    |           d d d            n# 1 swxY w Y   |j
        t          u sJ |j        t          usJ t	          j        t&                    5  |                    |           d d d            n# 1 swxY w Y    ||           }|                                 |j
        t          u sJ |j        t          usJ |                                 |j
        t          u sJ |j        t          usJ d S )Nr}   s   gibberish

i  r8   s$   HTTP/1.1 400 
Connection: close

roler)   c                 x    t          |           }| t          u r t          |d           |j        t          u sJ |S )Nr}   r   )r   r    r(   ro   r   r   r   s     r=   ri   ztest_errors.<locals>.conn  sD    %%%6>>A8999;-////r<   r+   r,   rK   r.   r4   r5   r7   r:   )r   r    r   r   rf   rg   r#   r   rp   r   ro   print_cstatern   rl   r   r	   r$   r   r"   send_failed)r   r   ri   goodbads        r=   test_errorsr     s!      %%%	+,,,].// 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 }%%%%{%''''ai].// 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 6>>xC<<<==@A A A A4> j       $* $*6>> %>U=VWWWD01"	  CC V^^R888DsBUKKKCDJJ	t{%''''DJJ]-.. 	 	FF3KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	{e####}E))))]-.. 	 	FF4LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 DJJ	{e####}E))))	{e####}E)))))I$* $*sH   A11A5	8A5	C//C3	6C3	H00H4	7H4	4JJ	J	c                      t           t          fD ].} t          |           }|                                t          u sJ /d S r   )r   r    r   r   r   r   s     r=   test_idle_receive_nothingr     sI      + +t||~~*****+ +r<   c                  H   t          t                    } |                     d           |                                 t          u sJ |                     d           t          j        t                    5  |                                  d d d            d S # 1 swxY w Y   d S )Ns   GET /r<   )r   r    r   r   r   rf   rg   r#   r   s    r=   test_connection_dropr     s    6ANN8<<>>Y&&&&NN3	*	+	+  	                 s   5BBBc                  x    t                      } |                     t          t          ddg                     d S )Ni  )s
   connections   closer8   )r&   rl   r    r   )rs   s    r=   test_408_request_timeoutr     s:     	AFF686O5PQQQRRRRRr<   c                      t          t                    } |                     d           t          j        t
                    5  |                                  d d d            d S # 1 swxY w Y   d S )Nr   r   r    r   rf   rg   r#   r   r   s    r=   test_empty_requestr     s    6ANN7	*	+	+  	                    A%%A),A)c                  0   t          t                    } |                     t          dddg                     |                     d           t          j        t                    5  |                                  d d d            d S # 1 swxY w Y   d S )Nr+   r,   r   r.   r   )	r   r   rl   r   r   rf   rg   r#   r   r   s    r=   test_empty_responser     s    6AFF7%m_EEEFFFNN7	*	+	+  	                 s   )BBBr`   )        s    c                     t          t                    }|                    |            t          j        t
                    5  |                                 d d d            d S # 1 swxY w Y   d S r   r   r`   r   s     r=   'test_early_detection_of_invalid_requestr         	6ANN4	*	+	+  	                 r   )r   r  s    1c                     t          t                    }|                    |            t          j        t
                    5  |                                 d d d            d S # 1 swxY w Y   d S r   )r   r   r   rf   rg   r#   r   r  s     r=   (test_early_detection_of_invalid_responser    r  r   c                     dt           dt           dt          fd} dD ]} | |d          }|                    t          dg                     d	k    sJ  | |d
          }|                    t          dg                     dk    sJ  | |d          }|                    t          dddg                    d	k    sJ d S )Nr/   r6   r)   c                    t          t                    }|                    | dz   |z   dz   dz              t          |                                          t
          u sJ t          |                                          t          u sJ |S )Ns    / HTTP/r   s   Host: example.com

)r   r    r   typer   r   r   )r/   r6   r   s      r=   r   z(test_HEAD_framing_headers.<locals>.setup  s    v	[ </'9<XX	
 	
 	
 ALLNN##w....ALLNN##|3333r<   )rP   rO   r\   r7   r8   s-   HTTP/1.1 200 
Transfer-Encoding: chunked

s   1.0r   r   rD   )r   r   rl   r   )r   r/   r   s      r=   test_HEAD_framing_headersr    s6   e 5 Z     $ 
 
E&&!!FF8R88899 >2 2 2 2 2
 E&&!!FF8R88899 >) ) ) ) )
 E&&!!FF #18   2
2 
2 
2 
2 
2%
 
r<   c                     t          t                    } |                     d           t          |                                           t
          u sJ |                                 t          u sJ |                     d           |                                 t          d          k    sJ |                     d           t          j	        t                    5 }|                                  d d d            n# 1 swxY w 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          j	        t                    5 }|                                  d d d            n# 1 swxY w Y   d
t          |j                  v sJ d S )Ns;   POST / HTTP/1.1
Host: example.com
Content-Length: 100

r^   r_   r<   zreceived 5 byteszexpected 100r~   s	   8
012345s   012345zincomplete chunked read)r   r    r   r
  r   r   r   r   rf   rg   r#   rG   valuer`   )r   excinfos     r=   ;test_special_exceptions_for_lost_connection_in_message_bodyr  F  s   6ANNV   7****<<>>Y&&&&NN8<<>>Tx0000000NN3	*	+	+ w	              W]!3!33333S//////6ANN	.  
 7****<<>>Y&&&&NN>"""<<>>)++++NN3	*	+	+ w	              $GM(:(:::::::s$   C==DD
H++H/2H/)r)   N)Jtypingr   r   r   r   r   r   r	   rf   _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>   rX   rt   r{   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  r;   r<   r=   <module>r     sv   ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  S S S S S S S S S S S S S S                                           F E E E E E E E E E D D D D D D D D D DV V V V<)= )= )= )=X@; @; @; @;F; ; ; ;>$/ $/ $/ $/N# # # # "; "; "; ";J'7 '7 '7 '7TG G G G@*: *: *: *:ZI I I IX   BE  E  E  E Pz3 z3 z3 z3z&0 &0 &0 &0R=$ =$ =$ =$D'8 '8 '8 '8T!$ !$ !$ !$HC* C* C* C*L+ + + +   S S S S       
   % D     
   5 T    '
 '
 '
 '
T; ; ; ; ; ;r<   