Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.10/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.10/test/__pycache__/test_httplib.cpython-310.pyc
o

�9jHL�@sPddlZddlmZmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlm
Z
ejZddlmZddlmZddlmZddlmZej�e�Zej�ed�Zej�ed	�Zej�ed
�ZdZdZd
ZdZ dedZ!dZ"dZ#ej$Z$Gdd�d�Z%Gdd�de%�Z&Gdd�dej'�Z(Gdd�dej)�Z*Gdd�de�Z+Gdd�de�Z,Gdd�de�Z-Gd d!�d!e�Z.Gd"d#�d#e�Z/Gd$d%�d%e/�Z0Gd&d'�d'�Z1Gd(d)�d)e�Z2Gd*d+�d+e�Z3Gd,d-�d-e�Z4Gd.d/�d/e�Z5Gd0d1�d1e�Z6Gd2d3�d3e�Z7Gd4d5�d5e�Z8Gd6d7�d7e�Z9e:d8k�r&ej;d9d:�dSdS);�N)�client�
HTTPStatus)�mock)�support)�	os_helper)�
socket_helper)�warnings_helperzkeycert.pemzkeycert2.pemzselfsigned_pythontestdotnet.pemz{HTTP/1.1 200 OK
Transfer-Encoding: chunked

a
hello worl
3
d! 
8
and now 
22
for something completely different
s7hello world! and now for something completely differentz;foo=barz0
�0�
zX-Dummy: foo
X-Dumm2: bar
c@sHeZdZejddfdd�Zdd�Zddd�Zdd	�Zd
d�Z	dd
�Z
dS)�
FakeSocketNcCsBt|t�r
|�d�}||_||_d|_d|_d|_||_||_	dS)N�ascii�rF)
�
isinstance�str�encode�text�	fileclass�data�
sendall_calls�file_closed�host�port)�selfrrrr�r�(/usr/lib/python3.10/test/test_httplib.py�__init__5s


zFakeSocket.__init__cCs |jd7_|j|7_dS)N�)rr�rrrrr�sendall@szFakeSocket.sendallcCs6|dkr|dkrt���|�|j�|_|j|j_|jS)N�r�rb)r�UnimplementedFileModerr�file�
file_close�close)r�mode�bufsizerrr�makefileDs

zFakeSocket.makefilecCs
d|_dS)NT)r�rrrrr#L�
zFakeSocket.file_closecC�dS�Nrr(rrrr$O�zFakeSocket.closecCr*r+r)r�level�optname�valuerrr�
setsockoptRr,zFakeSocket.setsockoptr+)�__name__�
__module__�__qualname__�io�BytesIOrrr'r#r$r0rrrrr4s
rc@�$eZdZdd�Zdd�Zdd�ZdS)�EPipeSocketcCst�||�||_dSr+)rr�pipe_trigger)rrr8rrrrWs
zEPipeSocket.__init__cCs(|j|vrttjd��|j|7_dS)N�gotcha)r8�OSError�errno�EPIPErrrrrr\s
zEPipeSocket.sendallcCr*r+rr(rrrr$ar,zEPipeSocket.closeN)r1r2r3rrr$rrrrr7Usr7c@s$eZdZdZddd�Zd	dd�ZdS)
�NoEOFBytesIOz�Like BytesIO, but raises AssertionError on EOF.

    This is used below to test that http.client doesn't try to read
    more from the underlying file than it should.
    ���cC�"tj�||�}|dkrtd��|S�Nr
zcaller tried to read past EOF)r4r5�read�AssertionError)r�nrrrrrAj�zNoEOFBytesIO.readNcCr?r@)r4r5�readlinerB)r�lengthrrrrrEprDzNoEOFBytesIO.readline�r>r+)r1r2r3�__doc__rArErrrrr=ds
r=cs4eZdZdZ�fdd�Z�fdd�Zdd�Z�ZS)�FakeSocketHTTPConnectionz@HTTPConnection subclass using FakeSocket; counts connect() callscs$d|_t��d�||_|j|_dS)Nr�example.com)�connections�superr�fake_socket_args�create_connection�_create_connection)r�args��	__class__rrrysz!FakeSocketHTTPConnection.__init__cs|jd7_t���S)z.Count the number of times connect() is invokedr)rKrL�connectr(rQrrrSs
z FakeSocketHTTPConnection.connectcOs
t|j�Sr+)rrM�r�pos�kwrrrrN�r)z*FakeSocketHTTPConnection.create_connection)r1r2r3rHrrSrN�
__classcell__rrrQrrIvs
rIc@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�HeaderTestscCs�Gdd�dt�}dD]7}dD]2}t�d�}td�|_|�|_d}i}|r,tt|��||<|�dd	||�|�	|jj
|��d
�qq
dS)Nc@�eZdZdd�Zdd�ZdS)z;HeaderTests.test_auto_headers.<locals>.HeaderCountingBuffercSs
i|_dSr+)�countr(rrrr�r)zDHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.__init__cSsX|�d�}t|�dkr$|d�d���}|j�|d�|j|d7<t�||�dS)N�:rrr)�split�len�decode�lowerrZ�
setdefault�list�append)r�item�kv�lcKeyrrrrb�s
zBHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.appendN�r1r2r3rrbrrrr�HeaderCountingBuffer�srg)TF)�Content-length�HostzAccept-encodingrJ�blahblahblah�spamspamspam�POST�/r)rar�HTTPConnectionr�sock�_bufferrr]�request�assertEqualrZr_)rrg�explicit_header�header�conn�body�headersrrr�test_auto_headers�s

��zHeaderTests.test_auto_headerscCsdGdd�dt�}d}d}t�||�D]%\}}t�d�}td�|_|�|_|�|d|�|�	|jj
dd�|��qd	}|D]#}t�d�}td�|_|�|_|�|dd�|�	|jj
dd
�|��q<|D]#}t�d�}td�|_|�|_|�|dd�|�	|jj
dd�|��qbt�||�D]#}t�d�}td�|_|�|_|�|dd�|�	|jj
d
d�|��q�dS)Nc@rY)z?HeaderTests.test_content_length_0.<locals>.ContentLengthCheckercSst�|�d|_dSr+)rar�content_lengthr(rrrr��

zHHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.__init__cSsF|�dd�}t|�dkr|d��dkr|d��|_t�||�dS)Nr[rrscontent-length)r\r]r_�stripryrarb)rrcrdrrrrb�szFHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.appendNrfrrrr�ContentLengthChecker�sr|)N�)�PUTrl�PATCHrJrm�0z%Header Content-Length incorrect on {})�GET�CONNECT�DELETE�HEAD�OPTIONS�TRACEz.Header Content-Length set for empty body on {}r}� �1)
ra�	itertools�productrrnrrorprqrrry�format�chain)rr|�bodies�methods_with_body�methodrvru�methods_without_bodyrrr�test_content_length_0�sR

�

�

�

��z!HeaderTests.test_content_length_0cCs�t�d�}td�|_|�dd�|�dd�|�d|j�|�dd�|�d	|j�|�d
d�|�d|j�|�d
d�|�d|j�|�ddd�|�d|j�|�dd�|�d|j�|�dd�|�d|j�|�dd�|�d|j�|�dd�|�d|j�|�d d!�|�d"|j�|�d#d$�|�d%|j�|�d&d$�|�d'|j�|�d(d$�|�d)|j�|�d*d$�|�d+|j�dS),NrJr�rmrh�*sContent-length: 42�Fooz bar s
Foo:  bar �Barz	baz	s
Bar: 	baz	�
AuthorizationzBearer mytokensAuthorization: Bearer mytoken�
IterHeader�IterA�IterBsIterHeader: IterA
	IterB�LatinHeader��sLatinHeader: ��
Utf8HeadersÀsUtf8Header: Àz
C1-Controls	next�linesC1-Control: next�linezEmbedded-Fold-Spacezis
 alloweds!Embedded-Fold-Space: is
 allowedzEmbedded-Fold-Tabzis
	allowedsEmbedded-Fold-Tab: is
	allowedz	Key Spacer/sKey Space: valuez	KeySpace sKeySpace : valuesNonbreak�SpacesNonbreak�Space: values�NonbreakSpaces�NonbreakSpace: value)rrnrro�
