403Webshell
Server IP : 118.27.122.248  /  Your IP : 216.73.216.15
Web Server : Apache
System : Linux web0264.sh.tyo1 4.18.0-553.79.1.lve.el7h.x86_64 #1 SMP Wed Oct 15 16:34:46 UTC 2025 x86_64
User : c9415830 ( 11735)
PHP Version : 8.4.17
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python36/lib64/python3.6/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python36/lib64/python3.6/test/__pycache__/test_httplib.cpython-36.opt-2.pyc
3

�
�^x#�@s�ddlZddlmZddlZddlZddlZddlZddlZddlZej	Z	ddl
mZejj
e�Zejjed�Zejjed�Zejjed�ZdZdZd	Zd
ZdedZd
ZdZejZGdd�d�ZGdd�de�ZGdd�dej�ZGdd�dej �Z!Gdd�de	�Z"Gdd�de	�Z#Gdd�de	�Z$Gdd�de	�Z%Gdd�de%�Z&Gd d!�d!�Z'Gd"d#�d#e	�Z(Gd$d%�d%e	�Z)Gd&d'�d'e	�Z*Gd(d)�d)e	�Z+Gd*d+�d+e	�Z,Gd,d-�d-e	�Z-Gd.d/�d/e	�Z.Gd0d1�d1e	�Z/e0d2k�r�ej1d3d4�dS)5�N)�client)�supportzkeycert.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
�0z
zX-Dummy: foo
X-Dumm2: bar
c@sHeZdZejddfdd�Zdd�Zddd�Zdd	�Zd
d�Z	dd
�Z
dS)�
FakeSocketNcCsBt|t�r|jd�}||_||_d|_d|_d|_||_||_	dS)N�ascii�rF)
�
isinstance�str�encode�text�	fileclass�data�
sendall_calls�file_closed�host�port)�selfrrrr�r�1/opt/alt/python36/lib64/python3.6/test_httplib.py�__init__-s

zFakeSocket.__init__cCs |jd7_|j|7_dS)N�)rr
)rr
rrr�sendall8szFakeSocket.sendallcCs6|dkr|dkrtj��|j|j�|_|j|j_|jS)N�r�rb)rZUnimplementedFileModerr�file�
file_close�close)r�mode�bufsizerrr�makefile<s

zFakeSocket.makefilecCs
d|_dS)NT)r)rrrrrDszFakeSocket.file_closecCsdS)Nr)rrrrrGszFakeSocket.closecCsdS)Nr)r�levelZoptname�valuerrr�
setsockoptJszFakeSocket.setsockopt)N)�__name__�
__module__�__qualname__�io�BytesIOrrrrrr"rrrrr,s
rc@s$eZdZdd�Zdd�Zdd�ZdS)�EPipeSocketcCstj||�||_dS)N)rr�pipe_trigger)rrr)rrrrOszEPipeSocket.__init__cCs(|j|krttjd��|j|7_dS)NZgotcha)r)�OSError�errnoZEPIPEr
)rr
rrrrTs
zEPipeSocket.sendallcCsdS)Nr)rrrrrYszEPipeSocket.closeN)r#r$r%rrrrrrrr(Msr(c@s eZdZddd�Zd	dd�ZdS)
�NoEOFBytesIOrcCs"tjj||�}|dkrtd��|S)Nrzcaller tried to read past EOF)r&r'�read�AssertionError)r�nr
rrrr-bszNoEOFBytesIO.readNcCs"tjj||�}|dkrtd��|S)Nrzcaller tried to read past EOF)r&r'�readliner.)rZlengthr
rrrr0hszNoEOFBytesIO.readline���)r1)N)r#r$r%r-r0rrrrr,\s
r,cs0eZdZ�fdd�Z�fdd�Zdd�Z�ZS)�FakeSocketHTTPConnectioncs$d|_t�jd�||_|j|_dS)Nrzexample.com)�connections�superr�fake_socket_args�create_connection�_create_connection)r�args)�	__class__rrrqsz!FakeSocketHTTPConnection.__init__cs|jd7_t�j�S)Nr)r3r4�connect)r)r9rrr:wsz FakeSocketHTTPConnection.connectcOs
t|j�S)N)rr5)r�pos�kwrrrr6|sz*FakeSocketHTTPConnection.create_connection)r#r$r%rr:r6�
__classcell__rr)r9rr2nsr2c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�HeaderTestscCs�Gdd�dt�}xzdD]r}xldD]d}tjd�}td	�|_|�|_d
}i}|r\tt|��||<|jdd||�|j	|jj
|j�d
�q WqWdS)Nc@seZdZdd�Zdd�ZdS)z;HeaderTests.test_auto_headers.<locals>.HeaderCountingBuffercSs
i|_dS)N)�count)rrrrr�szDHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.__init__cSsX|jd�}t|�dkrH|djd�j�}|jj|d�|j|d7<tj||�dS)N�:rrr)�split�len�decode�lowerr?�
setdefault�list�append)r�item�kvZlcKeyrrrrG�s
zBHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.appendN)r#r$r%rrGrrrr�HeaderCountingBuffer�srJTF�Content-length�Host�Accept-encodingzexample.comZblahblahblahZspamspamspam�POST�/r)TF)rKrLrM)rFr�HTTPConnectionr�sock�_bufferr	rB�request�assertEqualr?rD)rrJZexplicit_header�header�conn�body�headersrrr�test_auto_headers�s



zHeaderTests.test_auto_headerscCsvGdd�dt�}d}d}xZtj||�D]J\}}tjd�}td�|_|�|_|j|d|�|j	|jj
d	d
j|��q&Wd}xN|D]F}tjd�}td�|_|�|_|j|dd�|j	|jj
ddj|��q~WxN|D]F}tjd�}td�|_|�|_|j|dd�|j	|jj
d	d
j|��q�WxXtj||�D]H}tjd�}td�|_|�|_|j|dd�|j	|jj
dd
j|���q&WdS)Nc@seZdZdd�Zdd�ZdS)z?HeaderTests.test_content_length_0.<locals>.ContentLengthCheckercSstj|�d|_dS)N)rFr�content_length)rrrrr�s
zHHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.__init__cSsF|jdd�}t|�dkr6|dj�dkr6|dj�|_tj||�dS)Nr@rrscontent-length)rArBrD�striprZrFrG)rrHrIrrrrG�szFHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.appendN)r#r$r%rrGrrrr�ContentLengthChecker�sr\��PUTrN�PATCHzexample.comrO�0z%Header Content-Length incorrect on {}�GET�CONNECT�DELETE�HEAD�OPTIONS�TRACEz.Header Content-Length set for empty body on {}� �1)Nr])r^rNr_)rarbrcrdrerf)
rF�	itertools�productrrPrrQrRrSrTrZ�format�chain)rr\ZbodiesZmethods_with_body�methodrWrVZmethods_without_bodyrrr�test_content_length_0�sH









