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-1.pyc
3

�w2_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�6/opt/alt/python36/lib64/python3.6/test/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$eZdZdZd	dd�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.
    rcCs"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%�__doc__r-r0rrrrr,\s
r,cs4eZdZdZ�fdd�Z�fdd�Zdd�Z�ZS)�FakeSocketHTTPConnectionz@HTTPConnection subclass using FakeSocket; counts connect() callscs$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)z.Count the number of times connect() is invokedr)r4r5�connect)r)r:rrr;wsz FakeSocketHTTPConnection.connectcOs
t|j�S)N)rr6)r�pos�kwrrrr7|sz*FakeSocketHTTPConnection.create_connection)r#r$r%r2rr;r7�
__classcell__rr)r:rr3nsr3c@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�kvZlcKeyrrrrH�s
zBHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.appendN)r#r$r%rrHrrrr�HeaderCountingBuffer�srKTF�Content-length�Host�Accept-encodingzexample.comZblahblahblahZspamspamspam�POST�/r)TF)rLrMrN)rGr�HTTPConnectionr�sock�_bufferr	rC�request�assertEqualr@rE)rrKZexplicit_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)rGr�content_length)rrrrr�s
zHHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.__init__cSsF|jdd�}t|�dkr6|dj�dkr6|dj�|_tj||�dS)NrArrscontent-length)rBrCrE�stripr[rGrH)rrIrJrrrrH�szFHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.appendN)r#r$r%rrHrrrr�ContentLengthChecker�sr]��PUTrO�PATCHzexample.comrP�0z%Header Content-Length incorrect on {}�GET�CONNECT�DELETE�HEAD�OPTIONS�TRACEz.Header Content-Length set for empty body on {}� �1)Nr^)r_rOr`)rbrcrdrerfrg)
rG�	itertools�productrrQrrRrSrTrUr[�format�chain)rr]ZbodiesZmethods_with_body�methodrXrWZmethods_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.comrbrPzContent-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)rrQrrR�
putrequest�	putheader�assertInrS)rrWrrr�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^rbz/foosEGET /foo HTTP/1.1
Host: [2001:102A::]
Accept-Encoding: identity

z
[2001:102A::])rrQrrRrT�
assertTruer
�
startswith)r�expectedrWrRrrr�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�beginrU�	getheader)rrXrR�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�rangerrr{r|rUr}�msg�join�map�chrZassertIsNotNonertrvrw�endswith)rrXrRr~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^rbrP�
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�)	rrQrrRrr�subTest�assertRaisesRegex�
ValueErrorrs)rrW�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)	rrr{r�captured_stdoutr|�getvalue�
splitlinesrU)rrXrRr~�output�linesrrr�test_headers_debuglevelZs
z#HeaderTests.test_headers_debuglevelN)r#r$r%rZroruryrr�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.comrrOrPT)�encode_chunked)rrQrrRrrZ
endheaders�
_make_body�_parse_requestr
�_parse_chunkedrU�
expected_body)rrW�_rXrrr�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.comrrOrPzTransfer-Encoding�chunkedzcontent-lengthcSsg|]}|j��qSr)rE)�.0�krrr�
<listcomp>�sz>TransferEncodingTest.test_explicit_headers.<locals>.<listcomp>zlatin-1cSsg|]}|j��qSr)rE)r�r�rrrr��sz
gzip, chunkedT)rYr�rXcSsg|]}|j��qSr)rE)r�r�rrrr��s)rrQrrRrTr�r�r
�assertNotIn�keysrUr�rDr�)rrWr�rYrXrrr�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.comrrOrP)�empty_lineszTransfer-Encodingr�zcontent-lengthcSsg|]}|j��qSr)rE)r�r�rrrr��sz5TransferEncodingTest.test_request.<locals>.<listcomp>)FT)rrQrrRrTr�r�r
r�rUr�r�)rr�rWr�rYrXrrr�test_request�s



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

)	rrQrrRrTr�r
rUr�)rrWr�rYrXrrr�test_empty_body�s