putrequest�	putheader�assertInrp�rrurrr�test_putheader�s>

zHeaderTests.test_putheadercCsxd}t�d�}td�}||_|�dd�|�|j�|��d}t�d�}td�}||_|�dd�|�|j�|��dS)NsCGET /foo HTTP/1.1
Host: [2001::]:81
Accept-Encoding: identity

z[2001::]:81r}r��/foosEGET /foo HTTP/1.1
Host: [2001:102A::]
Accept-Encoding: identity

z
[2001:102A::])rrnrrorq�
assertTruer�
startswith�r�expectedrurorrr�test_ipv6host_header	s

z HeaderTests.test_ipv6host_headercCsFd}t|�}t�|�}|��|�|�d�d�|�|�d�d�dS)Nz4HTTP/1.1 200 OK
First: val
: nval
Second: val

�First�val�Second)rr�HTTPResponse�beginrr�	getheader�rrvro�resprrr�!test_malformed_headers_coped_withs
z-HeaderTests.test_malformed_headers_coped_withcCs,dttdd��dttdd��d}t|�}t�|�}|��|�|�d�d	�|�|jdd	�|�|�d
�d�|�|jd
d�d�	t
ttdd���}|�|�d
�|�|�|jd
|�|�|�d��|�
d|j�|�d�|jdfD]}|�|�d��|�
d|�|�|�d��q{dS)Ns0HTTP/1.1 200 OK
!#$%&'*+-.^_`|~: value
VCHAR: �!�s
obs-text: ��sM
obs-fold: text
 folded with space
	folded with tab
Content-Length: 0

�Content-Lengthr	z!#$%&'*+-.^_`|~r/r}�VCHARzobs-textzobs-foldrz folded with spacezfolded with tab)�bytes�rangerrr�r�rrr��msg�join�map�chr�assertIsNotNoner�r�r��endswith)rrvror��vchar�foldedrrr�test_parse_all_octets&s6�����
�z!HeaderTests.test_parse_all_octetsc
Cs�t�d�}td�|_|�dd�d}|D]7\}}|�||f��$|�td��|�||�Wd�n1s7wYWd�n1sFwYqdS)NrJr}r�rm))s
Invalid
Name�
ValidValue)sInvalid
Namer�)sInvalid
Namer�)s

InvalidNamer�)s
InvalidNamer�)s
InvalidNamer�)s InvalidNamer�)s	InvalidNamer�)sInvalid:Namer�)s:InvalidNamer�)�	ValidNamesInvalid
Value)r�s
Invalid
Value)r�s
Invalid
Value)r�sInvalidValue
)r�s
InvalidValue
)r�s
InvalidValue
�Invalid header)	rrnrror��subTest�assertRaisesRegex�
ValueErrorr�)rru�cases�namer/rrr�test_invalid_headersDs

�����z HeaderTests.test_invalid_headersc
Cs�d}|D]H\}}|�||f��5t�d�}|jd||id�td�|_|�td��|��Wd�n1s8wYWd�n1sGwYqdS)N))z
Invalid
Name�
ValidValue)zInvalid
Namer�)zInvalid
Namer�)z

InvalidNamer�)z
InvalidNamer�)z
InvalidNamer�)z InvalidNamer�)z	InvalidNamer�)zInvalid:Namer�)z:InvalidNamer�)�	ValidNamezInvalid
Value)r�z
Invalid
Value)r�z
Invalid
Value)r�zInvalidValue
)r�z
InvalidValue
)r�z
InvalidValue
rJ�tunnel�rwr}r��	r�rrn�
set_tunnelrror�r��_tunnel)rr�r�r/rurrr�test_invalid_tunnel_headersbs
�

�����z'HeaderTests.test_invalid_tunnel_headersc
Cs�d}|D]@}|�|��1t�d�}|�|�td�|_|�td��|��Wd�n1s0wYWd�n1s?wYqdS)N)z
invalid
.hostz
invalid.hostzinvalid.host
z
invalid.hostzinvalid hostrJr}z,Tunnel host can't contain control charactersr�)rr��tunnel_hostrurrr�test_invalid_tunnel_hosts



�����z$HeaderTests.test_invalid_tunnel_hostcCs�d}t|�}tj|dd�}t���}|��Wd�n1s wY|����}|�|dd�|�|dd�|�|dd�|�|d	d
�dS)Ns9HTTP/1.1 200 OK
First: val
Second: val1
Second: val2
r)�
debuglevelrzreply: 'HTTP/1.1 200 OK\r\n'zheader: First: val�zheader: Second: val1�zheader: Second: val2)	rrr�r�captured_stdoutr��getvalue�
splitlinesrr)rrvror��output�linesrrr�test_headers_debuglevel�s�

�z#HeaderTests.test_headers_debuglevelN)
r1r2r3rxr�r�r�r�r�r�r�r�r�rrrrrX�sB"
rXc@�eZdZdd�ZdS)�HttpMethodTestsc	Cs`d}|D])}|�td��t�d�}td�|_|j|dd�Wd�n1s(wYqdS)N)	zGET
zPOST
zPUT

z
POST
Valuez
POST
HOST:abczGET
rHost:abc
zPOST
Remainder:
z
GET
HOST:
z
PUTz'method can't contain control charactersrJrm)r��url)r�r�rrnrrorq)r�methodsr�rurrr�test_invalid_method_names�s�

���z)HttpMethodTests.test_invalid_method_namesN)r1r2r3r�rrrrr���r�c@sJeZdZdZdd�Zdd�Zdd�Zdd	�Zddd�Zd
d�Z	dd�Z
dS)�TransferEncodingTestsIt's just a flesh woundcCsbt�d�}td�|_|�dd�|j|��dd�|�|jj�\}}}|�	|�}|�
||j�dS)NrJr
rlrmT)�encode_chunked)rrnrror��
endheaders�
_make_body�_parse_requestr�_parse_chunkedrr�
expected_body)rru�_rvrrr�test_endheaders_chunked�s


z,TransferEncodingTest.test_endheaders_chunkedcCsvt�d�}td�|_|�dd|��ddi�|�|jj�\}}}|�ddd	�|�	�D��|�
|dd�|�
||j�t�d�}td�|_|�dd|j�d
�ddi�|�|jj�\}}}|�ddd	�|�	�D��|�
|dd�|�
||j�t�d�}td�|_|jddddid
|��d�|�|jj�\}}}|�ddd	�|D��|�
|dd�|�
|�
|�|j�dS)NrJr
rlrm�Transfer-Encoding�chunked�content-lengthcS�g|]}|���qSr�r_��.0�krrr�
<listcomp>��z>TransferEncodingTest.test_explicit_headers.<locals>.<listcomp>�latin-1cSr�rr�r�rrrr��r�z
gzip, chunkedT)rwr�rvcSr�rr�r�rrrr��r�)rrnrrorqr�r�r�assertNotIn�keysrrr�r^r��rrur�rwrvrrr�test_explicit_headers�s<

�

�

�z*TransferEncodingTest.test_explicit_headerscCs�dD]@}t�d�}td�|_|�dd|j|d��|�|jj�\}}}|�|�}|�	||j
�|�	|dd�|�d	d
d�|D��qdS)N)FTrJr
rlrm)�empty_linesr�r�r�cSr�rr�r�rrrr��r�z5TransferEncodingTest.test_request.<locals>.<listcomp>)rrnrrorqr�r�rr�rrr�r�)rr�rur�rwrvrrr�test_request�s

�
�z!TransferEncodingTest.test_requestcCslt�d�}td�|_|�ddd�|�|jj�\}}}|�|dd�|�dd	d
�|D��|�|d�dS)NrJr
rlrmrr�r�r�cSr�rr�r�rrrr�r�z8TransferEncodingTest.test_empty_body.<locals>.<listcomp>s0

)	rrnrrorqr�rrrr�r�rrr�test_empty_body�s

z$TransferEncodingTest.test_empty_bodyFccsX�|j�d�}t|�D]\}}|r|drdV|t|�dkr&|dVq|VqdS)N� r�r
r)r�r\�	enumerater])rr�r��idx�linerrrr�s��zTransferEncodingTest._make_bodycCs�|�d�}|d}i}d}|t|�krFt||�dkrF||�d�\}}|�d���}|�d���||<|d7}|t|�krFt||�dks||d�||dd��fS)N�
rrr[r�)r\r]r^r{r�)rrr�rqrwrC�keyr�rrrr�s
�z#TransferEncodingTest._parse_requestcCs�g}i}d}|�d�}	|||d�\}}t|d�}|dkr$|d7}n|�|t|��|�|�|d7}|t|�kr<nqd�|�S)NrrTr��rr
)r\�intrrr]rbr�)rrrv�trailersrCr��size�chunkrrrr�s"


�
z#TransferEncodingTest._parse_chunkedN)F)r1r2r3r�r�r�r�r�r�r�r�rrrrr��s
&


r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1d_d`�Z2dadb�Z3dcdd�Z4dedf�Z5dgdh�Z6diS)j�	BasicTestcCs"|�hd�tttd���k�dS)N>r�r/�phrase�description�)r��set�dirrr(rrr�&test_dir_with_added_behavior_on_status8s"z0BasicTest.test_dir_with_added_behavior_on_statuscCs�d}t|�}t�|�}|��|�|�d�d�|�|���|�|j�|�|��d�|�	|���|�|j�|�
�|�	|j�d}t|�}t�|�}|�tj|j�dS)N�HTTP/1.1 200 Ok