z!HeaderTests.test_content_length_0cCs�tjd�}td�|_|jdd�|jdd�|jd|j�|jdd�|jd	|j�|jd
d�|jd|j�|jd
d�|jd|j�|jddd�|jd|j�|jdd�|jd|j�|jdd�|jd|j�|jdd�|jd|j�|jdd�|jd|j�|jd d!�|jd"|j�|jd#d$�|jd%|j�|jd&d$�|jd'|j�|jd(d$�|jd)|j�|jd*d$�|jd+|j�dS),Nzexample.comrarOzContent-length�*sContent-length: 42ZFooz bar s
Foo:  bar ZBarz	baz	s
Bar: 	baz	Z
AuthorizationzBearer mytokensAuthorization: Bearer mytokenZ
IterHeaderZIterAZIterBsIterHeader: IterA
	IterBZLatinHeader��sLatinHeader: �Z
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)rrPrrQ�
putrequest�	putheader�assertInrR)rrVrrr�test_putheader�s>

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

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

z
[2001:102A::])rrPrrQrS�
assertTruer
�
startswith)r�expectedrVrQrrr�test_ipv6host_headers

z HeaderTests.test_ipv6host_headercCsFd}t|�}tj|�}|j�|j|jd�d�|j|jd�d�dS)Nz4HTTP/1.1 200 OK
First: val
: nval
Second: val

ZFirst�valZSecond)rr�HTTPResponse�beginrT�	getheader)rrWrQ�resprrr�!test_malformed_headers_coped_withs
z-HeaderTests.test_malformed_headers_coped_withcCs2dttdd��dttdd��d}t|�}tj|�}|j�|j|jd	�d
�|j|jd	d
�|j|jd�d�|j|jdd�d
j	t
ttdd���}|j|jd�|�|j|jd|�|j|jd��|j
d|j�xJ|jd�|jdfD]2}|j|jd��|j
d|�|j|jd���q�WdS)Ns0HTTP/1.1 200 OK
!#$%&'*+-.^_`|~: value
VCHAR: �!�~rs
obs-text: ��sM
obs-fold: text
 folded with space
	folded with tab
Content-Length: 0

zContent-Lengthrz!#$%&'*+-.^_`|~r!r]ZVCHARzobs-textzobs-foldrz folded with spacezfolded with tab��r�)�bytes�rangerrrzr{rTr|�msg�join�map�chrZassertIsNotNonersrurv�endswith)rrWrQr}ZvcharZfoldedrrr�test_parse_all_octetss"(
z!HeaderTests.test_parse_all_octetscCsxtjd�}td�|_|jdd�d(}xN|D]F\}}|j||f��*|jtd��|j||�WdQRXWdQRXq*WdS))Nzexample.comr]rarO�
Invalid
Name�
ValidValue�Invalid
Name�Invalid
Name�

InvalidName�
InvalidName�
InvalidName� InvalidName�	InvalidName�Invalid:Name�:InvalidName�	ValidName�Invalid
Value�
Invalid
Value�
Invalid
Value�InvalidValue
�
InvalidValue
�
InvalidValue
zInvalid header�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�r��r�r��r�r�)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�)	rrPrrQrq�subTest�assertRaisesRegex�
ValueErrorrr)rrV�cases�namer!rrr�test_invalid_headers<s.

z HeaderTests.test_invalid_headersc
Csvd}t|�}tj|dd�}tj��}|j�WdQRX|j�j�}|j|dd�|j|dd�|j|dd�dS)	Ns*HTTP/1.1 200 OK
First: val
Second: val
r)Z
debuglevelrzreply: 'HTTP/1.1 200 OK\r\n'zheader: First: val�zheader: Second: val)	rrrzr�captured_stdoutr{�getvalue�
splitlinesrT)rrWrQr}�output�linesrrr�test_headers_debuglevelZs
z#HeaderTests.test_headers_debuglevelN)r#r$r%rYrnrtrxr~r�r�r�rrrrr>sB"
r>c@sJeZdZdZdd�Zdd�Zdd�Zdd	�Zddd�Zd
d�Z	dd�Z
dS)�TransferEncodingTestsIt's just a flesh woundcCsbtjd�}td�|_|jdd�|j|j�dd�|j|jj�\}}}|j	|�}|j
||j�dS)Nzexample.comrrNrOT)�encode_chunked)rrPrrQrqZ
endheaders�
_make_body�_parse_requestr
�_parse_chunkedrT�
expected_body)rrV�_rWrrr�test_endheaders_chunkedms


z,TransferEncodingTest.test_endheaders_chunkedcCsvtjd�}td�|_|jdd|j�ddi�|j|jj�\}}}|jddd	�|j	�D��|j
|dd�|j
||j�tjd�}td�|_|jdd|jjd
�ddi�|j|jj�\}}}|jddd	�|j	�D��|j
|dd�|j
||j�tjd�}td�|_|jddddid
|j�d�|j|jj�\}}}|jddd	�|D��|j
|dd�|j
|j
|�|j�dS)Nzexample.comrrNrOzTransfer-Encoding�chunkedzcontent-lengthcSsg|]}|j��qSr)rD)�.0�krrr�
<listcomp>�sz>TransferEncodingTest.test_explicit_headers.<locals>.<listcomp>zlatin-1cSsg|]}|j��qSr)rD)r�r�rrrr��sz
gzip, chunkedT)rXr�rWcSsg|]}|j��qSr)rD)r�r�rrrr��s)rrPrrQrSr�r�r
�assertNotIn�keysrTr�rCr�)rrVr�rXrWrrr�test_explicit_headersws6






z*TransferEncodingTest.test_explicit_headerscCs�x�d
D]�}tjd�}td�|_|jdd|j|d��|j|jj�\}}}|j|�}|j	||j
�|j	|dd	�|jd
dd�|D��qWdS)NFTzexample.comrrNrO)�empty_lineszTransfer-Encodingr�zcontent-lengthcSsg|]}|j��qSr)rD)r�r�rrrr��sz5TransferEncodingTest.test_request.<locals>.<listcomp>)FT)rrPrrQrSr�r�r
r�rTr�r�)rr�rVr�rXrWrrr�test_request�s



z!TransferEncodingTest.test_requestcCsltjd�}td�|_|jddf�|j|jj�\}}}|j|dd�|jddd	�|D��|j|d
�dS)Nzexample.comrrNrOzTransfer-Encodingr�zcontent-lengthcSsg|]}|j��qSr)rD)r�r�rrrr��sz8TransferEncodingTest.test_empty_body.<locals>.<listcomp>s0

)	rrPrrQrSr�r
rTr�)rrVr�rXrWrrr�test_empty_body�s

z$TransferEncodingTest.test_empty_bodyFccsZ|jjd�}xHt|�D]<\}}|r0|dr0dV|t|�dkrL|dVq|VqWdS)N� r�rr)r�rA�	enumeraterB)rr�r��idx�linerrrr��szTransferEncodingTest._make_bodycCs�|jd�}|d}i}d}xZ|t|�krtt||�dkrt||jd�\}}|jd�j�}|jd�j�||<|d7}qW||dj||dd��fS)Ns
rrr@zlatin-1)rArBrCr[r�)rr
r�rSrXr/�keyryrrrr��s
z#TransferEncodingTest._parse_requestcCs�g}i}d}|jd�}xd|||d�\}}t|d�}|dkrH|d7}P|j|t|��|j|�|d7}|t|�krPqWdj|�S)Nrs
r��rr)rA�intrTrBrGr�)rr
rW�trailersr/r��size�chunkrrrr��s 


z#TransferEncodingTest._parse_chunkedN)F)r#r$r%r�r�r�r�r�r�r�r�rrrrr�js
&


