
    Wh                        d dl Z ddlmZmZmZmZmZ ddlT ddlT ddl	m
Z
mZ ddlmZmZmZ d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'e j(        )                    d g d!          d"             Z*e j(        )                    d g d#          d$             Z+d% Z,d& Z-dS )'    N   )_body_framing_keep_alive
Connection	NEED_DATAPAUSED)*)LocalProtocolErrorRemoteProtocolError   )ConnectionPairget_all_eventsreceive_and_getc                      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   r   r   http_version   status_coder   r   r   r   )r   RequestResponse     _/var/www/html/movieo_spanner_bot/venv/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 dfd	} dfd	}i ddidd	idd	d
fD ]?}d | di |fd | dddi|fd | dddi|ffD ]\  }}t          ||          dk    sJ @dd	idd	d
fD ]2}d  |di |fd | di |ffD ]\  }}t          ||          dk    sJ 3d  |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 )Nc                     g }| $|                     dt          |           f           |r|                     d           |S )NContent-LengthzTransfer-Encodingchunked)appendstr)clter   s      r%   r   z#test__body_framing.<locals>.headers)   sJ    >NN,c"gg6777 	=NN;<<<r$   r   Fc                 :    t          |  ||                    S )Nr   )r"   )r   r.   r/   r   s      r%   respz test__body_framing.<locals>.resp1   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.   r/   hr   s      r%   reqztest__body_framing.<locals>.req4   s5    GBOO	%&&eC;;;;r$   r.   d   r/   T)r.   r/      HEAD   GETr      i0  )content-length)r   )r+   r#   )r.   )r:   )r6   )zhttp/1.0r#   )r   NF)NFr#   )r   )r1   r5   kwargsmethrr   s        @r%   test__body_framingr>   (   s0     J J J J J J< < < < < < c{T4LD2I2IJ F F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 = =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 )NCLIENTr   r   r3   r)   10r   s9   GET / HTTP/1.1
Host: example.com
Content-Length: 10

   1.1r6   r   s   HTTP/1.1 100 

r   )r)   11s%   HTTP/1.1 200 
Content-Length: 11

   12345data   67890expectr$   
   1234567890   1)pytestraises
ValueErrorr   r   connr@   our_role
their_roleSERVERsendr!   connsstates	SEND_BODYSEND_RESPONSE	our_statetheir_statetheir_http_versionInformationalResponser"   DataEndOfMessageDONEprG   rP   s      r%   )test_Connection_basics_and_content_lengthrb   P   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   r3   r*   r   rK   TrG   chunk_start	chunk_ends   a
1234567890
s   abcdes
   5
abcde
r$   rF   rI   )hellothere)r   s   0
hello: there

r   r   s   54321rE   )r   rT   r@   r!   r]   r^   rS   r"   rU   rV   r_   r`   s      r%   test_chunkedri      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rQ   B   POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

POSTr   r3   r*   r   s
   5
hello
s   helloTrd   s   5
hels   helF   ls   o
   os   5
hello   
s   0

)r   rS   receive_data
next_eventr!   r   r]   r^   )rP   requests     r%   test_chunk_boundariesrt      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   r3   r   s   HTTP/1.0 200 OK

r   r   s   OK)r   r   r   reasonrE   rF   rH   r$   )r   r@   rT   r!   r^   rY   r_   r   r"   
MUST_CLOSEr]   ConnectionClosedrZ   CLOSED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   r   r   r   r   $   HTTP/1.1 200 
Connection: close

rE   rF   r$   s(   POST / HTTP/1.0
Content-Length: 10

1rm   rA   rL   s	   234567890)r   rS   r   r!   r^   rZ   rw   rT   r"   r]   rY   rx   rz   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            	         dgg ddgfD ]} 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 d S )Nr*   r)   100r   r   r3   r   r   r   rI   r~   r   rE   rF   )
r   rT   r@   r!   r^   rS   r"   r   r   r]   )user_headersra   r{   s      r%   ,test_automatic_transfer_encoding_in_responser     sG    
**
 