Textrr
�TextzHTTP/1.1 400.100 Not Ok

Text)
rrr�r�rrrA�assertFalse�isclosed�closedr�r$�assertRaises�
BadStatusLiner�rrr�test_status_lines<s 

zBasicTest.test_status_linescCst�d�}|�t|�d�dS)Nr}zBadStatusLine("''"))rrrr�repr)r�excrrr�test_bad_status_reprQs
zBasicTest.test_bad_status_reprcCs�d}t|�}t�|�}|��|�|�d�d�|�|���|�|�d�d�|�|���|�|j	�|�
�|�|j	�dS�N�*HTTP/1.1 200 Ok
Content-Length: 4

Textr��Te�xt�rrr�r�rrrArrr�rr$r�rrr�test_partial_readsUs
zBasicTest.test_partial_readscCs~d}t|�}t�|�}|��|�|��d�|�|���|�|��d�|�	|���|�|j
�|��|�	|j
�dS)Nz4HTTP/1.1 200 Ok
Content-Length: 13

Text
AnothersText
sAnother)rrr�r�rrrErrrAr�rr$r�rrr�test_mixed_readsds
zBasicTest.test_mixed_readscCs�d}t|�}t�|�}|��td�}|�|�}|�|d�|�t|�d�|�|�	��|�|�}|�|d�|�t|�d�|�
|�	��|�|j�|��|�
|j�dSr�
rrr�r��	bytearray�readintorrr�rrr�rr$�rrvror��brCrrr�test_partial_readintosss 


z BasicTest.test_partial_readintoscCsbd}t|�}t�|�}|��|�|�d�d�|�|���|�|j	�|�
�|�|j	�dS)Nr�
r�rrr�r�rrrAr�rrrr$r�rrr�test_partial_reads_past_end�s
z%BasicTest.test_partial_reads_past_endcCs�d}t|�}t�|�}|��td�}|�|�}|�|d�|�t|�dd�d�|�|�	��|�
|j�|��|�|j�dS)Nrr(�r)
rrr�r�r#r$rrr�r�rrrr$r%rrr�test_partial_readintos_past_end�s

z)BasicTest.test_partial_readintos_past_endcCs�d}t|�}t�|�}|��|�|�d�d�|�|���|�|�d�d�|�|�d�d�|�|���|�|j	�|�
�|�|j	�dS)Nrr�rrrr
rr�rrr�$test_partial_reads_no_content_length�s
z.BasicTest.test_partial_reads_no_content_lengthcCs�d}t|�}t�|�}|��td�}|�|�}|�|d�|�t|�d�|�|�	��|�|�}|�|d�|�t|�d�|�|�}|�|d�|�
|�	��dS)Nrr�rrr)rrr�r�r#r$rrr�rrr�r%rrr�(test_partial_readintos_no_content_length�s



z2BasicTest.test_partial_readintos_no_content_lengthcCstd}t|�}t�|�}|��|�|�d�d�|�|���|�|�d�d�|�|�d�d�|�|���dS)N�+HTTP/1.1 200 Ok
Content-Length: 10

Textr�rrrr
)	rrr�r�rrrArrr�r�rrr�"test_partial_reads_incomplete_body�s
z,BasicTest.test_partial_reads_incomplete_bodycCs�d}t|�}t�|�}|��td�}|�|�}|�|d�|�t|�d�|�|�	��|�|�}|�|d�|�t|�d�|�|�}|�|d�|�
|�	��|�|j�|��|�
|j�dS)Nr/r�rrrr"r%rrr�&test_partial_readintos_incomplete_body�s$



z0BasicTest.test_partial_readintos_incomplete_bodycC�VdD]}|�tjtj|�qdD]\}}}t�|�}|�||j�|�||j�qdS)N�zwww.python.org:abczuser:password@www.python.org)�z[fe80::207:e9ff:fe9b]:8000�fe80::207:e9ff:fe9bi@)zwww.python.org:80�www.python.org�P)�www.python.org:r6r7)r6r6r7)�[fe80::207:e9ff:fe9b]r5r7)�[fe80::207:e9ff:fe9b]:r5r7)rr�
InvalidURLrnrrrr�r�hp�h�p�crrr�test_host_port�s
�zBasicTest.test_host_portcCs<d}d}t|�}t�|�}|��|�d�}|�||�dS)Nz�HTTP/1.1 200 OK
Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"
Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"

No body
zrCustomer="WILE_E_COYOTE"; Version="1"; Path="/acme", Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"z
Set-Cookie)rrr�r�r�rr)rr�hdr�sr�cookiesrrr�test_response_headers�s

zBasicTest.test_response_headerscCs:tdt�}tj|dd�}|��|��r|�d�dSdS)N�*HTTP/1.1 200 OK
Content-Length: 14432

r��r��)Did not expect response from HEAD request)rr=rr�r�rA�fail�rror�rrr�test_read_heads��zBasicTest.test_read_headcCsTtdt�}tj|dd�}|��td�}|�|�dkr |�d�|�t	|�d�dS)NrFr�rG�rrH�)
rr=rr�r�r#r$rIrrr�)rror�r&rrr�test_readinto_heads�
zBasicTest.test_readinto_headcCsRd�dd�ttjd�D��d}d|}t|�}t�|�}|�tjd|j�dS)Nr
css�|]}d|VqdS)z
Header%d: fooNr)r��irrr�	<genexpr>(s��z2BasicTest.test_too_many_headers.<locals>.<genexpr>rzHTTP/1.1 200 OK
zgot more than \d+ headers)	r�r�r�_MAXHEADERSrr�r��
HTTPExceptionr�)rrwrrCrrrr�test_too_many_headers's
��
�zBasicTest.test_too_many_headersc	Cs�d}ttd��1}t�d�}t|�}||_|�dd|�|�|j�	|�d|jdt
|��|f�Wd�dS1s;wYdS)Ns_GET /foo HTTP/1.1
Host: example.com
Accept-Encoding: identity
Transfer-Encoding: chunked

r rJr�r�z%r != %r)�open�__file__rrnrrorqr�rr�r]�rr�rvrurorrr�test_send_file0s
�"�zBasicTest.test_send_filecCs�d}t�d�}td�}||_|�|�|�||j�d|_|�t�d|��|�||j�d|_|�t�	|��|�||j�dS)Ns"this is a test this is only a testrJr
r&)
rrnrro�sendrrr�arrayr4r5r�rrr�	test_send>s

