HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/h11/tests/__pycache__/test_connection.cpython-310.pyc
o

���g@��@sddlmZmZmZmZmZmZmZddlZddl	m
Z
mZmZm
Z
mZddlmZmZmZmZmZmZmZddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"ddl#m$Z$m%Z%m&Z&dd	l'm(Z(m)Z)m*Z*dFdd�Z+dFd
d�Z,dFdd�Z-dFdd�Z.dFdd�Z/dFdd�Z0dFdd�Z1dFdd�Z2dFdd�Z3dFdd�Z4dFdd �Z5dFd!d"�Z6dFd#d$�Z7dFd%d&�Z8dFd'd(�Z9dFd)d*�Z:dFd+d,�Z;dFd-d.�Z<dFd/d0�Z=dFd1d2�Z>dFd3d4�Z?dFd5d6�Z@dFd7d8�ZAdFd9d:�ZBejC�Dd;gd<��d;eEd
dfd=d>��ZFejC�Dd;gd?��d;eEd
dfd@dA��ZGdFdBdC�ZHdFdDdE�ZIdS)G�)�Any�cast�Dict�List�Optional�Tuple�TypeN�)�
_body_framing�_keep_alive�
Connection�	NEED_DATA�PAUSED)�ConnectionClosed�Data�EndOfMessage�Event�InformationalResponse�Request�Response)�CLIENT�CLOSED�DONE�ERROR�IDLE�MIGHT_SWITCH_PROTOCOL�
MUST_CLOSE�	SEND_BODY�
SEND_RESPONSE�SERVER�SWITCHED_PROTOCOL)�LocalProtocolError�RemoteProtocolError�Sentinel�)�ConnectionPair�get_all_events�receive_and_get�returncCs�ttdddgd��sJ�ttddddgd��rJ�ttddddgd��r&J�ttddgdd��r2J�ttd	gd
��s<J�ttd	dgd
��rGJ�ttd	dgd
��rRJ�ttd	gdd��r]J�dS)N�GET�/)�HostzExample.com��method�target�headers�r�close)rza, b, cLOse, foo�1.0�r-r.r/�http_version����status_coder/�r7r/r4)rrr�r9r9�D/usr/local/lib/python3.10/dist-packages/h11/tests/test_connection.py�test__keep_alive s4�������r;c	s�dttdtdttttffdd��	ddtdttdtdtf�fd	d
�
}ddttdtdtf�fdd�
}idd
iddid
dd�fD]7}tt	tt
f|�}d|di|��fd|dddi|��fd|dddi|��ffD]
\}}t||�dksyJ�qlqCddid
dd�fD]+}tt	tt
f|�}d|di|��fd|di|��ffD]
\}}t||�dks�J�q�q�d|d
d�fd|d
d�ffD]
\}}t||�dks�J�q�td|��dks�J�td|��dks�J�dS)N�cl�ter(cSs0g}|dur|�dt|�f�|r|�d�|S)N�Content-Length�zTransfer-Encoding�chunked)�append�str)r<r=r/r9r9r:r/?s
z#test__body_framing.<locals>.headersr5Fr7cst|�||�d�S)Nr6)r)r7r<r=�r/r9r:�respGsz test__body_framing.<locals>.respcs"�||�}|dg7}tdd|d�S)N�r+zexample.comr)r*r,)r)r<r=�hrCr9r:�reqLs

ztest__body_framing.<locals>.req�dT)r<r=�HEAD�GET��i0)�content-length)r)r@r9)r<)rL)rH)zhttp/1.0r9)r5NF)NFr9)r�int�boolrrrBrrrrrr
)rDrG�kwargs�meth�rr9rCr:�test__body_framing>s:&	����� ��,�$rRcCst�t��td�Wd�n1swYt�}|jtjtus&J�|jtjt	us0J�|jt	jt	us:J�|jt	jtusDJ�|�
ttddddgd��}|dksWJ�|jD]
}|j
ttt	tiksgJ�qZ|jtjtusrJ�|jtjtus|J�|jt	jtus�J�|jt	jtus�J�|jtjdus�J�|jt	jdks�J�|�
t	td	gd
��}|dks�J�|�
t	tdd
gd
��}|dks�J�|jD]
}|j
ttt	tiks�J�q�|jtjdks�J�|jt	jdks�J�|�
ttdd��}|dks�J�|j
ttdd�tdd�t�gd�}|dk�sJ�|j
tt�gd�}|dk�s!J�|jD]}|j
ttt	tik�s2J��q$|�
t	tdd��}|dk�sDJ�|j
t	tdd�tdd�t�gd�}|dk�s\J�|j
t	t�gd�}|dk�slJ�|jD]}|j
ttt	tik�s}J��qodS)Nrr)r*rE�r>�10r,s9GET / HTTP/1.1
Host: example.com
Content-Length: 10