r�c@sleZdZdd�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.dYS)Z�	BasicTestcCs�d}t|�}tj|�}|j�|j|jd�d�|j|j��|j|j�|j|j�d�|j	|j��|j|j�|j
�|j	|j�d}t|�}tj|�}|jtj|j�dS)NzHTTP/1.1 200 Ok

TextrrsTextzHTTP/1.1 400.100 Not Ok

Text)
rrrzr{rTr-�assertFalse�isclosed�closedrur�assertRaises�
BadStatusLine)rrWrQr}rrr�test_status_lines�s 

zBasicTest.test_status_linescCstjd�}|jt|�d�dS)Nr]zBadStatusLine("''",))rr�rT�repr)r�excrrr�test_bad_status_reprs
zBasicTest.test_bad_status_reprcCs�d}t|�}tj|�}|j�|j|jd�d�|j|j��|j|jd�d�|j|j��|j|j	�|j
�|j|j	�dS)Nz*HTTP/1.1 200 Ok
Content-Length: 4

Textr�sTesxt)rrrzr{rTr-r�r�rur�r)rrWrQr}rrr�test_partial_readss
zBasicTest.test_partial_readscCs~d}t|�}tj|�}|j�|j|j�d�|j|j��|j|j�d�|j	|j��|j|j
�|j�|j	|j
�dS)Nz4HTTP/1.1 200 Ok
Content-Length: 13

Text
AnothersText
sAnother)rrrzr{rTr0r�r�r-rur�r)rrWrQr}rrr�test_mixed_readss
zBasicTest.test_mixed_readscCs�d}t|�}tj|�}|j�td�}|j|�}|j|d�|jt|�d�|j|j	��|j|�}|j|d�|jt|�d�|j
|j	��|j|j�|j�|j
|j�dS)Nz*HTTP/1.1 200 Ok
Content-Length: 4

Textr�sTesxt)
rrrzr{�	bytearray�readintorTr�r�r�rur�r)rrWrQr}�br/rrr�test_partial_readintos"s 


z BasicTest.test_partial_readintoscCs�d}t|�}tj|�}|j�|j|jd�d�|j|j��|j|jd�d�|j|jd�d�|j|j��|j|j	�|j
�|j|j	�dS)NzHTTP/1.1 200 Ok

Textr�sTesxtrr)rrrzr{rTr-r�r�rur�r)rrWrQr}rrr�$test_partial_reads_no_content_length6s
z.BasicTest.test_partial_reads_no_content_lengthcCs�d}t|�}tj|�}|j�td�}|j|�}|j|d�|jt|�d�|j|j	��|j|�}|j|d�|jt|�d�|j|�}|j|d�|j
|j	��dS)NzHTTP/1.1 200 Ok

Textr�sTesxtr)rrrzr{r�r�rTr�r�r�ru)rrWrQr}r�r/rrr�(test_partial_readintos_no_content_lengthFs

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

Textr�sTesxtrr)	rrrzr{rTr-r�r�ru)rrWrQr}rrr�"test_partial_reads_incomplete_bodyYs
z,BasicTest.test_partial_reads_incomplete_bodycCs�d}t|�}tj|�}|j�td�}|j|�}|j|d�|jt|�d�|j|j	��|j|�}|j|d�|jt|�d�|j|�}|j|d�|j
|j	��|j|j�|j�|j
|j�dS)Nz+HTTP/1.1 200 Ok
Content-Length: 10

Textr�sTesxtr)
rrrzr{r�r�rTr�r�r�rur�r)rrWrQr}r�r/rrr�&test_partial_readintos_incomplete_bodyfs$



z0BasicTest.test_partial_readintos_incomplete_bodycCs^xdD]}|jtjtj|�qWx8dD]0\}}}tj|�}|j||j�|j||j�q&WdS)N�www.python.org:abc�user:password@www.python.org�[fe80::207:e9ff:fe9b]:8000�fe80::207:e9ff:fe9b�@�www.python.org:80�www.python.org�P�www.python.org:�[fe80::207:e9ff:fe9b]�[fe80::207:e9ff:fe9b]:)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�r�
InvalidURLrPrTrr)r�hp�h�p�crrr�test_host_port|s

zBasicTest.test_host_portcCs<d}d}t|�}tj|�}|j�|jd�}|j||�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)rrrzr{r|rT)rrZhdr�srZcookiesrrr�test_response_headers�s

zBasicTest.test_response_headerscCs6tdt�}tj|dd�}|j�|j�r2|jd�dS)Nz*HTTP/1.1 200 OK
Content-Length: 14432

rd)rmz)Did not expect response from HEAD request)rr,rrzr{r-�fail)rrQr}rrr�test_read_head�szBasicTest.test_read_headcCsTtdt�}tj|dd�}|j�td�}|j|�dkr@|jd�|jt	|�d�dS)	Nz*HTTP/1.1 200 OK
Content-Length: 14432

rd)rm�rz)Did not expect response from HEAD request�s)
rr,rrzr{r�r�rrTr�)rrQr}r�rrr�test_readinto_head�s
zBasicTest.test_readinto_headcCsRdjdd�ttjd�D��d}d|}t|�}tj|�}|jtjd|j�dS)Nz
css|]}d|VqdS)z
Header%d: fooNr)r��irrr�	<genexpr>�sz2BasicTest.test_too_many_headers.<locals>.<genexpr>rzHTTP/1.1 200 OK
zgot more than \d+ headers)	r�r�rZ_MAXHEADERSrrzr�Z
HTTPExceptionr{)rrXrrrrrr�test_too_many_headers�s

zBasicTest.test_too_many_headerscCsnd}ttd��V}tjd�}t|�}||_|jdd|�|j|jj	|�d|jdt
|��|f�WdQRXdS)Ns_GET /foo HTTP/1.1
Host: example.com
Accept-Encoding: identity
Transfer-Encoding: chunked

rzexample.comraz/fooz%r != %r)�open�__file__rrPrrQrSrur
rvrB)rrwrWrVrQrrr�test_send_file�s
zBasicTest.test_send_filecCs�d}tjd�}td�}||_|j|�|j||j�d|_|jtjd|��|j||j�d|_|jtj	|��|j||j�dS)Ns"this is a test this is only a testzexample.comrr�)
rrPrrQ�sendrTr
�arrayr&r')rrwrVrQrrr�	test_send�s

zBasicTest.test_sendcsXdd��G�fdd�dtj�}d}tjd�}td�}||_|j|��|j|j|�dS)NcssdVdVdVdS)Nr
Zdata_tworrrrrr
�sz/BasicTest.test_send_updating_file.<locals>.datacs eZdZdZ��Zddd�ZdS)z7BasicTest.test_send_updating_file.<locals>.UpdatingFilerrcSs
t|j�S)N)�next�d)rZ	blocksizerrrr-�sz<BasicTest.test_send_updating_file.<locals>.UpdatingFile.readNr1)r1)r#r$r%rrr-r)r
rr�UpdatingFile�srsdatazexample.comr])	r&�
TextIOBaserrPrrQrrTr
)rrrwrVrQr)r
r�test_send_updating_file�s
z!BasicTest.test_send_updating_filecCsLd}dd�}tjd�}td�}||_|jdd|�dd	i�|j|j|�dS)
NsbGET /foo HTTP/1.1
Host: example.com
Accept-Encoding: identity
Content-Length: 11