zBasicTest.test_sendcsXdd��G�fdd�dtj�}d}t�d�}td�}||_|�|��|�|j|�dS)Ncss�dVdVdVdS)Nr�data_tworrrrrrM��
z/BasicTest.test_send_updating_file.<locals>.datacs eZdZdZ��Zddd�ZdS)z7BasicTest.test_send_updating_file.<locals>.UpdatingFilerr>cSs
t|j�Sr+)�next�d)r�	blocksizerrrrAUr)z<BasicTest.test_send_updating_file.<locals>.UpdatingFile.readNrG)r1r2r3r%r^rAr�rrr�UpdatingFileRsrasdatarJr})	r4�
TextIOBaserrnrrorXrrr)rrar�rurorr`r�test_send_updating_fileLs
z!BasicTest.test_send_updating_filecCsLd}dd�}t�d�}td�}||_|�dd|�dd	i�|�|j|�dS)
NsbGET /foo HTTP/1.1
Host: example.com
Accept-Encoding: identity
Content-Length: 11

onetwothreecss�dVdVdVdS)Nsonestwosthreerrrrrrvfr\z&BasicTest.test_send_iter.<locals>.bodyrJr}r�r�r��11)rrnrrorqrrrrVrrr�test_send_iteras
zBasicTest.test_send_itercCsvd}tjd|d�}td�}||_d|d}|�ddt�|�d	d
i�|�|jd�|j	�
dd
�d
}|�||�dS)z8Check that request() respects the configured block size.�rJ�r_N�a�br~rmr��9r��

r)rrnrrorqr4r5rrrrr\)rr_ruror�rvrrr�test_blocksize_requestqsz BasicTest.test_blocksize_requestcCs\d}tjd|d�}td�}||_d|d}|�t�|��|�|jd�|�|j	|�dS)z5Check that send() respects the configured block size.rfrJrgNrhrir�)
rrnrrorXr4r5rrrr)rr_ruror�rrr�test_blocksize_send}szBasicTest.test_blocksize_sendcCsRt�d�}td�|_|�t��|�dd|�Wd�dS1s"wYdS)NrJr}rl�test)rrnrror�	TypeErrorrqr�rrr�test_send_type_error�s


"�zBasicTest.test_send_type_errorcCsbt}tttt�}tj|dd�}|��|�|�	�|�|�
�tdd�D]+}tttt�}tj|dd�}|��|�|�	|�|�	|�|�	�|�|�
�q&dD]Z}tt|�}tj|dd�}|��zBz|�	�Wn0tjy�}z#|�|j
|�dt|�}|�t|�|�|�t|�|�WYd}~n
d}~ww|�d�W|�
�qT|�
�wdS)Nr�rGr��r}zfoo
�IncompleteRead(%d bytes read)�IncompleteRead expected)�chunked_expectedr�
chunked_start�
last_chunk�chunked_endrr�r�rrrAr$r��IncompleteRead�partialr]rrrI)rr�ror�rC�xrO�expected_messagerrr�test_chunked�s:$
��
��zBasicTest.test_chunkedcCs�t}t|�}td�}tttt�}tj|dd�}|�	�|�
|�}|�|d|�|�|�||�|��t
dd�D]N}tttt�}tj|dd�}|�	�t|�}|�
|d|��}||�
||||��7}||�
||d��7}|�|d|�|�|�||�|��q;dD][}	tt|	�}tj|dd�}|�	�zCz|�
|�}Wn0tjy�}z#|�|j|�dt|�}
|�t|�|
�|�t|�|
�WYd}~n
d}~ww|�d	�W|��q�|��wdS)
Nr�r�rGrrqrrrrsrt)rur]r#rrvrwrxrr�r�r$rrr$r��
memoryviewryrzrrrI)rr��	nexpectedr&ror�rC�mrOr{r|rrr�test_readinto_chunked�sL

��
��zBasicTest.test_readinto_chunkedcCs�d}t|tt�}tj|dd�}|��|�|��d�|�|jd�|�|j	d�|�
|���|�|j
�|��|�
|j
�dS)N�EHTTP/1.1 200 OK
Transfer-Encoding: chunked

a
hello world
1
d
r�rGr
���OK)rrwrxrr�r�rrrA�status�reasonr�rrrr$)rrvror�rrr�test_chunked_head�s�zBasicTest.test_chunked_headcCs�d}t|tt�}tj|dd�}|��td�}|�|�}|�|d�|�t	|�d�|�|j
d�|�|jd�|�|�
��|�|j�|��|�|j�dS)	Nr�r�rGrLrrMr�r�)rrwrxrr�r�r#r$rrr�r�r�r�rrrr$)rrvror�r&rCrrr�test_readinto_chunked_head�s�
z$BasicTest.test_readinto_chunked_headcCs@td�}tj|dd�}|��|�|��d�|�|���dS)Nz.HTTP/1.1 200 OK
Content-Length: -1

Hello
r�rG�Hello
)rrr�r�rrrAr�rrJrrr�test_negative_content_lengths�z&BasicTest.test_negative_content_lengthc
Cs�td�}tj|dd�}|��z|��Wn2tjyG}z%|�|jd�|�t|�d�|�t	|�d�|�
|���WYd}~dSd}~ww|�d�dS)Nz.HTTP/1.1 200 OK
Content-Length: 10

Hello
r�rGr�z-IncompleteRead(7 bytes read, 3 more expected)rt)
rrr�r�rAryrrrzrrr�rrI)rror�rOrrr�test_incomplete_read
s"
�
���zBasicTest.test_incomplete_readcsZtdd�}t�d��|�_|�t�fdd�����}|�d|j�|�d|�	d��dS)	NzgHTTP/1.0 401 Authorization Required
Content-type: text/html
WWW-Authenticate: Basic realm="example"
sContent-LengthrJcs��ddd�S)Nr~�/urlrv)rqr�rurr�<lambda>&sz&BasicTest.test_epipe.<locals>.<lambda>i�zBasic realm="example"zwww-authenticate)
r7rrnrorr:�getresponserrr�r�rJrr�r�
test_epipes�

��zBasicTest.test_epipecCs8dddd}t�t|��}|�tjtjf|j�dS)N�HTTP/1.1 200 Okr��r
)rr�rr�LineTooLongrr��rrvr�rrr�test_overflowing_status_line.sz&BasicTest.test_overflowing_status_linecCs2dddd}t�t|��}|�tj|j�dS)NzHTTP/1.1 200 OK
X-Foo: barrr�z

)rr�rrr�r�r�rrr�test_overflowing_header_line3s���z&BasicTest.test_overflowing_header_linecCsrdd}t�t|��}|�tj��}|��Wd�n1s wY|�dt|j��|�dt|j��dS)NzHTTP/1.1 100 OK
r
i�zgot more than rw)	rr�rrrRr�r�r�	exception)rrvr��cmrrr�'test_overflowing_header_limit_after_100;s��
�z1BasicTest.test_overflowing_header_limit_after_100cCs:dddd}t�t|��}|��|�tj|j�dS)Nz/HTTP/1.1 200 OK
Transfer-Encoding: chunked

r	r�za
hello world
0

)rr�rr�rr�rAr�rrr�test_overflowing_chunked_lineHs���z'BasicTest.test_overflowing_chunked_linecCs`d}t|�}t�|�}|��|�|��d�|�|���|�|j	�|�
�|�|j	�dS)Nr�r
r)r�rrr�test_early_eofUs
zBasicTest.test_early_eofcsnt�d�}d�G�fdd�dtj�}||_td�|_|�dd�|�tj|j	�|�
�j�|�
|jj�dS)NrJcseZdZ�fdd�ZdS)z+BasicTest.test_error_leak.<locals>.Responsecs"|�tjj|g|�Ri|��dSr+)rr�rrT��responserrrfsz4BasicTest.test_error_leak.<locals>.Response.__init__N)r1r2r3rrr�rr�Responseesr�zInvalid status liner�rm)
rrnr��response_classrrorqrrr�r�rr)rrur�rr�r�test_error_leakas

