403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.217.51
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Python313/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Python313/Lib/test/__pycache__/test_httplib.cpython-313.opt-2.pyc
�

��i_����SSKrSSKrSSKJrJr SSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKJ
r
 \RrSSKJr SSKJr SSKJr SSKJr \R,"SS	9 \R.R1\5r\R.R7\S
S5r\R.R7\S
S5r\R.R7\S
S
5rSrSr Sr!Sr"S\!-S-r#Sr$Sr%\RLr&"SS5r'"SS\'5r("SS\RR5r*"SS\RV5r,"SS\\5r-"SS \5r."S!S"\5r/"S#S$\\5r0"S%S&\\5r1"S'S(\15r2"S)S*\15r3"S+S,5r4"S-S.\\5r5"S/S0\5r6"S1S2\5r7"S3S4\5r8"S5S6\5r9"S7S8\5r:"S9S:\5r;"S;S<\\5r<\=S=:Xa\R|"S>S?9 gg)@�N)�client�
HTTPStatus)�mock)�support)�	os_helper)�
socket_helper)�ExtraAssertionsT)�module�certdatazkeycert.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�Z�\rSrSr\R
SS4SjrSrS
SjrSr	Sr
SrS	rg)�
FakeSocket�7Nc��[U[5(aURS5nXlX lSUlSUlSUlX0lX@l	g)N�ascii�rF)
�
isinstance�str�encode�text�	fileclass�data�
sendall_calls�file_closed�host�port)�selfrrrrs     �&C:\Python313\\Lib\test\test_httplib.py�__init__�FakeSocket.__init__8sH���d�C� � ��;�;�w�'�D��	�"����	���� ����	��	rc�X�U=RS-
slU=RU-
slg�N�)rr�rrs  r�sendall�FakeSocket.sendallCs!�����a����	�	�T��	rc���US:waUS:wa[R"5eURUR5UlUR
URlUR$)N�r�rb)r�UnimplementedFileModerr�file�
file_close�close)r�mode�bufsizes   r�makefile�FakeSocket.makefileGsK���3�;�4�4�<��.�.�0�0��N�N�4�9�9�-��	��/�/��	�	���y�y�rc��SUlg)NT)r�rs rr-�FakeSocket.file_closeOs
����rc��g�N�r4s rr.�FakeSocket.closeR���rc��gr7r8)r�level�optname�values    r�
setsockopt�FakeSocket.setsockoptUr:r)rr,rrrrrrr7)
�__name__�
__module__�__qualname__�__firstlineno__�io�BytesIOr r&r1r-r.r?�__static_attributes__r8rrrr7s+��')�z�z��4�	��� �
�
rrc�&�\rSrSrSrSrSrSrg)�EPipeSocket�Xc�:�[RX5 X lgr7)rr �pipe_trigger)rrrLs   rr �EPipeSocket.__init__Zs�����D�'�(�rc��URU;a[[RS5eU=RU-
slg)N�gotcha)rL�OSError�errno�EPIPErr%s  rr&�EPipeSocket.sendall_s/������$��%�+�+�x�0�0��	�	�T��	rc��gr7r8r4s rr.�EPipeSocket.closedr:r)rLN)rArBrCrDr r&r.rGr8rrrIrIXs��)�
�

rrIc�(�\rSrSrSSjrSSjrSrg)�NoEOFBytesIO�gc�f�[RRX5nUS:Xa[S5eU$�Nrzcaller tried to read past EOF)rErF�read�AssertionError)r�nrs   rr[�NoEOFBytesIO.readms,���z�z���t�'���3�;� �!@�A�A��rNc�f�[RRX5nUS:Xa[S5eU$rZ)rErF�readliner\)r�lengthrs   rr`�NoEOFBytesIO.readliness.���z�z�"�"�4�0���3�;� �!@�A�A��rr8����r7)rArBrCrDr[r`rGr8rrrWrWgs���rrWc�:^�\rSrSrU4SjrU4SjrSrSrU=r$)�FakeSocketHTTPConnection�yc�`>�SUl[TU]	S5 XlURUlg)Nr�example.com)�connections�superr �fake_socket_args�create_connection�_create_connection)r�args�	__class__s  �rr �!FakeSocketHTTPConnection.__init__|s,������
����'� $��"&�"8�"8��rc�J>�U=RS-
sl[TU]	5$r#)rjrk�connect)rrps �rrs� FakeSocketHTTPConnection.connect�s!������A����w�� � rc�&�[UR6$r7)rrl)r�pos�kws   rrm�*FakeSocketHTTPConnection.create_connection�s���4�0�0�1�1r)rnrjrl)	rArBrCrDr rsrmrG�
__classcell__)rps@rrfrfys���9�!�
2�2rrfc�D�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rg)�HeaderTests�c��"SS[5nSH�nSH�n[R"S5n[S5UlU"5UlSn0nU(a[
[U55Xc'URSS	XV5 URUR
RUR5S
5 M� M� g)Nc� �\rSrSrSrSrSrg)�;HeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer�c��0Ulgr7��countr4s rr �DHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.__init__�s	����
rc��URS5n[U5S:�aUUSRS5R5nURRUS5 URU==S-
ss'[RX5 g)N�:r$rr)�split�len�decode�lowerr��
setdefault�list�append)r�item�kv�lcKeys    rr��BHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.append�sj���Z�Z��%���r�7�Q�;��q�E�L�L��1�7�7�9�E��J�J�)�)�%��3��J�J�u�%��*�%����D�'rr�N�rArBrCrDr r�rGr8rr�HeaderCountingBufferr�s��
 �
(rr�)TF)�Content-length�HostzAccept-encodingri�blahblahblah�spamspamspam�POST�/r$)r�r�HTTPConnectionr�sock�_bufferrr��request�assertEqualr�r�)rr��explicit_header�header�conn�body�headerss       r�test_auto_headers�HeaderTests.test_auto_headers�s���
	(�4�
	(� +�O�E���,�,�]�;��&�~�6��	�3�5���%����"�&)�#�d�)�n�G�O����V�S�$�8�� � ����!3�!3�F�L�L�N�!C�Q�G�F� +rc��"SS[5nSnSn[R"X25H�upE[R"S5n[S5UlU"5UlURUSU5 URURRSSRU55 M� S	nUH~n[R"S5n[S5UlU"5UlURUSS5 URURRSS
RU55 M� UH~n[R"S5n[S5UlU"5UlURUSS5 URURRSSRU55 M� [R"Xs5H~n[R"S5n[S5UlU"5UlURUSS5 URURRS
SRU55 M� g)Nc� �\rSrSrSrSrSrg)�?HeaderTests.test_content_length_0.<locals>.ContentLengthChecker�c�<�[RU5 SUlgr7)r�r �content_lengthr4s rr �HHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.__init__�s���
�
�d�#�&*��#rc���URSS5n[U5S:�a/USR5S:XaUSR5Ul[
R
X5 g)Nr�r$rscontent-length)r�r�r��stripr�r�r�)rr�r�s   rr��FHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.append�sM���Z�Z��a�(���r�7�Q�;�2�a�5�;�;�=�4E�#E�*,�Q�%�+�+�-�D�'����D�'r)r�Nr�r8rr�ContentLengthCheckerr��s��
+�
(rr�)N�)�PUTr��PATCHrir��0z%Header Content-Length incorrect on {})�GET�CONNECT�DELETE�HEAD�OPTIONS�TRACEz.Header Content-Length set for empty body on {}r�� �1)
r��	itertools�productrr�rr�r�r�r�r��format�chain)rr��bodies�methods_with_body�methodr�r��methods_without_bodys        r�test_content_length_0�!HeaderTests.test_content_length_0�s���	(�4�	(���4��%�-�-�.?�H�L�F��(�(��7�D�"�4�(�D�I�/�1�D�L��L�L���d�+�������+�+�T�7�>�>�v�F�
�I� 
��+�F��(�(��7�D�"�4�(�D�I�/�1�D�L��L�L���d�+�������+�+�T�@�G�G��O�
�+�+�F��(�(��7�D�"�4�(�D�I�/�1�D�L��L�L���b�)�������+�+�T�7�>�>�v�F�
�+� �o�o�&:�N�F��(�(��7�D�"�4�(�D�I�/�1�D�L��L�L���c�*�������+�+�T�7�>�>�v�F�
�Orc�~�[R"S5n[S5UlUR	SS5 URSS5 UR
SUR5 URSS5 UR
S	UR5 URS
S5 UR
SUR5 URS
S5 UR
SUR5 URSSS5 UR
SUR5 URSS5 UR
SUR5 URSS5 UR
SUR5 URSS5 UR
SUR5 URSS5 UR
SUR5 URS S!5 UR
S"UR5 URS#S$5 UR
S%UR5 URS&S$5 UR
S'UR5 URS(S$5 UR
S)UR5 URS*S$5 UR
S+UR5 g),Nrir�r�r��*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)rr�rr��
putrequest�	putheader�assertInr��rr�s  r�test_putheader�HeaderTests.test_putheader�s���$�$�]�3���t�$��	�����c�"����'��,��
�
�+�T�\�\�:����u�g�&��
�
�m�T�\�\�2����u�i�(��
�
�o�t�|�|�4�����(8�9��
�
�6����E����|�W�g�6��
�
�5�t�|�|�D����}�g�.��
�
�*�D�L�L�9����|�[�1��
�
�-�t�|�|�<����|�_�5��
�
�1�4�<�<�@����,�.>�?��
�
�<�d�l�l�K����*�,=�>��
�
�;�T�\�\�J����{�G�,��
�
�)�4�<�<�8����{�G�,��
�
�)�4�<�<�8����+�W�5��
�
�1�4�<�<�@����+�W�5��
�
�1�4�<�<�@rc��Sn[R"S5n[S5nX2lUR	SS5 URURU5 Sn[R"S5n[S5nX2lUR	SS5 URURU5 Sn[R"S	5n[S5nX2lUR	SS5 URURU5 S
n[R"S5n[S5nX2lUR	SS5 URURU5 g)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::]s@GET /foo HTTP/1.1
Host: [fe80::]
Accept-Encoding: identity

z
[fe80::%2]sCGET /foo HTTP/1.1
Host: [fe80::]:81
Accept-Encoding: identity

z
[fe80::%2]:81)rr�rr�r��assertStartsWithr�r�expectedr�r�s    r�test_ipv6host_header� HeaderTests.test_ipv6host_headers��8���$�$�]�3���"�~���	����U�F�#����d�i�i��2�8���$�$�_�5���"�~���	����U�F�#����d�i�i��2�8���$�$�\�2���"�~���	����U�F�#����d�i�i��2�8���$�$�_�5���"�~���	����U�F�#����d�i�i��2rc���Sn[U5n[R"U5nUR5 UR	URS5S5 UR	URS5S5 g)Nz4HTTP/1.1 200 OK
First: val
: nval
Second: val

�First�val�Second)rr�HTTPResponse�beginr��	getheader�rr�r��resps    r�!test_malformed_headers_coped_with�-HeaderTests.test_malformed_headers_coped_with/s\��O���$����"�"�4�(���
�
���������0�%�8��������1�5�9rc	���S[[SS55-S-[[SS55-S-n[U5n[R"U5nUR5 UR
URS5S	5 UR
URSS	5 UR
URS
5S5 UR
URS
S5 SR[[[SS555nUR
URS
5U5 UR
URS
U5 URURS55 URSUR5 URS5URS4H9nURUS5 URSU5 URUS5 M; g)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�r�r��msg�join�map�chr�assertIsNotNoner�r��assertEndsWith)rr�r�r��vchar�foldeds      r�test_parse_all_octets�!HeaderTests.test_parse_all_octets9s���
��u�T�8�4�5�
6�9�
�"�%��h�"7�8�
9�<�
�	
��$����"�"�4�(���
�
��������(8�9�3�?�������"2�3�S�9�������(9�:�G�D�������"3�4�g�>�����C��t�X�!6�7�8���������0�%�8�������'�*�E�2����T�^�^�J�7�8��
�
�j�$�(�(�+��~�~�j�1�4�8�8�J�3G�H�F��!�!�&�&�1��M�M�.��7�����(9�:�Irc�j�[R"S5n[S5UlUR	SS5 SnUHPup4URX445 UR
[S5 URX45 SSS5 SSS5 MR g!,(df   N=f!,(df   Mu=f)Nrir�r�r�))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
zInvalid header)	rr�rr�r��subTest�assertRaisesRegex�
ValueErrorr�)rr��cases�namer>s     r�test_invalid_headers� HeaderTests.test_invalid_headersWs����$�$�]�3���r�N��	�����s�#�
��$!�K�D����t�m�,��+�+�J�8H�I��N�N�4�/�J�-�,�!�I�I��-�,�s$�B#�+B�=B#�
B �B#�#
B2	c��Sn[U5n[R"USS9n[R"5nUR5 SSS5 WR
5R5nURUSS5 URUSS5 URUSS5 URUS	S
5 g!,(df   N�=f)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�
splitlinesr�)rr�r�r��output�liness      r�test_headers_debuglevel�#HeaderTests.test_headers_debuglevelus���
 �	
��$����"�"�4�A�6��
�
$�
$�
&�&��J�J�L�'����!�,�,�.������q��#C�D�����q��#7�8�����q��#9�:�����q��#9�:�
'�
&�s�C�
Cr8N)
rArBrCrDr�r�r�r�r�r�rrrGr8rrr{r{�s0��H�:@�D A�D!3�F:�;�<0�<;rr{c��\rSrSrSrSrg)�HttpMethodTestsi�c���SnUHXnUR[S5 [R"S5n[	S5UlUR
USS9 SSS5 MZ g!,(df   Ml=f)N)	zGET
zPOST
zPUT

z
POST
Valuez
POST
HOST:abczGET
rHost:abc
zPOST
Remainder:
z
GET
HOST:
z
PUTz'method can't contain control charactersrir�)r��url)rrrr�rr�r�)r�methodsr�r�s    r�test_invalid_method_names�)HttpMethodTests.test_invalid_method_names�so��

���F��'�'�� I�K��,�,�]�;��&�t�,��	����F���4�	K�K��K�K�s�7A"�"
A1	r8N)rArBrCrDrrGr8rrrr�s��5rrc�F�\rSrSrSrSrSrSrSrSSjr	Sr
S	rS
rg)
�TransferEncodingTest�sIt's just a flesh woundc�X�[R"S5n[S5UlUR	SS5 URUR
5SS9 URURR5u p#URU5nURX0R5 g)Nrirr�r�T)�encode_chunked)rr�rr�r��
endheaders�
_make_body�_parse_requestr�_parse_chunkedr��
expected_body)rr��_r�s    r�test_endheaders_chunked�,TransferEncodingTest.test_endheaders_chunked�s����$�$�]�3���s�O��	������$�������)�$��?��(�(������8�
��1��"�"�4�(������1�1�2rc�z�[R"S5n[S5UlUR	SSUR5SS05 UR
URR5up#nURSUR5Vs/sHoUR5PM sn5 URUSS5 URX@R5 [R"S5n[S5UlUR	SSURRS5SS05 UR
URR5up#nURSUR5Vs/sHoUR5PM sn5 URUSS5 URX@R5 [R"S5n[S5UlUR	SSSS	0S
UR5S9 UR
URR5up#nURSUVs/sHoUR5PM sn5 URUSS	5 URURU5UR5 gs snfs snfs snf)Nrirr�r��Transfer-Encoding�chunked�content-length�latin-1z
gzip, chunkedT)r�rr�)rr�rr�r�rr r�assertNotIn�keysr�r�r"r�r!�rr�r#r�r��ks      r�test_explicit_headers�*TransferEncodingTest.test_explicit_headers�sD���$�$�]�3���s�O��	�	
����C����*�-@�)�,L�	N� �.�.�t�y�y�~�~�>���D����)�w�|�|�~�+N�~�!�G�G�I�~�+N�O�����!4�5�y�A�����1�1�2��$�$�]�3���s�O��	�����C��+�+�2�2�9�=�
 �)�,�	.� �.�.�t�y�y�~�~�>���D����)�w�|�|�~�+N�~�!�G�G�I�~�+N�O�����!4�5�y�A�����1�1�2��$�$�]�3���s�O��	����V�S�(�/�:�����"�	�	$� �.�.�t�y�y�~�~�>���D����)�w�+G�w�!�G�G�I�w�+G�H�����!4�5��G�����,�,�T�2�D�4F�4F�G��5,O��,O��,Hs�J.
�<J3
�
J8
c	���SH�n[R"S5n[S5UlUR	SSURUS95 UR
URR5up4nURU5nURXPR5 URUSS5 URS	UVs/sHofR5PM sn5 M� gs snf)
N)FTrirr�r�)�empty_linesr'r(r))
rr�rr�r�rr rr!r�r"r+r�)rr2r�r#r�r�r.s       r�test_request�!TransferEncodingTest.test_request�s���)�K��(�(��7�D�"�3��D�I��L�L���T�_�_��_�E�
G� $�2�2�4�9�9�>�>�B��A���&�&�t�,�D����T�#5�#5�6����W�%8�9�9�E�
���-�7�/K�7�a���	�7�/K�L�*��0Ls�C*c�~�[R"S5n[S5UlUR	SSS5 URURR5up#nURUSS5 URSUVs/sHoUR5PM sn5 URUS	5 gs snf)
Nrirr�r�r8r'r(r)s0

)
rr�rr�r�r rr�r+r�r-s      r�test_empty_body�$TransferEncodingTest.test_empty_body�s����$�$�]�3���s�O��	����V�S�"�%��.�.�t�y�y�~�~�>���D�����!4�5�y�A����)�w�+G�w�!�G�G�I�w�+G�H�����|�,��,Hs�B:
c#��# �URRS5n[U5H9up4U(aUS-(aSv� U[U5S-
:a	US-v� M5Uv� M; g7f)N� r	rr$)r"r��	enumerater�)rr2r�idx�lines     rr�TransferEncodingTest._make_body�sY����"�"�(�(��.��"�5�)�I�C��s�Q�w��	��S��Z�!�^�#��T�k�!��
�*�s�A%A'c��URS5nUSn0nSnU[U5:a�[X%5S:�a|X%RS5upgURS5R5nURS5R5XF'US-
nU[U5:a[X%5S:�aM|X4SR	X%S-S54$)N�
rr$r�r*)r�r�r�r�r�)rrrr�r�r]�keyr�s        rr �#TransferEncodingTest._parse_request�s����
�
�7�#����(����
���#�e�*�n��U�X���!2��x�~�~�d�+�H�C��*�*�Y�'�-�-�/�C��:�:�i�0�6�6�8�G�L�
��F�A�	�#�e�*�n��U�X���!2�����e��E�F�m�!<�<�<rc��/n0nSnURS5nXTUS-upg[US5nUS:XaUS-
nOCURU[U55 UR	U5 US-
nU[U5:�aOMdSRU5$)Nrr?r	�r$r)r��intr�r�r�r�)rrr��trailersr]r�size�chunks        rr!�#TransferEncodingTest._parse_chunkeds�������
���
�
�7�#����!�A�#�,�K�D��t�R�=�D��q�y��Q�������T�3�u�:�.��K�K���
��F�A��3�u�:�~��!�$�x�x��~�rr8N)F)
rArBrCrDr"r$r/r3r6rr r!rGr8rrrr�s-��.�M�3�$H�LM� -�	�=�rrc�^�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0S/r1S0r2S1r3S2r4S3r5S4r6S5r7S6r8S7r9S8r:S9r;g:);�	BasicTestic
�f�UR1Sk[[[S555:*5 g)N>rr>�phrase�description�)�
assertTrue�set�dirrr4s r�&test_dir_with_added_behavior_on_status�0BasicTest.test_dir_with_added_behavior_on_statuss#�����B�c�#�j�Y\�o�J^�F_�_�`rc�l�"SS[R5n[R"U[5 g)Nc�v�\rSrSrSHSjr\S5r\S5r\S5r\S5r	\S5r
SrS	rS
r
SrSrS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!Sr"S r#S!r$S"r%S#r&S$r'S%r(S&r)S'r*S(r+S)r,S*r-S+r.\.r/S,r0\0r1S-r2S.r3\3r4S/r5S0r6S1r7S2r8\8r9S3r:S4r;S5r<S6r=S7r>S8r?S9r@S:rAS;rBS<rCS=rDS>rES?rFS@rGSArHSBrISCrJSDrKSErLSFrMgG)I�;BasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatusi#c�T�[RX5nXlX$lX4lU$r7)rD�__new__�_value_rLrM)�clsr>rLrM�objs     rrX�CBasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatus.__new__6s$���k�k�#�-��#��#�
�"-���
rc�,�SUs=:*=(a S:*$s $)N�d��r8r4s r�is_informational�LBasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatus.is_informational>����d�)�)�c�)�)�)�)rc�,�SUs=:*=(a S:*$s $)N���+r8r4s r�
is_success�FBasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatus.is_successBrbrc�,�SUs=:*=(a S:*$s $)N�,�r8r4s r�is_redirection�JBasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatus.is_redirectionFrbrc�,�SUs=:*=(a S:*$s $)N���r8r4s r�is_client_error�KBasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatus.is_client_errorJrbrc�,�SUs=:*=(a S:*$s $)N���Wr8r4s r�is_server_error�KBasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatus.is_server_errorNrbr)r^�Continuez!Request received, please continue)�ezSwitching Protocolsz.Switching to new protocol; obey Upgrade header)�f�
Processing)rXzEarly Hints)rd�OKz#Request fulfilled, document follows)���CreatedzDocument created, URL follows)���Acceptedz/Request accepted, processing continues off-line)��zNon-Authoritative InformationzRequest fulfilled from cache)��z
No Contentz"Request fulfilled, nothing follows)��z
Reset Contentz"Clear input form for further input)��zPartial ContentzPartial content follows)��zMulti-Status)��zAlready Reported)��zIM Used)rizMultiple Choicesz,Object has several resources -- see URI list)i-zMoved Permanently�(Object moved permanently -- see URI list)i.�Found�(Object moved temporarily -- see URI list)i/z	See Otherz'Object moved -- see Method and URL list)i0zNot Modifiedz)Document has not changed since given time)i1z	Use Proxyz@You must use proxy specified in Location to access this resource)i3zTemporary Redirectr�)i4zPermanent Redirectr�)rnzBad Requestz(Bad request syntax or unsupported method)��Unauthorizedz*No permission -- see authorization schemes)i�zPayment Requiredz"No payment -- see charging schemes)i��	Forbiddenz0Request forbidden -- authorization will not help)rN�	Not FoundzNothing matches the given URI)i�zMethod Not Allowedz-Specified method is invalid for this resource)i�zNot Acceptablez%URI not available in preferred format)i�zProxy Authentication Requiredz7You must authenticate with this proxy before proceeding)i�zRequest Timeoutz"Request timed out; try again later)i��ConflictzRequest conflict)i��Gonez5URI no longer exists and has been permanently removed)i�zLength Requiredz"Client must specify Content-Length)i�zPrecondition Failedz Precondition in headers is false)rzContent Too LargezContent is too large)i�zURI Too LongzURI is too long)i�zUnsupported Media Typez!Entity body in unsupported format)i�zRange Not SatisfiablezCannot satisfy request range)i�zExpectation Failedz'Expect condition could not be satisfied)i�zI'm a Teapotz5Server refuses to brew coffee because it is a teapot.)i�zMisdirected Requestz(Server is not able to produce a response)i�zUnprocessable Content)i��Locked)i�zFailed Dependency)i�z	Too Early)i�zUpgrade Required)i�zPrecondition Requiredz8The origin server requires the request to be conditional)i�zToo Many RequestszOThe user has sent too many requests in a given amount of time ("rate limiting"))i�zRequest Header Fields Too LargezVThe server is unwilling to process the request because its header fields are too large)i�zUnavailable For Legal ReasonszOThe server is denying access to the resource as a consequence of a legal demand)rszInternal Server ErrorzServer got itself in trouble)i�zNot Implementedz&Server does not support this operation)i�zBad Gatewayz+Invalid responses from another server/proxy)i�zService Unavailablez8The server cannot process the request due to a high load)i�zGateway Timeoutz4The gateway server did not receive a timely response)i�zHTTP Version Not SupportedzCannot fulfill request)i�zVariant Also Negotiates)i�zInsufficient Storage)i�z
Loop Detected)i�zNot Extended)i�zNetwork Authentication Requiredz7The client needs to authenticate to gain network accessr8N)r�)NrArBrCrDrX�propertyr`rfrkrpru�CONTINUE�SWITCHING_PROTOCOLS�
PROCESSING�EARLY_HINTSr{�CREATED�ACCEPTED�NON_AUTHORITATIVE_INFORMATION�
NO_CONTENT�
RESET_CONTENT�PARTIAL_CONTENT�MULTI_STATUS�ALREADY_REPORTED�IM_USED�MULTIPLE_CHOICES�MOVED_PERMANENTLY�FOUND�	SEE_OTHER�NOT_MODIFIED�	USE_PROXY�TEMPORARY_REDIRECT�PERMANENT_REDIRECT�BAD_REQUEST�UNAUTHORIZED�PAYMENT_REQUIRED�	FORBIDDEN�	NOT_FOUND�METHOD_NOT_ALLOWED�NOT_ACCEPTABLE�PROXY_AUTHENTICATION_REQUIRED�REQUEST_TIMEOUT�CONFLICT�GONE�LENGTH_REQUIRED�PRECONDITION_FAILED�CONTENT_TOO_LARGE�REQUEST_ENTITY_TOO_LARGE�URI_TOO_LONG�REQUEST_URI_TOO_LONG�UNSUPPORTED_MEDIA_TYPE�RANGE_NOT_SATISFIABLE�REQUESTED_RANGE_NOT_SATISFIABLE�EXPECTATION_FAILED�IM_A_TEAPOT�MISDIRECTED_REQUEST�UNPROCESSABLE_CONTENT�UNPROCESSABLE_ENTITY�LOCKED�FAILED_DEPENDENCY�	TOO_EARLY�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�VARIANT_ALSO_NEGOTIATES�INSUFFICIENT_STORAGE�
LOOP_DETECTED�NOT_EXTENDED�NETWORK_AUTHENTICATION_REQUIREDrGr8rr�CheckedHTTPStatusrV#s6��&
��
*��
*��
*��
*��
*��
*��
*��
*��
*��
*�L�H�#F��*�J�,�K�A�B�E�G�C�H�-Q�)�P�J�V�M�O�O�.�L�6��$�G� @��!<��L�E�S�I�=�L�T�I�"<��"<��<�K�>�L� 6��D�I�1�I�"A��9�N�-K�)�6�O�:�H�I�D�6�O�#4��!(��'8�$�C�L�#/� �&5�"�%0�!�/D�+�";��I�K�#<��$@�!�#8� �"�F� 8��(�I�6��%L�!�!<��/(�+�-?�)�
%0�!�:�O�?�K�#L��H�O�**�&�&D�#�#>� �0�M�.�L�/K�+rr�)�enum�IntEnum�_test_simple_enumr)rr�s  r�test_simple_httpstatus� BasicTest.test_simple_httpstatus"s*��c	K����c	K�H	
���0�*�=rc��[RR5H'nURUS5 UR	US5 M) g)Nr^rt)r�__members__�values�assertGreaterEqual�assertLessEqual)r�members  r�test_httpstatus_range�BasicTest.test_httpstatus_range�s=��!�,�,�3�3�5�F��#�#�F�C�0�� � ���-�6rc���Sn[RR5HOnUHFuup4n[X%5nX2s=::aU::aO OUR	U5 M5URU5 MH MQ g)N)))r^r_r`))rdrerf))rirjrk))rnrorp))rsrtru)rr�r��getattrrO�assertFalse)r�
categoriesr�r��upper�category�category_indicators       r�test_httpstatus_category�"BasicTest.test_httpstatus_category�sg��
�
�!�,�,�3�3�5�F�,6�(����%,�V�%>�"��+�e�+��O�O�$6�7��$�$�%7�8�-7�6rc���Sn[U5n[R"U5nUR5 UR	URS5S5 UR
UR55 UR
UR5 UR	UR5S5 URUR55 UR
UR5 UR5 URUR5 Sn[U5n[R"U5nUR[RUR5 g)N�HTTP/1.1 200 Ok

Textrr�TextzHTTP/1.1 400.100 Not Ok

Text)
rrr�r�r�r[r��isclosed�closedrOr.�assertRaises�
BadStatusLiner�s    r�test_status_lines�BasicTest.test_status_lines�s���-���$����"�"�4�(���
�
��������1��s�+��������)�������%��������g�.�����
�
��(�������%��
�
��������$�4���$����"�"�4�(�����&�.�.��
�
�;rc�f�[R"S5nUR[U5S5 g)Nr�zBadStatusLine("''"))rr�r��repr)r�excs  r�test_bad_status_repr�BasicTest.test_bad_status_repr�s'���"�"�2�&������c��$=�>rc��Sn[U5n[R"U5nUR5 UR	URS5S5 UR
UR55 UR	URS5S5 URUR55 UR
UR5 UR5 URUR5 g�N�*HTTP/1.1 200 Ok
Content-Length: 4

Textr	�Te�xt�rrr�r�r�r[r�r�rOr�r.r�s    r�test_partial_reads�BasicTest.test_partial_reads�s���B���$����"�"�4�(���
�
��������1��u�-��������)�������1��u�-�����
�
��(�������%��
�
��������$rc���Sn[U5n[R"U5nUR5 UR	UR5S5 UR
UR55 UR	UR5S5 URUR55 UR
UR5 UR5 URUR5 g)Nz4HTTP/1.1 200 Ok
Content-Length: 13

Text
AnothersText
sAnother)rrr�r�r�r`r�r�r[rOr�r.r�s    r�test_mixed_reads�BasicTest.test_mixed_reads
s���N���$����"�"�4�(���
�
���������+�6��������)��������j�1�����
�
��(�������%��
�
��������$rc��Sn[U5n[R"U5nUR5 [	S5nURU5nUR
US5 UR
[U5S5 URUR55 URU5nUR
US5 UR
[U5S5 URUR55 URUR5 UR5 URUR5 gr��
rrr�r��	bytearray�readintor�r�r�r�rOr�r.�rr�r�r��br]s      r�test_partial_readintos� BasicTest.test_partial_readintoss���B���$����"�"�4�(���
�
���a�L���M�M�!�������A������q��5�)��������)��M�M�!�������A������q��5�)�����
�
��(�������%��
�
��������$rc�v�Sn[U5n[R"U5nUR5 UR	URS5S5 UR
UR55 URUR5 UR5 UR
UR5 g)Nr��
r��rrr�r�r�r[rOr�r�r�r.r�s    r�test_partial_reads_past_end�%BasicTest.test_partial_reads_past_end-s��A���$����"�"�4�(���
�
��������2���0�����
�
��(�������%��
�
��������$rc���Sn[U5n[R"U5nUR5 [	S5nURU5nUR
US5 UR
[U5SSS5 URUR55 URUR5 UR5 URUR5 g)Nr�r�r�)
rrr�r�rrr�r�rOr�r�r�r.rs      r�test_partial_readintos_past_end�)BasicTest.test_partial_readintos_past_end9s���A���$����"�"�4�(���
�
���b�M���M�M�!�������A������q��"�1��w�/�����
�
��(�������%��
�
��������$rc�8�Sn[U5n[R"U5nUR5 UR	URS5S5 UR
UR55 UR	URS5S5 UR	URS5S5 URUR55 UR
UR5 UR5 URUR5 g)Nr�r	r�r�r$rr�r�s    r�$test_partial_reads_no_content_length�.BasicTest.test_partial_reads_no_content_lengthHs���-���$����"�"�4�(���
�
��������1��u�-��������)�������1��u�-�������1��s�+�����
�
��(�������%��
�
��������$rc�:�Sn[U5n[R"U5nUR5 [	S5nURU5nUR
US5 UR
[U5S5 URUR55 URU5nUR
US5 UR
[U5S5 URU5nUR
US5 URUR55 g)Nr�r	r�r�r)rrr�r�rrr�r�r�r�rOrs      r�(test_partial_readintos_no_content_length�2BasicTest.test_partial_readintos_no_content_lengthXs���-���$����"�"�4�(���
�
���a�L���M�M�!�������A������q��5�)��������)��M�M�!�������A������q��5�)��M�M�!�������A������
�
��(rc��Sn[U5n[R"U5nUR5 UR	URS5S5 UR
UR55 UR	URS5S5 UR	URS5S5 URUR55 g)N�+HTTP/1.1 200 Ok
Content-Length: 10

Textr	r�r�r$r)	rrr�r�r�r[r�r�rOr�s    r�"test_partial_reads_incomplete_body�,BasicTest.test_partial_reads_incomplete_bodyks���C���$����"�"�4�(���
�
��������1��u�-��������)�������1��u�-�������1��s�+�����
�
��(rc���Sn[U5n[R"U5nUR5 [	S5nURU5nUR
US5 UR
[U5S5 URUR55 URU5nUR
US5 UR
[U5S5 URU5nUR
US5 URUR55 URUR5 UR5 URUR5 g)Nrr	r�r�rrrs      r�&test_partial_readintos_incomplete_body�0BasicTest.test_partial_readintos_incomplete_bodyxs	��C���$����"�"�4�(���
�
���a�L���M�M�!�������A������q��5�)��������)��M�M�!�������A������q��5�)��M�M�!�������A������
�
��(�������%��
�
��������$rc�$�SH2nUR[R[RU5 M4 SHRupn[R"U5nUR	X$R
5 UR	X4R5 MT g)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:r%r&)r%r%r&)�[fe80::207:e9ff:fe9b]r$r&)�[fe80::207:e9ff:fe9b]:r$r&)r�r�
InvalidURLr�r�rr�r�hp�h�p�cs     r�test_host_port�BasicTest.test_host_port�sv��I�B����f�/�/��1F�1F��K�I�P�H�B�1��%�%�b�)�A����Q���'����Q���'�Prc��SnSn[U5n[R"U5nUR5 UR	S5nURXR5 g)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�r�)rr�hdr�sr)�cookiess      r�test_response_headers�BasicTest.test_response_headers�sR����O��
�t�������"��	���	��+�+�l�+������&rc��[S[5n[R"USS9nUR	5 UR5(aUR
S5 gg)N�*HTTP/1.1 200 OK
Content-Length: 14432

r��r��)Did not expect response from HEAD request)rrWrr�r�r[�fail�rr�r�s   r�test_read_head�BasicTest.test_read_head�sR���
�
�	��
�"�"�4��7���
�
���9�9�;�;��I�I�A�B�rc��[S[5n[R"USS9nUR	5 [S5nUR
U5S:waURS5 UR[U5S5 g)Nr9r�r:�rr;�)
rrWrr�r�rrr<r�r�)rr�r�rs    r�test_readinto_head�BasicTest.test_readinto_head�sp���
�
�	��
�"�"�4��7���
�
���a�L���=�=���q� ��I�I�A�B�����q��9�-rc��SRS[[RS-555S-nSU-n[	U5n[R
"U5nUR
[RSUR5 g)Nr
c3�,# �UH
nSU-v� M g7f)z
Header%d: fooNr8)�.0�is  r�	<genexpr>�2BasicTest.test_too_many_headers.<locals>.<genexpr>�s���F�'D�!�.��1�'D�s�r$zHTTP/1.1 200 OK
zgot more than \d+ headers)	r�r�r�_MAXHEADERSrr�r�
HTTPExceptionr�)rr�rr4r)s     r�test_too_many_headers�BasicTest.test_too_many_headers�s}���+�+�F�',�V�-?�-?�!�-C�'D�F�F�HN�O��%��/���t�������"�����v�3�3�;�Q�W�W�	Frc��Sn[[S5n[R"S5n[	U5nXClUR
SSU5 URURU5 SSS5 g!,(df   g=f)Ns_GET /foo HTTP/1.1
Host: example.com
Accept-Encoding: identity
Transfer-Encoding: chunked

r*rir�r�)	�open�__file__rr�rr�r�r�r�rr�r�r�r�s     r�test_send_file�BasicTest.test_send_file�sf����
�(�D�
!�T��(�(��7�D��d�#�D��I��L�L����-��!�!�$�)�)�X�6�"�
!�
!�s�AA3�3
Bc���Sn[R"S5n[S5nX2lUR	U5 URXR5 SUlUR	[R"SU55 URXR5 SUlUR	[R"U55 URXR5 g)Ns"this is a test this is only a testrirr)
rr�rr��sendr�r�arrayrErFr�s    r�	test_send�BasicTest.test_send�s���8���$�$�]�3���$����	��	�	�(������9�9�-���	��	�	�%�+�+�c�8�,�-�����9�9�-���	��	�	�"�*�*�X�&�'�����9�9�-rc�^�Sm"U4SjS[R5nSn[R"S5n[	S5nXClUR
U"55 URURU5 g)Nc3�$# �Sv� Sv� Sv� g7f)Nr�data_twor8r8rrr�/BasicTest.test_send_updating_file.<locals>.data�s����L��J�����c�4>�\rSrSrSrY"5rSSjrSrg)�7BasicTest.test_send_updating_file.<locals>.UpdatingFilei�r)c�,�[UR5$r7)�next�d)r�	blocksizes  rr[�<BasicTest.test_send_updating_file.<locals>.UpdatingFile.read�s���D�F�F�|�#rr8Nrc)rArBrCrDr/rcr[rG)rs�r�UpdatingFiler`�s����D���A�
$rrfsdatarir�)	rE�
TextIOBaserr�rr�rVr�r)rrfr�r�r�rs     @r�test_send_updating_file�!BasicTest.test_send_updating_file�s_���	�
	$�2�=�=�	$����$�$�]�3���"�~���	��	�	�,�.�!�������H�-rc���SnSn[R"S5n[S5nXClUR	SSU"5SS05 URURU5 g)	NsbGET /foo HTTP/1.1
Host: example.com
Accept-Encoding: identity
Content-Length: 11

onetwothreec3�$# �Sv� Sv� Sv� g7f)Nsonestwosthreer8r8rrr��&BasicTest.test_send_iter.<locals>.bodys����L��L��N�r^rir�r�r�r��11)rr�rr�r�r�rrRs     r�test_send_iter�BasicTest.test_send_iters\��&��	�
�$�$�]�3���"�~���	����U�F�D�F�-=�t�,D�E�������H�-rc�P�Sn[R"SUS9n[S5nX2lSU-S-nUR	SS[
R"U5SS	05 URURS
5 URRSS5SnURXT5 g)
N�ri�rd�a�br�r�r��9r
�

r$)rr�rr�r�rErFr�rrr�)rrdr�r�r�r�s      r�test_blocksize_request� BasicTest.test_blocksize_requests����	��$�$�]�i�H���$����	��)�#�d�*�����U�C����H�!5�8H�#�7N�O�����+�+�Q�/��y�y���{�A�.�q�1������(rc��Sn[R"SUS9n[S5nX2lSU-S-nUR	[
R"U55 URURS5 URURU5 g)Nrqrirrrsrtr	)
rr�rr�rVrErFr�rr)rrdr�r�r�s     r�test_blocksize_send�BasicTest.test_blocksize_send"sv���	��$�$�]�i�H���$����	��)�#�d�*���	�	�"�*�*�X�&�'�����+�+�Q�/�������H�-rc���[R"S5n[S5UlUR	[
5 UR
SSU5 SSS5 g!,(df   g=f)Nrir�r��test)rr�rr�r��	TypeErrorr�r�s  r�test_send_type_error�BasicTest.test_send_type_error-sG���$�$�]�3���r�N��	�
�
�
�y�
)��L�L����.�*�
)�
)�s�A�
A'c�P�[n[[[-[-5n[
R"USS9nUR5 URUR5U5 UR5 SH�nURSUS9 [[[-[-5n[
R"USS9nUR5 URUR5 URURU5U5 UR5 SSS5 M� URS5 [[[-[-5n[
R"USS9nUR5 URUR5 URURS5S5 UR5 SSS5 [S	S
5H�n[[[-[-5n[
R"USS9nUR5 URURU5URU5-UR5-U5 UR5 M� SHln[[U-5n[
R"USS9nUR5 UR5 UR!S5 UR5 Mn g!,(df   GM�=f!,(df   GN>=f![
R"ajnURUR$U5 S
['U5-nUR[)U5U5 UR[+U5U5 SnAN�SnAff=f!UR5 f=f)Nr�r:)i����rdNz	full read)r]z	read1(-1)rds
hello worlr$��r�zfoo
�IncompleteRead expected�IncompleteRead(%d bytes read))�chunked_expectedr�
chunked_start�
last_chunk�chunked_endrr�r�r�r[r.rrOr(�read1r�r<�IncompleteRead�partialr�r�r)rr�r�r�r]�xrH�expected_messages        r�test_chunked�BasicTest.test_chunked4s���#���-�*�4�{�B�C���"�"�4��6���
�
���������h�/��
�
��"�A����k�Q��/�!�-�*�"<�{�"J�K���*�*�4��>���
�
��������-�� � ����1��x�8��
�
��
0�/�"��\�\�+�
&��m�j�8�;�F�G�D��&�&�t�E�:�D��J�J�L��O�O�D�L�L�)����T�Z�Z��^�]�;��J�J�L�
'��q�"��A��m�j�8�;�F�G�D��&�&�t�E�:�D��J�J�L����T�Y�Y�q�\�D�I�I�a�L�8�4�9�9�;�F��Q��J�J�L��!�A��m�a�/�0�D��&�&�t�E�:�D��J�J�L�

��	�	���	�	�3�4��
�
��!�30�/��'�
&��,�(�(�
;�� � ����H�5�#B�S��]�#R� �� � ��a��*:�;�� � ��Q��)9�:�:��	
;���
�
��sK�BK-�:BL�7L�N�-
K=	�
L�N�&A N�N�N�N�N%c��[n[U5n[S5n[[[
-[-5n[R"USS9nUR5 URU5nURUSUU5 URXb5 UR5 [SS5H�n[[[
-[-5n[R"USS9nUR5 [U5nURUSU5nX�RXxXh-5-
nX�RXxS5-
nURUSUU5 URX�5 UR5 M� SHmn	[[U	-5n[R"USS9nUR5 URU5nURS5 UR5 Mo g![R ajnURUR"U5 S	[U5-n
UR[%U5U
5 UR['U5U
5 SnAN�SnAff=f!UR5 f=f)
Nr�r�r:r$r�rr�r�r�)r�r�rrr�r�r�rr�r�rr�r.r��
memoryviewr<r�r�r�r)rr��	nexpectedrr�r�r]�mrHr�r�s           r�test_readinto_chunked�BasicTest.test_readinto_chunkedgs��#����M�	��c�N���-�*�4�{�B�C���"�"�4��6���
�
���M�M�!�������:�I���1�����&��
�
���q�"��A��m�j�8�;�F�G�D��&�&�t�E�:�D��J�J�L��1�
�A��
�
�a��!�f�%�A�
���q�1�5�z�*�*�A�
���q��u�%�%�A����Q�z�	�]�H�5����Q�*��J�J�L��!�A��m�a�/�0�D��&�&�t�E�:�D��J�J�L�

��M�M�!�$���	�	�3�4��
�
��!���(�(�
;�� � ����H�5�#B�S��]�#R� �� � ��a��*:�;�� � ��Q��)9�:�:��	
;���
�
��s1�9G0�
I1�0I.�A I)�$I1�)I.�.I1�1Jc��Sn[U[-[-5n[R"USS9nUR5 UR
UR5S5 UR
URS5 UR
URS5 URUR55 URUR5 UR5 URUR5 g)N�EHTTP/1.1 200 OK
Transfer-Encoding: chunked

a
hello world
1
d
r�r:rrdr{)rr�r�rr�r�r�r[�status�reasonrOr�r�r�r.)rr�r�r�s    r�test_chunked_head�BasicTest.test_chunked_head�s���
�	��-�*�4�{�B�C���"�"�4��7���
�
���������c�*�������c�*�������d�+�����
�
��(�������%��
�
��������$rc�P�Sn[U[-[-5n[R"USS9nUR5 [
S5nURU5nURUS5 UR[U5S5 URURS5 URURS5 URUR55 URUR5 UR!5 URUR5 g)	Nr�r�r:rArrBrdr{)rr�r�rr�r�rrr�r�r�r�rOr�r�r�r.)rr�r�r�rr]s      r�test_readinto_chunked_head�$BasicTest.test_readinto_chunked_head�s���
�	��-�*�4�{�B�C���"�"�4��7���
�
���a�L���M�M�!�������A������q��9�-�������c�*�������d�+�����
�
��(�������%��
�
��������$rc���[S5n[R"USS9nUR5 UR	UR5S5 UR
UR55 g)Nz.HTTP/1.1 200 OK
Content-Length: -1

Hello
r�r:�Hello
)rrr�r�r�r[rOr�r=s   r�test_negative_content_length�&BasicTest.test_negative_content_length�sS���D�F���"�"�4��6���
�
���������l�3�����
�
��(rc���[S5n[R"USS9nUR5 UR	5 URS5 g![Ra{nURURS5 UR[U5S5 UR[U5S5 URUR55 SnAgSnAff=f)Nz.HTTP/1.1 200 OK
Content-Length: 10

Hello
r�r:r�r�z-IncompleteRead(7 bytes read, 3 more expected))
rrr�r�r[r<r�r�r�r�rrOr�)rr�r�rHs    r�test_incomplete_read�BasicTest.test_incomplete_read�s����R�S���"�"�4��6���
�
��
	1��I�I�K�
�I�I�/�0���$�$�	-����Q�Y�Y��5����T�!�W�L�
N����S��V�L�
N��O�O�D�M�M�O�,�,��
	-�s�A�C#�(A1C�C#c�&^�[SS5n[R"S5mUTlUR	[
U4Sj5 TR
5nURSUR5 URSURS55 g)NzgHTTP/1.0 401 Authorization Required
Content-type: text/html
WWW-Authenticate: Basic realm="example"
sContent-Lengthric�*>�TRSSS5$)Nr��/urlr�)r�)r�s�r�<lambda>�&BasicTest.test_epipe.<locals>.<lambda>�s���$�,�,�u�f�f�"Err�zBasic realm="example"zwww-authenticate)
rIrr�r�r�rP�getresponser�r�r�)rr�r�r�s   @r�
test_epipe�BasicTest.test_epipe�s�����
<�
�	��
�$�$�]�3����	����'�E�	G����!������d�k�k�*����2����(:�;�	=rc���SSS--S-n[R"[U55nUR[R[R
4UR5 g)N�HTTP/1.1 200 Okr.�r
)rr�rr��LineTooLongr�r��rr�r�s   r�test_overflowing_status_line�&BasicTest.test_overflowing_status_line�sO�� �3��;�.��7���"�"�:�d�#3�4�����6�-�-�v�/C�/C�D�d�j�j�Qrc��SSS--S-n[R"[U55nUR[RUR
5 g)NzHTTP/1.1 200 OK
X-Foo: barr)r��

)rr�rr�r�r�r�s   r�test_overflowing_header_line�&BasicTest.test_overflowing_header_line�sQ��
���;�
'�)3�
4�	
��"�"�:�d�#3�4�����&�,�,�d�j�j�9rc�r�SS-n[R"[U55nUR[R5nUR5 SSS5 UR
S[WR55 UR
S[UR55 g!,(df   NY=f)NzHTTP/1.1 100 OK
r
i�zgot more than r�)	rr�rr�rLr�r�r�	exception)rr�r��cms    r�'test_overflowing_header_limit_after_100�1BasicTest.test_overflowing_header_limit_after_100�s���
��
�	
��"�"�:�d�#3�4��
�
�
�v�3�3�
4���J�J�L�5�	
�
�
�&��B�L�L�(9�:��
�
�i��R�\�\�!2�3�5�
4�s�B(�(
B6c���SSS--S-n[R"[U55nUR5 UR	[R
UR5 g)Nz/HTTP/1.1 200 OK
Transfer-Encoding: chunked

rr�za
hello world
0

)rr�rr�r�r�r[r�s   r�test_overflowing_chunked_line�'BasicTest.test_overflowing_chunked_lines\��
1��E�k�
��
�	
��"�"�:�d�#3�4���
�
�����&�,�,�d�i�i�8rc�t�Sn[U5n[R"U5nUR5 UR	UR5S5 UR
UR55 URUR5 UR5 UR
UR5 g)Nr�rr
r�s    r�test_early_eof�BasicTest.test_early_eof
s}�� ���$����"�"�4�(���
�
���������c�*�����
�
��(�������%��
�
��������$rc�^�[R"S5nSm"U4SjS[R5nX!l[	S5UlUR
SS5 UR[RUR5 URTR5 URUR
R5 g)Nric�">�\rSrSrU4SjrSrg)�+BasicTest.test_error_leak.<locals>.Responseic�R>�Um[RR"U/UQ70UD6 gr7)rr�r )rrvrw�responses   �rr �4BasicTest.test_error_leak.<locals>.Response.__init__s&������#�#�,�,�T�>�C�>�2�>rr8N)rArBrCrDr rG)r�s�r�Responser�s
���
?�
?rr�zInvalid status liner�r�)
rr�r��response_classrr�r�r�r�r�rOr�r)rr�r�r�s   @r�test_error_leak�BasicTest.test_error_leaks�����$�$�]�3����	?�v�*�*�	?�
'���4�5��	����U�C� ����&�.�.��0@�0@�A�������(�����	�	�-�-�.rc��Sn[S-n[[U-[-[-5n[
R"USS9nUR5 URUR5U5 UR5 g)Nz3;foo=bar
abc
sabcr�r:)r�rr��last_chunk_extendedr�rr�r�r�r[r.)r�extrar�r�r�s     r�test_chunked_extension� BasicTest.test_chunked_extension)se��+��#�f�,���-�%�/�2E�E��S�T���"�"�4��6���
�
���������h�/��
�
�rc���[n[[[-5n[R
"USS9nUR
5 URUR5U5 UR5 g�Nr�r:)
r�rr�r�rr�r�r�r[r.�rr�r�r�s    r�test_chunked_missing_end�"BasicTest.test_chunked_missing_end3sP��#���-�*�4�5���"�"�4��6���
�
���������h�/��
�
�rc�V�[n[[[-[-[
-5n[R"USS9nUR5 URUR5U5 URURR5S5 UR5 g)Nr�r:r)
r�rr�r�rEr�rr�r�r�r[r,r.r�s    r�test_chunked_trailers�BasicTest.test_chunked_trailers<su��#���-�*�4�x�?�+�M�N���"�"�4��6���
�
���������h�/���������)�3�/��
�
�rc�~�[nSn[[[-[-[
-U-5n[R"USS9nUR5 URUR5U5 URURR5URS55 UR5 g)N�	extradatar�r:r)r�rr�r�rEr�rr�r�r�r[r,rr.)rr�r�r�r�s     r�test_chunked_sync�BasicTest.test_chunked_syncGs���#���	��-�*�4�x�?�+�M�PY�Y�Z���"�"�4��6���
�
���������h�/���������)�9�+;�+;�G�+D�E��
�
�rc�,�SnSn[SU-U-5n[R"USS9nUR5 UR	UR5U5 UR	URR5U5 UR5 g)N�	extradata�
Hello123
�'HTTP/1.1 200 OK
Content-Length: 10

r�r:)rrr�r�r�r[r,r.�rr�r�r�r�s     r�test_content_length_sync�"BasicTest.test_content_length_syncSsw�� �	�"���J�X�U�Xa�a�b���"�"�4��6���
�
���������h�/���������)�9�5��
�
�rc�0�SnSn[SU-U-5n[R"USS9nUR5 UR	URS5U/5 UR	URR5U5 UR5 g�Nr�r�r�r�r:i�)	rrr�r�r��	readlinesr,r[r.r�s     r�test_readlines_content_length�'BasicTest.test_readlines_content_length_s|�� �	�"���J�X�U�Xa�a�b���"�"�4��6���
�
���������-��z�:���������)�9�5��
�
�rc�.�SnSn[SU-U-5n[R"USS9nUR5 UR	URS5U5 UR	URR5U5 UR5 gr�)	rrr�r�r�r�r,r[r.r�s     r�test_read1_content_length�#BasicTest.test_read1_content_lengthjsz�� �	�"���J�X�U�Xa�a�b���"�"�4��6���
�
��������D�)�8�4���������)�9�5��
�
�rc�p�SnSn[SU-U-5n[R"USS9nUR5 UR	URS5U5 UR	URS5S5 UR	URR5U5 UR5 g)Nr�r�r�r�r:rr)	rrr�r�r�r`r,r[r.r�s     r�"test_readline_bound_content_length�,BasicTest.test_readline_bound_content_lengthus��� �	�"���J�X�U�Xa�a�b���"�"�4��6���
�
��������r�*�H�5�������r�*�C�0���������)�9�5��
�
�rc�z�SnSn[SUS--U-5n[R"USS9nUR5 UR	URS5US-5 UR	UR
5U5 UR	URR
5U5 UR5 g)	Nr�r�s'HTTP/1.1 200 OK
Content-Length: 30

r
r�r:�r	)	rrr�r�r�r�r[r,r.r�s     r�test_read1_bound_content_length�)BasicTest.test_read1_bound_content_length�s��� �	�"���J�X�VW�Z�W�Zc�c�d���"�"�4��6���
�
��������B���!��4��������h�/���������)�9�5��
�
�rc�x^^�[R"[S45mURTR5 SmUU4Sjn[
R"US9nUR5 URUR[S55 [R"TR56nURSS5 UR5nURUR [R"5 [R"UR%5S9nUR'S5 UR)5 UR	5 UR	5 UR5 URTS5 g!UR)5 f=f!UR	5 UR	5 f=f)	Nrc�N>�TR5upU URS5nUR5nURS5(dOM)UR	S5 UR5mSSS5 SSS5 g!,(df   N=f!,(df   g=f)Nr*r?s'HTTP/1.1 200 Connection established

)�acceptr1r`�rstripr&r[)r��address�readerr<�result�servs    ��r�
run_server�2BasicTest.test_response_fileno.<locals>.run_server�su���"�k�k�m�O�T��t�}�}�T�*�f��!�?�?�,�D��;�;�w�/�/������K�L������+���*�*����s#�B�AB�4B�
B	�B�
B$��targetr$r�z
dummy:1234)�filenos
proxied data
)�socket�
create_server�HOST�
addCleanupr.�	threading�Thread�startr��floatrr��getsocknamer�r�r�r�r{rr&�detach)rr��threadr�r�r4r�r�s      @@r�test_response_fileno�BasicTest.test_response_fileno�s2����#�#�T�1�I�.������
�
�#���
	'��!�!��4������������U�1�X�.��$�$�d�&6�&6�&8�9�����Y��-��#�#�%��		����X�_�_�f�i�i�8��
�
�X�_�_�%6�7�A�
��	�	�+�,����
��N�N���J�J�L����
�����!2�3�����
���N�N���J�J�L�s%�AF�F�.F�F�F�"F9c��^^�[R"[S45mURTR5 UU4Sjn[
R"US9nUR5 URURS5 [R"TR56n[SS5H\nSU-mURSS	5 UR5nUR[!UR#55T5 SSS5 M^ UR	5 URS5 g!,(df   M�=f!UR	5 URS5 f=f)
Nrc�H>�TR5upU URS5(a]URST-5 URSTS--5 URSTTS--
-5 URS5(aM]SSS5 g!,(df   g=f)N�s'HTTP/1.1 200 Ok
Content-Length: %d

�Ar
�B�r��recvr&�r�r�r�rFs  ��rr��7BasicTest.test_large_content_length.<locals>.run_server�s����"�k�k�m�O�T���i�i��o�o��L�L� �"&�'�(��L�L���q��!1�2��L�L����a���!8�9�
�i�i��o�o����s�A2B�
B!r��?��r$r�r�)rrrrr.rrr	r�rr�rr�r�r�r�r�r[�rr�r
r��wr�r�rFs      @@r�test_large_content_length�#BasicTest.test_large_content_length�s����#�#�T�1�I�.������
�
�#�		:��!�!��4������������S�)��$�$�d�&6�&6�&8�9��	��2�r�]���A�v�����U�C�(��%�%�'�8��$�$�S�����%9�4�@�(�'�#�
�J�J�L��K�K���	(�'��
�J�J�L��K�K���s$�#6E�*D1�E�1
E	�;E�#E&c�^^�[R"[S45mURTR5 UU4Sjn[
R"US9nUR5 URURS5 [R"TR56n[SS5HmnSU-mURSS	5 UR5nUR[R UR"5 SSS5 UR	5 Mo UR	5 SmURSS	5 UR	5 URS5 g!,(df   Nh=f!UR	5 SmURSS	5 UR	5 URS5 f=f)
Nrc��>�TR5upU URS5 T(d
SSS5 gURST-5 SSS5 MU!,(df   N=f)Nrs+HTTP/1.1 200 Ok
Content-Length: %d

Textrrs  ��rr��ABasicTest.test_large_content_length_truncated.<locals>.run_server�s[����"&�+�+�-�����I�I�d�O����T��L�L� �#'�'�(�	���T�s�A�A�
A&rr��Ar$r�r�)rrrrr.rrr	r�rr�rr�r�r�r�r�r[rs      @@r�#test_large_content_length_truncated�-BasicTest.test_large_content_length_truncated�sD����#�#�T�1�I�.������
�
�#�	(��!�!��4������������S�)��$�$�d�&6�&6�&8�9��	��2�r�]���A�v�����U�C�(��%�%�'�8��%�%�f�&;�&;�X�]�]�K�(��
�
��#�
�J�J�L��D��L�L���$��J�J�L��K�K���(�'��
�J�J�L��D��L�L���$��J�J�L��K�K���s%�#6E7�+E&�E7�&
E4	�0E7�7AF>c��"SS[R5nU"S5n[S5UlUR	SS5 g)Nc��\rSrSrSrSrg)�RBasicTest.test_putrequest_override_domain_validation.<locals>.UnsafeHTTPConnectioni�c��gr7r8�rrs  r�_validate_path�aBasicTest.test_putrequest_override_domain_validation.<locals>.UnsafeHTTPConnection._validate_path����rr8N)rArBrCrDr,rGr8rr�UnsafeHTTPConnectionr)����
rr/rir�r�z/�rr�rr�r��rr/r�s   r�*test_putrequest_override_domain_validation�4BasicTest.test_putrequest_override_domain_validation�s9��
	�6�#8�#8�	�$�M�2���r�N��	�����w�'rc��"SS[R5nU"S5n[S5UlUR	SSSS9 g)	Nc��\rSrSrSrSrg)�PBasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnectionic��gr7r8r+s  r�_validate_host�_BasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnection._validate_hostr.rr8N)rArBrCrDr9rGr8rrr/r7r0rr/z
example.com
r�r�r�r$)�	skip_hostr1r2s   r�(test_putrequest_override_host_validation�2BasicTest.test_putrequest_override_host_validations@��	�6�#8�#8�	�$�$5�6���r�N��	�	
����s�a��0rc��"SS[R5nU"S5n[S5UlUR	SS5 g)Nc��\rSrSrSrSrg)�IBasicTest.test_putrequest_override_encoding.<locals>.UnsafeHTTPConnectionic�$�URS5$)N�utf-8)r)r�str_urls  r�_encode_request�YBasicTest.test_putrequest_override_encoding.<locals>.UnsafeHTTPConnection._encode_requests���~�~�g�.�.rr8N)rArBrCrDrDrGr8rrr/r@s��
/rr/rir�r�u/☃r1r2s   r�!test_putrequest_override_encoding�+BasicTest.test_putrequest_override_encodings9��	/�6�#8�#8�	/�$�M�2���r�N��	�����v�&rr8N)<rArBrCrDrRr�r�r�r�r�r�rr	rrrrrrr0r6r>rCrMrSrXrhrnrwrzrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr%r3r<rFrGr8rrrJrJs��a�e>�N.�9�$<�*?�
%�
%�%�(
%�
%�%� )�&)�%�,(�"'�$C�
.�F�7�.�.�*.� 
)�	.�/�1�f)�V%�(%�.)�1� 
=�"R�
:�4�9�
%�/� ��	�
�
�	�	�
�
�#4�J�<"�H(�	1�'rrJc��\rSrSrSr\\RS5SR
S5rSrSr	Sr
S	rS
rSSjr
SrS
rSrSrSrSrg)�ExtendedReadTestizOHTTP/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

c���[UR5n[R"USS9nUR	5 [
R"UR5UlX lgr�)	rrrr�r�rE�BufferedReader�fpr�r=s   r�setUp�ExtendedReadTest.setUp9sF���$�*�*�%���"�"�4��6���
�
���#�#�D�G�G�,����	rc�^�URnURRmSU4SjjnX!Rl/nURS5nU(a�UR[	U5S5 UR5nUR[	U5[	U55 UR
XT5 UR[	U55nURXe5 O!UR5nURU5 URU5 U(dOM�URSRU5UR5 g)Nc�4>�T"U5nUS:�aUSU$USS$)Nrrr8)r]r.�oldpeeks  �r�mypeek�*ExtendedReadTest.test_peek.<locals>.mypeekFs)�����
�A��A�v���!�u���S�b�6�Mrr
rrrc)
r�rN�peek�
assertGreaterr�r�r�r[r�r�r�r��lines_expected)rr�rT�allr.�p2rbrSs       @r�	test_peek�ExtendedReadTest.test_peekBs�����y�y���'�'�,�,��	�
��������	�	�!��A���"�"�3�q�6�1�-��Y�Y�[���'�'��B���Q��8��%�%�b�,��y�y��R��)��� � ��*��y�y�{��� � ��&��J�J�t����!�"	
������#���(;�(;�<rc�|�URnURURRUR5 gr7)r��_verify_readliner`rX)rr�s  r�
test_readline�ExtendedReadTest.test_readlineas+���y�y�����d�i�i�0�0�$�2E�2E�Frc�b�URURRURSS9 g)Nrd)�limit)r^r�r`rXr4s r�test_readline_without_limit�,ExtendedReadTest.test_readline_without_limites'�����d�i�i�0�0�$�2E�2E�R��Prc�@�/nU"U5nU(a'US:wa![U5S:aURUS5 URU5 U(dOMQURSR	U5U5 URURR55 g)N�foorA�
r)r�r�r�r�r�rOr�r�)rr`r�rbrYr<s      rr^�!ExtendedReadTest._verify_readlinehs�������E�?�D������t�9�q�=��'�'��e�4��J�J�t�����	
������#���1�����	�	�*�*�,�-rc�^^�TRmUU4Sjn[U5nTRURTR5 g)Nc�`>�TRS5nTR[U5S5 U$)Nr)r�r�r�)�resr�rs ��rr)�&ExtendedReadTest.test_read1.<locals>.rxs)����*�*�Q�-�C�� � ��S��1�-��Jr)r��	Readlinerr^r`rX)rr)�	readlinerr�s`  @r�
test_read1�ExtendedReadTest.test_read1vs8����y�y��	��a�L�	����i�0�0�$�2E�2E�Frc��URn/nUR5nU(dOURU5 M+URSR	U5UR
5 UR
UR55 g�Nr)r�r�r�r�r�rXrOr��rr�rYrs    r�test_read1_unbounded�%ExtendedReadTest.test_read1_unboundedsg���y�y������:�:�<�D����J�J�t��	�
	
������#���(;�(;�<�����
�
��(rc�D�URn/nURS5nU(dO.UR[U5S5 UR	U5 MGURSR
U5UR5 URUR55 g)Nrr)
r�r�r�r�r�r�r�rXrOr�rss    r�test_read1_bounded�#ExtendedReadTest.test_read1_bounded�s}���y�y������:�:�b�>�D���� � ��T��B�/��J�J�t���	
������#���(;�(;�<�����
�
��(rc��URURRS5S5 URURR	55 g)Nrr)r�r�r�r�r�r4s r�test_read1_0�ExtendedReadTest.test_read1_0�s:�����������+�S�1�������+�+�-�.rc�p�URRS5nURS[U55 g�Nr)r�rVr�r�)rr.s  r�test_peek_0�ExtendedReadTest.test_peek_0�s(���I�I�N�N�1������Q��A��'r�r�)rA)rArBrCrDr�findrrX�
lines_chunkedrOr[r_rcr^rortrwrzr~rGr8rrrIrIsn��
	�
��5�:�:�g�.�/�0�7�7��@�N�
	��"�=�>G�Q�.�G�	)�
)�/�(rrIc�v�\rSrSr\R
R
SS5urr\S\	"\5S3-\-rSr
g)�"ExtendedReadTestContentLengthKnowni�r�r$z
Content-Length: r8N)rArBrCrDrIrr��_header�_bodyr�rGr8rrr�r��s;��%�+�+�1�1�*�a�@�N�G�U��,�S��Z�L��A�A�E�I�Err�c��\rSrSrSrSrg)�ExtendedReadTestChunkedi�rKr8N)rArBrCrDrrGr8rrr�r��s��

	�
rr�c� �\rSrSrSrSrSrg)rmi�c��XlSUlgrr��readfunc�	remainder)rr�s  rr �Readliner.__init__�s�� �
���rc��/nSnURnURS5nUS:waOFU[U5-U:�aX-
S-
nURU5 UR	5nU(dSnOM^US-
nURUSU5 XESUlSRU5$! SRU5Ule=f)Nrrgrdr$r)r�r�r�r�r�r�)rrbr�datalenr[r;s      rr`�Readliner.readline�s��������~�~��	���i�i��&���"�9���S��Y�&�%�/��/�A�-�C����D�!��}�}�����C���
�1�H�C��K�K��T�c�
�#�!�$�Z�D�N��8�8�D�>�!��	� �X�X�d�^�D�N��s�BB$�$B=r�N)rArBrCrDr r`rGr8rrrmrm�s���rrmc�&�\rSrSrSrSrSrSrg)�OfflineTesti�c� �S1nSS1n[[5HTnURS5(dX2;aM [[U5n[USS5S:XdMCUR	U5 MV UR[RU5 g)N�	responses�HTTPMessage�
parse_headersr#rBzhttp.client)rQr�
startswithr��add�assertCountEqual�__all__)rr��denylistr�
module_objects     r�test_all�OfflineTest.test_all�sy���=��"�?�3����K�D����s�#�#�t�'7��#�F�D�1�M��}�l�D�9�]�J����T�"� �	
���f�n�n�h�7rc�f�UR[R[RS5 g)Nr�)r�rr�r�r4s r�test_responses�OfflineTest.test_responses�s#������)�)�&�*:�*:�;�[�Irc��/SQnUH1nURUS9 UR[U5 SSS5 M3 g!,(df   ME=f)N)>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�r�r�r�r�r�r�r�r�r�r�r�r�r�r�)�constant)r�
assertHasAttrr)rr��consts   r�test_client_constants�!OfflineTest.test_client_constants�sC��?
��@�E����u��-��"�"�6�5�1�.�-��-�-�s	�=�
A	r8N)rArBrCrDr�r�r�rGr8rrr�r��s��8�J�D2rr�c�p�\rSrSrSrSrSr\R"\	"\
S5(+S5S5rSrg	)
�SourceAddressTesti5c�4�[R"[R[R5Ul[R
"UR5Ul[R"5UlURR5 SUl
gr7)r�AF_INET�SOCK_STREAMr�r�	bind_portr�find_unused_port�source_port�listenr�r4s rrO�SourceAddressTest.setUp6s\���M�M�&�.�.�&�2D�2D�E��	�!�+�+�D�I�I�6��	�(�9�9�;����	�	������	rc��UR(a!URR5 SUlURR5 SUlgr7)r�r.r�r4s r�tearDown�SourceAddressTest.tearDown=s3���9�9��I�I�O�O���D�I��	�	������	rc�$�[R"[URSUR4S9UlUR
R
5 URUR
RR5SUR5 g)Nr���source_addressr$)
rr�rrr�r�rsr�r�rr4s r�testHTTPConnectionSourceAddress�1SourceAddressTest.testHTTPConnectionSourceAddressDsf���)�)�$��	�	� "�D�$4�$4�5�7��	��	�	������������3�3�5�a�8�$�:J�:J�Kr�HTTPSConnectionz'http.client.HTTPSConnection not definedc�n�[R"[URSUR4S9Ulg)Nr�r�)rr�rrr�r�r4s r� testHTTPSConnectionSourceAddress�2SourceAddressTest.testHTTPSConnectionSourceAddressJs,���*�*�4���� "�D�$4�$4�5�7��	r)r�rr�r�N)
rArBrCrDrOr�r��unittest�skipIf�hasattrrr�rGr8rrr�r�5sA����L��_�_���):�;�;�>�@�7�@�7rr�c�*�\rSrSrSrSrSrSrSrg)�TimeoutTestiTNc��[R"[R[R5Ul[R
"UR5[lURR5 gr7)	rr�r�r�rr�r��PORTr�r4s rrO�TimeoutTest.setUpWsE���M�M�&�.�.�&�2D�2D�E��	�(�2�2�4�9�9�=����	�	���rc�F�URR5 SUlgr7)r�r.r4s rr��TimeoutTest.tearDown\s���	�	������	rc�b�UR[R"55 [R"S5 [R
"[[R5nUR5 [R"S5 URURR5S5 UR5 UR[R"55 [R"S5 [R
"[[RSS9nUR5 [R"S5 URURR5S5 UR5 [R
"[[RSS9nUR5 URURR5S5 UR5 g![R"S5 f=f![R"S5 f=f�N�)�timeout)�assertIsNoner�getdefaulttimeout�setdefaulttimeoutrr�rr�r�rsr�r��
gettimeoutr.)r�httpConns  r�testTimeoutAttribute� TimeoutTest.testTimeoutAttribute`s���
	
���&�2�2�4�5�� � ��$�	+��,�,�T�;�3C�3C�D�H������$�$�T�*�������1�1�3�R�8�����	
���&�2�2�4�5�� � ��$�	+��,�,�T�;�3C�3C�6:�<�H������$�$�T�*�������1�1�3�T�:������(�(��{�/?�/?��L������������1�1�3�R�8������)
�$�$�T�*��
�$�$�T�*�s�9G;�8H�;H�H.)r�)	rArBrCrDr�rOr�r�rGr8rrr�r�Ts���D��
�rr�c�&�\rSrSrSrSrSrSrg)�PersistenceTesti�c��SnUGH*up#nURX#S9 SRX#5n[U5nURUR5 URSS5 UR
5nURURSLU(+5 UR5 SSS5 URURSLU(+5 URURS5 URSS5 URURU(aSOS5 SSS5 GM- g!,(df   N�=f!,(df   GMQ=f)	N))�1.0r�F)r�zConnection: keep-alive
T)�1.1r�T)r�zConnection: close
F)r�zConnection: keep-ALIVE
T)r�zConnection: cloSE
F)�versionr�z4HTTP/{} 200 OK
{}Content-Length: 12

Dummy body
r�z/open-connectionr$z/subsequent-requestr	)
rr�rfr�r�r�r�r�r[rj)r�testsr�r��reuser�r�r�s        r�test_reuse_reconnect�$PersistenceTest.test_reuse_reconnect�s��
��',�"�G�U����g��=�%�
�&��)�
�0��4���!�!�$�)�)�,����U�$6�7��%�%�'�8��$�$�T�Y�Y�$�%6�E�	�B��M�M�O�(�� � ����d�!2��I�>�� � ��!1�!1�1�5����U�$9�:�� � ��!1�!1��1�1�E�#>�=�',�(�'��>�=�s%�AE�54D5�)A>E�5
E�?E�
E	c���Sn[R[R4U[44nUH�up4URUS9 [
SU5nURSS5 URXER5 URUR5 URSS5 URURS5 SSS5 M� g!,(df   M�=f)Nc�v^�[R"U5mU4SjnUTl[R"T5$)Nc�h>�[RRTU5nUS:Xa
[5eU$r})rErFr�ConnectionResetError)�bufferrF�streams  �rr�NPersistenceTest.test_disconnected.<locals>.make_reset_reader.<locals>.readinto�s.����z�z�*�*�6�6�:���1�9�.�0�0��r)rErFrrM)rrr�s  @r�make_reset_reader�<PersistenceTest.test_disconnected.<locals>.make_reset_reader�s0����Z�Z��%�F�
�
'�F�O��$�$�V�,�,r)r�rr�z
/eof-response�
/reconnectr	)rErFr�RemoteDisconnectedr�rrfr�r�r�r�r�r�rj)rr�r��stream_factoryr�r�s      r�test_disconnected�!PersistenceTest.test_disconnected�s���		-��Z�Z��2�2�3�
� 4�5�
��*/�%�N����	��2�/��^�D�����U�O�4��!�!�)�-=�-=�>��!�!�$�)�)�,����U�L�1�� � ��!1�!1�1�5�3�2�*/�2�2�s
�BC�
C!	c�&�[S5nURSSSS0S9 UR[RUR
5 UR
UR5 URSS5 URURS5 g)	NsHTTP/1.1 100 Continue

r�r��Expectz100-continue�r�r�r	)
rfr�r�rr�r�r�r�r�rjr�s  r�test_100_close�PersistenceTest.test_100_close�s|��'�
�
��
	
���U�C�(�N�)C��D����&�3�3�T�5E�5E�F����$�)�)�$����U�L�)�����)�)�1�-rr8N)rArBrCrDr�r�r�rGr8rrr�r��s��F�<6�6
.rr�c���\rSrSrSrSrSrSrSr\	RS5rSr\	R"S	5S
5rSrSrS
r\R&"\"\S5(+S5S5rSrSrg)�	HTTPSTesti�c�R�[[S5(dURS5 gg)Nr�zssl support required)r�r�skipTestr4s rrO�HTTPSTest.setUp�s"���v�0�1�1��M�M�0�1�2rc��SSKJn U"XS9$)Nr)�make_https_server)�certfile)�test.ssl_serversr�)rr�r�s   r�make_server�HTTPSTest.make_server�s��6� ��9�9rc��[R"[[RSS9nURURS5 gr�)rr�rr�r�r�r�)rr-s  r�test_attributes�HTTPSTest.test_attributes�s0���"�"�4��)9�)9�2�F��������B�'rc��SSKn[R"S5 [R"S5 [
R"SS5nURUR5nURSS5 SSS5 URWRRS5 SSS5 g!,(df   N==f!,(df   g=f)Nr�network�self-signed.pythontest.net�r�r��CERTIFICATE_VERIFY_FAILED)
�sslr�requiresr�transient_internetrr�r��SSLErrorr�r�r�r�)rrr-�exc_infos    r�test_networked�HTTPSTest.test_networked�s��������#�
�
-�
-�.J�
K��&�&�'C�S�I�A��"�"�3�<�<�0�H��	�	�%��%�1����X�/�/�6�6�8S�T�	L�
K�0�0��L�
K�s#�3B?�$B.�7.B?�.
B<	�8B?�?
C
c��SSKn[R"S5 [R"S5 UR5n[R"SSUS9nURSS5 UR5nUR5 URSURS	55 UR5 SSS5 g!,(df   g=f)
Nrrrr��contextr�r��nginx�server)
rrrrr�_create_unverified_contextrr�r�r�r.r�r�)rrr
r-r�s     r�test_networked_noverification�'HTTPSTest.test_networked_noverification�s��������#�
�
-�
-�.J�
K��4�4�6�G��&�&�'C�S�/6�8�A�
�I�I�e�S�!��=�=�?�D�
�G�G�I��M�M�'�4�>�>�(�#;�<��J�J�L�L�
K�
K�s�B
C�
Cc��[R"S5 [R"S5 [R
"SS5nUR
SS5 UR5nURS5nUR5 UR5 URSU5 SSS5 g!,(df   g=f)Nrr%rr�r�zcontent-typez	text/html)rrrrrr�r�r�r�r.r�)rr-r��content_types    r�&test_networked_trusted_by_default_cert�0HTTPSTest.test_networked_trusted_by_default_cert�s���	����#�
�
-�
-�.>�
?��&�&�'7��=�A�
�I�I�e�S�!��=�=�?�D��>�>�.�9�L��J�J�L�
�G�G�I��M�M�+�|�4�@�
?�
?�s�A=B3�3
Cc	�2�SSKn[R"S5 Sn[R"U5 URUR5nURURUR5 URURS5 UR[5 [R"USUS9nURSS5 UR!5nUR/S
5nUR15 UR15 UR3SU5 SSS5 g!UR"aJn[%U5n[&R("S	U5(a[*R,"S
USUS35eeSnAff=f!,(df   g=f)NrrrTrrr�r�z(?i)key.too.weakzGot z trying to connect to z). See https://bugs.python.org/issue36816.rr)rrrrr�
SSLContext�PROTOCOL_TLS_CLIENTr��verify_mode�
CERT_REQUIRED�check_hostname�load_verify_locations� CERT_selfsigned_pythontestdotnetrr�r�r�rr�re�searchr��SkipTestr�r.r�)	rr�selfsigned_pythontestdotnetr
r-r��ssl_err�ssl_err_str�
server_strings	         r�test_networked_good_cert�"HTTPSTest.test_networked_good_cert�sa�������#�&B�#�
�
-�
-�.I�
J��n�n�S�%<�%<�=�G����W�0�0�#�2C�2C�D����W�3�3�T�:��)�)�*J�K�
��*�*�+F��3:�<���	�	�%��%��}�}���!�N�N�8�4�M��J�J�L�
�G�G�I��M�M�'�=�1�5K�
J���<�<�
�!�'�l���9�9�0�+�>�>�"�+�+��{�m�,�9�:�;B�B�C�C���
��K�
J�s2�A3F�'8D+�AF�+F�;AF�F�F�
F�walltimec��SSKn[R"S5 [R"S5 URUR5nUR[5 [R"SSUS9nURUR5nURSS5 SSS5 URWRR S5 SSS5 g!,(df   N==f!,(df   g=f)	Nrrrrrr�r�r)rrrrrrrr�CERT_localhostrr�r�rr�r�r�r�)rrr
r-rs     r�test_networked_bad_cert�!HTTPSTest.test_networked_bad_certs���	�����#�
�
-�
-�.J�
K��n�n�S�%<�%<�=�G��)�)�.�9��&�&�'C�S�RY�Z�A��"�"�3�<�<�0�H��	�	�%��%�1����X�/�/�6�6�8S�T�
L�
K�1�0��	L�
K�s$�A"C.�C�&.C.�
C+	�'C.�.
C<c�R�SSKnUR[5n[R"SUR
5nUR
UR5nURSS5 SSS5 URWRRS5 g!,(df   N5=f)Nr�	localhostr�r�r)rr�r*rr�rr�rr�r�r�r�)rrrr-rs     r�test_local_unknown_cert�!HTTPSTest.test_local_unknown_cert,sx����!�!�.�1���"�"�;����<��
�
�
�s�|�|�
,��
�I�I�e�S�!�-�����+�+�2�2�4O�P�-�
,�s�B�
B&c��SSKnUR[5nURUR5nUR[5 [R"SURUS9nURUR5 URSS5 UR5nURUR5 URURS5 g)Nrr.rr��/nonexistentrN)rr�r*rrrrr�rrr.r�r�r�r��rrrr
r-r�s      r�test_local_good_hostname�"HTTPSTest.test_local_good_hostname5s�����!�!�.�1���.�.��!8�!8�9���%�%�n�5��"�"�;����W�M�������� �	�	�	�%��(��}�}�������
�
�#�������c�*rc�J�SSKnUR[5nURUR5nUR[5 [R"SURUS9nURUR5 URSS5 SSS5 SUl[R"SURUS9nURUR5 URSS5 SSS5 SUl[R"SURUS9nURSS5 UR5nUR5 UR5 URUR S	5 g!,(df   N�=f!,(df   N�=f)
Nrr.rr�r�TFr2rN)rr��CERT_fakehostnamerrrrr�rr��CertificateErrorr�rr�r.r�r�r3s      r�test_local_bad_hostname�!HTTPSTest.test_local_bad_hostnameBs4����!�!�"3�4���.�.��!8�!8�9���%�%�&7�8��"�"�;����W�M��
�
�
�s�3�3�
4�
�I�I�e�S�!�5�"&����"�"�;����W�M��
�
�
�s�3�3�
4�
�I�I�e�S�!�5�"'����"�"�;����W�M��	�	�	�%��(��}�}����
�
��	���	�������c�*�!5�
4��5�
4�s�F�"F�
F�
F"r�z)http.client.HTTPSConnection not availablec�$�SH2nUR[R[RU5 M4 SHRupn[R"U5nUR	X$R
5 UR	X4R5 MT g)Nr")r#)zwww.python.org:443r%r)r'r%r)r%r%r)r(r$r)r)r$r)r�rr*r�r�rrr+s     rr0�HTTPSTest.test_host_port[st��
I�B����f�/�/��1G�1G��L�I�#�H�B�1��&�&�r�*�A����Q���'����Q���'�#rc��SSKnUR(dURS5 [R"SS5nURURR5 URUR5nURUR5 [R"SSUS9nURURU5 URURR5 URUR[S9nSUl[R"SSUS9nURURR5 g)NrzTLS 1.3 support requiredr.rr)�	cert_fileT)
r�HAS_TLSv1_3r�rr�rO�_context�post_handshake_authrrr��assertIsr*)rrr-r
s    r�test_tls13_pha�HTTPSTest.test_tls13_phaos��������M�M�4�5��"�"�;��4������
�
�6�6�7��.�.��!8�!8�9������4�4�5��"�"�;��W�E���
�
�a�j�j�'�*�������7�7�8��.�.��!8�!8�N�.�S��&*��#��"�"�;��W�E������
�
�6�6�7rr8N)rArBrCrDrOr�r�r	rr�system_must_validate_certrr&�requires_resourcer+r/r4r9r�r�r�rr0rCrGr8rrr�r��s���2�:�(�
U��
�&�&�
5�'�
5�2�B
���z�*�
U�+�
U�Q�+�+�2�_�_���):�;�;�@�B�(�B�(�$8rr�c�J�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
g)
�RequestBodyTesti�c��[R"S5Ul[S5=URlUlURURlg)Nrir�)rr�r�rr�r4s rrO�RequestBodyTest.setUp�s9���)�)�-�8��	�%/��^�3��	�	��������	�	�rc��[R"URR5nUR	5 [
R"U5nX!4$r7)rErFr�rr`rr��r�f�messages   r�get_headers_and_fp�"RequestBodyTest.get_headers_and_fp�s9���J�J�t�y�y�~�~�&��	�
�
���&�&�q�)���z�rc�"�SS/S4S4nUH�up#URU5 [R"S5Ul[	S5=URlUlURR
SSU5 UR5upEURS	U5 URS
U5 URURS5S5 URX5R55 SSS5 M� g!,(df   GM=f)
Nrf�bar�3
foo
3
bar
0

))rfrRrSrir�r�r�zContent-Typer�r'r()rrr�r�rr�r�rOr+r��getr[)rrr�r�r�rMs      r�test_list_body�RequestBodyTest.test_list_body�s���
�f�
�C�D�D�
��$�N�D����d�#�"�1�1�-�@��	�-7��^�;��	�	�����	�	�!�!�%���6��0�0�2���� � ���5�� � �!1�3�7�� � ����)<�!=�y�I�� � ��6�6�8�4�$�#�$�#�#�s�CC>�>
D	c��URRSSSSS05 UR5upURSUR	S55 URS[UR
555 g)Nr�r�r�r��42r)r)r�r�rOr�rTr�r[�rrNrMs   r�test_manual_content_length�*RequestBodyTest.test_manual_content_length�sh��	
�	�	���%���+�T�2�	4��,�,�.�
������w�{�{�+;�<�=�����C�����M�*rc�b�URRSSS5 UR5upURSUR	55 URUR
55 URSURS55 URSUR55 g)Nr�r�r��
text/plain�4r)sbody�	r�r�rOr��get_content_typer��get_charsetrTr[rYs   r�test_ascii_body�RequestBodyTest.test_ascii_body�s����	�	���%���0��,�,�.�
������w�'?�'?�'A�B����'�-�-�/�0�����g�k�k�*:�;�<�����!�&�&�(�+rc�b�URRSSS5 UR5upURSUR	55 URUR
55 URSURS55 URSUR55 g)Nr�r�ubodyÁr]�5r)�body�r_rYs   r�test_latin1_body� RequestBodyTest.test_latin1_body�s����	�	���%���4��,�,�.�
������w�'?�'?�'A�B����'�-�-�/�0�����g�k�k�*:�;�<�����a�f�f�h�/rc�b�URRSSS5 UR5upURSUR	55 URUR
55 URSURS55 URSUR55 g)Nr�r�rfr]rer)r_rYs   r�test_bytes_body�RequestBodyTest.test_bytes_body�s����	�	���%���5��,�,�.�
������w�'?�'?�'A�B����'�-�-�/�0�����g�k�k�*:�;�<�����a�f�f�h�/rc���UR[R[R5 [	[RSSS9nURS5 SSS5 [	[RSS9nURRSSU5 UR5up!URSUR55 URUR55 URURS55 URS	URS
55 URSUR55 SSS5 g!,(df   N�=f!,(df   g=f)NrrB)�encodingr�r�r�r]r)r(ztransfer-encodings4
body
0

)rr�unlink�TESTFNrP�writer�r�rOr�r`r�rarTr[rLs   r�test_text_file_body�#RequestBodyTest.test_text_file_body�s�����	�(�(�)�*:�*:�;�
�)�"�"�C�'�
:�a�
�G�G�F�O�;�
�)�"�"�W�
5���I�I���e�V�Q�/��0�0�2�J�G����\�7�+C�+C�+E�F����g�1�1�3�4�
���g�k�k�*:�;�<����Y����4G�(H�I����6�����A�6�
5�;�
:��
5�
5�s�E�:CE$�
E!�$
E2c���UR[R[R5 [	[RS5nURS5 SSS5 [	[RS5nURRSSU5 UR5up!URSUR55 URUR55 URSURS55 URS	U5 URS
UR55 SSS5 g!,(df   N�=f!,(df   g=f)N�wbrfr*r�r�r]r(r'r�s5
body�
0

)rrrnrorPrpr�r�rOr�r`r�rarTr+r[rLs   r�test_binary_file_body�%RequestBodyTest.test_binary_file_body�s�����	�(�(�)�*:�*:�;�
�)�"�"�D�
)�Q�
�G�G�K� �*�
�)�"�"�D�
)�Q��I�I���e�V�Q�/��0�0�2�J�G����\�7�+C�+C�+E�F����g�1�1�3�4����Y����4G�(H�I����-�w�7����:�A�F�F�H�E�*�
)�*�
)��
)�
)�s�	E�=CE�
E�
E')r�r�N)rArBrCrDrOrOrUrZrbrgrjrqrurGr8rrrHrH�s1��#�
�5�(+�,�0�0�
B�FrrHc�8�\rSrSrSrSrSrSrSrSr	Sr
g	)
�HTTPResponseTesti�c��Sn[U5n[R"U5UlURR	5 g)NzXHTTP/1.1 200 Ok
My-Header: first-value
My-Header:                 second-value

Text)rrr�r�r�)rr�r�s   rrO�HTTPResponseTest.setUp�s3��*���$����'�'��-��	��	�	���rc��URRS5nURUS5 URRSS5nURUS5 g)Nz	My-Headerzfirst-value, second-valuezsome default�r�r�r��rr�s  r�test_getting_header�$HTTPResponseTest.test_getting_header�sN�����$�$�[�1������!<�=����$�$�[�.�A������!<�=rc�`�URRSS5nURUS5 g)N�No-Such-Headerz
default-valuer|r}s  r�3test_getting_nonexistent_header_with_string_default�DHTTPResponseTest.test_getting_nonexistent_header_with_string_default�s)�����$�$�%5��G�������1rc��URRSSS/5nURUS5 URRSS5nURUS5 g)Nr��defaultr�zdefault, values)r�r�r|r}s  r�5test_getting_nonexistent_header_with_iterable_default�FHTTPResponseTest.test_getting_nonexistent_header_with_iterable_default�sX�����$�$�%5�	�8�7L�M������!2�3����$�$�%5�7L�M������!2�3rc�^�URRS5nURUS5 g)Nr�r|r}s  r�/test_getting_nonexistent_header_without_default�@HTTPResponseTest.test_getting_nonexistent_header_without_default�s'�����$�$�%5�6�������&rc�\�URRSSS9nURUS5 g)Nr�r�)r�r|r}s  r�test_getting_header_defaultint�/HTTPResponseTest.test_getting_header_defaultint	s,�����$�$�%5�b�$�A�������$rr�N)rArBrCrDrOr~r�r�r�r�rGr8rrrxrx�s ���>�2�4�'�%rrxc��\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrSrSrSrSrSrSrg)�TunnelTestsi	c���SnSUl[RUl[R"UR5UlUR
U5UR
lg)Nz:HTTP/1.1 200 OK

HTTP/1.1 200 OK
Content-Length: 42

z	proxy.com)rr�	HTTP_PORTrr�r�rn)r�
response_texts  rrO�TunnelTests.setUp	sO��
)�	�
 ��	��$�$��	��)�)�$�)�)�4��	�'+�'>�'>�}�'M��	�	�$rc�8�URR5 gr7)r�r.r4s rr��TunnelTests.tearDown	s���	�	���rc�^�SU4SjjnU$)Nc�&>�[TUSUSS9$)Nrr$�rr�r)r�r�r�r�s   �rrm�9TunnelTests._create_connection.<locals>.create_connection	s����m�'�!�*�7�1�:�N�Nr�NNr8)rr�rms ` rrn�TunnelTests._create_connection	s���	O� � rc��SnSnSS0nUR5nSX4-US'URRXUS9 URRSS	S
5 UR	URR
RUR5 UR	URR
RUR5 UR	URRU5 UR	URRU5 UR	URRU5 g)N�destination.com�"�
User-Agent�!Mozilla/5.0 (compatible, MSIE 11)�%s:%dr��rr�r�r�r�)�copyr��
set_tunnelr�r�r�rr�_tunnel_host�_tunnel_port�_tunnel_headers)r�tunnel_host�tunnel_port�tunnel_headers�tunnel_headers_afters     r�2test_set_tunnel_host_port_headers_add_host_missing�>TunnelTests.test_set_tunnel_host_port_headers_add_host_missing	s���'����&�(K�L��-�2�2�4��'.�+�1K�'K��V�$��	�	���[�%3�	�	5��	�	���&�#�r�*���������,�,�d�i�i�8���������,�,�d�i�i�8�������/�/��=�������/�/��=�������2�2�4H�Irc�X�SnSnSSX4-S.nURRXUS9 URRSSS	5 URURRR
UR
5 URURRRUR5 URURRU5 URURRU5 URURRU5 g)
Nr�r�r�r��r�r�r�r�r�r��
r�r�r�r�r�rrr�r�r��rr�r�r�s    r�4test_set_tunnel_host_port_headers_set_host_identical�@TunnelTests.test_set_tunnel_host_port_headers_set_host_identical)	s���'����(K�")�[�,F�"F�H���	�	���[�%3�	�	5��	�	���&�#�r�*���������,�,�d�i�i�8���������,�,�d�i�i�8�������/�/��=�������/�/��=�������2�2�N�Crc�V�SnSnSSS-S.nURRXUS9 URRSS	S
5 URURRR
UR
5 URURRRUR5 URURRU5 URURRU5 URURRU5 g)Nr�r�r�r�)riihr�r�r�r�r�r�r�s    r�4test_set_tunnel_host_port_headers_set_host_different�@TunnelTests.test_set_tunnel_host_port_headers_set_host_different7	s���'����(K�")�,A�"A�C���	�	���[�%3�	�	5��	�	���&�#�r�*���������,�,�d�i�i�8���������,�,�d�i�i�8�������/�/��=�������/�/��=�������2�2�N�Crc��URR5 UR[URRS5 g)Nr�)r�rsr��RuntimeErrorr�r4s r�&test_disallow_set_tunnel_after_connect�2TunnelTests.test_disallow_set_tunnel_after_connectE	s1���	�	�������,��	�	�(<�(<�+�	-rc�r�S[RS.nURRUSR	S55 URRSSS5 UR
URRRUR5 UR
URRRUR5 URSU-URRR5 URS	U-URRR5 g�
N�destination.com��host�portr�rr�r�r��?CONNECT %(host)s:%(port)d HTTP/1.1
Host: %(host)s:%(port)d

�!HEAD / HTTP/1.1
Host: %(host)s
�rr�r�r�r�r�r�r�rrr�r�rrcs  r�test_connect_with_tunnel�$TunnelTests.test_connect_with_tunnelK	����'��%�%�
��	
�	�	���Q�w�Z�.�.�w�7�8��	�	���&�#�r�*���������,�,�d�i�i�8���������,�,�d�i�i�8��
�
�9�;<�=��i�i�n�n�)�)�	+�	
�
�
�>��B��i�i�n�n�)�)�	+rc�v�S[RS.nURRUSR	S5USS9 URRSSS	5 UR
URRRUR5 UR
URRRUR5 URS
U-URRR5 URSU-URRR5 g)Nr�r�r�rr��rr�r�r�r�r�r�r�s  r�*test_connect_with_tunnel_with_default_port�6TunnelTests.test_connect_with_tunnel_with_default_portZ	s���'��%�%�
��	
�	�	���Q�w�Z�.�.�w�7�a��j��I��	�	���&�#�r�*���������,�,�d�i�i�8���������,�,�d�i�i�8��
�
�9�;<�=��i�i�n�n�)�)�	+�	
�
�
�>��B��i�i�n�n�)�)�	+rc�Z�SSS.nURRUSRS5USS9 URRSS	S
5 UR	URR
RUR5 UR	URR
RUR5 URSU-URR
R5 URSU-URR
R5 g)
Nr�r�r�r�rr�r�r�r�r�r�s*HEAD / HTTP/1.1
Host: %(host)s:%(port)d
)
r�r�r�r�r�r�rrr�rr�s  r�.test_connect_with_tunnel_with_nonstandard_port�:TunnelTests.test_connect_with_tunnel_with_nonstandard_porti	s���'��
��	
�	�	���Q�w�Z�.�.�w�7�a��j��I��	�	���&�#�r�*���������,�,�d�i�i�8���������,�,�d�i�i�8��
�
�9�;<�=��i�i�n�n�)�)�	+�	
�
�
�G�!�K��i�i�n�n�)�)�	+rc��SS[RS.nURRUSR	S5SUSR	S50S9 URRS	S
S5 UR
URRRUR5 UR
URRRUR5 URSU-URRR5 URS
U-URRR5 g)Nr�sexample.com:9876)r��tunnel_host_headerr�r�rrr�r�r�r�r�sDCONNECT %(host)s:%(port)d HTTP/1.1
HOST: %(tunnel_host_header)s

r�r�r�s  r�3test_connect_with_tunnel_with_different_host_header�?TunnelTests.test_connect_with_tunnel_with_different_host_header{	s��'�#6��%�%�
��
	
�	�	���
�g�J���g�&��Q�4�5�<�<�W�E�F�	�	H�	
�	�	���&�#�r�*���������,�,�d�i�i�8���������,�,�d�i�i�8��
�
�>�@A�B��i�i�n�n�)�)�	+�	
�
�
�>��B��i�i�n�n�)�)�	+rc�r�S[RS.nURRUSR	S55 URRSSS5 UR
URRRUR5 UR
URRRUR5 URSU-URRR5 URS	U-URRR5 gr�r�r�s  r�'test_connect_with_tunnel_different_host�3TunnelTests.test_connect_with_tunnel_different_host�	r�rc��SnSURS5[R4-nSX"4-nURR	U5 URRSSS5 UR
URRRUR5 UR
URRR[R5 URX0RRR5 g)Nu	δπθ.grs%s:%d�idnas!CONNECT %s HTTP/1.1
Host: %s

r�r�r�)rrr�r�r�r�r�r�rrr�r)r�dest�	dest_portr�s    r�test_connect_with_tunnel_idna�)TunnelTests.test_connect_with_tunnel_idna�	s���&������F� 3�V�5E�5E�F�F�	�=��A"�"���	�	���T�"��	�	���&�#�r�*���������,�,�d�i�i�8���������,�,�f�.>�.>�?��
�
�h�	�	��� 3� 3�4rc�(�[RRURS5nURR	S5 URR5 URR
SS5 SSS5 WR5 UR[UR5SSUR3S9 URSSSnURS	U5 URUS
SU<3S9 g!,(df   N�=f)NrVr�r�r�r$z!unexpected number of send calls: )r�rsCONNECT destination.comrvzunexpected proxy data sent )
r�patch�objectr�r�rsr��
assert_calledrWr��
mock_callsr�r�)r�	mock_send�proxy_setup_data_sents   r�0test_tunnel_connect_single_send_connection_setup�<TunnelTests.test_tunnel_connect_single_send_connection_setup�	s���
�Z�Z�
�
�t�y�y�&�
1�Y��I�I� � �!2�3��I�I�����I�I���e�S�)�2�	���!�����I�(�(�)�1�7�	�8L�8L�7M�N�	�	P�!*� 4� 4�Q� 7�� :�1� =���
�
�0�2G�H����1�;�1�2G�1J�K�	�	M�2�
1�s�AD�
Dc�r�S[RS.nURRUSR	S55 URRSSS5 UR
URRRUR5 UR
URRRUR5 URSU-URRR5 URS	U-URRR5 g)
Nr�r�r�rr�r�r�r�s PUT / HTTP/1.1
Host: %(host)s
r�r�s  r�test_connect_put_request�$TunnelTests.test_connect_put_request�	s���'��%�%�
��	
�	�	���Q�w�Z�.�.�w�7�8��	�	���%��b�)���������,�,�d�i�i�8���������,�,�d�i�i�8��
�
�9�;<�=��i�i�n�n�)�)�	+�	
�
�
�=��A��i�i�n�n�)�)�	+rc�&�URRSS5 URRSSS5 URURRR
UR
5 URURRR[R5 URSURRR5 URSURRR5 g)Nz
[1:2:3::4]i�r�r�r��CONNECT [1:2:3::4]:1234�Host: [1:2:3::4]:1234�r�r�r�r�r�rrrr�r�rr4s r�test_connect_put_request_ipv6�)TunnelTests.test_connect_put_request_ipv6�	s����	�	���\�4�0��	�	���%��b�)���������,�,�d�i�i�8���������,�,�f�.>�.>�?��
�
�0�$�)�)�.�.�2E�2E�F��
�
�.��	�	���0C�0C�Drc�$�URRS5 URRSSS5 URURRR
UR
5 URURRR[R5 URSURRR5 URSURRR5 g)Nz[1:2:3::4]:1234r�r�r�r�r�r�r4s r�"test_connect_put_request_ipv6_port�.TunnelTests.test_connect_put_request_ipv6_port�	s����	�	���.�/��	�	���%��b�)���������,�,�d�i�i�8���������,�,�f�.>�.>�?��
�
�0�$�)�)�.�.�2E�2E�F��
�
�.��	�	���0C�0C�Drc���SnSRU5nURRS5 URU5URlURR	S5 [
R"5nURRSSS5 SSS5 WR5R5nURSRU5U5 g!,(df   NN=f)	Nz
X-Dummy: 1zHTTP/1.0 200 OK
{}

r$r�r�r�r�z
header: {})r�r��set_debuglevelrnr�rrr�rr
r�)r�expected_headerr�rrs     r�test_tunnel_debuglog� TunnelTests.test_tunnel_debuglog�	s���&��7�>�>��O�
��	�	� � ��#�'+�'>�'>�}�'M��	�	�$��	�	���.�/�
�
$�
$�
&�&��I�I���e�S�"�-�'����!�,�,�.���
�
�l�)�)�/�:�E�B�'�
&�s�?C%�%
C3c�j�SnSRSRU55nURU5URlURR	S5 URRSSS5 URR
5nURXR55 g)N�zX-Dummy�1�HTTP/1.0 200 OK
{0}