onetwothreecssdVdVdVdS)NsonestwosthreerrrrrrW�sz&BasicTest.test_send_iter.<locals>.bodyzexample.comr]raz/foozContent-LengthZ11)rrPrrQrSrTr
)rrwrWrVrQrrr�test_send_iter�s
zBasicTest.test_send_itercCs<tjd�}td�|_|jt��|jdd|�WdQRXdS)Nzexample.comr]rN�test)rrPrrQr��	TypeErrorrS)rrVrrr�test_send_type_errors

zBasicTest.test_send_type_errorcCsdt}tttt�}tj|dd�}|j�|j|j	�|�|j
�xdtdd�D]V}tttt�}tj|dd�}|j�|j|j	|�|j	|�|j	�|�|j
�qNWx�d	D]�}tt|�}tj|dd�}|j�z|y|j	�Wn`tjk
�rB}z@|j|j
|�dt|�}|jt|�|�|jt|�|�WYdd}~XnX|jd�Wd|j
�Xq�WdS)
Nra)rmr�r]�foo
zIncompleteRead(%d bytes read)zIncompleteRead expected)r]r)�chunked_expectedr�
chunked_start�
last_chunk�chunked_endrrzr{rTr-rr��IncompleteRead�partialrBr�r	r)rrwrQr}r/�xr
�expected_messagerrr�test_chunkeds2$
"zBasicTest.test_chunkedcCs�t}t|�}td�}tttt�}tj|dd�}|j	�|j
|�}|j|d|�|�|j||�|j�x�t
dd�D]�}tttt�}tj|dd�}|j	�t|�}|j
|d|��}||j
||||��7}||j
||d��7}|j|d|�|�|j||�|j�qxWx�dD]�}	tt|	�}tj|dd�}|j	�z~y|j
|�}Wn`tjk
�r�}z@|j|j|�d	t|�}
|jt|�|
�|jt|�|
�WYdd}~XnX|jd
�Wd|j�X�qWdS)Nr�ra)rmrrrr]�foo
zIncompleteRead(%d bytes read)zIncompleteRead expected)r]r')rrBr�rrr r!rrzr{r�rTrr��
memoryviewr"r#r�r	r)rrwZ	nexpectedr�rQr}r/�mr
r$r%rrr�test_readinto_chunked,sD

"zBasicTest.test_readinto_chunkedcCs�d}t|tt�}tj|dd�}|j�|j|j�d�|j|jd�|j|j	d�|j
|j��|j|j
�|j�|j
|j
�dS)NzEHTTP/1.1 200 OK
Transfer-Encoding: chunked

a
hello world
1
d
rd)rmr���OK)rr r!rrzr{rTr-�status�reasonrur�r�r�r)rrrQr}rrr�test_chunked_headWszBasicTest.test_chunked_headcCs�d}t|tt�}tj|dd�}|j�td�}|j|�}|j|d�|jt	|�d	�|j|j
d�|j|jd�|j|j
��|j|j�|j�|j|j�dS)
NzEHTTP/1.1 200 OK
Transfer-Encoding: chunked

a
hello world
1
d
rd)rmrrrr+r,s)rr r!rrzr{r�r�rTr�r-r.rur�r�r�r)rrrQr}r�r/rrr�test_readinto_chunked_headks
z$BasicTest.test_readinto_chunked_headcCs@td�}tj|dd�}|j�|j|j�d�|j|j��dS)Nz.HTTP/1.1 200 OK
Content-Length: -1

Hello
ra)rmsHello
)rrrzr{rTr-rur�)rrQr}rrr�test_negative_content_length�sz&BasicTest.test_negative_content_lengthcCs�td�}tj|dd�}|j�y|j�Wn`tjk
r�}zB|j|jd�|jt|�d�|jt	|�d�|j
|j��WYdd}~XnX|jd�dS)Nz.HTTP/1.1 200 OK
Content-Length: 10

Hello
ra)rmsHello
z-IncompleteRead(7 bytes read, 3 more expected)zIncompleteRead expected)
rrrzr{r-r"rTr#r�r	rur�r)rrQr}r
rrr�test_incomplete_read�s

 zBasicTest.test_incomplete_readcsZtdd�}tjd��|�_|jt�fdd���j�}|jd|j�|jd|j	d��dS)	NzgHTTP/1.0 401 Authorization Required
Content-type: text/html
WWW-Authenticate: Basic realm="example"
sContent-Lengthzexample.comcs�jddd�S)Nr^z/urlrW)rSr)rVrr�<lambda>�sz&BasicTest.test_epipe.<locals>.<lambda>i�zBasic realm="example"zwww-authenticate)
r(rrPrQr�r*�getresponserTr-r|)rrQr}r)rVr�
test_epipe�s
zBasicTest.test_epipecCs8dddd}tjt|��}|jtjtjf|j�dS)NzHTTP/1.1 200 Okr�iz
)rrzrr��LineTooLongr�r{)rrWr}rrr�test_overflowing_status_line�sz&BasicTest.test_overflowing_status_linecCs2dddd}tjt|��}|jtj|j�dS)NzHTTP/1.1 200 OK
X-Foo: barriz

)rrzrr�r6r{)rrWr}rrr�test_overflowing_header_line�sz&BasicTest.test_overflowing_header_linecCs:dddd}tjt|��}|j�|jtj|j�dS)Nz/HTTP/1.1 200 OK
Transfer-Encoding: chunked

riza
hello world
0

)rrzrr{r�r6r-)rrWr}rrr�test_overflowing_chunked_line�sz'BasicTest.test_overflowing_chunked_linecCs`d}t|�}tj|�}|j�|j|j�d�|j|j��|j|j	�|j
�|j|j	�dS)NzHTTP/1.1 200 Okr)rrrzr{rTr-rur�r�r�r)rrWrQr}rrr�test_early_eof�s
zBasicTest.test_early_eofcsntjd�}d�G�fdd�dtj�}||_td�|_|jdd�|jtj|j	�|j
�j�|j
|jj�dS)Nzexample.comcseZdZ�fdd�ZdS)z+BasicTest.test_error_leak.<locals>.Responsecs|�tjj|f|�|�dS)N)rrzr)rr;r<)�responserrr�sz4BasicTest.test_error_leak.<locals>.Response.__init__N)r#r$r%rr)r;rr�Response�sr<zInvalid status linerarO)
rrPrzZresponse_classrrQrSr�r�r4rur�r)rrVr<r)r;r�test_error_leak�s

zBasicTest.test_error_leakcCsRd}td}tt|tt�}tj|dd�}|j�|j|j	�|�|j
�dS)Nz3;foo=bar
zabc
sabcra)rmz3;foo=bar
abc
)rrr�last_chunk_extendedr!rrzr{rTr-r)rZextrarwrQr}rrr�test_chunked_extension�sz BasicTest.test_chunked_extensioncCsBt}ttt�}tj|dd�}|j�|j|j�|�|j	�dS)Nra)rm)
rrrr rrzr{rTr-r)rrwrQr}rrr�test_chunked_missing_end�sz"BasicTest.test_chunked_missing_endcCs\t}ttttt�}tj|dd�}|j�|j	|j
�|�|j	|jj
�d�|j�dS)Nra)rmr)
rrrr r�r!rrzr{rTr-rr)rrwrQr}rrr�test_chunked_trailers�szBasicTest.test_chunked_trailerscCsjt}d}ttttt|�}tj|dd�}|j�|j	|j
�|�|j	|jj
�|jd��|j
�dS)N�	extradatara)rmr)rrrr r�r!rrzr{rTr-rr
r)rrwrBrQr}rrr�test_chunked_sync�szBasicTest.test_chunked_synccCs\d}d}td||�}tj|dd�}|j�|j|j�|�|j|jj�|�|j�dS)Ns	extradatas
Hello123
s'HTTP/1.1 200 OK
Content-Length: 10