z$TransferEncodingTest.test_empty_bodyFccsZ|jjd�}xHt|�D]<\}}|r0|dr0dV|t|�dkrL|dVq|VqWdS)N� r�rr)r�rB�	enumeraterC)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
rrrAzlatin-1)rBrCrDr\r�)rr
r�rTrYr/�keyrzrrrr��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)rB�intrUrCrHr�)rr
rX�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)
rrr{r|rUr-�assertFalse�isclosed�closedrvr�assertRaises�
BadStatusLine)rrXrRr~rrr�test_status_lines�s 

zBasicTest.test_status_linescCstjd�}|jt|�d�dS)Nr^zBadStatusLine("''",))rr�rU�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)rrr{r|rUr-r�r�rvr�r)rrXrRr~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)rrr{r|rUr0r�r�r-rvr�r)rrXrRr~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)
rrr{r|�	bytearray�readintorUr�r�r�rvr�r)rrXrRr~�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)rrr{r|rUr-r�r�rvr�r)rrXrRr~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)rrr{r|r�r�rUr�r�r�rv)rrXrRr~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)	rrr{r|rUr-r�r�rv)rrXrRr~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)
rrr{r|r�r�rUr�r�r�rvr�r)rrXrRr~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�
InvalidURLrQrUrr)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)rrr{r|r}rU)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

re)rnz)Did not expect response from HEAD request)rr,rr{r|r-�fail)rrRr~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

re)rn�rz)Did not expect response from HEAD request�s)
rr,rr{r|r�r�rrUr�)rrRr~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_MAXHEADERSrr{r�Z
HTTPExceptionr|)rrYrrrrrr�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.comrbz/fooz%r != %r)�open�__file__rrQrrRrTrvr
rwrC)rrxrXrWrRrrr�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�)
rrQrrR�sendrUr
�arrayr&r')rrxrWrRrrr�	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&�
TextIOBaserrQrrRrrUr
)rrrxrWrRr)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)NsonestwosthreerrrrrrX�sz&BasicTest.test_send_iter.<locals>.bodyzexample.comr^rbz/foozContent-LengthZ11)rrQrrRrTrUr
)rrxrXrWrRrrr�test_send_iter�s
zBasicTest.test_send_itercCs<tjd�}td�|_|jt��|jdd|�WdQRXdS)Nzexample.comr^rO�test)rrQrrRr��	TypeErrorrT)rrWrrr�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)
Nrb)rnr�r^�foo
zIncompleteRead(%d bytes read)zIncompleteRead expected)r^r)�chunked_expectedr�
chunked_start�
last_chunk�chunked_endrr{r|rUr-rr��IncompleteRead�partialrCr�r	r)rrxrRr~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�rb)rnrrrr^�foo
zIncompleteRead(%d bytes read)zIncompleteRead expected)r^r()rrCr�rr r!r"rr{r|r�rUrr��
memoryviewr#r$r�r	r)rrxZ	nexpectedr�rRr~r/�mrr%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
re)rnr���OK)rr!r"rr{r|rUr-�status�reasonrvr�r�r�r)rr rRr~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
re)rnrrr	r,r-s)rr!r"rr{r|r�r�rUr�r.r/rvr�r�r�r)rr rRr~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
rb)rnsHello
)rrr{r|rUr-rvr�)rrRr~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
rb)rnsHello
z-IncompleteRead(7 bytes read, 3 more expected)zIncompleteRead expected)
rrr{r|r-r#rUr$r�r	rvr�r)rrRr~rrrr�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/urlrX)rTr)rWrr�<lambda>�sz&BasicTest.test_epipe.<locals>.<lambda>i�zBasic realm="example"zwww-authenticate)
r(rrQrRr�r*�getresponserUr.r})rrRr~r)rWr�
test_epipe�s
zBasicTest.test_epipecCs8dddd}tjt|��}|jtjtjf|j�dS)NzHTTP/1.1 200 Okr�iz
)rr{rr��LineTooLongr�r|)rrXr~rrr�test_overflowing_status_line�sz&BasicTest.test_overflowing_status_linecCs2dddd}tjt|��}|jtj|j�dS)NzHTTP/1.1 200 OK
X-Foo: barriz

)rr{rr�r7r|)rrXr~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

)rr{rr|r�r7r-)rrXr~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)rrr{r|rUr-rvr�r�r�r)rrXrRr~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)rr{r)rr<r=)�responserrr�sz4BasicTest.test_error_leak.<locals>.Response.__init__N)r#r$r%rr)r<rr�Response�sr=zInvalid status linerbrP)
rrQr{Zresponse_classrrRrTr�r�r5rvr�r)rrWr=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
sabcrb)rnz3;foo=bar
abc
)rrr �last_chunk_extendedr"rr{r|rUr-r)rZextrarxrRr~rrr�test_chunked_extension�sz BasicTest.test_chunked_extensioncCsBt}ttt�}tj|dd�}|j�|j|j�|�|j	�dS)z9some servers may serve up a short chunked encoding streamrb)rnN)
rrr r!rr{r|rUr-r)rrxrRr~rrr�test_chunked_missing_end�sz"BasicTest.test_chunked_missing_endcCs\t}ttttt�}tj|dd�}|j�|j	|j
�|�|j	|jj
�d�|j�dS)z&See that trailers are read and ignoredrb)rnrN)
rrr r!r�r"rr{r|rUr-rr)rrxrRr~rrr�test_chunked_trailers�szBasicTest.test_chunked_trailerscCsjt}d}ttttt|�}tj|dd�}|j�|j	|j
�|�|j	|jj
�|jd��|j
�dS)zDCheck that we don't read past the end of the chunked-encoding stream�	extradatarb)rnrN)rrr r!r�r"rr{r|rUr-rr
r)rrxrCrRr~rrr�test_chunked_sync�szBasicTest.test_chunked_synccCs\d}d}td||�}tj|dd�}|j�|j|j�|�|j|jj�|�|j�dS)zBCheck that we don't read past the end of the Content-Length streams	extradatas
Hello123
s'HTTP/1.1 200 OK
Content-Length: 10