�:r�r�r�r�)	r�r�rnr�r�r��get_proxy_response_headersr��items�rr�r�r�s    r�test_proxy_response_headers�'TunnelTests.test_proxy_response_headers�	s���*��
� �&����/�!:�;�	�
(,�'>�'>�}�'M��	�	�$��	�	���.�/��	�	���%��b�)��)�)�6�6�8���
�
�o�}�}��7rc��SnSRSRU55nURU5URlURR	SSS5 URR5nUR
U5 g)Nr�r�r�r�r�r�)r�r�rnr�r�r�r�r�s    r�test_no_proxy_response_headers�*TunnelTests.test_no_proxy_response_headers�	ss��*��
� �&����/�!:�;�	�
(,�'>�'>�}�'M��	�	�$��	�	���%��b�)��)�)�6�6�8�����'�"rc�:^�SmSU4SjjnXRlURRS5 SnURRSSS5 URU5 UR
TR5 g![anUnSnAN>SnAff=f)Nc�*>�[SUSUSS9mT$)NzHTTP/1.1 404 NOT FOUND

rr$r�r�)r�r�r�r�s   �rrn�8TunnelTests.test_tunnel_leak.<locals>._create_connection
s%����0��Q�Z��Q�Z��D�
�Krr�r�r�r�r�)r�rnr�r�rPr�rOr)rrnr��er�s    @r�test_tunnel_leak�TunnelTests.test_tunnel_leak�	s������	�(:�	�	�$��	�	���.�/���	��I�I���f�c�2�.�	
���S�!�����(�(�)��	�	��C��	�s�B�
B�B�B)r�rrN)rArBrCrDrOr�rnr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrGr8rrr�r�	ss��	N��!�

J�D�D�-�
+�
+�
+�$+�$
+�	5�M� 
+�E�E�C�8�#�*rr��__main__r	)�	verbosity)?r�rQ�httprrrEr��osrWrrrr�r�TestCaser}r�test.supportrr�test.support.testcaser	�requires_working_socket�path�dirnamerQ�herer�r*r7rr�r��chunk_extensionr�r�rEr�rrrIrFrWr�rfr{rrrJrIr�r�rmr�r�r�r�r�rHrxr�rA�mainr8rr�<module>rs*����#�	��	��	�
���������"�&�1����t�,�	�w�w���x� �������d�J�
�>���G�G�L�L��z�>�B��#%�7�7�<�<��*�7�$� �	-��N����
�
��O�+�f�4��-��������
�
�B

�*�

��2�:�:��$2�v�4�4�2�"z;�(�O�z;�z5�h�5�,}�8�}�@{'��/�{'�|A(�x��A(�HJ�)9�J�
�.��,��DV2�(�O�V2�r7��7�>+�(�+�\E.�h�E.�Pv8��v8�r]F�h�]F�@!%�x�!%�FM*�(�O�M*�`�z���M�M�A��r

Youez - 2016 - github.com/yon3zu
LinuXploit