�1.1rHr6sHTTP/1.1 100 

r5)r>�11s%HTTP/1.1 200 
Content-Length: 11

�12345��data�67890��expect��
1234567890�1)�pytest�raises�
ValueErrorrr%�connr�our_role�
their_roler�sendr�conns�statesrr�	our_state�their_state�their_http_versionrrrrr��prYrcr9r9r:�)test_Connection_basics_and_content_lengthjsl
����

�
"
�rncCst�}|�ttddddgd��|�ttdddd��}|d	ks!J�|�ttd
ddd��}|dks2J�|jttdd
�gd�}|dksCJ�|�ttdgd��}|dksSJ�|�ttddgd��|�ttdddd��|�ttdddd��|�tt��|jD]
}|j	tt
tt
iks�J�q~dS)Nr)r*rEr?r,r^T�rY�chunk_start�	chunk_endsa
1234567890
sabcdes
5
abcde
r]rXr[)�hello�thererCs0
hello: there

r5r6s54321rW)r%rfrrrrrrrgrhrrlr9r9r:�test_chunked�s4���
�rtcCs4ttd�}d}|�|�|��tddddgd�ksJ�|��tus#J�|�d�|��td	d
d
d�ks5J�|�d�|��td
d
dd�ksGJ�|�d�|��tdddd�ksYJ�|�d�|��tddd
d�kskJ�|�d�|��td	d
d
d�ks}J�|�d�|��tks�J�|�d�|��t�ks�J�dS)N�rd�BPOST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

�POSTr*rEr?r,s
5
hello
shelloTros5
helshelF�lso
�os5
hello�
s0

)rr�receive_data�
next_eventrr
rr)rc�requestr9r9r:�test_chunk_boundaries�s0
�
�






r~cCs�tt�}|�tdddgd��|�t��|jtusJ�t|d�tdgddd	�gks,J�|jt	us3J�t|d
�t
d
d�gks@J�t|d�t
dd�gksMJ�t|d
�t�t�gksZJ�|jt
usaJ�dS)Nr)r*rEr,sHTTP/1.0 200 OK