ra)rm)rrrzr{rTr-rr)rrBrwrQr}rrr�test_content_length_syncsz"BasicTest.test_content_length_synccCs`d}d}td||�}tj|dd�}|j�|j|jd�|g�|j|jj�|�|j�dS)Ns	extradatas
Hello123
s'HTTP/1.1 200 OK
Content-Length: 10

ra)rmi�)	rrrzr{rT�	readlinesrr-r)rrBrwrQr}rrr�test_readlines_content_lengthsz'BasicTest.test_readlines_content_lengthcCs^d}d}td||�}tj|dd�}|j�|j|jd�|�|j|jj�|�|j�dS)Ns	extradatas
Hello123
s'HTTP/1.1 200 OK
Content-Length: 10

ra)rmi�)	rrrzr{rT�read1rr-r)rrBrwrQr}rrr�test_read1_content_length"sz#BasicTest.test_read1_content_lengthcCspd}d}td||�}tj|dd�}|j�|j|jd�|�|j|jd�d�|j|jj�|�|j�dS)Ns	extradatas
Hello123
s'HTTP/1.1 200 OK
Content-Length: 10

ra)rm�
r)	rrrzr{rTr0rr-r)rrBrwrQr}rrr�"test_readline_bound_content_length-sz,BasicTest.test_readline_bound_content_lengthcCsvd}d}td|d|�}tj|dd�}|j�|j|jd�|d�|j|j�|�|j|jj�|�|j�dS)	Ns	extradatas
Hello123
s'HTTP/1.1 200 OK
Content-Length: 30

�ra)rm�r�)	rrrzr{rTrGr-rr)rrBrwrQr}rrr�test_read1_bound_content_length9sz)BasicTest.test_read1_bound_content_lengthcstjd�}tjtjtjtj��|j�j��jt	df��j
�d���fdd�}|j|d�}|j�|j|j
td��tj�j��}|jdd�|j�}z>|j|jtj�tj|j�d	�}z|jd
�Wd|j�XWd|j�|j�X|j
�|j�d
�dS)N�	threadingrcsb�j�\}}|�H|jd��2}x|j�}|jd�s Pq W|jd�|j��WdQRXWdQRXdS)Nrs
s'HTTP/1.1 200 Connection established

)Zacceptrr0�rstriprr-)rV�address�readerr�)�result�servrr�
run_serverPs

z2BasicTest.test_response_fileno.<locals>.run_server)�targetrrbz
dummy:1234)�filenos
proxied data
)r�
import_module�socket�AF_INET�SOCK_STREAMZIPPROTO_TCP�
addCleanuprZbind�HOST�listenZThread�startr��floatrrP�getsocknamerSr4rTr-r,rVr�detach)rrNrTZthreadrVr;rr)rRrSr�test_response_filenoEs0

zBasicTest.test_response_filenocCs4Gdd�dtj�}|d�}td�|_|jdd�dS)Nc@seZdZdd�ZdS)zRBasicTest.test_putrequest_override_domain_validation.<locals>.UnsafeHTTPConnectioncSsdS)Nr)r�urlrrr�_validate_pathuszaBasicTest.test_putrequest_override_domain_validation.<locals>.UnsafeHTTPConnection._validate_pathN)r#r$r%rdrrrr�UnsafeHTTPConnectiontsrezexample.comr]raz/)rrPrrQrq)rrerVrrr�*test_putrequest_override_domain_validationos
z4BasicTest.test_putrequest_override_domain_validationcCs8Gdd�dtj�}|d�}td�|_|jdddd�dS)	Nc@seZdZdd�ZdS)zPBasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnectioncSsdS)Nr)rrcrrr�_validate_host~sz_BasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnection._validate_hostN)r#r$r%rgrrrrre}srez
example.com
r]rarOr)Z	skip_host)rrPrrQrq)rrerVrrr�(test_putrequest_override_host_validation|s
z2BasicTest.test_putrequest_override_host_validationcCs4Gdd�dtj�}|d�}td�|_|jdd�dS)Nc@seZdZdd�ZdS)zIBasicTest.test_putrequest_override_encoding.<locals>.UnsafeHTTPConnectioncSs
|jd�S)Nzutf-8)r
)rZstr_urlrrr�_encode_request�szYBasicTest.test_putrequest_override_encoding.<locals>.UnsafeHTTPConnection._encode_requestN)r#r$r%rirrrrre�srezexample.comr]rau/☃)rrPrrQrq)rrerVrrr�!test_putrequest_override_encoding�s
z+BasicTest.test_putrequest_override_encodingN)/r#r$r%r�r�r�r�r�r�r�r�r�rrrr	rrrrrrr&r*r/r0r1r2r5r7r8r9r:r=r?r@rArCrDrFrHrJrMrbrfrhrjrrrrr��sX

	 +

	*
r�c@steZdZdZeejd�d�jd�ZdZdd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�ExtendedReadTestzOHTTP/1.1 200 OK

hello world!
and now 
for something completely different
fooZhelloNrz�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�}|j�tj|j�|_||_dS)Nra)rm)	rr�rrzr{r&�BufferedReader�fpr})rrQr}rrr�setUp�s