*+DE !7 !7 	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6C!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   r3   r   r   r9   r   )
connectionr   rI   )
r   rT   r@   r!   r^   rU   rV   rw   rS   r"   ra   rP   s     r%   (test_automagic_connection_close_handlingr   7  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          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 )Nc            	         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   )r3   r   )Expectz100-continuer   )	r   rT   r@   r!   rU   "client_is_waiting_for_100_continuerP   !they_are_waiting_for_100_continuerS   r   s     r%   setupz test_100_continue.<locals>.setupX  s    	    	
 	
 	
 G 	; 	;D:::::6&>CCCCvf~????r$   r6   r   r   r*   rE   rF   )	rT   rS   r\   rU   r   r   r"   r@   r]   )r   ra   rP   s      r%   test_100_continuer   W  sG     * 	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   r   )big  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r   r   r   r   i  s%   GET / HTTP/1.0
Content-Length: 10000   ai'  )r)   10000rF   r6   s   GET /1 HTTP/1.1
Host: a

GET /2 HTTP/1.1
Host: b

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/1)hostar   s  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   r   /2)r   b)r   rS   rq   rr   r   rM   rN   r   r   r!   r^   r]   rT   r"   start_next_cyclerz   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                  p   t                      } |                     t          t          dddg          t	                      g           |                     t
          t          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	g           t	                      g           d S )
Nr   r   r   r   r   r   r   DELETE/foo  )r   rT   r@   r!   r^   rS   r"   rU   rV   r_   r   r   s     r%   test_reuse_simpler     s   AFF	cM?	C	C	C\^^T   FF6Hb999<>>JKKK    {vtVT:::::FF8F]OLLLNN	
   FF6Hb999<>>JKKKKKr$   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)r)   5r   rE   rF   r   r   r   rH   z/3   SADF)r   Fr$   )r   Ts   FDSA)r   rS   rr   r   rq   r   r!   r]   r^   rZ   r_   rY   rX   r   rT   r"   r   trailing_datarM   rN   RuntimeErrorrz   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g           t          dg           ft          d	d
g d          t          dg           t          ddg          ft          ddg d          t          dg           t          dg           ft          ddg d          t          dg           t          ddg          ffD ]z\  } }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          g k     |                                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                                       t/          d                     d d d            n# 1 swxY w Y   |d S )NCONNECTzexample.com:443r   foor)   1r   r   r   r   r   r   )r   r   )Upgradeza, be   )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 )NrL   rF   )r   rT   r@   rU   rV   rW   r]   r^   MIGHT_SWITCH_PROTOCOLrP   rS   rr   r   )ra   rP   r5   s     r%   r   z#test_protocol_switch.<locals>.setupW  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~   Fr   r   r$   )r$   Tr   rF   )r!   r"   r\   rT   rS   rU   rV   r@   r_   rW   r^   r   SWITCHED_PROTOCOLrq   rr   r   r   rP   r   rx   rM   rN   r
   r]   )denyacceptr   ra   rP   scr5   s         @r%   test_protocol_switchr   -  s     ((*AB  
 b111b111	
 WWW  
 b111!c<L;MNNN	
  (WWW  
 b111b111		
  (WWW  
 b111!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$   97R<<S 	S 	4UU		U		c                  .   t           t          ft          t           ffD ]\  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 )Nc                      t                      } |                     t                                 | j        D ]}|j        t
          t          ik    sJ | S N)r   rT   rx   rU   rV   ry   rw   )ra   rP   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   r8   )r@   rS   rP   rr   rx   rq   rT   rU   rY   ry   rZ   rM   rN   r   r   )r   ra   rP   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            	      z	   t          dddg          t                      g} t          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   r   r   r$   r   rA   )r!   r^   r"   r   rT   r@   rx   rU   rV   ry   rS   rw   rX   rM   rN   r
   rP   rq   r   rr   )r5   r1   ra   rP   s       r%   test_close_different_statesr     s   uVm_EEEC b111<>>BD 	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"72P55P9<P9>%R00R47R4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   )r:   r   r   rE   rF   r   r   r   rH   )r   rS   rq   r   r!   r]   r^   rV   r@   r_   rT   r"   r   rx   ry   rX   rw   rz   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                      G d d          }  |             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 ZdS )*test_sendfile.<locals>.SendfilePlaceholderc                     dS )N
   r#   )selfs    r%   __len__z2test_sendfile.<locals>.SendfilePlaceholder.__len__>  s    2r$   N)__name__
__module____qualname__r   r#   r$   r%   SendfilePlaceholderr   =  s#        	 	 	 	 	r$   r   c                 \   t          t                    }t          |d                    |                              d                     g }| r|                    |            |                    t          d|                     ||                    t                              fS )NzGET / HTTP/{}
Host: a