zBasicTest.test_error_leakcCsRd}td}tt|tt�}tj|dd�}|��|�|�	�|�|�
�dS)Nz3;foo=bar
abc
sabcr�rG)rurrv�last_chunk_extendedrxrr�r�rrrAr$)r�extrar�ror�rrr�test_chunked_extensionqsz BasicTest.test_chunked_extensioncCsBt}ttt�}tj|dd�}|��|�|��|�|�	�dS)z9some servers may serve up a short chunked encoding streamr�rGN)
rurrvrwrr�r�rrrAr$�rr�ror�rrr�test_chunked_missing_end{sz"BasicTest.test_chunked_missing_endcCs\t}ttttt�}tj|dd�}|��|�	|�
�|�|�	|j�
�d�|��dS)z&See that trailers are read and ignoredr�rGr
N)
rurrvrwrrxrr�r�rrrAr"r$r�rrr�test_chunked_trailers�szBasicTest.test_chunked_trailerscCsjt}d}ttttt|�}tj|dd�}|��|�	|�
�|�|�	|j�
�|�d��|�
�dS)zDCheck that we don't read past the end of the chunked-encoding stream�	extradatar�rGrN)rurrvrwrrxrr�r�rrrAr"rr$)rr�r�ror�rrr�test_chunked_sync�szBasicTest.test_chunked_synccCs\d}d}td||�}tj|dd�}|��|�|��|�|�|j��|�|��dS)zBCheck that we don't read past the end of the Content-Length stream�	extradata�
Hello123
�'HTTP/1.1 200 OK
Content-Length: 10