r5r2sOK)r7r/r4�reasonrWrXrZr])rrrfrrrirr'rrrrrjr��cr9r9r:�$test_client_talking_to_http10_server�s
�r�cCstt�}t|d�tddgdd�t�gksJ�|jtusJ�|�tdgd��dks*J�|�t	d	d
��d	ks6J�|�t��dks@J�|j
tusGJ�tt�}t|d�td
ddgdd�t	dd
�gks`J�t|d�t	dd
�t�gksoJ�|jtusvJ�t|d�t�gks�J�dS)N�GET / HTTP/1.0

r)r*r2r3r5r6�$HTTP/1.1 200 
Connection: close

rWrXr]s(POST / HTTP/1.0
Content-Length: 10

1rwrSr_s	234567890)rrr'rrrjrrfrrrirr�r9r9r:�$test_server_talking_to_http10_clients2
���
�	r�c	Cs�dggddgfD]R}tttttf|�}t�}|�ttdddgd�t�g�|jt	t
d|d�t
ddgd�d	�tt	�}t|d
�|�t
d|d��dksNJ�|�t
dd
��dksZJ�qdS)Nr?�r>�100r)r*rEr,r5r6r[r�r�rWrX)rrrrBr%rfrrrrrrr'r)�user_headersrmr�r9r9r:�,test_automatic_transfer_encoding_in_response(s4���	
��

��r�cCs�t�}|�ttddddgd�t�g�|jD]}|jttus!J�q|jtt	dgd�t�gt	ddgd�t�gd	�|jD]
}|jttttiksIJ�q<dS)
Nr)r*rEr0r,rKr6)�
connectionr1r[)
r%rfrrrrgrhrrr�rmrcr9r9r:�(test_automagic_connection_close_handlingRs.���
��

�r�cCs�dtfdd�}|�}|�ttdgd��|jD]}|jrJ�|jr#J�q|�}|�ttddgd��|jD]}|jr<J�|jrAJ�q5|�}|�tt	dd	��|jD]}|jrXJ�|jr]J�qQdS)
Nr(cSsZt�}|�ttddgd�d��|jD]}|jsJ�q|jtjr#J�|jtjs+J�|S)Nr)r*)rEr�)�Expectz100-continuer,)	r%rfrrrg�"client_is_waiting_for_100_continuerc�!they_are_waiting_for_100_continuerr�r9r9r:�setupss��
z test_100_continue.<locals>.setuprHr6r5r?rWrX)
r%rfrrrgr�r�rrr�r�rmrcr9r9r:�test_100_continuers&

�



�r�cCs6tt�}|�d�|��tusJ�t�t��	|�d�|��q1s%wYttdd�}|�d�|�d�|�d�t|�t	d	d
ddgd
�t
�gksQJ�ttdd�}|�d�|�d�t�t��|��Wd�n1suwYttdd�}|�d�|�ddd�t|�t	d	d
ddgd
�tddd�t
�gks�J�ttdd�}|�d�t|�t	d	ddgd�t
�gks�J�|�d�|�t
dgd��|�t
��|��t|�t	d	ddgd�t
�gks�J�|�t
dgd��|�t
��|��t�t��
|��Wd�dS1�swYdS)NsGET / HTTP/1.0
Endless: Tsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai�)�max_incomplete_event_sizesGET / HTTP/1.0
Big: s�aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas

r)r*r2)�big��aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r-r.r4r/i�s%GET / HTTP/1.0
Content-Length: 10000�ai')r>�10000rXrHs GET /1 HTTP/1.1
Host: a

GET /2 HTTP/1.1
Host: b

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX�/1)�host�ar,s�XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr5r6�/2)r��b)rrr{r|r
r`rar"r&rrrrfr�start_next_cycler�r9r9r:�-test_max_incomplete_event_size_countermeasure�sx

��



�
�


�
�
��
�

�
$�r�cCs�t�}|�ttdddgd�t�g�|�ttddgd�t�g�|jD]}|jtt	tt	iks0J�|�
�q#|�ttdd	dgd�t�g�|�ttd
dgd�t�g�dS)Nr)r*�r+r�r,r5�stransfer-encodingschunkedr6�DELETE�/foo�)r%rfrrrrrrgrhrr�r�r9r9r:�test_reuse_simple�s4���

����r�cCs$tt�}|��tusJ�|�d�t|�tddddgd�tdd�t�gks'J�|j	t
us.J�|jtus5J�|��t
us=J�|�td	gd
��|�t��|j	t
usSJ�|jt
usZJ�|��t|�tddddgd�tdd�t�gkstJ�|��t
us|J�|�td	gd
��|�t��|��t|�tdd
dgd�t�gks�J�|��tus�J�|�td	gd
��|�t��|��tus�J�|�d�|��t
us�J�|jdks�J�|�d�|jdks�J�|��t
us�J�|�d�|��t
us�J�t�t��|�d�Wd�dS1�swYdS)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,rWrXr5r6r�rZz/3�SADF)r�Fr])r�TsFDSA)rrr|r
r{r&rrrrjrrirrrfrr��
trailing_datar`ra�RuntimeErrorr�r9r9r:�test_pipeliningsl��
�	�
�	
�


$�r�c	sltddddgd�tddgd�td	dgd�ftd
dgd�d�td	dgd�td
dgd�ftddgd�d�tddgd�td	dgd�ftddgd�d�tddgd�td
dgd�ffD�]\\�}}dtf�fdd�}|�}|�t|�|jD]
}|jtt	tt
iks~J�qq|�tt��|jD]}|��q�|�}|�t|�|jD].}|jtt
tt
iks�J�|�d�|��tus�J�|�d�|��tus�J�|jdks�J�q�|�}|jt}|�d�|��tus�J�|jdks�J�|�|�|��tus�J�|�t��|��t|�td
dgdd�t�gk�sJ�|�}|jt}|�d�|��tu�s&J�|jdk�s.J�|�t|�|��tu�s=J�|�}|jt}|�d�|��tu�sSJ�|�|�|��t�k�sbJ�|�}t�t��|jt�td
ddgd��Wd�n	1�s�wY|�}|�t|�t�t��|jt�tdd��Wd�n	1�s�wYqVdS)N�CONNECTzexample.com:443�r+�foo�r>�1r,r�r�r6r5r)r*)r�r�)�Upgradeza, b�e)r�r�)r�r�r(cs�t�}|�t��|jD]}|jttusJ�q|�ttdd�t�g�|jD]}|jttus2J�q'|j	t
��tus>J�|S)Nr_rX)
r%rfrrgrhrrrrrcrr|rr��rGr9r:r�~s

z#test_protocol_switch.<locals>.setup�123s456)s123456Fr�)r�Fr2r3r])r]Tr�rX)rrrr%rfrrgrhrrrrr�r r{r|rr�rcr&rr`rar!r)�deny�acceptr�rmrc�scr9r�r:�test_protocol_switchTs���
��
�����)