asciir   r   rF   )
r   rS   r   formatencoder,   rT   r"   send_with_data_passthroughr]   )headerr   r{   r   placeholders       r%   r   ztest_sendfile.<locals>.setupC  s    v188FFMMgVV	
 	
 	
  	#NN6"""	xC999:::!..t/E/E/EFFFFr$   rA   z1.1r*   s
   xxxxxxxxxxr$   s   a
xxxxxxxxxx
r   )rT   r^   indexjoinrY   rW   )r   r   r{   rG   _r   s        @r%   test_sendfiler   <  s6           &%''K	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                     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          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 )Nrk   s   gibberish

i  r   s$   HTTP/1.1 400 
Connection: close

c                 x    t          |           }| t          u r t          |d           |j        t          u sJ |S )Nrk   r~   )r   rS   r   rY   rX   roler{   s     r%   rP   ztest_errors.<locals>.connu  sD    %%%6>>A8999;-////r$   r   r   r3   r   r   r   r   r    )r@   rS   r   rq   rM   rN   r   rr   rZ   ERRORrY   print_cstaterV   rT   r"   r!   r
   send_failed)r   r{   rP   goodbads        r%   test_errorsr   ^  s
      %%%	+,,,].// 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 }%%%%{%''''ai].// 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 6>>xC<<<==@A A A A     $* $*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	4HH	H	I<<J 	J 	c                      t           t          fD ].} t          |           }|                                t          u sJ /d S r   )r@   rS   r   rr   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   rS   rq   rr   r   rM   rN   r   rz   s    r%   test_connection_dropr     s    6ANN8<<>>Y&&&&NN3	*	+	+  	                 s   5BBBc                  v    t                      } |                     t          t          dg                      d S )Ni  r   )r   rT   rS   r"   )ra   s    r%   test_408_request_timeoutr     s6     	AFF68R88899999r$   c                      t          t                    } |                     d           t          j        t
                    5  |                                  d d d            d S # 1 swxY w Y   d S )Nrp   r   rS   rq   rM   rN   r   rr   rz   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   rp   )	r   r@   rT   r!   rq   rM   rN   r   rr   rz   s    r%   test_empty_responser     s    6AFF7%m_EEEFFFNN7	*	+	+  	                 s   )BBBrG   )        s    c                     t          t                    }|                    |            t          j        t
                    5  |                                 d d d            d S # 1 swxY w Y   d S r   r   rG   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@   rq   rM   rN   r   rr   r   s     r%   (test_early_detection_of_invalid_responser     r   r   c                  ^   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 )Nc                    t          t                    }|                    | dz   |z   dz   dz              t          |                                          t
          u sJ t          |                                          t          u sJ |S )Ns    / HTTP/rp   s   Host: example.com

)r   rS   rq   typerr   r!   r^   )r   r   r{   s      r%   r   z(test_HEAD_framing_headers.<locals>.setup  s    v	[ </'9<XX	
 	
 	
 ALLNN##w....ALLNN##|3333r$   )r8   r7   rC   r   r   s-   HTTP/1.1 200 
Transfer-Encoding: chunked

s   1.0r   r   r*   )rT   r"   )r   r   r{   s      r%   test_HEAD_framing_headersr     s      $ 
 
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

rE   rF   r$   zreceived 5 byteszexpected 100rl   s	   8
012345s   012345zincomplete chunked read)r   rS   rq   r   rr   r!   r   r]   rM   rN   r   r-   valuerG   )r{   excinfos     r%   ;test_special_exceptions_for_lost_connection_in_message_bodyr    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/).rM   _connectionr   r   r   r   r   _events_state_utilr
   r   helpersr   r   r   r&   r>   rb   ri   rt   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%   <module>r	     s    S S S S S S S S S S S S S S         ; ; ; ; ; ; ; ; D D D D D D D D D DV V V<%= %= %=P@; @; @;F; ; ;>$/ $/ $/N# # # "; "; ";J&7 &7 &7RG G G@*: *: *:ZI I IXL L L*E  E  E Pz3 z3 z3z&0 &0 &0R:$ :$ :$~'8 '8 '8T$ $ $DC* C* C*L+ + +  : : :     
      
     '
 '
 '
T; ; ; ; ;r$   