rb)rnN)rrr{r|rUr-rr)rrCrxrRr~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

rb)rni�)	rrr{r|rU�	readlinesrr-r)rrCrxrRr~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

rb)rni�)	rrr{r|rU�read1rr-r)rrCrxrRr~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

rb)rn�
r)	rrr{r|rUr0rr-r)rrCrxrRr~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

�rb)rn�r�)	rrr{r|rUrHr-rr)rrCrxrRr~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-)rW�address�readerr�)�result�servrr�
run_serverPs

z2BasicTest.test_response_fileno.<locals>.run_server)�targetrrcz
dummy:1234)�filenos
proxied data
)r�
import_module�socket�AF_INET�SOCK_STREAMZIPPROTO_TCP�
addCleanuprZbind�HOST�listenZThread�startr��floatrrQ�getsocknamerTr5rUr.r-rWr�detach)rrOrUZthreadrWr<rr)rSrTr�test_response_filenoEs0

zBasicTest.test_response_filenocCs4Gdd�dtj�}|d�}td�|_|jdd�dS)zv
        It should be possible to override the default validation
        behavior in putrequest (bpo-38216).
        c@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%rerrrr�UnsafeHTTPConnectiontsrfzexample.comr^rbz/N)rrQrrRrr)rrfrWrrr�*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)rrdrrr�_validate_host~sz_BasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnection._validate_hostN)r#r$r%rhrrrrrf}srfz