�





�����r�c	sZttfttffD]�\��dtf��fdd�}|�}|j���t�ks%J�|j���t�ks1J�|j��d�|j���t�ksEJ�|�}|��t��|jD]}|j	t
us[J�|jt
usbJ�qR|�}t�
t��|j��d�Wd�n1s~wY|�}|j��d�t�
t��|j���Wd�n1s�wYqdS)Nr(cs:t�}|��t��|jD]
}|j�t�tiksJ�q
|S�N)r%rfrrgrhrrr���who_shot_first�who_shot_secondr9r:r��s
�z test_close_simple.<locals>.setupr]r�rJ)rrr%rcr|rr{rfrgrirrjr`rar�r"r�r9r�r:�test_close_simple�s.
����r�cCs�tdddgd�t�g}tddgd�t�g}t�}|�tt��|jD]
}|jtt	t
tiks/J�q"t�}|�t|�|�tt��|jD]
}|jtt	t
tiksPJ�qCt�}|�t|�t
�t��|jt
�t��Wd�n1sswY|jt�d�t
�t��|jt��Wd�n1s�wYt�}|�t|�|�t
|�|�t
t��|jD]
}|jttt
t	iks�J�q�t�}|�t|�|�t
|�|�tt��|�t
t��|�tt��|�t
t��t�}|�ttdd	dd
gd��t
�t��|jt�t��Wd�n	1�swY|jt
�d�t
�t��|jt
��Wd�dS1�s>wYdS)Nr)r�r�r,r5r�r6r]r*rS)rrrr%rfrrrgrhrrrrr`rar!rcr{r"r|)rGrDrmrcr9r9r:�test_close_different_states�sf��

��

���$�r�cCs2tt�}|�d�|�d�t|�tddddgd�tdd	�t�gks$J�|jtt	us-J�|�
td
gd��|�
t��|jtt	usEJ�|��t|�tddddgd�td
d	�t�t
�gksaJ�|jttttikslJ�|�
td
gd��|�
t��|jttttiks�J�|�
t
��|jttttiks�J�dS)NspGET /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�)rLr�r,rWrXr5r6r�rZ)rrr{r&rrrrhrrrfrr�rrrrr�r9r9r:�test_pipelined_close<sF�
�
�	�
�
r�c
s�Gdd�d�}|��dtttfdtdtttttff�fdd�}|dd	�\}}|�gks1J�|�t��|d
d	�\}}�|vsDJ�d||���<d�	|�d
ksTJ�|dd�\}}|�gksbJ�|j
tusiJ�dS)Nc@seZdZdefdd�ZdS)z*test_sendfile.<locals>.SendfilePlaceholderr(cSsdS)N�
r9)�selfr9r9r:�__len__hsz2test_sendfile.<locals>.SendfilePlaceholder.__len__N)�__name__�
__module__�__qualname__rMr�r9r9r9r:�SendfilePlaceholdergsr��headerr4r(csVtt�}t|d�|��d��g}|r|�|�|�td|d��||�t	�d��fS)NzGET / HTTP/{}
Host: a