zExtendedReadTest.setUpcs�|j}|jj�d�fdd�	}||j_g}x�|jd�}|r�|jt|�d�|j�}|jt|�t|��|j|j|��|jt|��}|j	||�n|j�}|j
|�|j|�|s*Pq*W|j	dj|�|j
�dS)	Nrcs(�|�}|dkr|d|�S|dd�S)NrrIr)r/r)�oldpeekrr�mypeek�sz*ExtendedReadTest.test_peek.<locals>.mypeekrKrrr1)r1)r}rm�peekZ
assertGreaterrBZassertGreaterEqualrurvr-rTr�rGr��lines_expected)rr}rp�allrZp2rr)ror�	test_peek�s(


zExtendedReadTest.test_peekcCs|j}|j|jj|j�dS)N)r}�_verify_readliner0rr)rr}rrr�
test_readline�szExtendedReadTest.test_readlinecCs`g}xD|d�}|r6|dkr6t|�dkr6|j|jd��|j|�|sPqW|jdj|�|�dS)Nrsfoo�
r)rBrur�rGrTr�)rr0rwrsr�rrrru�s
z!ExtendedReadTest._verify_readlinecs0�j���fdd�}t|�}�j|j�j�dS)Ncs�jd�}�jt|�d�|S)N�)rG�assertLessEqualrB)�res)r}rrrr�s
z&ExtendedReadTest.test_read1.<locals>.r)r}�	Readlinerrur0rr)rrZ	readlinerr)r}rr�
test_read1�szExtendedReadTest.test_read1cCs@|j}g}x|j�}|sP|j|�qW|jdj|�|j�dS)Nr)r}rGrGrTr�rr)rr}rsr
rrr�test_read1_unbounded�sz%ExtendedReadTest.test_read1_unboundedcCsR|j}g}x.|jd�}|sP|jt|�d�|j|�qW|jdj|�|j�dS)NrIr)r}rGryrBrGrTr�rr)rr}rsr
rrr�test_read1_boundeds
z#ExtendedReadTest.test_read1_boundedcCs|j|jjd�d�dS)Nrr)rTr}rG)rrrr�test_read1_0szExtendedReadTest.test_read1_0cCs |jjd�}|jdt|��dS)Nr)r}rqryrB)rrrrr�test_peek_0szExtendedReadTest.test_peek_0)r#r$r%r��findr
rrZ
lines_chunkedrnrtrvrur|r}r~rr�rrrrrk�s	
	
rkc@seZdZdZdS)�ExtendedReadTestChunkedz�HTTP/1.1 200 OK
Transfer-Encoding: chunked

a
hello worl
3
d!

9
and now 

23
for something completely different

3
foo
0

N)r#r$r%r�rrrrr�sr�c@seZdZdd�Zdd�ZdS)r{cCs||_d|_dS)Nr)�readfunc�	remainder)rr�rrrr-szReadliner.__init__c
Cs�g}d}|j}y�xP|jd�}|dkr&P|t|�|krB||d}|j|�|j�}|sd}PqW|d7}|j|d|��||d�|_dj|�Sdj|�|_�YnXdS)Nrrwrrr1)r�r�rBrGr�r�)r�limitr
Zdatalenr-r�rrrr01s,


zReadliner.readlineN)r#r$r%rr0rrrrr{)sr{c@s$eZdZdd�Zdd�Zdd�ZdS)�OfflineTestcCsjdh}ddh}xHtt�D]<}|jd�s||kr0qtt|�}t|dd�dkr|j|�qW|jtj|�dS)N�	responsesZHTTPMessage�
parse_headersr�r$zhttp.client)�dirrrv�getattr�addZassertCountEqual�__all__)rrwZ	blacklistr�Z
module_objectrrr�test_allLs
zOfflineTest.test_allcCs|jtjtjd�dS)Nz	Not Found)rTrr��	NOT_FOUND)rrrr�test_responsesZszOfflineTest.test_responsesc5Cs�ddddddddd	d
ddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5g5}x4|D],}|j|d6��|jtt|��WdQRXqtWdS)7NZCONTINUEZSWITCHING_PROTOCOLSZ
PROCESSINGr,ZCREATEDZACCEPTEDZNON_AUTHORITATIVE_INFORMATIONZ
NO_CONTENTZ
RESET_CONTENTZPARTIAL_CONTENTZMULTI_STATUSZIM_USEDZMULTIPLE_CHOICESZMOVED_PERMANENTLYZFOUNDZ	SEE_OTHERZNOT_MODIFIEDZ	USE_PROXYZTEMPORARY_REDIRECTZBAD_REQUESTZUNAUTHORIZEDZPAYMENT_REQUIREDZ	FORBIDDENr�ZMETHOD_NOT_ALLOWEDZNOT_ACCEPTABLEZPROXY_AUTHENTICATION_REQUIREDZREQUEST_TIMEOUTZCONFLICTZGONEZLENGTH_REQUIREDZPRECONDITION_FAILEDZREQUEST_ENTITY_TOO_LARGEZREQUEST_URI_TOO_LONGZUNSUPPORTED_MEDIA_TYPEZREQUESTED_RANGE_NOT_SATISFIABLEZEXPECTATION_FAILEDZUNPROCESSABLE_ENTITYZLOCKEDZFAILED_DEPENDENCYZUPGRADE_REQUIREDZPRECONDITION_REQUIREDZTOO_MANY_REQUESTSZREQUEST_HEADER_FIELDS_TOO_LARGEZINTERNAL_SERVER_ERRORZNOT_IMPLEMENTEDZBAD_GATEWAYZSERVICE_UNAVAILABLEZGATEWAY_TIMEOUTZHTTP_VERSION_NOT_SUPPORTEDZINSUFFICIENT_STORAGEZNOT_EXTENDEDZNETWORK_AUTHENTICATION_REQUIRED)Zconstant)r�ru�hasattrr)rrw�constrrr�test_client_constants]sp
z!OfflineTest.test_client_constantsN)r#r$r%r�r�r�rrrrr�Ksr�c@s@eZdZdd�Zdd�Zdd�Zejee	d�d�d	d
��Z
dS)�SourceAddressTestcCs>tjtjtj�|_tj|j�|_tj�|_|jj	�d|_
dS)N)rXrYrZrSr�	bind_portrZfind_unused_port�source_portr]rV)rrrrrn�s


zSourceAddressTest.setUpcCs*|jr|jj�d|_|jj�d|_dS)N)rVrrS)rrrr�tearDown�s


zSourceAddressTest.tearDowncCsBtjt|jd|jfd�|_|jj�|j|jjj	�d|j�dS)Nr])�source_addressr)
rrPr\rr�rVr:rTrQr`)rrrr�testHTTPConnectionSourceAddress�s

z1SourceAddressTest.testHTTPConnectionSourceAddress�HTTPSConnectionz'http.client.HTTPSConnection not definedcCstjt|jd|jfd�|_dS)Nr])r�)rr�r\rr�rV)rrrr� testHTTPSConnectionSourceAddress�s
z2SourceAddressTest.testHTTPSConnectionSourceAddressN)r#r$r%rnr�r��unittest�skipIfr�rr�rrrrr��s
r�c@s(eZdZdZdd�Zdd�Zdd�ZdS)�TimeoutTestNcCs.tjtjtj�|_tj|j�t_|jj�dS)N)	rXrYrZrSrr�r��PORTr])rrrrrn�szTimeoutTest.setUpcCs|jj�d|_dS)N)rSr)rrrrr��s
zTimeoutTest.tearDowncCs�|jtj��tjd�ztjttj�}|j	�Wdtjd�X|j
|jj�d�|j
�|jtj��tjd�ztjttjdd�}|j	�Wdtjd�X|j
|jj�d�|j
�tjttjdd�}|j	�|j
|jj�d�|j
�dS)N�)�timeout)�assertIsNonerXZgetdefaulttimeoutZsetdefaulttimeoutrrPr\r�r�r:rTrQZ
gettimeoutr)rZhttpConnrrr�testTimeoutAttribute�s*


z TimeoutTest.testTimeoutAttribute)r#r$r%r�rnr�r�rrrrr��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�PersistenceTestcCs�d}x�|D]�\}}}|j||d
���dj||�}t|�}|j|j�|jdd
�|j��"}|j|jdk|�|j�WdQRX|j|jdk|�|j|j	d�|jdd�|j|j	|r�dnd�WdQRXq
WdS)N�1.0r]F�Connection: keep-alive
T�1.1�Connection: close
�Connection: keep-ALIVE
�Connection: cloSE
)�versionrUz4HTTP/{} 200 OK
{}Content-Length: 12