example.com
r^rbrPr)Z	skip_host)rrQrrRrr)rrfrWrrr�(test_putrequest_override_host_validation|s
z2BasicTest.test_putrequest_override_host_validationcCs4Gdd�dtj�}|d�}td�|_|jdd�dS)z�
        It should be possible to override the default encoding
        to transmit bytes in another encoding even if invalid
        (bpo-36274).
        c@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%rjrrrrrf�srfzexample.comr^rbu/☃N)rrQrrRrr)rrfrWrrr�!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+r0r1r2r3r6r8r9r:r;r>r@rArBrDrErGrIrKrNrcrgrirkrrrrr��sX

	 +

	*
r�c@sxeZdZdZdZeejd�d�jd�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
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)Nrb)rn)	rr�rr{r|r&�BufferedReader�fpr~)rrRr~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)NrrJr)r/r)�oldpeekrr�mypeek�sz*ExtendedReadTest.test_peek.<locals>.mypeekrLrrr1)r1)r~rn�peekZ
assertGreaterrCZassertGreaterEqualrvrwr-rUr�rHr��lines_expected)rr~rq�allrZp2rr)rpr�	test_peek�s(


zExtendedReadTest.test_peekcCs|j}|j|jj|j�dS)N)r~�_verify_readliner0rs)rr~rrr�
test_readline�szExtendedReadTest.test_readlinecCs`g}xD|d�}|r6|dkr6t|�dkr6|j|jd��|j|�|sPqW|jdj|�|�dS)Nrsfoo�
r)rCrvr�rHrUr�)rr0rxrtr�rrrrv�s
z!ExtendedReadTest._verify_readlinecs0�j���fdd�}t|�}�j|j�j�dS)Ncs�jd�}�jt|�d�|S)N�)rH�assertLessEqualrC)�res)r~rrrr�s
z&ExtendedReadTest.test_read1.<locals>.r)r~�	Readlinerrvr0rs)rrZ	readlinerr)r~rr�
test_read1�szExtendedReadTest.test_read1cCs@|j}g}x|j�}|sP|j|�qW|jdj|�|j�dS)Nr)r~rHrHrUr�rs)rr~rtr
rrr�test_read1_unbounded�sz%ExtendedReadTest.test_read1_unboundedcCsR|j}g}x.|jd�}|sP|jt|�d�|j|�qW|jdj|�|j�dS)NrJr)r~rHrzrCrHrUr�rs)rr~rtr
rrr�test_read1_boundeds
z#ExtendedReadTest.test_read1_boundedcCs|j|jjd�d�dS)Nrr)rUr~rH)rrrr�test_read1_0szExtendedReadTest.test_read1_0cCs |jjd�}|jdt|��dS)Nr)r~rrrzrC)rrrrr�test_peek_0szExtendedReadTest.test_peek_0)r#r$r%r2r��findr
rsZ
lines_chunkedrorurwrvr}r~rr�r�rrrrrl�s	
	
rlc@seZdZdZdZdS)�ExtendedReadTestChunkedz:
    Test peek(), read1(), readline() in chunked mode
    z�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%r2r�rrrrr�sr�c@s eZdZdZdd�Zdd�ZdS)r|zT
    a simple readline class that uses an arbitrary read function and buffering
    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)Nrrxrrr1)r�r�rCrHr�r�)r�limitr
Zdatalenr-r�rrrr01s,


zReadliner.readlineN)r#r$r%r2rr0rrrrr|)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)�dirrrw�getattr�addZassertCountEqual�__all__)rrxZ	blacklistr�Z
module_objectrrr�test_allLs
zOfflineTest.test_allcCs|jtjtjd�dS)Nz	Not Found)rUrr��	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�rv�hasattrr)rrxZconstrrr�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)rYrZr[rTr�	bind_portrZfind_unused_port�source_portr^rW)rrrrro�s


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


zSourceAddressTest.tearDowncCsBtjt|jd|jfd�|_|jj�|j|jjj	�d|j�dS)Nr^)�source_addressr)
rrQr]rr�rWr;rUrRra)rrrr�testHTTPConnectionSourceAddress�s

z1SourceAddressTest.testHTTPConnectionSourceAddress�HTTPSConnectionz'http.client.HTTPSConnection not definedcCstjt|jd|jfd�|_dS)Nr^)r�)rr�r]rr�rW)rrrr� testHTTPSConnectionSourceAddress�s
z2SourceAddressTest.testHTTPSConnectionSourceAddressN)r#r$r%ror�r��unittest�skipIfr�rr�rrrrr��s
r�c@s(eZdZdZdd�Zdd�Zdd�ZdS)�TimeoutTestNcCs.tjtjtj�|_tj|j�t_|jj�dS)N)	rYrZr[rTrr�r��PORTr^)rrrrro�szTimeoutTest.setUpcCs|jj�d|_dS)N)rTr)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)�assertIsNonerYZgetdefaulttimeoutZsetdefaulttimeoutrrQr]r�r�r;rUrRZ
gettimeoutr)rZhttpConnrrr�testTimeoutAttribute�s*


z TimeoutTest.testTimeoutAttribute)r#r$r%r�ror�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
)�versionrVz4HTTP/{} 200 OK
{}Content-Length: 12

Dummy body
rbz/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�rlr3r�rRrTr5rUr-r4)r�testsr�rVZreuser�rWr<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)z3Return BufferedReader that raises ECONNRESET at EOFcs tjj�|�}|dkrt��|S)Nr)r&r'r��ConnectionResetError)�bufferr�)�streamrrr�
szNPersistenceTest.test_disconnected.<locals>.make_reset_reader.<locals>.readinto)r&r'r�rm)rr�r)r�r�make_reset_reader
s
z<PersistenceTest.test_disconnected.<locals>.make_reset_reader)�	exceptionrrbz
/eof-responsez
/reconnectr�)r&r'r�RemoteDisconnectedr�r�r3rTr�r5r�rRrUr4)rr�r�Zstream_factoryr�rWrrr�test_disconnecteds


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

rbrPZExpectz100-continue)rYz
/reconnectr�)
r3rTr�rr�r5r�rRrUr4)rrWrrr�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)rrrrro2s
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�rUr�)rrrrr�test_attributes:szHTTPSTest.test_attributescCslddl}tjd�tjd��Ftjdd�}|j|j��}|jdd�WdQRX|j	|j
jd�WdQRXdS)Nr�networkzself-signed.pythontest.neti�rbrP�CERTIFICATE_VERIFY_FAILED)�sslr�requires�transient_internetrr�r��SSLErrorrTrUr�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�)�contextrbrP�nginx�server)r�rr�r�Z_create_unverified_contextrr�rTr5rrtr})rr�r�rr~rrr�test_networked_noverificationIs
z'HTTPSTest.test_networked_noverificationc
Csjtjd�tjd��Ltjdd�}|jdd�|j�}|jd�}|j�|j�|j	d|�WdQRXdS)Nr�zwww.python.orgi�rbrPzcontent-typez	text/html)
rr�r�rr�rTr5r}rrt)rrr~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�rbrPr�r�)r�rr�r��
SSLContext�PROTOCOL_TLS�
CERT_REQUIRED�verify_mode�load_verify_locations� CERT_selfsigned_pythontestdotnetrr�rTr5r}rrt)rr�r�rr~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�rbrPr�)r�rr�r�r�r�r�r�r��CERT_localhostrr�r�r�rTrUr�r/)rr�r�rr�rrr�test_networked_bad_certts

z!HTTPSTest.test_networked_bad_certc
CsXddl}|jt�}tjd|j�}|j|j��}|jdd�WdQRX|j	|j
jd�dS)Nr�	localhostrbrPr�)r�r�r�rr�rr�r�rTrUr�r/)rr�r�rr�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�rbz/nonexistenti�)r�r�r�r�r�r�r�r�rr�rr\rrTr5rUr.)rr�r�r�rr~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�rbrPr^)r��check_hostnameFz/nonexistenti�)r�r��CERT_fakehostnamer�r�r�r�r�r�rr�rr�ZCertificateErrorrTrZcheck_warnings�DeprecationWarningr5rrUr.)rr�r�r�rr~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�rUrr)rr�rrrrrrr�s

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


	,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,tjd�|_td�|j_|_|j|j_dS)Nzexample.comr^)rrQrWrrR)rrrrro�szRequestBodyTest.setUpcCs(tj|jj�}|j�tj|�}||fS)N)r&r'rRr
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�rrQrWrrRrTr�r�rU�getr-)rr�rXrxr�r�rrr�test_list_body�s
zRequestBodyTest.test_list_bodycCsL|jjdddddi�|j�\}}|jd|jd��|jdt|j���dS)Nr_z/urlrXzContent-LengthZ42zcontent-lengthry)rWrTr�rUr�rCr-)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/urlrXz
text/plain�4zcontent-lengthsbody)	rWrTr�rU�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�)	rWrTr�rUr�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)	rWrTr�rUr�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�wrXr_z/urlz
text/plainzcontent-lengthr�ztransfer-encodings4
body
0

)r\r�unlink�TESTFNr�writerWrTr�rUr�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\rrrrrrWrTr�rUr�r�r�r�r�r-)rr�r�rrr�test_binary_file_body+sz%RequestBodyTest.test_binary_file_bodyN)
r#r$r%r2ror�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)rrr{r~r|)rrXrRrrrro;szHTTPResponseTest.setUpcCs6|jjd�}|j|d�|jjdd�}|j|d�dS)Nz	My-Headerzfirst-value, second-valuezsome default)r~r}rU)rrVrrr�test_getting_headerBsz$HTTPResponseTest.test_getting_headercCs|jjdd�}|j|d�dS)NzNo-Such-Headerz
default-value)r~r}rU)rrVrrr�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}rU)rrVrrr�5test_getting_nonexistent_header_with_iterable_defaultMszFHTTPResponseTest.test_getting_nonexistent_header_with_iterable_defaultcCs|jjd�}|j|d�dS)NzNo-Such-Header)r~r}rU)rrVrrr�/test_getting_nonexistent_header_without_defaultTsz@HTTPResponseTest.test_getting_nonexistent_header_without_defaultcCs |jjddd�}|j|d�dS)NzNo-Such-Headerrp)r
)r~r}rU)rrVrrr�test_getting_header_defaultintXsz/HTTPResponseTest.test_getting_header_defaultintN)	r#r$r%rorr	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)rrrQrWr8)r�
response_textrrrro]szTunnelTests.setUpcCs|jj�dS)N)rWr)rrrrr�gszTunnelTests.tearDowncsd�fdd�	}|S)Ncst�|d|dd�S)Nrr)rr)r)rQr�r�)rrrr7ksz9TunnelTests._create_connection.<locals>.create_connection)NNr)rrr7r)rrr8jszTunnelTests._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))rrYrerPr^)rW�
set_tunnelrTrUrRrrr�	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)rWr;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.comrerPr^sCONNECT destination.comsHost: destination.com:NonesHost: destination.comsHost: proxy.com)rWrrTrUrRrrrrrtr
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_rPr^sCONNECT destination.comsHost: destination.com)rWrrTrUrRrrrrrtr
)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_rPr^z
header: {})rlrWZset_debuglevelr8rrr�rTr�r�rt)rZexpected_headerrr�r�rrr�test_tunnel_debuglog�s

z TunnelTests.test_tunnel_debuglogN)r#r$r%ror�r8rrrrrrrrrr\s


r�__main__r�)�	verbosity)2r+Zhttprr&rj�osrrYr�ZTestCaserr�path�dirnamer�herer�r�r�r�r rZchunk_extensionr!r?r�r"r]rr(r'r,rQr3r?r�r�rlr�r|r�r�r�r�r�r�rrr#�mainrrrr�<module>sb!l1}"P.H*`#I


Youez - 2016 - github.com/yon3zu
LinuXploit