�asciir5r6rX)
rrr'�format�encoderArfr�send_with_data_passthroughr)r�r4r�r/��placeholderr9r:r�ms�
ztest_sendfile.<locals>.setuprSz1.1r?s
xxxxxxxxxxr]sa
xxxxxxxxxx
r2)rrBrrr�bytesrfr�index�joinrir)r�r�r�rY�_r9r�r:�
test_sendfilefs&
���
r�c	CsJttfD]c}t|d�}|�d�t�t��|��Wd�n1s$wY|jt	us0J�|j
t	us7J�t|jj
�t�t��|��Wd�n1sQwY|turg|�tdgd��dksgJ�qdttdtfdd	�}ttfD]�}|tur�td
ddgd
�}td
ddgdd�}n|tur�tdgd�}tdgdd�}||�}|�|�|j
t	us�J�||�}t�t��
|�|�Wd�n1s�wY|j
t	us�J�|jt	us�J�t�t��
|�|�Wd�n1s�wY||�}|��|j
t	u�sJ�|jt	u�sJ�|��|j
t	u�sJ�|jt	u�s"J�qwdS)Nrus
gibberish

i�r6s$HTTP/1.1 400 
Connection: close

�roler(cSs.t|d�}|turt|d�|jtusJ�|S)Nrur�)rrr'rir�r�r�r9r9r:rc�s


ztest_errors.<locals>.connr)r*rEr,r2r3r5r8)rrrr{r`rar"r|rjrri�print�_cstaterhrfrrr#rr!�send_failed)r�r�rc�good�badr9r9r:�test_errors�sd


�
����
���r�cCs*ttfD]}t|�}|��tusJ�qdSr�)rrrr|r
r�r9r9r:�test_idle_receive_nothing�s�r�cCsdtt�}|�d�|��tusJ�|�d�t�t��
|��Wd�dS1s+wYdS)NsGET /r])rrr{r|r
r`rar"r�r9r9r:�test_connection_drop�s


"�r�cCs t�}|�ttddgd��dS)Ni�)s
connectionscloser6)r%rfrr)rmr9r9r:�test_408_request_timeout�sr�cCsJtt�}|�d�t�t��
|��Wd�dS1swYdS)Nrz�rrr{r`rar"r|r�r9r9r:�test_empty_request�s


"�r�cCs`tt�}|�tdddgd��|�d�t�t��
|��Wd�dS1s)wYdS)Nr)r*r�r,rz)	rrrfrr{r`rar"r|r�r9r9r:�test_empty_response�s

"�r�rY)�� s�cC�Jtt�}|�|�t�t��
|��Wd�dS1swYdSr�r��rYr�r9r9r:�'test_early_detection_of_invalid_request��
	

"�r�)r�r�s1cCr�r�)rrr{r`rar"r|r�r9r9r:�(test_early_detection_of_invalid_responser�r�cCs�dtdtdtfdd�}dD]:}||d�}|�tdgd	��d
ks!J�||d�}|�tdgd	��dks3J�||d�}|�tdd
dgd	��d
ksGJ�q
dS)Nr-r4r(cSsNtt�}|�|d|dd�t|���tusJ�t|���tus%J�|S)Ns / HTTP/rzsHost: example.com

)rrr{�typer|rr)r-r4r�r9r9r:r�s�z(test_HEAD_framing_headers.<locals>.setup)rJrIrUr5r6s-HTTP/1.1 200 
Transfer-Encoding: chunked

s1.0r�r�r?)r�rrfr)r�r-r�r9r9r:�test_HEAD_framing_headerss$	


���	
��r�cCsZtt�}|�d�t|���tusJ�|��tusJ�|�d�|��tdd�ks+J�|�d�t�	t
��}|��Wd�n1sDwYdt|j�vsRJ�dt|j�vs[J�tt�}|�d�t|���tusnJ�|��tusvJ�|�d�|��j
d	ks�J�|�d�t�	t
��}|��Wd�n1s�wYd
t|j�vs�J�dS)Ns;POST / HTTP/1.1
Host: example.com
Content-Length: 100

rWrXr]zreceived 5 byteszexpected 100rvs	8
012345s012345zincomplete chunked read)rrr{r�r|rr
rr`rar"rB�valuerY)r��excinfor9r9r:�;test_special_exceptions_for_lost_connection_in_message_bodyFs6�


��


�r�)r(N)J�typingrrrrrrrr`�_connectionr
rrr
r�_eventsrrrrrrr�_staterrrrrrrrrrr �_utilr!r"r#�helpersr%r&r'r;rRrnrtr~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�r9r9r9r:�<module>sV$$4	



,
C

'

%
*
 
-
L
!
H
}
)
B
*
$
F

	

��
*