Dummy body
raz/open-connectionrz/subsequent-requestr��r�r]F�r�r�T�r�r]T�r�r�F�r�r�T�r�r�F)r�r�r�r�r�r�)
r�rkr2r�rQrSr4rTr-r3)r�testsr�rUZreuser�rVr;rrr�test_reuse_reconnect�s(
z$PersistenceTest.test_reuse_reconnectcCs�dd�}tjtjf|tff}xr|D]j\}}|j|d��Ptd|�}|jdd�|j||j	�|j
|j�|jdd�|j|j
d�WdQRXq"WdS)	Ncs&tj|���fdd�}|�_tj��S)Ncs tjj�|�}|dkrt��|S)Nr)r&r'r��ConnectionResetError)�bufferr�)�streamrrr�
szNPersistenceTest.test_disconnected.<locals>.make_reset_reader.<locals>.readinto)r&r'r�rl)rr�r)r�r�make_reset_reader
s
z<PersistenceTest.test_disconnected.<locals>.make_reset_reader)�	exceptionrraz
/eof-responsez
/reconnectr�)r&r'r�RemoteDisconnectedr�r�r2rSr�r4r�rQrTr3)rr�r�Zstream_factoryr�rVrrr�test_disconnecteds


z!PersistenceTest.test_disconnectedcCsVtd�}|jddddid�|jtj|j�|j|j�|jdd�|j|j	d�dS)	NsHTTP/1.1 100 Continue

rarOZExpectz100-continue)rXz
/reconnectr�)
r2rSr�rr�r4r�rQrTr3)rrVrrr�test_100_close#szPersistenceTest.test_100_closeN)r#r$r%r�r�r�rrrrr��sr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zej	dd��Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zejeed�d�dd��ZdS)�	HTTPSTestcCsttd�s|jd�dS)Nr�zssl support required)r�rZskipTest)rrrrrn2s
zHTTPSTest.setUpcCsddlm}|||d�S)Nr)�make_https_server)�certfile)Ztest.ssl_serversr�)rr�r�rrr�make_server6szHTTPSTest.make_servercCs$tjttjdd�}|j|jd�dS)Nr�)r�)rr�r\r�r�rTr�)rr�rrr�test_attributes:szHTTPSTest.test_attributescCslddl}tjd�tjd��Ftjdd�}|j|j��}|jdd�WdQRX|j	|j
jd�WdQRXdS)Nr�networkzself-signed.pythontest.neti�rarO�CERTIFICATE_VERIFY_FAILED)�sslr�requires�transient_internetrr�r��SSLErrorrSrTr�r.)rr�r��exc_inforrr�test_networked?s
zHTTPSTest.test_networkedcCszddl}tjd�tjd��T|j�}tjdd|d�}|jdd�|j�}|j	�|j
d|jd	��|j	�WdQRXdS)
Nrr�zself-signed.pythontest.neti�)�contextrarO�nginx�server)r�rr�r�Z_create_unverified_contextrr�rSr4rrsr|)rr�r�r�r}rrr�test_networked_noverificationIs
z'HTTPSTest.test_networked_noverificationc
Csjtjd�tjd��Ltjdd�}|jdd�|j�}|jd�}|j�|j�|j	d|�WdQRXdS)Nr�zwww.python.orgi�rarOzcontent-typez	text/html)
rr�r�rr�rSr4r|rrs)rr�r}Zcontent_typerrr�&test_networked_trusted_by_default_certWs

z0HTTPSTest.test_networked_trusted_by_default_certcCs�ddl}tjd�tjd��n|j|j�}|j|_|jt	�t
jdd|d�}|jdd�|j
�}|jd�}|j�|j�|jd	|�WdQRXdS)
Nrr�zself-signed.pythontest.neti�)r�rarOr�r�)r�rr�r��
SSLContext�PROTOCOL_TLS�
CERT_REQUIRED�verify_mode�load_verify_locations� CERT_selfsigned_pythontestdotnetrr�rSr4r|rrs)rr�r�r�r}Z
server_stringrrr�test_networked_good_certds


z"HTTPSTest.test_networked_good_certcCs�ddl}tjd�tjd��h|j|j�}|j|_|jt	�t
jdd|d�}|j|j
��}|jdd�WdQRX|j|jjd�WdQRXdS)	Nrr�zself-signed.pythontest.neti�)r�rarOr�)r�rr�r�r�r�r�r�r��CERT_localhostrr�r�r�rSrTr�r.)rr�r�r�r�rrr�test_networked_bad_certts

z!HTTPSTest.test_networked_bad_certc
CsXddl}|jt�}tjd|j�}|j|j��}|jdd�WdQRX|j	|j
jd�dS)Nr�	localhostrarOr�)r�r�r�rr�rr�r�rSrTr�r.)rr�r�r�r�rrr�test_local_unknown_cert�s
z!HTTPSTest.test_local_unknown_certcCs�ddl}|jt�}|j|j�}|j|_|jt�tj	d|j
|d�}|j|j�|j
dd�|j�}|j|j�|j|jd�dS)Nrr�)r�raz/nonexistenti�)r�r�r�r�r�r�r�r�rr�rr[rrSr4rTr-)rr�r�r�r�r}rrr�test_local_good_hostname�s

z"HTTPSTest.test_local_good_hostnamec-Cs�ddl}|jt�}|j|j�}|j|_d|_|jt�t	j
d|j|d�}|j|j
��|jdd�WdQRXtjdtf��t	j
d|j|dd�}WdQRX|j|j
��|jdd�WdQRXd	|_tjdtf��t	j
d|j|d	d�}WdQRX|jdd
�|j�}|j�|j�|j|jd�d	|_t	j
d|j|d�}|jdd
�|j�}|j|jd�|j�|j�tjdtf��t	j
d|j|dd�}WdQRX|j|j
��|jdd�WdQRXdS)NrTr�)r�rarOr])r��check_hostnameFz/nonexistenti�)r�r��CERT_fakehostnamer�r�r�r�r�r�rr�rr�ZCertificateErrorrSrZcheck_warnings�DeprecationWarningr4rrTr-)rr�r�r�r�r}rrr�test_local_bad_hostname�sF




z!HTTPSTest.test_local_bad_hostnamer�z)http.client.HTTPSConnection not availablecCs^xdD]}|jtjtj|�qWx8dD]0\}}}tj|�}|j||j�|j||j�q&WdS)N�www.python.org:abc�user:password@www.python.org�[fe80::207:e9ff:fe9b]:8000�fe80::207:e9ff:fe9b�@�www.python.org:443�www.python.org��www.python.org:�[fe80::207:e9ff:fe9b]�[fe80::207:e9ff:fe9b]:)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�rr�r�rTrr)rr�r�rrrrrr�s

zHTTPSTest.test_host_portN)r#r$r%rnr�r�r�r�rZsystem_must_validate_certr�r�r�r�r�r�r�r�r�rrrrrrr�0s


	,r�c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�RequestBodyTestcCs,tjd�|_td�|j_|_|j|j_dS)Nzexample.comr])rrPrVrrQ)rrrrrn�szRequestBodyTest.setUpcCs(tj|jj�}|j�tj|�}||fS)N)r&r'rQr
r0rr�)r�f�messagerrr�get_headers_and_fp�s
z"RequestBodyTest.get_headers_and_fpcCs�ddgdfd
f}x�|D]�\}}|j|��ztjd�|_td�|j_|_|jjdd|�|j�\}}|jd|�|jd	|�|j	|j
d
�d�|j	||j��WdQRXqWdS)N�foo�bar�3
foo
3
bar
0