r�rGN)rrr�r�rrrAr"r$�rr�r�ror�rrr�test_content_length_sync�sz"BasicTest.test_content_length_synccCs`d}d}td||�}tj|dd�}|��|�|�d�|g�|�|j��|�|��dS�Nr�r�r�r�rGi�)	rrr�r�rr�	readlinesr"rAr$r�rrr�test_readlines_content_length�sz'BasicTest.test_readlines_content_lengthcCs^d}d}td||�}tj|dd�}|��|�|�d�|�|�|j��|�|��dSr�)	rrr�r�rr�read1r"rAr$r�rrr�test_read1_content_length�sz#BasicTest.test_read1_content_lengthcCspd}d}td||�}tj|dd�}|��|�|�d�|�|�|�d�d�|�|j��|�|��dS)Nr�r�r�r�rGr(r
)	rrr�r�rrrEr"rAr$r�rrr�"test_readline_bound_content_length�sz,BasicTest.test_readline_bound_content_lengthcCsvd}d}td|d|�}tj|dd�}|��|�|�d�|d�|�|��|�|�|j��|�|��dS)	Nr�r�s'HTTP/1.1 200 OK
Content-Length: 30

r�r�rG�r�)	rrr�r�rrr�rAr"r$r�rrr�test_read1_bound_content_length�sz)BasicTest.test_read1_bound_content_lengthcs�t�tdf��|��j�d���fdd�}tj|d�}|��|�|jt	d��t
j����}|�
dd�|��}z+|�|jt
j�tj|��d�}z|�d	�W|��n|��wW|��|��n	|��|��w|��|��d	�dS)
Nrc	s����\}}|�;|�d��}	|��}|�d�snq|�d�|���Wd�n1s.wYWd�dSWd�dS1sFwYdS)Nr Trs'HTTP/1.1 200 Connection established

)�acceptr'rE�rstriprrA)ru�address�readerr��result�servrr�
run_server�s
�

P�z2BasicTest.test_response_fileno.<locals>.run_server��targetrr�z
dummy:1234)�filenos
proxied data
)�socket�
create_server�HOST�
addCleanupr$�	threading�Thread�startr��floatrrn�getsocknamerqr�rrr�r�r�r�detach)rr��threadrur�rCrr�r�test_response_fileno�s,
�
zBasicTest.test_response_filenoc	s�t�tdf��|��j���fdd�}tj|d�}|��|�|jd�t	j
����}z<tdd�D]*}d|>�|�
d	d
�|���}|�t|�����Wd�n1sWwYq2W|��|�d�dS|��|�d�w)Nrcs����\}}|�6|�d�r6|�d��|�d�d�|�d��d�|�d�sWd�dSWd�dS1sAwYdS)N�s'HTTP/1.1 200 Ok
Content-Length: %d

�Ar��B�r��recvr�rur��r�rrrr��s
����"�z7BasicTest.test_large_content_length.<locals>.run_serverr���?��rr�rm)r�r�r�r�r$r�r�r�r�rrnr�r�rqr�rrr]rA�rr�r�ru�wr�rr�r�test_large_content_length�s(
����z#BasicTest.test_large_content_lengthc
st�tdf��|��j���fdd�}tj|d�}|��|�|jd�t	j
����}zJtdd�D],}d|>�|�
d	d
�|���}|�t	j|j�Wd�n1sUwY|��q2W|��d�|�
d	d
�|��|�d�dS|��d�|�
d	d
�|��|�d�w)Nrcsb	���\}}|�|�d��s	Wd�dS|�d��Wd�n1s+wYq)NTr�s+HTTP/1.1 200 Ok
Content-Length: %d

Textr�r�r�rrr�s
�����zABasicTest.test_large_content_length_truncated.<locals>.run_serverr�r���Arr�rm)r�r�r�r�r$r�r�r�r�rrnr�r�rqr�rryrAr�rr�r�#test_large_content_length_truncateds4

�
��z-BasicTest.test_large_content_length_truncatedcC�4Gdd�dtj�}|d�}td�|_|�dd�dS)zv
        It should be possible to override the default validation
        behavior in putrequest (bpo-38216).
        c@r�)zRBasicTest.test_putrequest_override_domain_validation.<locals>.UnsafeHTTPConnectioncSr*r+r�rr�rrr�_validate_pathBr,zaBasicTest.test_putrequest_override_domain_validation.<locals>.UnsafeHTTPConnection._validate_pathN)r1r2r3r�rrrr�UnsafeHTTPConnectionAr�r�rJr}r�z/N�rrnrror��rr�rurrr�*test_putrequest_override_domain_validation<s
z4BasicTest.test_putrequest_override_domain_validationcCs8Gdd�dtj�}|d�}td�|_|jdddd�dS)	Nc@r�)zPBasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnectioncSr*r+rr�rrr�_validate_hostKr,z_BasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnection._validate_hostN)r1r2r3r�rrrrr�Jr�r�z
example.com
r}r�rmr)�	skip_hostr�r�rrr�(test_putrequest_override_host_validationIs
z2BasicTest.test_putrequest_override_host_validationcCr�)z�
        It should be possible to override the default encoding
        to transmit bytes in another encoding even if invalid
        (bpo-36274).
        c@r�)zIBasicTest.test_putrequest_override_encoding.<locals>.UnsafeHTTPConnectioncSs
|�d�S)N�utf-8)r)r�str_urlrrr�_encode_request[r)zYBasicTest.test_putrequest_override_encoding.<locals>.UnsafeHTTPConnection._encode_requestN)r1r2r3r�rrrrr�Zr�r�rJr}r�u/☃Nr�r�rrr�!test_putrequest_override_encodingTs
z+BasicTest.test_putrequest_override_encodingN)7r1r2r3rrrr r!r'r*r,r-r.r0r1rArErKrNrSrWrZrcrerlrmrpr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr	7sj

	 +


	%$
r	c@sxeZdZdZdZee�d�d��d�ZdZdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�ExtendedReadTestz*
    Test peek(), read1(), readline()
    zOHTTP/1.1 200 OK

hello world!
and now 
for something completely different
foo�helloNr��HTTP/1.1 200 OK
Transfer-Encoding: chunked

a
hello worl
3
d!

9
and now 

23
for something completely different

3
foo
0

cCs8t|j�}tj|dd�}|��t�|j�|_||_dS)Nr�rG)	rr�rr�r�r4�BufferedReader�fpr�rJrrr�setUp�s


zExtendedReadTest.setUpcs�|j}|jj�d�fdd�	}||j_g}	|�d�}|rH|�t|�d�|��}|�t|�t|��|�|�|��|�t|��}|�	||�n	|��}|�
|�|�|�|sYnq|�	d�|�|j
�dS)	Nr>cs(�|�}|dkr|d|�S|dd�S)Nrr(r)rCr?��oldpeekrr�mypeek�sz*ExtendedReadTest.test_peek.<locals>.mypeekTr�rr
rG)r�r��peek�
assertGreaterr]�assertGreaterEqualr�r�rArrrrbr��lines_expected)rr�r��allr?�p2r]rr�r�	test_peek�s*


�zExtendedReadTest.test_peekcCs|j}|�|jj|j�dSr+)r��_verify_readlinerEr�)rr�rrr�
test_readline�szExtendedReadTest.test_readlinecCs^g}	|d�}|r|dkrt|�dkr|�|�d��|�|�|s#nq|�d�|�|�dS)NTrL�foo�
r
)r]r�r�rbrrr�)rrEr�r�rrrrr��s
�	z!ExtendedReadTest._verify_readlinecs0�j���fdd�}t|�}��|j�j�dS)Ncs��d�}��t|�d�|S)Nr+)r��assertLessEqualr])�res�r�rrrr�s
z&ExtendedReadTest.test_read1.<locals>.r)r��	Readlinerr�rEr�)rr�	readlinerrrr�
test_read1�szExtendedReadTest.test_read1cCs>|j}g}	|��}|s
n|�|�q|�d�|�|j�dS)NTr
)r�r�rbrrr�r��rr�r�rrrr�test_read1_unbounded�s
�z%ExtendedReadTest.test_read1_unboundedcCsP|j}g}	|�d�}|sn|�t|�d�|�|�q|�d�|�|j�dS)NTr(r
)r�r�r�r]rbrrr�r�rrrr�test_read1_bounded�s

�z#ExtendedReadTest.test_read1_boundedcCs|�|j�d�d�dS)Nrr
)rrr�r�r(rrr�test_read1_0��zExtendedReadTest.test_read1_0cCs |j�d�}|�dt|��dS�Nr)r�r�r�r])rr?rrr�test_peek_0�szExtendedReadTest.test_peek_0)r1r2r3rHr��findrr��
lines_chunkedr�r�r�r�rrrrrrrrrr�cs ��	
	
r�c@seZdZdZdZdS)�ExtendedReadTestChunkedz:
    Test peek(), read1(), readline() in chunked mode
    r�N)r1r2r3rHr�rrrrr�s�rc@s eZdZdZdd�Zdd�ZdS)rzT
    a simple readline class that uses an arbitrary read function and buffering
    cCs||_d|_dS)Nr
)�readfunc�	remainder)rrrrrr�s
zReadliner.__init__cCs�g}d}|j}zB	|�d�}|dkrn|t|�|kr!||d}|�|�|��}|s/d}nq	|d7}|�|d|��||d�|_d�|�WSd�|�|_�)NrTr�r>rr
)rrr]rbrr�)r�limitr�datalenrArrrrrE�s.

�zReadliner.readlineN)r1r2r3rHrrErrrrr�src@r6)�OfflineTestcCsfdh}ddh}tt�D]}|�d�s||vrqtt|�}t|dd�dkr)|�|�q|�tj|�dS)N�	responses�HTTPMessage�
parse_headersr�r2zhttp.client)rrr��getattr�add�assertCountEqual�__all__)rr��denylistr��
module_objectrrr�test_alls

�zOfflineTest.test_allcCs|�tjtjd�dS)Nz	Not Found)rrrr�	NOT_FOUNDr(rrr�test_responses'r	zOfflineTest.test_responsesc	CsRgd�}|D] }|j|d��|�tt|��Wd�n1s!wYqdS)N):�CONTINUE�SWITCHING_PROTOCOLS�
PROCESSINGr��CREATED�ACCEPTED�NON_AUTHORITATIVE_INFORMATION�
NO_CONTENT�
RESET_CONTENT�PARTIAL_CONTENT�MULTI_STATUS�IM_USED�MULTIPLE_CHOICES�MOVED_PERMANENTLY�FOUND�	SEE_OTHER�NOT_MODIFIED�	USE_PROXY�TEMPORARY_REDIRECT�BAD_REQUEST�UNAUTHORIZED�PAYMENT_REQUIRED�	FORBIDDENr�METHOD_NOT_ALLOWED�NOT_ACCEPTABLE�PROXY_AUTHENTICATION_REQUIRED�REQUEST_TIMEOUT�CONFLICT�GONE�LENGTH_REQUIRED�PRECONDITION_FAILED�REQUEST_ENTITY_TOO_LARGE�REQUEST_URI_TOO_LONG�UNSUPPORTED_MEDIA_TYPE�REQUESTED_RANGE_NOT_SATISFIABLE�EXPECTATION_FAILED�IM_A_TEAPOT�MISDIRECTED_REQUEST�UNPROCESSABLE_ENTITY�LOCKED�FAILED_DEPENDENCY�UPGRADE_REQUIRED�PRECONDITION_REQUIRED�TOO_MANY_REQUESTS�REQUEST_HEADER_FIELDS_TOO_LARGE�UNAVAILABLE_FOR_LEGAL_REASONS�INTERNAL_SERVER_ERROR�NOT_IMPLEMENTED�BAD_GATEWAY�SERVICE_UNAVAILABLE�GATEWAY_TIMEOUT�HTTP_VERSION_NOT_SUPPORTED�INSUFFICIENT_STORAGE�NOT_EXTENDED�NETWORK_AUTHENTICATION_REQUIRED�EARLY_HINTS�	TOO_EARLY)�constant)r�r��hasattrr)rr��constrrr�test_client_constants*s<���z!OfflineTest.test_client_constantsN)r1r2r3rrr[rrrrrsrc@s@eZdZdd�Zdd�Zdd�Ze�ee	d�d�d	d
��Z
dS)�SourceAddressTestcCs>t�tjtj�|_t�|j�|_t��|_|j�	�d|_
dSr+)r��AF_INET�SOCK_STREAMr�r�	bind_portr�find_unused_port�source_port�listenrur(rrrr�ns



zSourceAddressTest.setUpcCs*|jr|j��d|_|j��d|_dSr+)rur$r�r(rrr�tearDownus



zSourceAddressTest.tearDowncCsBtjt|jd|jfd�|_|j��|�|jj�	�d|j�dS)Nr}��source_addressr)
rrnr�rrarurSrrror�r(rrr�testHTTPConnectionSourceAddress|s

�
z1SourceAddressTest.testHTTPConnectionSourceAddress�HTTPSConnectionz'http.client.HTTPSConnection not definedcCstjt|jd|jfd�|_dS)Nr}rd)rrgr�rrarur(rrr� testHTTPSConnectionSourceAddress�s
�z2SourceAddressTest.testHTTPSConnectionSourceAddressN)r1r2r3r�rcrf�unittest�skipIfrYrrhrrrrr\ms�r\c@s(eZdZdZdd�Zdd�Zdd�ZdS)�TimeoutTestNcCs.t�tjtj�|_t�|j�t_|j��dSr+)	r�r]r^r�rr_rk�PORTrbr(rrrr��szTimeoutTest.setUpcCs|j��d|_dSr+)r�r$r(rrrrc�rzzTimeoutTest.tearDownc	Cs|�t���t�d�zt�ttj�}|�	�Wt�d�nt�d�w|�
|j��d�|�
�|�t���t�d�ztjttjdd�}|�	�Wt�d�nt�d�w|�
|j��d�|�
�tjttjdd�}|�	�|�
|j��d�|�
�dS�N�)�timeout)�assertIsNoner��getdefaulttimeout�setdefaulttimeoutrrnr�rkrlrSrrro�
gettimeoutr$)r�httpConnrrr�testTimeoutAttribute�s,



�
z TimeoutTest.testTimeoutAttribute)r1r2r3rlr�rcrurrrrrk�s
rkc@r6)�PersistenceTestc
Cs�d}|D]v\}}}|j||d��bd�||�}t|�}|�|j�|�dd�|���}|�|jdu|�|��Wd�n1sDwY|�|jdu|�|�|j	d�|�dd�|�|j	|rhdnd�Wd�n1suwYqdS)	N))�1.0r}F)rwzConnection: keep-alive
T)�1.1r}T)rxzConnection: close
F)rwzConnection: keep-ALIVE
T)rxzConnection: cloSE
F)�versionrtz4HTTP/{} 200 OK
{}Content-Length: 12

Dummy body
r�z/open-connectionrz/subsequent-requestr�)
r�r�rIrprorqr�rrrArK)r�testsryrt�reuser�rur�rrr�test_reuse_reconnect�s(�

����z$PersistenceTest.test_reuse_reconnectc	Cs�dd�}tjtjf|tff}|D]?\}}|j|d��-td|�}|�dd�|�||j	�|�
|j�|�dd�|�|j
d�Wd�n1sJwYqdS)	Ncs&t�|���fdd�}|�_t���S)z3Return BufferedReader that raises ECONNRESET at EOFcs tj��|�}|dkrt��|Sr
)r4r5r$�ConnectionResetError)�bufferr��streamrrr$�szNPersistenceTest.test_disconnected.<locals>.make_reset_reader.<locals>.readinto)r4r5r$r�)rr$rrr�make_reset_reader�s

z<PersistenceTest.test_disconnected.<locals>.make_reset_reader)r�r
r�z
/eof-response�
/reconnectr�)r4r5r�RemoteDisconnectedr}r�rIrqrr�rprorrrK)rr�rz�stream_factoryr�rurrr�test_disconnected�s
�
���z!PersistenceTest.test_disconnectedcCsVtd�}|jddddid�|�tj|j�|�|j�|�dd�|�|j	d�dS)	NsHTTP/1.1 100 Continue

r�rm�Expectz100-continuer�r�r�)
rIrqrrr�r�rprorrrKr�rrr�test_100_close�s�zPersistenceTest.test_100_closeN)r1r2r3r|r�r�rrrrrv�srvc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zej	dd��Z
d
d�Zdd�Zdd�Z
dd�Zdd�Ze�eed�d�dd��Zdd�ZdS)�	HTTPSTestcCsttd�s|�d�dSdS)Nrgzssl support required)rYr�skipTestr(rrrr�s
�zHTTPSTest.setUpcCsddlm}|||d�S)Nr)�make_https_server)�certfile)�test.ssl_serversr�)rr�r�rrr�make_serverszHTTPSTest.make_servercCs$tjttjdd�}|�|jd�dSrm)rrgr�rkrlrrro)rr>rrr�test_attributesszHTTPSTest.test_attributesc	Cs�ddl}t�d�t�d��3t�dd�}|�|j��}|�	dd�Wd�n1s,wY|�
|jjd�Wd�dS1sDwYdS)Nr�network�self-signed.pythontest.net�r�rm�CERTIFICATE_VERIFY_FAILED)
�sslr�requiresr�transient_internetrrgr�SSLErrorrqrrr�r�)rr�r>�exc_inforrr�test_networkeds
�"�zHTTPSTest.test_networkedcCs�ddl}t�d�t�d��0|��}tjdd|d�}|�dd�|�	�}|�
�|�d|�d	��|�
�Wd�dS1sAwYdS)
Nrr�r�r���contextr�rm�nginx�server)
r�rr�rr��_create_unverified_contextrrgrqr�r$r�r�)rr�r�r>r�rrr�test_networked_noverifications
�
"�z'HTTPSTest.test_networked_noverificationcCs�t�d�t�d��,t�dd�}|�dd�|��}|�d�}|�	�|�	�|�
d|�Wd�dS1s9wYdS)Nr�r6r�r�rmzcontent-typez	text/html)rr�rr�rrgrqr�r�r$r�)rr>r��content_typerrr�&test_networked_trusted_by_default_cert)s

"�z0HTTPSTest.test_networked_trusted_by_default_certc	Csddl}t�d�d}t�|��o|�|j�}|�|j|j	�|�|j
d�|�t�zt
j|d|d�}|�dd�|��}Wn$|jyc}zt|�}t�d	|�r^t�d
|�d|�d����d}~ww|�d
�}|��|��|�d|�Wd�dS1s�wYdS)Nrr�r�Tr�r�r�rmz(?i)key.too.weakzGot z trying to connect to z). See https://bugs.python.org/issue36816.r�r�)r�rr�rr��
SSLContext�PROTOCOL_TLS_CLIENTrr�verify_mode�
CERT_REQUIRED�check_hostname�load_verify_locations� CERT_selfsigned_pythontestdotnetrrgrqr�r�r�re�searchri�SkipTestr�r$r�)	rr��selfsigned_pythontestdotnetr�r>r��ssl_err�ssl_err_str�
server_stringrrr�test_networked_good_cert6s<

�����

"�z"HTTPSTest.test_networked_good_certc	Cs�ddl}t�d�t�d��@|�|j�}|�t�t	j
dd|d�}|�|j��}|�
dd�Wd�n1s9wY|�|jjd�Wd�dS1sQwYdS)	Nrr�r�r�r�r�rmr�)r�rr�rr�r�r�r��CERT_localhostrrgrr�rqrrr�r�)rr�r�r>r�rrr�test_networked_bad_certWs

�"�z!HTTPSTest.test_networked_bad_certcCslddl}|�t�}t�d|j�}|�|j��}|�dd�Wd�n1s'wY|�	|j
jd�dS)Nr�	localhostr�rmr�)r�r�r�rrgrrr�rqrrr�r�)rr�r�r>r�rrr�test_local_unknown_certcs
�z!HTTPSTest.test_local_unknown_certcCsxddl}|�t�}|�|j�}|�t�tjd|j|d�}|�	|j
�|�dd�|��}|�	|j
�|�
|jd�dS)Nrr�r�r��/nonexistentr)r�r�r�r�r�r�rrgrr�r$rqr�rrr��rr�r�r�r>r�rrr�test_local_good_hostnamels

z"HTTPSTest.test_local_good_hostnamecCs2ddl}|�t�}|�|j�}|�t�tjd|j|d�}|�	|j
��|�dd�Wd�n1s4wYt�
dtf��tjd|j|dd�}Wd�n1sUwY|�	|j
��|�dd�Wd�n1sqwYd	|_t�
dtf��tjd|j|d	d�}Wd�n1s�wY|�dd
�|��}|��|��|�|jd�d	|_tjd|j|d�}|�dd
�|��}|�|jd�|��|��t�
dtf��tjd|j|dd�}Wd�n1s�wY|�	|j
��|�dd�Wd�dS1�swYdS)Nrr�r�r�rmr}T)r�r�Fr�r)r�r��CERT_fakehostnamer�r�r�rrgrr�CertificateErrorrqr�check_warnings�DeprecationWarningr�r�r$rrr�r�rrr�test_local_bad_hostnameysT

�
���
��
��$�z!HTTPSTest.test_local_bad_hostnamergz)http.client.HTTPSConnection not availablecCr2)Nr3)r4)zwww.python.org:443r6r�)r8r6r�)r6r6r�)r9r5r�)r:r5r�)rrr;rgrrrrr<rrrrA�s
�zHTTPSTest.test_host_portcCs�ddl}|js|�d�t�dd�}|�|jj�|�|j	�}|�
|j�tjdd|d�}|�|j|�|�
|jj�t�
��t�ddt�tjdd|td�}Wd�n1sZwY|�|jj�dS)	NrzTLS 1.3 support requiredr�r�r��ignorez5key_file, cert_file and check_hostname are deprecated)r��	cert_file)r��HAS_TLSv1_3r�rrgr��_context�post_handshake_authr�r�r�assertIs�warnings�catch_warnings�filterwarningsr�r�)rr�r>r�rrr�test_tls13_pha�s&

�
��zHTTPSTest.test_tls13_phaN)r1r2r3r�r�r�r�r�r�system_must_validate_certr�r�r�r�r�r�rirjrYrrAr�rrrrr�s$

!	
*�
r�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�RequestBodyTestz3Test cases where a request includes a message body.cCs,t�d�|_td�|j_|_|j|j_dS)NrJr})rrnrurror(rrrr��szRequestBodyTest.setUpcCs(t�|jj�}|��t�|�}||fSr+)r4r5rorrErr�r�f�messagerrr�get_headers_and_fp�s
z"RequestBodyTest.get_headers_and_fpc	Cs�ddgdfdf}|D]S\}}|�|��Bt�d�|_td�|j_|_|j�dd|�|��\}}|�d	|�|�d
|�|�	|�
d�d�|�	||���Wd�n1sXwYq
dS)
Nr��bar�3
foo
3
bar
0

))r�r�r�rJr}r~r�zContent-Typer�r�r�)r�rrnrurrorqr�r�rr�getrA)rr�rvr�r�r�rrr�test_list_body�s 
����zRequestBodyTest.test_list_bodycCsL|j�dddddi�|��\}}|�d|�d��|�dt|����dS)Nr~r�rvr��42r�r+)rurqr�rrr�r]rA�rr�r�rrr�test_manual_content_length�s�z*RequestBodyTest.test_manual_content_lengthcC�`|j�ddd�|��\}}|�d|���|�|���|�d|�d��|�d|���dS)Nr~r�rv�
text/plain�4r�sbody�	rurqr�rr�get_content_typerp�get_charsetr�rAr�rrr�test_ascii_body��zRequestBodyTest.test_ascii_bodycCr�)Nr~r�ubodyÁr��5r��body�r�r�rrr�test_latin1_bodyr�z RequestBodyTest.test_latin1_bodycCs`|j�ddd�|��\}}|�d|���|�|���|�d|�d��|�d|���dS)Nr~r�r�r�r�r�r�r�rrr�test_bytes_bodyr�zRequestBodyTest.test_bytes_bodycCs�|�tjtj�ttjddd��
}|�d�Wd�n1s wYttjdd��?}|j�dd|�|��\}}|�	d|�
��|�|���|�|�
d��|�	d	|�
d
��|�	d|���Wd�dS1snwYdS)Nr�r�)�encodingrvr~r�r�r�r�ztransfer-encodings4
body
0

)r�r�unlink�TESTFNrT�writerurqr�rrr�rpr�r�rAr�rrr�test_text_file_bodys�"�z#RequestBodyTest.test_text_file_bodycCs�|�tjtj�ttjd��
}|�d�Wd�n1swYttjd��=}|j�dd|�|��\}}|�	d|�
��|�|���|�	d|�
d��|�d	|�|�	d
|���Wd�dS1siwYdS)N�wbr�r r~r�r�r�r�r�s5
body�
0

)r�rr�r�rTr�rurqr�rrr�rpr�r�r�rAr�rrr�test_binary_file_bodys�"�z%RequestBodyTest.test_binary_file_bodyN)
r1r2r3rHr�r�r�r�r�r�r�r�r�rrrrr��s	r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�HTTPResponseTestcCs&d}t|�}t�|�|_|j��dS)NzXHTTP/1.1 200 Ok
My-Header: first-value
My-Header:                 second-value

Text)rrr�r�r�)rrvrorrrr�/szHTTPResponseTest.setUpcCs6|j�d�}|�|d�|j�dd�}|�|d�dS)Nz	My-Headerzfirst-value, second-valuezsome default�r�r�rr�rrtrrr�test_getting_header6sz$HTTPResponseTest.test_getting_headercCs|j�dd�}|�|d�dS)N�No-Such-Headerz
default-valuer�r�rrr�3test_getting_nonexistent_header_with_string_default=szDHTTPResponseTest.test_getting_nonexistent_header_with_string_defaultcCs<|j�dddg�}|�|d�|j�dd�}|�|d�dS)Nr��default�valueszdefault, values)r�r�r�r�rrr�5test_getting_nonexistent_header_with_iterable_defaultAszFHTTPResponseTest.test_getting_nonexistent_header_with_iterable_defaultcCs|j�d�}|�|d�dS)Nr�r�r�rrr�/test_getting_nonexistent_header_without_defaultHsz@HTTPResponseTest.test_getting_nonexistent_header_without_defaultcCs |jjddd�}|�|d�dS)Nr�r�)r�r�r�rrr�test_getting_header_defaultintLsz/HTTPResponseTest.test_getting_header_defaultintN)	r1r2r3r�r�r�r�r�r�rrrrr�-sr�c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TunnelTestscCs*d}d|_t�|j�|_|�|�|j_dS)Nz:HTTP/1.0 200 OK

HTTP/1.1 200 OK
Content-Length: 42

z	proxy.com)rrrnrurO)r�
response_textrrrr�Qs
�zTunnelTests.setUpcCs|j��dSr+)rur$r(rrrrc[szTunnelTests.tearDowncsd�fdd�	}|S)Ncst�|d|dd�S)Nrr)rr)r)r�rore�r�rrrN_sz9TunnelTests._create_connection.<locals>.create_connection)NNr)rr�rNrr�rrO^szTunnelTests._create_connectioncCs�d}d}ddi}|jj|||d�|j�ddd�|�|jjj|j�|�|jjjtj�|�|jj	|�|�|jj
|�|�|jj|�dS)	N�destination.comi�"z
User-Agentz!Mozilla/5.0 (compatible, MSIE 11))rrwr�rmr})rur�rqrrrorrr�	HTTP_PORT�_tunnel_host�_tunnel_port�_tunnel_headers)rr��tunnel_port�tunnel_headersrrr�!test_set_tunnel_host_port_headerscs
�z-TunnelTests.test_set_tunnel_host_port_headerscCs |j��|�t|jjd�dS)Nr�)rurSr�RuntimeErrorr�r(rrr�&test_disallow_set_tunnel_after_connectps
�z2TunnelTests.test_disallow_set_tunnel_after_connectcCs�|j�d�|j�ddd�|�|jjj|j�|�|jjjtj�|�	d|jjj
�|�d|jjj
�|�	d|jjj
�|�d|jjj
�dS)	Nr�r�rmr}�CONNECT destination.comsHost: destination.com:None�Host: destination.comsHost: proxy.com)rur�rqrrrorrrr�r�rr�r(rrr�test_connect_with_tunnelvsz$TunnelTests.test_connect_with_tunnelcCs�tj�|jd��}|j�d�|j��|j�dd�Wd�n1s%wY|��|jt	|j
�dd|j
��d�|j
d	dd	}|�d
|�|j|�
d�d|��d�dS)
z8Regresstion test for https://bugs.python.org/issue43332.rXr�r�rmNrz!unexpected number of send calls: )r�rr�rkzunexpected proxy data sent )r�patch�objectrur�rSrq�
assert_calledr�r]�
mock_callsr�r�r�)r�	mock_send�proxy_setup_data_sentrrr�0test_tunnel_connect_single_send_connection_setup�s 
�

�
�z<TunnelTests.test_tunnel_connect_single_send_connection_setupcCsl|j�d�|j�ddd�|�|jjj|j�|�|jjjtj�|�	d|jjj
�|�	d|jjj
�dS)Nr�r~rmr}r�r�)rur�rqrrrorrrr�r�rr(rrr�test_connect_put_request�sz$TunnelTests.test_connect_put_requestcCs�d}d�|�}|j�d�|�|�|j_|j�d�t���}|j�ddd�Wd�n1s1wY|���	�}|�
d�|�|�dS)	Nz
X-Dummy: 1zHTTP/1.0 200 OK
{}

rr�r~rmr}z
header: {})r�ru�set_debuglevelrOr�rr�rqr�r�r�)r�expected_headerr�r�r�rrr�test_tunnel_debuglog�s

�z TunnelTests.test_tunnel_debuglogN)r1r2r3r�rcrOr�r�rrrrrrrrr�Ps


r��__main__r�)�	verbosity)<r;�httprrr4r��osrYr�r�r�r�rir�TestCasernr�test.supportrrr�path�dirnamerU�herer�r�r�r�rvru�chunk_extensionrwr�rrxr�rr7r5r=rnrIrXr�r�r	r�rrrr\rkrvr�r�r�r�r1�mainrrrr�<module>s|�!2}"U.HL`#
Z�

Youez - 2016 - github.com/yon3zu
LinuXploit