zexample.comr]r^z/urlzContent-TypezContent-LengthzTransfer-Encodingr��r�r�)r�r�)r�rrPrVrrQrSr�r�rT�getr-)rr�rWrwr�r�rrr�test_list_body�s
zRequestBodyTest.test_list_bodycCsL|jjdddddi�|j�\}}|jd|jd��|jdt|j���dS)Nr^z/urlrWzContent-LengthZ42zcontent-lengthrx)rVrSr�rTr�rBr-)rr�r�rrr�test_manual_content_length�s

z*RequestBodyTest.test_manual_content_lengthcCs`|jjddd�|j�\}}|jd|j��|j|j��|jd|jd��|jd|j��dS)Nr^z/urlrWz
text/plain�4zcontent-lengthsbody)	rVrSr�rT�get_content_typer��get_charsetr�r-)rr�r�rrr�test_ascii_bodyszRequestBodyTest.test_ascii_bodycCs`|jjddd�|j�\}}|jd|j��|j|j��|jd|jd��|jd|j��dS)Nr^z/urlubodyÁz
text/plain�5zcontent-lengthsbody�)	rVrSr�rTr�r�r�r�r-)rr�r�rrr�test_latin1_bodysz RequestBodyTest.test_latin1_bodycCs`|jjddd�|j�\}}|jd|j��|j|j��|jd|jd��|jd|j��dS)Nr^z/urlsbody�z
text/plainr�zcontent-length)	rVrSr�rTr�r�r�r�r-)rr�r�rrr�test_bytes_bodyszRequestBodyTest.test_bytes_bodycCs�|jtjtj�ttjd��}|jd�WdQRXttj��r}|jjdd|�|j�\}}|j	d|j
��|j|j��|j|j
d��|j	d|j
d��|j	d	|j��WdQRXdS)
N�wrWr^z/urlz
text/plainzcontent-lengthr�ztransfer-encodings4
body
0

)r[r�unlink�TESTFNr
�writerVrSr�rTr�r�r�r�r-)rr�r�rrr�test_text_file_bodysz#RequestBodyTest.test_text_file_bodycCs�|jtjtj�ttjd��}|jd�WdQRXttjd��n}|jjdd|�|j�\}}|j	d|j
��|j|j��|j	d|j
d��|jd	|�|j	d
|j��WdQRXdS)N�wbsbody�rr^z/urlz
text/plainr�zTransfer-EncodingzContent-Lengths5
body�
0

)r[rrrr
rrVrSr�rTr�r�r�r�r�r-)rr�r�rrr�test_binary_file_body+sz%RequestBodyTest.test_binary_file_bodyN)r#r$r%rnr�r�r�r�r�r�rrrrrrr��s	r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�HTTPResponseTestcCs&d}t|�}tj|�|_|jj�dS)NzXHTTP/1.1 200 Ok
My-Header: first-value
My-Header:                 second-value

Text)rrrzr}r{)rrWrQrrrrn;szHTTPResponseTest.setUpcCs6|jjd�}|j|d�|jjdd�}|j|d�dS)Nz	My-Headerzfirst-value, second-valuezsome default)r}r|rT)rrUrrr�test_getting_headerBsz$HTTPResponseTest.test_getting_headercCs|jjdd�}|j|d�dS)NzNo-Such-Headerz
default-value)r}r|rT)rrUrrr�3test_getting_nonexistent_header_with_string_defaultIszDHTTPResponseTest.test_getting_nonexistent_header_with_string_defaultcCs<|jjdddg�}|j|d�|jjdd�}|j|d�dS)NzNo-Such-Header�default�valueszdefault, values)r
r)r}r|rT)rrUrrr�5test_getting_nonexistent_header_with_iterable_defaultMszFHTTPResponseTest.test_getting_nonexistent_header_with_iterable_defaultcCs|jjd�}|j|d�dS)NzNo-Such-Header)r}r|rT)rrUrrr�/test_getting_nonexistent_header_without_defaultTsz@HTTPResponseTest.test_getting_nonexistent_header_without_defaultcCs |jjddd�}|j|d�dS)NzNo-Such-Headerro)r
)r}r|rT)rrUrrr�test_getting_header_defaultintXsz/HTTPResponseTest.test_getting_header_defaultintN)	r#r$r%rnrr	rr
rrrrrr9src@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�TunnelTestscCs*d}d|_tj|j�|_|j|�|j_dS)Nz:HTTP/1.0 200 OK

HTTP/1.1 200 OK
Content-Length: 42

z	proxy.com)rrrPrVr7)r�
response_textrrrrn]szTunnelTests.setUpcCs|jj�dS)N)rVr)rrrrr�gszTunnelTests.tearDowncsd�fdd�	}|S)Ncst�|d|dd�S)Nrr)rr)r)rPr�r�)rrrr6ksz9TunnelTests._create_connection.<locals>.create_connection)NNr)rrr6r)rrr7jszTunnelTests._create_connectioncCs�d}d}ddi}|jj|||d�|jjddd�|j|jjj|j�|j|jjjtj�|j|jj	|�|j|jj
|�|j|jj|�dS)	Nzdestination.comi�"z
User-Agentz!Mozilla/5.0 (compatible, MSIE 11))rrXrdrOr])rV�
set_tunnelrSrTrQrrr�	HTTP_PORTZ_tunnel_hostZ_tunnel_portZ_tunnel_headers)rZtunnel_hostZtunnel_portZtunnel_headersrrr�!test_set_tunnel_host_port_headersos
z-TunnelTests.test_set_tunnel_host_port_headerscCs |jj�|jt|jjd�dS)Nzdestination.com)rVr:r��RuntimeErrorr)rrrr�&test_disallow_set_tunnel_after_connect|s
z2TunnelTests.test_disallow_set_tunnel_after_connectcCs�|jjd�|jjddd�|j|jjj|j�|j|jjjtj�|j	d|jjj
�|jd|jjj
�|j	d|jjj
�|jd|jjj
�dS)	Nzdestination.comrdrOr]sCONNECT destination.comsHost: destination.com:NonesHost: destination.comsHost: proxy.com)rVrrSrTrQrrrrrsr
r�)rrrr�test_connect_with_tunnel�sz$TunnelTests.test_connect_with_tunnelcCsl|jjd�|jjddd�|j|jjj|j�|j|jjjtj�|j	d|jjj
�|j	d|jjj
�dS)Nzdestination.comr^rOr]sCONNECT destination.comsHost: destination.com)rVrrSrTrQrrrrrsr
)rrrr�test_connect_put_request�sz$TunnelTests.test_connect_put_requestcCszd}dj|�}|jjd�|j|�|j_|jjd�tj��}|jjddd�WdQRX|j�j	�}|j
dj|�|�dS)	Nz
X-Dummy: 1zHTTP/1.0 200 OK
{}

rzdestination.comr^rOr]z
header: {})rkrVZset_debuglevelr7rrr�rSr�r�rs)rZexpected_headerrr�r�rrr�test_tunnel_debuglog�s

z TunnelTests.test_tunnel_debuglogN)r#r$r%rnr�r7rrrrrrrrrr\s


r�__main__r�)�	verbosity)2r+Zhttprr&ri�osrrXr�ZTestCaserr�path�dirnamer�herer�r�r�r�rrZchunk_extensionr r>r�r!r\rr(r'r,rPr2r>r�r�rkr�r{r�r�r�r�r�r�rrr#�mainrrrr�<module>sb!l1}"P.H*`#I


Youez - 2016 - github.com/yon3zu
LinuXploit