Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_httplib.cpython-311.pyc
�

�Ke�[��<�ddlZddlZddlmZmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddl
mZe
jZddlmZddlmZddlmZddlmZejd�	��ej�e��Zej�ed
��Zej�ed��Zej�ed��Zd
ZdZ dZ!dZ"de!zdzZ#dZ$dZ%ej&Z&Gd�d��Z'Gd�de'��Z(Gd�dej)��Z*Gd�dej+��Z,Gd�de��Z-Gd�de��Z.Gd �d!e��Z/Gd"�d#e��Z0Gd$�d%e��Z1Gd&�d'e1��Z2Gd(�d)��Z3Gd*�d+e��Z4Gd,�d-e��Z5Gd.�d/e��Z6Gd0�d1e��Z7Gd2�d3e��Z8Gd4�d5e��Z9Gd6�d7e��Z:Gd8�d9e��Z;e<d:kre
j=d;�<��dSdS)=�N)�client�
HTTPStatus)�mock)�support)�	os_helper)�
socket_helper)�warnings_helperT)�modulezkeycert.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�F�eZdZejddfd�Zd�Zdd�Zd�Zd�Z	d�Z
dS)	�
FakeSocketNc��t|t��r|�d��}||_||_d|_d|_d|_||_||_	dS)N�ascii�rF)
�
isinstance�str�encode�text�	fileclass�data�
sendall_calls�file_closed�host�port)�selfrrrrs     �;/usr/local/apps/python3/lib/python3.11/test/test_httplib.py�__init__zFakeSocket.__init__7s\���d�C� � �	(��;�;�w�'�'�D���	�"�����	���� �����	���	�	�	rc�F�|xjdz
c_|xj|z
c_dS)N�)rr�rrs  r�sendallzFakeSocket.sendallBs*�����a�����	�	�T��	�	�	�	rc��|dkr|dkrtj���|�|j��|_|j|j_|jS)N�r�rb)r�UnimplementedFileModerr�file�
file_close�close)r�mode�bufsizes   r�makefilezFakeSocket.makefileFsJ���3�;�;�4�4�<�<��.�0�0�0��N�N�4�9�-�-��	��/��	���y�rc��d|_dS)NT)r�rs rr(zFakeSocket.file_closeNs������rc��dS�N�r.s rr)zFakeSocket.closeQ����rc��dSr0r1)r�level�optname�values    r�
setsockoptzFakeSocket.setsockoptTr2rr0)�__name__�
__module__�__qualname__�io�BytesIOrr"r,r(r)r7r1rrrr6s�������')�z��4�	�	�	�	�������� � � �
�
�
�
�
�
�
�
rrc� �eZdZd�Zd�Zd�ZdS)�EPipeSocketc�J�t�||��||_dSr0)rr�pipe_trigger)rrr@s   rrzEPipeSocket.__init__Ys&�����D�$�'�'�'�(����rc�l�|j|vrttjd���|xj|z
c_dS)N�gotcha)r@�OSError�errno�EPIPErr!s  rr"zEPipeSocket.sendall^s6�����$�$��%�+�x�0�0�0��	�	�T��	�	�	�	rc��dSr0r1r.s rr)zEPipeSocket.closecr2rN)r8r9r:rr"r)r1rrr>r>WsA������)�)�)�
���

�
�
�
�
rr>c�"�eZdZdZdd�Zdd�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.
    ���c�p�tj�||��}|dkrtd���|S�Nrzcaller tried to read past EOF)r;r<�read�AssertionError)r�nrs   rrLzNoEOFBytesIO.readls4���z���t�Q�'�'���3�;�;� �!@�A�A�A��rNc�p�tj�||��}|dkrtd���|SrK)r;r<�readlinerM)r�lengthrs   rrPzNoEOFBytesIO.readliners6���z�"�"�4��0�0���3�;�;� �!@�A�A�A��r�rIr0)r8r9r:�__doc__rLrPr1rrrHrHfsF��������
���������rrHc�2��eZdZdZ�fd�Z�fd�Zd�Z�xZS)�FakeSocketHTTPConnectionz@HTTPConnection subclass using FakeSocket; counts connect() callsc�~��d|_t���d��||_|j|_dS)Nr�example.com)�connections�superr�fake_socket_args�create_connection�_create_connection)r�args�	__class__s  �rrz!FakeSocketHTTPConnection.__init__{s<������
������'�'�'� $���"&�"8����rc�d��|xjdz
c_t�����S)z.Count the number of times connect() is invokedr )rXrY�connect)rr^s �rr`z FakeSocketHTTPConnection.connect�s+������A�����w�w��� � � rc��t|j�Sr0)rrZ)r�pos�kws   rr[z*FakeSocketHTTPConnection.create_connection�s���4�0�1�1r)r8r9r:rSrr`r[�
__classcell__)r^s@rrUrUxsf�������J�J�9�9�9�9�9�!�!�!�!�!�
2�2�2�2�2�2�2rrUc�>�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	S)
�HeaderTestsc��Gd�dt��}dD]�}dD]�}tjd��}td��|_|��|_d}i}|rt
t|����||<|�dd	||��|�	|jj
|���d
������dS)Nc��eZdZd�Zd�ZdS)�;HeaderTests.test_auto_headers.<locals>.HeaderCountingBufferc��i|_dSr0)�countr.s rrzDHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.__init__�s
����
�
�
rc�F�|�d��}t|��dkr]|d�d�����}|j�|d��|j|xxdz
cc<t�||��dS)N�:r rr)�split�len�decode�lowerrk�
setdefault�list�append)r�item�kv�lcKeys    rrtzBHeaderTests.test_auto_headers.<locals>.HeaderCountingBuffer.append�s����Z�Z��%�%���r�7�7�Q�;�;��q�E�L�L��1�1�7�7�9�9�E��J�)�)�%��3�3�3��J�u�%�%�%��*�%�%�%����D�$�'�'�'�'�'rN�r8r9r:rrtr1rr�HeaderCountingBufferri�s2������
 �
 �
 �
(�
(�
(�
(�
(rry)TF)�Content-length�HostzAccept-encodingrW�blahblahblah�spamspamspam�POST�/r )rsr�HTTPConnectionr�sock�_bufferrro�request�assertEqualrkrq)rry�explicit_header�header�conn�body�headerss       r�test_auto_headerszHeaderTests.test_auto_headers�s���
	(�
	(�
	(�
	(�
	(�4�
	(�
	(�
	(� +�	H�	H�O�E�

H�

H���,�]�;�;��&�~�6�6��	�3�3�5�5���%����"�5�&)�#�d�)�)�n�n�G�F�O����V�S�$��8�8�8�� � ���!3�F�L�L�N�N�!C�Q�G�G�G�G�

H�	H�	Hrc���Gd�dt��}d}d}tj||��D]�\}}tjd��}td��|_|��|_|�|d|��|�	|jj
dd�|������d	}|D]�}tjd��}td��|_|��|_|�|dd��|�	|jj
dd
�|������|D]�}tjd��}td��|_|��|_|�|dd��|�	|jj
dd�|������tj||��D]�}tjd��}td��|_|��|_|�|dd��|�	|jj
d
d�|������dS)Nc��eZdZd�Zd�ZdS)�?HeaderTests.test_content_length_0.<locals>.ContentLengthCheckerc�H�t�|��d|_dSr0)rsr�content_lengthr.s rrzHHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.__init__�s"���
�
�d�#�#�#�&*��#�#�#rc��|�dd��}t|��dkr=|d���dkr|d���|_t
�||��dS)Nrmr rscontent-length)rnrorq�stripr�rsrt)rrurvs   rrtzFHeaderTests.test_content_length_0.<locals>.ContentLengthChecker.append�si���Z�Z��a�(�(���r�7�7�Q�;�;�2�a�5�;�;�=�=�4E�#E�#E�*,�Q�%�+�+�-�-�D�'����D�$�'�'�'�'�'rNrxr1rr�ContentLengthCheckerr��s2������
+�
+�
+�
(�
(�
(�
(�
(rr�)N�)�PUTr~�PATCHrWr�0z%Header Content-Length incorrect on {})�GET�CONNECT�DELETE�HEAD�OPTIONS�TRACEz.Header Content-Length set for empty body on {}r�� �1)
rs�	itertools�productrr�rr�r�r�r�r��format�chain)rr��bodies�methods_with_body�methodr�r��methods_without_bodys        r�test_content_length_0z!HeaderTests.test_content_length_0�s���	(�	(�	(�	(�	(�4�	(�	(�	(���4��%�-�.?��H�H�	�	�L�F�D��(��7�7�D�"�4�(�(�D�I�/�/�1�1�D�L��L�L���d�+�+�+������+�T�7�>�>�v�F�F�
�
�
�
� 
��+�	�	�F��(��7�7�D�"�4�(�(�D�I�/�/�1�1�D�L��L�L���d�+�+�+������+�T�@�G�G��O�O�
�
�
�
�+�	�	�F��(��7�7�D�"�4�(�(�D�I�/�/�1�1�D�L��L�L���b�)�)�)������+�T�7�>�>�v�F�F�
�
�
�
� �o�&:�<M�N�N�	�	�F��(��7�7�D�"�4�(�(�D�I�/�/�1�1�D�L��L�L���c�*�*�*������+�T�7�>�>�v�F�F�
�
�
�
�	�	rc���tjd��}td��|_|�dd��|�dd��|�d|j��|�dd��|�d	|j��|�d
d��|�d|j��|�d
d��|�d|j��|�ddd��|�d|j��|�dd��|�d|j��|�dd��|�d|j��|�dd��|�d|j��|�dd��|�d|j��|�d d!��|�d"|j��|�d#d$��|�d%|j��|�d&d$��|�d'|j��|�d(d$��|�d)|j��|�d*d$��|�d+|j��dS),NrWr�rrz�*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 Spacer6sKey Space: valuez	KeySpace sKeySpace : valuesNonbreak�SpacesNonbreak�Space: values�NonbreakSpaces�NonbreakSpace: value)rr�rr��
putrequest�	putheader�assertInr��rr�s  r�test_putheaderzHeaderTests.test_putheader�s����$�]�3�3���t�$�$��	�����c�"�"�"����'��,�,�,��
�
�+�T�\�:�:�:����u�g�&�&�&��
�
�m�T�\�2�2�2����u�i�(�(�(��
�
�o�t�|�4�4�4�����(8�9�9�9��
�
�6���E�E�E����|�W�g�6�6�6��
�
�5�t�|�D�D�D����}�g�.�.�.��
�
�*�D�L�9�9�9����|�[�1�1�1��
�
�-�t�|�<�<�<����|�_�5�5�5��
�
�1�4�<�@�@�@����,�.>�?�?�?��
�
�<�d�l�K�K�K����*�,=�>�>�>��
�
�;�T�\�J�J�J����{�G�,�,�,��
�
�)�4�<�8�8�8����{�G�,�,�,��
�
�)�4�<�8�8�8����+�W�5�5�5��
�
�1�4�<�@�@�@����+�W�5�5�5��
�
�1�4�<�@�@�@�@�@rc���d}tjd��}td��}||_|�dd��|�|j�|����d}tjd��}td��}||_|�dd��|�|j�|����dS)NsCGET /foo HTTP/1.1
Host: [2001::]:81
Accept-Encoding: identity

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

z
[2001:102A::])rr�rr�r��
assertTruer�
startswith�r�expectedr�r�s    r�test_ipv6host_headerz HeaderTests.test_ipv6host_headers���8���$�]�3�3���"�~�~����	����U�F�#�#�#�����	�,�,�X�6�6�7�7�7�8���$�_�5�5���"�~�~����	����U�F�#�#�#�����	�,�,�X�6�6�7�7�7�7�7rc��d}t|��}tj|��}|���|�|�d��d��|�|�d��d��dS)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_withz-HeaderTests.test_malformed_headers_coped_withs{��O���$�����"�4�(�(���
�
�����������0�0�%�8�8�8��������1�1�5�9�9�9�9�9rc	��dttdd����zdzttdd����zdz}t|��}tj|��}|���|�|�d��d	��|�|jdd	��|�|�d
��d��|�|jd
d��d�	tttdd������}|�|�d
��|��|�|jd
|��|�|�d����|�
d|j��|�d��|jdfD]h}|�|�d����|�
d|��|�|�d�����idS)Ns0HTTP/1.1 200 OK
!#$%&'*+-.^_`|~: value
VCHAR: �!�s
obs-text: ��sM
obs-fold: text
 folded with space
	folded with tab
Content-Length: 0

�Content-Lengthrz!#$%&'*+-.^_`|~r6r��VCHARzobs-textzobs-foldrz folded with spacezfolded with tab)�bytes�rangerrr�r�r�r��msg�join�map�chr�assertIsNotNoner�r�r��endswith)rr�r�r��vchar�foldeds      r�test_parse_all_octetsz!HeaderTests.test_parse_all_octets(s*��
��u�T�8�4�4�5�5�
6�9�
�"�%��h�"7�"7�8�8�
9�<�
�	
��$�����"�4�(�(���
�
����������(8�9�9�3�?�?�?������"2�3�S�9�9�9�������(9�:�:�G�D�D�D������"3�4�g�>�>�>�����C��t�X�!6�!6�7�7�8�8���������0�0�%�8�8�8������'�*�E�2�2�2����T�^�^�J�7�7�8�8�8��
�
�j�$�(�+�+�+��~�~�j�1�1�4�8�J�3G�H�	@�	@�F��O�O�F�-�-�f�5�5�6�6�6��M�M�.��7�7�7��O�O�F�O�O�,=�>�>�?�?�?�?�	@�	@rc��tjd��}td��|_|�dd��d}|D]}\}}|�||f��5|�td��5|�||��ddd��n#1swxYwYddd��n#1swxYwY�~dS)NrWr�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�namer6s     r�test_invalid_headersz HeaderTests.test_invalid_headersFsE���$�]�3�3���r�N�N��	�����s�#�#�#�
��$!�	0�	0�K�D�%����t�U�m�,�,�
0�
0��+�+�J�8H�I�I�0�0��N�N�4��/�/�/�0�0�0�0�0�0�0�0�0�0�0����0�0�0�0�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0����
0�
0�
0�
0��	0�	0s6�B5�;B�B5�B"�"B5�%B"�&B5�5B9	�<B9	c��d}t|��}tj|d���}tj��5}|���ddd��n#1swxYwY|������}|�|dd��|�|dd��|�|dd��|�|d	d
��dS)Ns9HTTP/1.1 200 OK
First: val
Second: val1
Second: val2
r )�
debuglevelrzreply: 'HTTP/1.1 200 OK\r\n'zheader: First: val�zheader: Second: val1�zheader: Second: val2)	rrr�r�captured_stdoutr��getvalue�
splitlinesr�)rr�r�r��output�liness      r�test_headers_debuglevelz#HeaderTests.test_headers_debuglevelds+��
 �	
��$�����"�4�A�6�6�6��
�
$�
&�
&�	�&��J�J�L�L�L�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	����!�!�,�,�.�.������q��#C�D�D�D�����q��#7�8�8�8�����q��#9�:�:�:�����q��#9�:�:�:�:�:s�A�A �#A N)r8r9r:r�r�r�r�r�r�r�r�r1rrrfrf�s�������H�H�H�:@�@�@�D A� A� A�D8�8�8�&:�:�:�@�@�@�<0�0�0�<;�;�;�;�;rrfc��eZdZd�ZdS)�HttpMethodTestsc��d}|D]t}|�td��5tjd��}t	d��|_|�|d���ddd��n#1swxYwY�udS)N)	zGET
zPOST
zPUT

z
POST
Valuez
POST
HOST:abczGET
rHost:abc
zPOST
Remainder:
z
GET
HOST:
z
PUTz'method can't contain control charactersrWr)r��url)r�r�rr�rr�r�)r�methodsr�r�s    r�test_invalid_method_namesz)HttpMethodTests.test_invalid_method_namesws���

���	5�	5�F��'�'�� I�K�K�
5�
5��,�]�;�;��&�t�,�,��	����F���4�4�4�	
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5��	5�	5s�AA.�.A2	�5A2	N)r8r9r:r�r1rrr�r�vs#������5�5�5�5�5rr�c�>�eZdZdZd�Zd�Zd�Zd�Zdd�Zd�Z	d	�Z
d
S)�TransferEncodingTestsIt's just a flesh woundc�z�tjd��}td��|_|�dd��|�|���d���|�|jj��\}}}|�	|��}|�
||j��dS)NrWrr~rT)�encode_chunked)rr�rr�r��
endheaders�
_make_body�_parse_requestr�_parse_chunkedr��
expected_body)rr��_r�s    r�test_endheaders_chunkedz,TransferEncodingTest.test_endheaders_chunked�s����$�]�3�3���s�O�O��	������$�$�$�������)�)�$��?�?�?��(�(����8�8�
��1�d��"�"�4�(�(������t�1�2�2�2�2�2rc�X�tjd��}td��|_|�dd|���ddi��|�|jj��\}}}|�dd�|�	��D����|�
|dd��|�
||j��tjd��}td��|_|�dd|j�d	��ddi��|�|jj��\}}}|�dd
�|�	��D����|�
|dd��|�
||j��tjd��}td��|_|�ddddid|����
��|�|jj��\}}}|�dd�|D����|�
|dd��|�
|�
|��|j��dS)NrWrr~r�Transfer-Encoding�chunked�content-lengthc�6�g|]}|�����Sr1�rq��.0�ks  r�
<listcomp>z>TransferEncodingTest.test_explicit_headers.<locals>.<listcomp>�� ��+N�+N�+N�!�A�G�G�I�I�+N�+N�+Nr�latin-1c�6�g|]}|�����Sr1rrs  rrz>TransferEncodingTest.test_explicit_headers.<locals>.<listcomp>�r	rz
gzip, chunkedT)r�r�r�c�6�g|]}|�����Sr1rrs  rrz>TransferEncodingTest.test_explicit_headers.<locals>.<listcomp>�� ��+G�+G�+G�!�A�G�G�I�I�+G�+G�+Gr)rr�rr�r�r�r�r�assertNotIn�keysr�r�rpr��rr�r�r�r�s     r�test_explicit_headersz*TransferEncodingTest.test_explicit_headers�s����$�]�3�3���s�O�O��	�	
����C����*�*�-@�)�,L�	N�	N�	N� �.�.�t�y�~�>�>���7�D����)�+N�+N�w�|�|�~�~�+N�+N�+N�O�O�O�����!4�5�y�A�A�A�����t�1�2�2�2��$�]�3�3���s�O�O��	�����C��+�2�2�9�=�=�
 �)�,�	.�	.�	.� �.�.�t�y�~�>�>���7�D����)�+N�+N�w�|�|�~�~�+N�+N�+N�O�O�O�����!4�5�y�A�A�A�����t�1�2�2�2��$�]�3�3���s�O�O��	����V�S�(�/�:�����"�"�	�	$�	$�	$� �.�.�t�y�~�>�>���7�D����)�+G�+G�w�+G�+G�+G�H�H�H�����!4�5��G�G�G�����,�,�T�2�2�D�4F�G�G�G�G�Grc���dD]�}tjd��}td��|_|�dd|�|�����|�|jj��\}}}|�|��}|�	||j
��|�	|dd��|�d	d
�|D������dS)N)FTrWrr~r)�empty_linesrrrc�6�g|]}|�����Sr1rrs  rrz5TransferEncodingTest.test_request.<locals>.<listcomp>�s ��/K�/K�/K�a����	�	�/K�/K�/Kr)rr�rr�r�r�r�rr�r�r�r)rrr�r�r�r�s      r�test_requestz!TransferEncodingTest.test_request�s���)�
	M�
	M�K��(��7�7�D�"�3���D�I��L�L���T�_�_��_�E�E�
G�
G�
G� $�2�2�4�9�>�B�B��A�w���&�&�t�,�,�D����T�4�#5�6�6�6����W�%8�9�9�E�E�E�
���-�/K�/K�7�/K�/K�/K�L�L�L�L�
	M�
	Mrc�n�tjd��}td��|_|�ddd��|�|jj��\}}}|�|dd��|�dd	�|D����|�|d
��dS)NrWrr~rr1rrrc�6�g|]}|�����Sr1rrs  rrz8TransferEncodingTest.test_empty_body.<locals>.<listcomp>�r
rs0

)	rr�rr�r�r�rr�rrs     r�test_empty_bodyz$TransferEncodingTest.test_empty_body�s����$�]�3�3���s�O�O��	����V�S�"�%�%�%��.�.�t�y�~�>�>���7�D�����!4�5�y�A�A�A����)�+G�+G�w�+G�+G�+G�H�H�H�����|�,�,�,�,�,rFc#��K�|j�d��}t|��D]2\}}|r	|dzrdV�|t|��dz
kr|dzV��.|V��3dS)N� r�rr )r�rn�	enumeratero)rrr��idx�lines     rr�zTransferEncodingTest._make_body�s������"�(�(��.�.��"�5�)�)�	�	�I�C���
�s�Q�w�
��	�	�	��S��Z�Z�!�^�#�#��T�k�!�!�!�!��
�
�
�
�	�	rc�"�|�d��}|d}i}d}|t|��kr�t||��dkr�||�d��\}}|�d�����}|�d�����||<|dz
}|t|��krt||��dk��||d�||dzd���fS)N�
rr rmr
)rnrorpr�r�)rrr�r�r�rN�keyr�s        rr�z#TransferEncodingTest._parse_request�s����
�
�7�#�#����(����
���#�e�*�*�n�n��U�1�X����!2�!2��Q�x�~�~�d�+�+�H�C���*�*�Y�'�'�-�-�/�/�C��:�:�i�0�0�6�6�8�8�G�C�L�
��F�A�	�#�e�*�*�n�n��U�1�X����!2�!2������e�A��E�F�F�m�!<�!<�<�<rc�`�g}i}d}|�d��}	|||dz�\}}t|d��}|dkr|dz
}nR|�|t|����|�|��|dz
}|t|��krn�~d�|��S)NrrTr��r r)rn�intr�rortr�)rrr��trailersrNr��size�chunks        rr�z#TransferEncodingTest._parse_chunked�s�������
���
�
�7�#�#��	���!�A�#��,�K�D�%��t�R�=�=�D��q�y�y��Q�������T�3�u�:�:�.�.�.��K�K�����
��F�A��3�u�:�:�~�~��!	�$�x�x��~�~�rN)F)r8r9r:r�r�rrrr�r�r�r1rrr�r��s�������.�M�3�3�3�$H�$H�$H�LM�M�M� -�-�-�	�	�	�	�=�=�=�����rr�c�@�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#�Z%d$�Z&d%�Z'd&�Z(d'�Z)d(�Z*d)�Z+d*�Z,d+�Z-d,�Z.d-�Z/d.�Z0d/�Z1d0�Z2d1�Z3d2�Z4d3�Z5d4S)5�	BasicTestc
��|�hd�tttd������k��dS)N>r�r6�phrase�description�)r��set�dirrr.s r�&test_dir_with_added_behavior_on_statusz0BasicTest.test_dir_with_added_behavior_on_status
s=�����B�B�B�c�#�j�Y\�o�o�J^�J^�F_�F_�_�`�`�`�`�`rc�j�Gd�dtj��}tj|t��dS)Nc��eZdZdZdCd�ZdZdZdZdZdZ	d	Z
d
ZdZdZ
d
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"d"Z#d#Z$d$Z%d%Z&d&Z'd'Z(d(Z)d)Z*d*Z+d+Z,d,Z-d-Z.d.Z/d/Z0d0Z1d1Z2d2Z3d3Z4d4Z5d5Z6d6Z7d7Z8d8Z9d9Z:d:Z;d;Z<d<Z=d=Z>d>Z?d?Z@d@ZAdAZBdBS)D�;BasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatusa�HTTP status codes and reason phrases

            Status codes from the following RFCs are all observed:

                * RFC 7231: Hypertext Transfer Protocol (HTTP/1.1), obsoletes 2616
                * RFC 6585: Additional HTTP Status Codes
                * RFC 3229: Delta encoding in HTTP
                * RFC 4918: HTTP Extensions for WebDAV, obsoletes 2518
                * RFC 5842: Binding Extensions to WebDAV
                * RFC 7238: Permanent Redirect
                * RFC 2295: Transparent Content Negotiation in HTTP
                * RFC 2774: An HTTP Extension Framework
                * RFC 7725: An HTTP Status Code to Report Legal Obstacles
                * RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2)
                * RFC 2324: Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)
                * RFC 8297: An HTTP Status Code for Indicating Hints
                * RFC 8470: Using Early Data in HTTP
            r�c�f�t�||��}||_||_||_|Sr0)r#�__new__�_value_r*r+)�clsr6r*r+�objs     rr4zCBasicTest.test_simple_httpstatus.<locals>.CheckedHTTPStatus.__new__%s/���k�k�#�u�-�-��#���#��
�"-����
r)�d�Continuez!Request received, please continue)�ezSwitching Protocolsz.Switching to new protocol; obey Upgrade header)�f�
Processing)�gzEarly Hints)���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)i,zMultiple 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 RedirectrM)i4zPermanent RedirectrK)i�zBad 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)r,�	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)i�zRequest Entity Too LargezEntity is too large)i�zRequest-URI Too LongzURI is too long)i�zUnsupported Media Typez!Entity body in unsupported format)i�zRequested Range 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 Entity)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)i�zInternal 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 accessN)r�)Cr8r9r:rSr4�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�REQUEST_ENTITY_TOO_LARGE�REQUEST_URI_TOO_LONG�UNSUPPORTED_MEDIA_TYPE�REQUESTED_RANGE_NOT_SATISFIABLE�EXPECTATION_FAILED�IM_A_TEAPOT�MISDIRECTED_REQUEST�UNPROCESSABLE_ENTITY�LOCKED�FAILED_DEPENDENCY�	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_REQUIREDr1rr�CheckedHTTPStatusr2s�������
�
�$
�
�
�
�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��('�$�$#� �&5�"�/0�+�";��I�K�#<��#>� �"�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_httpstatusz BasicTest.test_simple_httpstatuss[��K	K�K	K�K	K�K	K�K	K���K	K�K	K�K	K�X	
��0�*�=�=�=�=�=rc��d}t|��}tj|��}|���|�|�d��d��|�|�����|�|j��|�|���d��|�	|�����|�|j��|�
��|�	|j��d}t|��}tj|��}|�tj|j��dS)N�HTTP/1.1 200 Ok

Textrr�TextzHTTP/1.1 400.100 Not Ok

Text)
rrr�r�r�rL�assertFalse�isclosed�closedr�r)�assertRaises�
BadStatusLiner�s    r�test_status_lineszBasicTest.test_status_lines�s7��-���$�����"�4�(�(���
�
����������1���s�+�+�+���������)�)�)������%�%�%���������g�.�.�.�����
�
���(�(�(������%�%�%��
�
���������$�$�$�4���$�����"�4�(�(�����&�.��
�;�;�;�;�;rc�t�tjd��}|�t|��d��dS)Nr�zBadStatusLine("''"))rr�r��repr)r�excs  r�test_bad_status_reprzBasicTest.test_bad_status_repr�s5���"�2�&�&������c���$=�>�>�>�>�>rc�H�d}t|��}tj|��}|���|�|�d��d��|�|�����|�|�d��d��|�|�����|�|j	��|�
��|�|j	��dS�N�*HTTP/1.1 200 Ok
Content-Length: 4

Textr��Te�xt�rrr�r�r�rLr�r�r�r�r)r�s    r�test_partial_readszBasicTest.test_partial_reads�s���B���$�����"�4�(�(���
�
����������1���u�-�-�-���������)�)�)�������1���u�-�-�-�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc�D�d}t|��}tj|��}|���|�|���d��|�|�����|�|���d��|�	|�����|�|j
��|���|�	|j
��dS)Nz4HTTP/1.1 200 Ok
Content-Length: 13

Text
AnothersText
sAnother)rrr�r�r�rPr�r�rLr�r�r)r�s    r�test_mixed_readszBasicTest.test_mixed_reads�s���N���$�����"�4�(�(���
�
������������+�6�6�6���������)�)�)���������j�1�1�1�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc��d}t|��}tj|��}|���t	d��}|�|��}|�|d��|�t|��d��|�|�	����|�|��}|�|d��|�t|��d��|�
|�	����|�|j��|���|�
|j��dSr��
rrr�r��	bytearray�readintor�r�r�r�r�r�r)�rr�r�r��brNs      r�test_partial_readintosz BasicTest.test_partial_readintos�s8��B���$�����"�4�(�(���
�
�����a�L�L���M�M�!��������A��������q���5�)�)�)���������)�)�)��M�M�!��������A��������q���5�)�)�)�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc��d}t|��}tj|��}|���|�|�d��d��|�|�����|�|j	��|�
��|�|j	��dS)Nr��
r��rrr�r�r�rLr�r�r�r�r)r�s    r�test_partial_reads_past_endz%BasicTest.test_partial_reads_past_end�s���A���$�����"�4�(�(���
�
����������2����0�0�0�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc� �d}t|��}tj|��}|���t	d��}|�|��}|�|d��|�t|��dd�d��|�|�	����|�
|j��|���|�|j��dS)Nr�r��r�)
rrr�r�r�r�r�r�r�r�r�r�r)r�s      r�test_partial_readintos_past_endz)BasicTest.test_partial_readintos_past_end�s���A���$�����"�4�(�(���
�
�����b�M�M���M�M�!��������A��������q���"�1�"��w�/�/�/�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc��d}t|��}tj|��}|���|�|�d��d��|�|�����|�|�d��d��|�|�d��d��|�|�����|�|j	��|�
��|�|j	��dS)Nr�r�r�r�r rr�r�s    r�$test_partial_reads_no_content_lengthz.BasicTest.test_partial_reads_no_content_lengths��-���$�����"�4�(�(���
�
����������1���u�-�-�-���������)�)�)�������1���u�-�-�-�������1���s�+�+�+�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc��d}t|��}tj|��}|���t	d��}|�|��}|�|d��|�t|��d��|�|�	����|�|��}|�|d��|�t|��d��|�|��}|�|d��|�
|�	����dS)Nr�r�r�r�r)rrr�r�r�r�r�r�r�r�r�r�s      r�(test_partial_readintos_no_content_lengthz2BasicTest.test_partial_readintos_no_content_lengths'��-���$�����"�4�(�(���
�
�����a�L�L���M�M�!��������A��������q���5�)�)�)���������)�)�)��M�M�!��������A��������q���5�)�)�)��M�M�!��������A��������
�
���(�(�(�(�(rc�
�d}t|��}tj|��}|���|�|�d��d��|�|�����|�|�d��d��|�|�d��d��|�|�����dS)N�+HTTP/1.1 200 Ok
Content-Length: 10

Textr�r�r�r r)	rrr�r�r�rLr�r�r�r�s    r�"test_partial_reads_incomplete_bodyz,BasicTest.test_partial_reads_incomplete_body*s���C���$�����"�4�(�(���
�
����������1���u�-�-�-���������)�)�)�������1���u�-�-�-�������1���s�+�+�+�����
�
���(�(�(�(�(rc�P�d}t|��}tj|��}|���t	d��}|�|��}|�|d��|�t|��d��|�|�	����|�|��}|�|d��|�t|��d��|�|��}|�|d��|�
|�	����|�|j��|���|�
|j��dS)Nr�r�r�r�rr�r�s      r�&test_partial_readintos_incomplete_bodyz0BasicTest.test_partial_readintos_incomplete_body7s_��C���$�����"�4�(�(���
�
�����a�L�L���M�M�!��������A��������q���5�)�)�)���������)�)�)��M�M�!��������A��������q���5�)�)�)��M�M�!��������A��������
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc��dD]-}|�tjtj|���.dD]P\}}}tj|��}|�||j��|�||j���QdS)N�zwww.python.org:abczuser:password@www.python.org)�z[fe80::207:e9ff:fe9b]:8000�fe80::207:e9ff:fe9bi@)zwww.python.org:80�www.python.org�P)�www.python.org: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_portzBasicTest.test_host_portMs���I�	L�	L�B����f�/��1F��K�K�K�K�P�		(�		(�H�B��1��%�b�)�)�A����Q���'�'�'����Q���'�'�'�'�		(�		(rc���d}d}t|��}tj|��}|���|�d��}|�||��dS)Nz�HTTP/1.1 200 OK
Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"
Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"

No body
zrCustomer="WILE_E_COYOTE"; Version="1"; Path="/acme", Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"z
Set-Cookie)rrr�r�r�r�)rr�hdr�sr$�cookiess      r�test_response_headerszBasicTest.test_response_headers^sj����O��
�t�������"�"��	���	�	�	��+�+�l�+�+������#�&�&�&�&�&rc���tdt��}tj|d���}|���|���r|�d��dSdS)N�*HTTP/1.1 200 OK
Content-Length: 14432

r��r��)Did not expect response from HEAD request)rrHrr�r�rL�fail�rr�r�s   r�test_read_headzBasicTest.test_read_headpsw���
�
�	���
�"�4��7�7�7���
�
�����9�9�;�;�	C��I�I�A�B�B�B�B�B�	C�	Crc�D�tdt��}tj|d���}|���td��}|�|��dkr|�d��|�t|��d��dS)Nr�r�r��rr��)
rrHrr�r�r�r�r�r�r�)rr�r�r�s    r�test_readinto_headzBasicTest.test_readinto_head}s����
�
�	���
�"�4��7�7�7���
�
�����a�L�L���=�=����q� � ��I�I�A�B�B�B�����q���9�-�-�-�-�-rc��d�d�ttjdz��D����dz}d|z}t	|��}tj|��}|�tjd|j��dS)Nrc3� K�|]	}d|zV��
dS)z
Header%d: fooNr1)r�is  r�	<genexpr>z2BasicTest.test_too_many_headers.<locals>.<genexpr>�sC����F�F�"#�.��1�F�F�F�F�F�Frr zHTTP/1.1 200 OK
zgot more than \d+ headers)	r�r�r�_MAXHEADERSrr�r��
HTTPExceptionr�)rr�rr�r$s     r�test_too_many_headerszBasicTest.test_too_many_headers�s����+�+�F�F�',�V�-?�!�-C�'D�'D�F�F�F�F�F�HN�O��%��/���t�������"�"�����v�3�;�Q�W�	F�	F�	F�	F�	Frc	��d}ttd��5}tjd��}t	|��}||_|�dd|��|�|j�	|��|jdt|����d|����ddd��dS#1swxYwYdS)Ns_GET /foo HTTP/1.1
Host: example.com
Accept-Encoding: identity
Transfer-Encoding: chunked

r%rWr�r�z != )�open�__file__rr�rr�r�r�rr�ro�rr�r�r�r�s     r�test_send_filezBasicTest.test_send_file�s����
�(�D�
!�
!�	;�T��(��7�7�D��d�#�#�D��D�I��L�L����-�-�-��O�O�D�I�0�0��:�:��Y�~��H�
�
�~�.�.�.���=:�
;�
;�
;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;�	;�	;s�BB4�4B8�;B8c���d}tjd��}td��}||_|�|��|�||j��d|_|�tjd|����|�||j��d|_|�tj	|����|�||j��dS)Ns"this is a test this is only a testrWrr�)
rr�rr��sendr�r�arrayr;r<r�s    r�	test_sendzBasicTest.test_send�s���8���$�]�3�3���$������	��	�	�(��������4�9�-�-�-���	��	�	�%�+�c�8�,�,�-�-�-�����4�9�-�-�-���	��	�	�"�*�X�&�&�'�'�'�����4�9�-�-�-�-�-rc�
��d��G�fd�dtj��}d}tjd��}t	d��}||_|�|����|�|j|��dS)Nc3�"K�dV�dV�dV�dS)Nr�data_twor1r1rrrz/BasicTest.test_send_updating_file.<locals>.data�s*�����L�L�L��J�J�J������rc�0��eZdZdZ���Zdd�ZdS)�7BasicTest.test_send_updating_file.<locals>.UpdatingFiler$rIc�*�t|j��Sr0)�next�d)r�	blocksizes  rrLz<BasicTest.test_send_updating_file.<locals>.UpdatingFile.read�s���D�F�|�|�#rNrR)r8r9r:r*r�rL)rs�r�UpdatingFiler��s9��������D�����A�
$�
$�
$�
$�
$�
$rr�sdatarWr�)	r;�
TextIOBaserr�rr�r�r�r)rr�r�r�r�rs     @r�test_send_updating_filez!BasicTest.test_send_updating_file�s����	�	�	�
	$�	$�	$�	$�	$�	$�	$�2�=�	$�	$�	$����$�]�3�3���"�~�~����	��	�	�,�,�.�.�!�!�!������H�-�-�-�-�-rc���d}d�}tjd��}td��}||_|�dd|��ddi��|�|j|��dS)	NsbGET /foo HTTP/1.1
Host: example.com
Accept-Encoding: identity
Content-Length: 11

onetwothreec3�"K�dV�dV�dV�dS)Nsonestwosthreer1r1rrr�z&BasicTest.test_send_iter.<locals>.body�s%�����L�L�L��L�L�L��N�N�N�N�NrrWr�r�r�r��11)rr�rr�r�r�rr�s     r�test_send_iterzBasicTest.test_send_iter�s~��&��	�	�	�
�$�]�3�3���"�~�~����	����U�F�D�D�F�F�-=�t�,D�E�E�E������H�-�-�-�-�-rc�n�d}tjd|���}td��}||_d|zdz}|�ddtj|��d	d
i��|�|jd��|j	�
dd
��d
}|�||��dS)z8Check that request() respects the configured block size.�rW�r�N�a�br�rr��9r��

r )rr�rr�r�r;r<r�rrrn)rr�r�r�r�r�s      r�test_blocksize_requestz BasicTest.test_blocksize_request�s����	��$�]�i�H�H�H���$������	��)�#�d�*�����U�C���H�!5�!5�8H�#�7N�O�O�O�����+�Q�/�/�/��y���{�A�.�.�q�1������x�(�(�(�(�(rc�,�d}tjd|���}td��}||_d|zdz}|�tj|����|�|jd��|�|j	|��dS)z5Check that send() respects the configured block size.rrWrNrrr�)
rr�rr�r�r;r<r�rr)rr�r�r�r�s     r�test_blocksize_sendzBasicTest.test_blocksize_send�s����	��$�]�i�H�H�H���$������	��)�#�d�*���	�	�"�*�X�&�&�'�'�'�����+�Q�/�/�/������H�-�-�-�-�-rc���tjd��}td��|_|�t
��5|�dd|��ddd��dS#1swxYwYdS)NrWr�r~�test)rr�rr�r��	TypeErrorr�r�s  r�test_send_type_errorzBasicTest.test_send_type_error�s����$�]�3�3���r�N�N��	�
�
�
�y�
)�
)�	/�	/��L�L����.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	/�	/s�A(�(A,�/A,c��t}tttztz��}tj|d���}|���|�|�	��|��|�
��tdd��D]�}tttztz��}tj|d���}|���|�|�	|��|�	|��z|�	��z|��|�
����dD�]+}tt|z��}tj|d���}|���	|�	��|�d��n�#t
j
$r}}|�|j|��dt|��z}|�t!|��|��|�t#|��|��Yd}~nd}~wwxYw|�
����#|�
��wxYwdS)Nr�r�r ��r�zfoo
�IncompleteRead expected�IncompleteRead(%d bytes read))�chunked_expectedr�
chunked_start�
last_chunk�chunked_endrr�r�r�rLr)r�r��IncompleteRead�partialror�r)rr�r�r�rN�xr��expected_messages        r�test_chunkedzBasicTest.test_chunked�s8��#���-�*�4�{�B�C�C���"�4��6�6�6���
�
������������h�/�/�/��
�
�����q�"���	�	�A��m�j�8�;�F�G�G�D��&�t�E�:�:�:�D��J�J�L�L�L����T�Y�Y�q�\�\�D�I�I�a�L�L�8�4�9�9�;�;�F��Q�Q�Q��J�J�L�L�L�L� �	�	�A��m�a�/�0�0�D��&�t�E�:�:�:�D��J�J�L�L�L�

��	�	�����	�	�3�4�4�4�4��
�(�
;�
;�
;�� � ���H�5�5�5�#B�S��]�]�#R� �� � ��a���*:�;�;�;�� � ��Q���)9�:�:�:�:�:�:�:�:�����	
;�����
�
�������
�
��������	�	s1�"G�6I1�I�A3I�I1�I�I1�1Jc�:�t}t|��}td��}ttt
ztz��}tj|d���}|�	��|�
|��}|�|d|�|��|�||��|���tdd��D�]}ttt
ztz��}tj|d���}|�	��t|��}|�
|d|���}||�
||||z���z
}||�
||d���z
}|�|d|�|��|�||��|�����
dD�],}	tt|	z��}tj|d���}|�	��	|�
|��}|�d��n�#tj$r}}|�|j|��d	t|��z}
|�t%|��|
��|�t'|��|
��Yd}~nd}~wwxYw|�����#|���wxYwdS)
Nr�r�r�r rrrrr)rror�rrrrrr�r�r�r�r)r��
memoryviewr�rrr�r)rr��	nexpectedr�r�r�rN�mr�rrs           r�test_readinto_chunkedzBasicTest.test_readinto_chunkeds���#����M�M�	��c�N�N���-�*�4�{�B�C�C���"�4��6�6�6���
�
�����M�M�!��������:�I�:���1�1�1�����I�&�&�&��
�
�����q�"���
	�
	�A��m�j�8�;�F�G�G�D��&�t�E�:�:�:�D��J�J�L�L�L��1�
�
�A��
�
�a��!��f�%�%�A�
����q��1�q�5��z�*�*�*�A�
����q����u�%�%�%�A����Q�z�	�z�]�H�5�5�5����Q�	�*�*�*��J�J�L�L�L�L� �	�	�A��m�a�/�0�0�D��&�t�E�:�:�:�D��J�J�L�L�L�

��M�M�!�$�$���	�	�3�4�4�4�4��
�(�
;�
;�
;�� � ���H�5�5�5�#B�S��]�]�#R� �� � ��a���*:�;�;�;�� � ��Q���)9�:�:�:�:�:�:�:�:�����	
;�����
�
�������
�
��������	�	s1�2I�L�K)�,A3K$�L�$K)�)L�Lc�6�d}t|tztz��}tj|d���}|���|�|���d��|�|jd��|�|j	d��|�
|�����|�|j
��|���|�
|j
��dS)N�EHTTP/1.1 200 OK
Transfer-Encoding: chunked

a
hello world
1
d
r�r�rr>r?)rrrrr�r�r�rL�status�reasonr�r�r�r�r))rrr�r�s    r�test_chunked_headzBasicTest.test_chunked_head?s���
�	��-�*�4�{�B�C�C���"�4��7�7�7���
�
������������c�*�*�*������c�*�*�*������d�+�+�+�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc��d}t|tztz��}tj|d���}|���t
d��}|�|��}|�|d��|�t|��d��|�|j
d��|�|jd��|�|�
����|�|j��|���|�|j��dS)	Nr&r�r�r�rr�r>r?)rrrrr�r�r�r�r�r�r'r(r�r�r�r�r))rrr�r�r�rNs      r�test_readinto_chunked_headz$BasicTest.test_readinto_chunked_headSs��
�	��-�*�4�{�B�C�C���"�4��7�7�7���
�
�����a�L�L���M�M�!��������A��������q���9�-�-�-������c�*�*�*������d�+�+�+�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc��td��}tj|d���}|���|�|���d��|�|�����dS)Nz.HTTP/1.1 200 OK
Content-Length: -1

Hello
r�r��Hello
)rrr�r�r�rLr�r�r�s   r�test_negative_content_lengthz&BasicTest.test_negative_content_lengthjsv���D�F�F���"�4��6�6�6���
�
������������l�3�3�3�����
�
���(�(�(�(�(rc��td��}tj|d���}|���	|���|�d��dS#tj$r�}|�|jd��|�t|��d��|�t|��d��|�|�����Yd}~dSd}~wwxYw)Nz.HTTP/1.1 200 OK
Content-Length: 10

Hello
r�r�rr-z-IncompleteRead(7 bytes read, 3 more expected))
rrr�r�rLr�rr�rr�rr�r�)rr�r�r�s    r�test_incomplete_readzBasicTest.test_incomplete_readrs���R�S�S���"�4��6�6�6���
�
����
	1��I�I�K�K�K�
�I�I�/�0�0�0�0�0���$�	-�	-�	-����Q�Y��5�5�5����T�!�W�W�L�
N�
N�
N����S��V�V�L�
N�
N�
N��O�O�D�M�M�O�O�,�,�,�,�,�,�,�,�,�����
	-���s�A&�&D�5BD�Dc�J��tdd��}tjd���|�_|�t
�fd�������}|�d|j��|�d|�	d����dS)NzgHTTP/1.0 401 Authorization Required
Content-type: text/html
WWW-Authenticate: Basic realm="example"
sContent-LengthrWc�2����ddd��S)Nr��/urlr�)r�)r�s�r�<lambda>z&BasicTest.test_epipe.<locals>.<lambda>�s���$�,�,�u�f�f�"E�"E�rrNzBasic realm="example"zwww-authenticate)
r>rr�r�r�rC�getresponser�r'r�)rr�r�r�s   @r�
test_epipezBasicTest.test_epipe�s�����
<�
�	���
�$�]�3�3����	����'�E�E�E�E�	G�	G�	G����!�!������d�k�*�*�*����2����(:�;�;�	=�	=�	=�	=�	=rc��dddzzdz}tjt|����}|�tjtjf|j��dS)N�HTTP/1.1 200 Okr�r)rr�rr��LineTooLongr�r��rr�r�s   r�test_overflowing_status_linez&BasicTest.test_overflowing_status_line�sV�� �3��;�.��7���"�:�d�#3�#3�4�4�����6�-�v�/C�D�d�j�Q�Q�Q�Q�Qrc��dddzzdz}tjt|����}|�tj|j��dS)NzHTTP/1.1 200 OK
X-Foo: barr$r9z

)rr�rr�r:r�r;s   r�test_overflowing_header_linez&BasicTest.test_overflowing_header_line�s[��
���;�
'�)3�
4�	
��"�:�d�#3�#3�4�4�����&�,�d�j�9�9�9�9�9rc��ddz}tjt|����}|�tj��5}|���ddd��n#1swxYwY|�dt|j����|�dt|j����dS)NzHTTP/1.1 100 OK
r
i�zgot more than r�)	rr�rr�r�r�r�r�	exception)rr�r��cms    r�'test_overflowing_header_limit_after_100z1BasicTest.test_overflowing_header_limit_after_100�s���
��
�	
��"�:�d�#3�#3�4�4��
�
�
�v�3�
4�
4�	���J�J�L�L�L�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
�
�
�&��B�L�(9�(9�:�:�:��
�
�i��R�\�!2�!2�3�3�3�3�3s�A'�'A+�.A+c���dddzzdz}tjt|����}|���|�tj|j��dS)Nz/HTTP/1.1 200 OK
Transfer-Encoding: chunked

rr9za
hello world
0

)rr�rr�r�r:rLr;s   r�test_overflowing_chunked_linez'BasicTest.test_overflowing_chunked_line�sj��
1��E�k�
��
�	
��"�:�d�#3�#3�4�4���
�
�������&�,�d�i�8�8�8�8�8rc��d}t|��}tj|��}|���|�|���d��|�|�����|�|j	��|�
��|�|j	��dS)Nr8rr�r�s    r�test_early_eofzBasicTest.test_early_eof�s��� ���$�����"�4�(�(���
�
������������c�*�*�*�����
�
���(�(�(������%�%�%��
�
���������$�$�$�$�$rc���tjd��}d�G�fd�dtj��}||_t	d��|_|�dd��|�tj|j	��|�
�j��|�
|jj��dS)NrWc���eZdZ�fd�ZdS)�+BasicTest.test_error_leak.<locals>.Responsec�@��|�tjj|g|�Ri|��dSr0)rr�r)rrbrc�responses   �rrz4BasicTest.test_error_leak.<locals>.Response.__init__�s2������#�,�T�>�C�>�>�>�2�>�>�>�>�>rN)r8r9r:r)rKs�r�ResponserI�s.�������
?�
?�
?�
?�
?�
?�
?rrLzInvalid status liner�r)
rr�r��response_classrr�r�r�r�r5r�r�r)rr�rLrKs   @r�test_error_leakzBasicTest.test_error_leak�s�����$�]�3�3����	?�	?�	?�	?�	?�	?�	?�v�*�	?�	?�	?�
'����4�5�5��	����U�C� � � ����&�.��0@�A�A�A������(�(�(�����	�-�.�.�.�.�.rc�8�d}tdz}tt|ztztz��}tj|d���}|���|�|�	��|��|�
��dS)Nz3;foo=bar
abc
sabcr�r�)rrr�last_chunk_extendedrrr�r�r�rLr))r�extrar�r�r�s     r�test_chunked_extensionz BasicTest.test_chunked_extension�s��+��#�f�,���-�%�/�2E�E��S�T�T���"�4��6�6�6���
�
������������h�/�/�/��
�
�����rc��t}tttz��}t	j|d���}|���|�|���|��|�	��dS)z9some servers may serve up a short chunked encoding streamr�r�N)
rrrrrr�r�r�rLr)�rr�r�r�s    r�test_chunked_missing_endz"BasicTest.test_chunked_missing_end�sj��#���-�*�4�5�5���"�4��6�6�6���
�
������������h�/�/�/��
�
�����rc��t}tttztzt
z��}t
j|d���}|���|�	|�
��|��|�	|j�
��d��|���dS)z&See that trailers are read and ignoredr�r�rN)
rrrrr$rrr�r�r�rLr'r)rTs    r�test_chunked_trailerszBasicTest.test_chunked_trailers�s���#���-�*�4�x�?�+�M�N�N���"�4��6�6�6���
�
������������h�/�/�/��������)�)�3�/�/�/��
�
�����rc���t}d}tttztzt
z|z��}t
j|d���}|���|�	|�
��|��|�	|j�
��|�d����|�
��dS)zDCheck that we don't read past the end of the chunked-encoding stream�	extradatar�r�rN)rrrrr$rrr�r�r�rLr'rr))rr�rYr�r�s     r�test_chunked_synczBasicTest.test_chunked_sync�s���#���	��-�*�4�x�?�+�M�PY�Y�Z�Z���"�4��6�6�6���
�
������������h�/�/�/��������)�)�9�+;�+;�G�+D�+D�E�E�E��
�
�����rc�^�d}d}td|z|z��}tj|d���}|���|�|���|��|�|j���|��|���dS)zBCheck that we don't read past the end of the Content-Length stream�	extradata�
Hello123
�'HTTP/1.1 200 OK
Content-Length: 10

r�r�N)rrr�r�r�rLr'r)�rrYr�r�r�s     r�test_content_length_syncz"BasicTest.test_content_length_syncs��� �	�"���J�X�U�Xa�a�b�b���"�4��6�6�6���
�
������������h�/�/�/��������)�)�9�5�5�5��
�
�����rc�b�d}d}td|z|z��}tj|d���}|���|�|�d��|g��|�|j���|��|���dS�Nr\r]r^r�r�i�)	rrr�r�r��	readlinesr'rLr)r_s     r�test_readlines_content_lengthz'BasicTest.test_readlines_content_lengths��� �	�"���J�X�U�Xa�a�b�b���"�4��6�6�6���
�
�����������-�-��z�:�:�:��������)�)�9�5�5�5��
�
�����rc�`�d}d}td|z|z��}tj|d���}|���|�|�d��|��|�|j���|��|���dSrb)	rrr�r�r��read1r'rLr)r_s     r�test_read1_content_lengthz#BasicTest.test_read1_content_lengths��� �	�"���J�X�U�Xa�a�b�b���"�4��6�6�6���
�
����������D�)�)�8�4�4�4��������)�)�9�5�5�5��
�
�����rc��d}d}td|z|z��}tj|d���}|���|�|�d��|��|�|�d��d��|�|j���|��|���dS)Nr\r]r^r�r�r�r)	rrr�r�r�rPr'rLr)r_s     r�"test_readline_bound_content_lengthz,BasicTest.test_readline_bound_content_length"s��� �	�"���J�X�U�Xa�a�b�b���"�4��6�6�6���
�
����������r�*�*�H�5�5�5�������r�*�*�C�0�0�0��������)�)�9�5�5�5��
�
�����rc��d}d}td|dzz|z��}tj|d���}|���|�|�d��|dz��|�|���|��|�|j���|��|���dS)	Nr\r]s'HTTP/1.1 200 OK
Content-Length: 30

r�r�r��r�)	rrr�r�r�rfrLr'r)r_s     r�test_read1_bound_content_lengthz)BasicTest.test_read1_bound_content_length.s��� �	�"���J�X�VW�Z�W�Zc�c�d�d���"�4��6�6�6���
�
����������B����!��4�4�4���������h�/�/�/��������)�)�9�5�5�5��
�
�����rc�����tjtdf���|��j��d���fd�}tj|���}|���|�|jtd����tj�����}|�
dd��|���}	|�|jtj��tj|������}	|�d��|���n#|���wxYw	|���|���n-#|���|���wxYw|���|��d��dS)	Nrc�p������\}}|5|�d��5}	|���}|�d��sn�+|�d��|����ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr%Trs'HTTP/1.1 200 Connection established

)�acceptr,rP�rstripr"rL)r��address�readerr�result�servs    ��r�
run_serverz2BasicTest.test_response_fileno.<locals>.run_server@s3���"�k�k�m�m�O�T�7��
'�
'�t�}�}�T�*�*�
'�f��!�?�?�,�,�D��;�;�w�/�/�������K�L�L�L�������
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'����
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'����
'�
'�
'�
'�
'�
's5�B+�AB�B+�B	�B+�B	�B+�+B/�2B/)�targetr r�z
dummy:1234)�filenos
proxied data
)�socket�
create_server�HOST�
addCleanupr)�	threading�Thread�startr��floatrr��getsocknamer�r5r�r'r?rwr"�detach)rru�threadr�rKr�rsrts      @@r�test_response_filenozBasicTest.test_response_fileno:s������#�T�1�I�.�.������
�#�#�#���
	'�
	'�
	'�
	'�
	'�
	'��!��4�4�4�������������U�1�X�X�.�.�.��$�d�&6�&6�&8�&8�9�����Y��-�-�-��#�#�%�%��		����X�_�f�i�8�8�8��
�X�_�_�%6�%6�7�7�7�A�
��	�	�+�,�,�,����
�
�
�
�����
�
�
�
����
��N�N�����J�J�L�L�L�L��
�N�N�����J�J�L�L�L�L�������
�
�
�����!2�3�3�3�3�3s%�AF�)E�>F�E)�)F�*Gc��Gd�dtj��}|d��}td��|_|�dd��dS)zv
        It should be possible to override the default validation
        behavior in putrequest (bpo-38216).
        c��eZdZd�ZdS)�RBasicTest.test_putrequest_override_domain_validation.<locals>.UnsafeHTTPConnectionc��dSr0r1�rr�s  r�_validate_pathzaBasicTest.test_putrequest_override_domain_validation.<locals>.UnsafeHTTPConnection._validate_pathe����rN)r8r9r:r�r1rr�UnsafeHTTPConnectionr�d�#������
�
�
�
�
rr�rWr�r�z/N�rr�rr�r��rr�r�s   r�*test_putrequest_override_domain_validationz4BasicTest.test_putrequest_override_domain_validation_sh��
	�	�	�	�	�6�#8�	�	�	�$�#�M�2�2���r�N�N��	�����w�'�'�'�'�'rc��Gd�dtj��}|d��}td��|_|�ddd���dS)	Nc��eZdZd�ZdS)�PBasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnectionc��dSr0r1r�s  r�_validate_hostz_BasicTest.test_putrequest_override_host_validation.<locals>.UnsafeHTTPConnection._validate_hostnr�rN)r8r9r:r�r1rrr�r�mr�rr�z
example.com
r�r�rr )�	skip_hostr�r�s   r�(test_putrequest_override_host_validationz2BasicTest.test_putrequest_override_host_validationlso��	�	�	�	�	�6�#8�	�	�	�$�#�$5�6�6���r�N�N��	�	
����s�a��0�0�0�0�0rc��Gd�dtj��}|d��}td��|_|�dd��dS)z�
        It should be possible to override the default encoding
        to transmit bytes in another encoding even if invalid
        (bpo-36274).
        c��eZdZd�ZdS)�IBasicTest.test_putrequest_override_encoding.<locals>.UnsafeHTTPConnectionc�,�|�d��S)N�utf-8)r)r�str_urls  r�_encode_requestzYBasicTest.test_putrequest_override_encoding.<locals>.UnsafeHTTPConnection._encode_request~s���~�~�g�.�.�.rN)r8r9r:r�r1rrr�r�}s#������
/�
/�
/�
/�
/rr�rWr�r�u/☃Nr�r�s   r�!test_putrequest_override_encodingz+BasicTest.test_putrequest_override_encodingwsh��	/�	/�	/�	/�	/�6�#8�	/�	/�	/�$�#�M�2�2���r�N�N��	�����v�&�&�&�&�&rN)6r8r9r:r/r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
rrr$r)r+r.r0r6r<r>rBrDrFrNrRrUrWrZr`rdrgrirlr�r�r�r�r1rrr(r(s$������a�a�a�M>�M>�M>�`<�<�<�*?�?�?�
%�
%�
%�
%�
%�
%�%�%�%�(
%�
%�
%�
%�
%�
%�%�%�%� )�)�)�&)�)�)�%�%�%�,(�(�(�"'�'�'�$C�C�C�
.�
.�
.�F�F�F�;�;�;�.�.�.�.�.�.�*.�.�.� 
)�
)�
)�	.�	.�	.�/�/�/����@)�)�)�V%�%�%�(%�%�%�.)�)�)�1�1�1� 
=�
=�
=�"R�R�R�
:�:�:�4�4�4�9�9�9�
%�
%�
%�/�/�/� ������	�	�	�
�
�
�
�
�
�	�	�	�	�	�	�
�
�
�
�
�
�#4�#4�#4�J(�(�(�	1�	1�	1�'�'�'�'�'rr(c��eZdZdZdZee�d��d��d��ZdZd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�ZdS)�ExtendedReadTestz*
    Test peek(), read1(), readline()
    zOHTTP/1.1 200 OK

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

a
hello worl
3
d!

9
and now 

23
for something completely different

3
foo
0

c���t|j��}tj|d���}|���tj|j��|_||_dS)Nr�r�)	rr�rr�r�r;�BufferedReader�fpr�r�s   r�setUpzExtendedReadTest.setUp�sR���$�*�%�%���"�4��6�6�6���
�
�����#�D�G�,�,�����	�	�	rc���|j}|jj�d�fd�	}||j_g}	|�d��}|r�|�t	|��d��|���}|�t	|��t	|����|�|�|����|�t	|����}|�	||��n)|���}|�
|��|�|��|sn��"|�	d�|��|j
��dS)NrIc�N���|��}|dkr
|d|�S|dd�S)Nrr�r1)rNr��oldpeeks  �r�mypeekz*ExtendedReadTest.test_peek.<locals>.mypeek�s3������
�
�A��A�v�v���!��u���S�b�S�6�MrTr�rrrR)r�r��peek�
assertGreaterro�assertGreaterEqualr�r�rLr�r�rtr��lines_expected)rr�r��allr��p2r�r�s       @r�	test_peekzExtendedReadTest.test_peek�sd����y���'�,��	�	�	�	�	�	�
������	��	�	�!���A��

'��"�"�3�q�6�6�1�-�-�-��Y�Y�[�[���'�'��B����Q���8�8�8�����
�
�a� 0� 0�1�1�1��y�y��R���)�)��� � ��r�*�*�*�*��y�y�{�{��� � ��&�&�&��J�J�t�����
��!	�"	
������#����(;�<�<�<�<�<rc�^�|j}|�|jj|j��dSr0)r��_verify_readlinerPr�)rr�s  r�
test_readlinezExtendedReadTest.test_readline�s-���y�����d�i�0�$�2E�F�F�F�F�Frc�,�g}	|d��}|rA|dkr;t|��dkr(|�|�d����|�|��|sn�g|�d�|��|��dS)NTr��foo�
r)ror�r�rtr�r�)rrPr�r�rs     rr�z!ExtendedReadTest._verify_readline�s�����	��8�A�;�;�D��
:������t�9�9�q�=�=��O�O�D�M�M�%�$8�$8�9�9�9��J�J�t�����
��	�	
������#����1�1�1�1�1rc�����j���fd�}t|��}��|j�j��dS)Nc�x����d��}��t|��d��|S)Nr�)rf�assertLessEqualro)�resr�rs ��rr$z&ExtendedReadTest.test_read1.<locals>.r�s3����*�*�Q�-�-�C�� � ��S���1�-�-�-��Jr)r��	Readlinerr�rPr�)rr$�	readlinerr�s`  @r�
test_read1zExtendedReadTest.test_read1�sX�����y��	�	�	�	�	�	��a�L�L�	����i�0�$�2E�F�F�F�F�Frc���|j}g}	|���}|sn|�|���-|�d�|��|j��dS)NTr)r�rfrtr�r�r��rr�r�rs    r�test_read1_unboundedz%ExtendedReadTest.test_read1_unbounded�sm���y����	��:�:�<�<�D��
���J�J�t����		�
	
������#����(;�<�<�<�<�<rc��|j}g}	|�d��}|sn9|�t|��d��|�|���Q|�d�|��|j��dS)NTr�r)r�rfr�rortr�r�r�r�s    r�test_read1_boundedz#ExtendedReadTest.test_read1_bounded�s����y����	��:�:�b�>�>�D��
��� � ��T���B�/�/�/��J�J�t����	�	
������#����(;�<�<�<�<�<rc�b�|�|j�d��d��dS)Nrr)r�r�rfr.s r�test_read1_0zExtendedReadTest.test_read1_0�s,����������+�+�S�1�1�1�1�1rc��|j�d��}|�dt|����dS�Nr)r�r�r�ro)rr�s  r�test_peek_0zExtendedReadTest.test_peek_0�s7���I�N�N�1�������Q��A���'�'�'�'�'r)r8r9r:rSr��findrr��
lines_chunkedr�r�r�r�r�r�r�r�r�r1rrr�r��s���������	�
��5�:�:�g�.�.�/�/�0�7�7��@�@�N�
	��"���=�=�=�>G�G�G�2�2�2�G�G�G�=�=�=�	=�	=�	=�2�2�2�(�(�(�(�(rr�c��eZdZdZdZdS)�ExtendedReadTestChunkedz:
    Test peek(), read1(), readline() in chunked mode
    r�N)r8r9r:rSr�r1rrr�r�s"��������
	�
�E�Err�c��eZdZdZd�Zd�ZdS)r�zT
    a simple readline class that uses an arbitrary read function and buffering
    c�"�||_d|_dS)Nr)�readfunc�	remainder)rr�s  rrzReadliner.__init__s�� ��
�����rc��g}d}|j}		|�d��}|dkrnM|t|��z|kr||z
dz
}|�|��|���}|sd}n�i|dz
}|�|d|���||d�|_d�|��S#d�|��|_�xYw)NrTr�rIr r)r�r�rortr�r�)r�limitr�datalenrLrs      rrPzReadliner.readline!s��������~��	�
��i�i��&�&���"�9�9���S��Y�Y�&�%�/�/��'�/�A�-�C����D�!�!�!��}�}�������C��
�
�1�H�C��K�K��T�c�T�
�#�#�#�!�#�$�$�Z�D�N��8�8�D�>�>�!��	� �X�X�d�^�^�D�N����s�B/B=�=CN)r8r9r:rSrrPr1rrr�r�s<���������������rr�c� �eZdZd�Zd�Zd�ZdS)�OfflineTestc�4�dh}ddh}tt��D][}|�d��s||vr�tt|��}t|dd��dkr|�|���\|�tj|��dS)N�	responses�HTTPMessage�
parse_headersr�r9zhttp.client)r.rr��getattr�add�assertCountEqual�__all__)rr��denylistr��
module_objects     r�test_allzOfflineTest.test_all<s����=��"�?�3����K�K�	#�	#�D����s�#�#�
�t�x�'7�'7��#�F�D�1�1�M��}�l�D�9�9�]�J�J����T�"�"�"�����f�n�h�7�7�7�7�7rc�f�|�tjtjd��dS)NrQ)r�rr�rnr.s r�test_responseszOfflineTest.test_responsesJs)������)�&�*:�;�[�I�I�I�I�Irc���gd�}|D]X}|�|���5|�tt|����ddd��n#1swxYwY�YdS)N):rUrVrWr?rYrZr[r\r]r^r_rarbrcrdrerfrgrhrjrkrlrmrnrorprqrrrsrtrurvrwrxryrzr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rXr�)�constant)r�r��hasattrr)rr��consts   r�test_client_constantsz!OfflineTest.test_client_constantsMs���;
�;
�;
��x�	8�	8�E����u��-�-�
8�
8������� 6� 6�7�7�7�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8��	8�	8s�)A�A	�A	N)r8r9r:r�r�r�r1rrr�r�;sI������8�8�8�J�J�J�@8�@8�@8�@8�@8rr�c�j�eZdZd�Zd�Zd�Zejee	d��d��d���Z
dS)�SourceAddressTestc��tjtjtj��|_t	j|j��|_t	j��|_|j�	��d|_
dSr0)rx�AF_INET�SOCK_STREAMrtr�	bind_portr�find_unused_port�source_port�listenr�r.s rr�zSourceAddressTest.setUp�s^���M�&�.�&�2D�E�E��	�!�+�D�I�6�6��	�(�9�;�;����	��������	�	�	rc��|jr |j���d|_|j���d|_dSr0)r�r)rtr.s r�tearDownzSourceAddressTest.tearDown�sB���9�	��I�O�O�����D�I��	��������	�	�	rc��tjt|jd|jf���|_|j���|�|jj�	��d|j��dS)Nr���source_addressr )
rr�rzrr�r�r`r�r�r�r.s r�testHTTPConnectionSourceAddressz1SourceAddressTest.testHTTPConnectionSourceAddress�st���)�$��	� "�D�$4�5�7�7�7��	��	������������3�3�5�5�a�8�$�:J�K�K�K�K�Kr�HTTPSConnectionz'http.client.HTTPSConnection not definedc�`�tjt|jd|jf���|_dS)Nr�r�)rr�rzrr�r�r.s r� testHTTPSConnectionSourceAddressz2SourceAddressTest.testHTTPSConnectionSourceAddress�s2���*�4��� "�D�$4�5�7�7�7��	�	�	rN)r8r9r:r�r�r��unittest�skipIfr�rr�r1rrr�r��s�������������L�L�L��X�_����):�;�;�;�>�@�@�7�7�@�@�7�7�7rr�c�$�eZdZdZd�Zd�Zd�ZdS)�TimeoutTestNc���tjtjtj��|_t	j|j��t_|j���dSr0)	rxr�r�rtrr�r��PORTr�r.s rr�zTimeoutTest.setUp�sI���M�&�.�&�2D�E�E��	�(�2�4�9�=�=����	�������rc�F�|j���d|_dSr0)rtr)r.s rr�zTimeoutTest.tearDown�s���	��������	�	�	rc��|�tj����tjd��	t	jttj��}|�	��tjd��n#tjd��wxYw|�
|j���d��|�
��|�tj����tjd��	t	jttjd���}|�	��tjd��n#tjd��wxYw|�
|j���d��|�
��t	jttjd���}|�	��|�
|j���d��|�
��dS�N�)�timeout)�assertIsNonerx�getdefaulttimeout�setdefaulttimeoutrr�rzr�r�r`r�r��
gettimeoutr))r�httpConns  r�testTimeoutAttributez TimeoutTest.testTimeoutAttribute�s���
	
���&�2�4�4�5�5�5�� ��$�$�$�	+��,�T�;�3C�D�D�H��������$�T�*�*�*�*��F�$�T�*�*�*�*���������1�1�3�3�R�8�8�8�������	
���&�2�4�4�5�5�5�� ��$�$�$�	+��,�T�;�3C�6:�<�<�<�H��������$�T�*�*�*�*��F�$�T�*�*�*�*���������1�1�3�3�T�:�:�:��������(��{�/?��L�L�L�������������1�1�3�3�R�8�8�8��������s�8B	�	B�:E-�-F)r8r9r:r�r�r�r
r1rrr�r��sF�������D����
�������rr�c� �eZdZd�Zd�Zd�ZdS)�PersistenceTestc��d}|D�]W\}}}|�||���5d�||��}t|��}|�|j��|�dd��|���5}|�|jdu|��|���ddd��n#1swxYwY|�|jdu|��|�|j	d��|�dd��|�|j	|rdnd��ddd��n#1swxYwY��YdS)	N))�1.0r�F)rzConnection: keep-alive
T)�1.1r�T)rzConnection: close
F)rzConnection: keep-ALIVE
T)rzConnection: cloSE
F)�versionr�z4HTTP/{} 200 OK
{}Content-Length: 12

Dummy body
r�z/open-connectionr z/subsequent-requestr�)
r�r�rUrr�r�r5r�rLrX)r�testsrr��reuser�r�rKs        r�test_reuse_reconnectz$PersistenceTest.test_reuse_reconnect�s��
��',�	F�	F�"�G�V�U����g�f��=�=�
F�
F�%�
�&��&�)�)�
�0��4�4���!�!�$�)�,�,�,����U�$6�7�7�7��%�%�'�'�$�8��$�$�T�Y�$�%6�E�	�B�B�B��M�M�O�O�O�$�$�$�$�$�$�$�$�$�$�$����$�$�$�$�� � ���d�!2��I�>�>�>�� � ��!1�1�5�5�5����U�$9�:�:�:�� � ��!1��3D�1�1�1�E�E�E�#
F�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F����
F�
F�
F�
F��	F�	Fs7�A*E�
3C�E�C�E�C�A1E�E	�E	c���d�}tjtjf|tff}|D]�\}}|�|���5t
d|��}|�dd��|�||j	��|�
|j��|�dd��|�|j
d��ddd��n#1swxYwY��dS)Nc�l��tj|����fd�}|�_tj���S)z3Return BufferedReader that raises ECONNRESET at EOFc�p��tj��|��}|dkrt���|Sr�)r;r<r��ConnectionResetError)�bufferr%�streams  �rr�zNPersistenceTest.test_disconnected.<locals>.make_reset_reader.<locals>.readintos4����z�*�*�6�6�:�:���1�9�9�.�0�0�0��r)r;r<r�r�)rr�rs  @r�make_reset_readerz<PersistenceTest.test_disconnected.<locals>.make_reset_reader�sE����Z��%�%�F�
�
�
�
�
�
'�F�O��$�V�,�,�,r)r@rr�z
/eof-response�
/reconnectr�)r;r<r�RemoteDisconnectedrr�rUr�r�r5rr�r�rX)rrr�stream_factoryr@r�s      r�test_disconnectedz!PersistenceTest.test_disconnected�s9��		-�		-�		-��Z��2�3�
� 4�5�
��*/�	6�	6�%�N�I����	��2�2�
6�
6�/��^�D�D�����U�O�4�4�4��!�!�)�T�-=�>�>�>��!�!�$�)�,�,�,����U�L�1�1�1�� � ��!1�1�5�5�5�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6����
6�
6�
6�
6��	6�	6s�B
C�C	�"C	c�8�td��}|�ddddi���|�tj|j��|�|j��|�dd��|�|j	d��dS)	NsHTTP/1.1 100 Continue

r�r�Expectz100-continue)r�rr�)
rUr�r�rrr5rr�r�rXr�s  r�test_100_closezPersistenceTest.test_100_closes���'�
�
�
��
	
���U�C�(�N�)C��D�D�D����&�3�T�5E�F�F�F����$�)�$�$�$����U�L�)�)�)�����)�1�-�-�-�-�-rN)r8r9r:rrr!r1rrrr�sD������F�F�F�<6�6�6�6
.�
.�
.�
.�
.rrc��eZdZd�Zd�Zd�Zd�Zd�Zej	d���Z
d�Zd�Zd	�Z
d
�Zd�Zejeed��d
��d���Zd�ZdS)�	HTTPSTestc�^�ttd��s|�d��dSdS)Nr�zssl support required)r�r�skipTestr.s rr�zHTTPSTest.setUp's8���v�0�1�1�	2��M�M�0�1�1�1�1�1�	2�	2rc�(�ddlm}|||���S)Nr)�make_https_server)�certfile)�test.ssl_serversr')rr(r's   r�make_serverzHTTPSTest.make_server+s*��6�6�6�6�6�6� � ���9�9�9�9rc��tjttjd���}|�|jd��dSr)rr�rzr�r�r�r)rr�s  r�test_attributeszHTTPSTest.test_attributes/s:���"�4��)9�2�F�F�F�������B�'�'�'�'�'rc��ddl}tjd��tjd��5tjdd��}|�|j��5}|�	dd��ddd��n#1swxYwY|�
|jjd��ddd��dS#1swxYwYdS)Nr�network�self-signed.pythontest.net�r�r�CERTIFICATE_VERIFY_FAILED)
�sslr�requiresr�transient_internetrr�r��SSLErrorr�r�r@r()rr2r��exc_infos    r�test_networkedzHTTPSTest.test_networked4sR���
�
�
����#�#�#�
�
-�.J�
K�
K�	U�	U��&�'C�S�I�I�A��"�"�3�<�0�0�
&�H��	�	�%��%�%�%�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&����
&�
&�
&�
&����X�/�6�8S�T�T�T�		U�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U����	U�	U�	U�	U�	U�	Us5�0B8�B�4B8�B	�B8�B	�#B8�8B<�?B<c���ddl}tjd��tjd��5|���}t
jdd|���}|�dd��|�	��}|�
��|�d|�d	����|�
��ddd��dS#1swxYwYdS)
Nrr.r/r0��contextr�r�nginx�server)
r2rr3rr4�_create_unverified_contextrr�r�r5r)r�r�)rr2r:r�r�s     r�test_networked_noverificationz'HTTPSTest.test_networked_noverification>s���
�
�
����#�#�#�
�
-�.J�
K�
K�	�	��4�4�6�6�G��&�'C�S�/6�8�8�8�A�
�I�I�e�S�!�!�!��=�=�?�?�D�
�G�G�I�I�I��M�M�'�4�>�>�(�#;�#;�<�<�<��J�J�L�L�L�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�B'C!�!C%�(C%c��tjd��tjd��5t	jdd��}|�dd��|���}|�d��}|�	��|�	��|�
d|��ddd��dS#1swxYwYdS)Nr.r�r0r�rzcontent-typez	text/html)rr3rr4rr�r�r5r�r)r�)rr�r��content_types    r�&test_networked_trusted_by_default_certz0HTTPSTest.test_networked_trusted_by_default_certLs���	���#�#�#�
�
-�.>�
?�
?�	5�	5��&�'7��=�=�A�
�I�I�e�S�!�!�!��=�=�?�?�D��>�>�.�9�9�L��J�J�L�L�L�
�G�G�I�I�I��M�M�+�|�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5s�BC	�	C
�C
c	�B�ddl}tjd��d}tj|��5|�|j��}|�|j|j	��|�|j
d��|�t��	tj|d|���}|�dd��|���}nR#|j$rE}t%|��}t'jd	|��rt+jd
|�d|�d�����d}~wwxYw|�d
��}|���|���|�d|��ddd��dS#1swxYwYdS)Nrr.r/Tr0r9r�rz(?i)key.too.weakzGot z trying to connect to z). See https://bugs.python.org/issue36816.r<r;)r2rr3rr4�
SSLContext�PROTOCOL_TLS_CLIENTr��verify_mode�
CERT_REQUIRED�check_hostname�load_verify_locations� CERT_selfsigned_pythontestdotnetrr�r�r5r5r�re�searchr��SkipTestr�r)r�)	rr2�selfsigned_pythontestdotnetr:r�r��ssl_err�ssl_err_str�
server_strings	         r�test_networked_good_certz"HTTPSTest.test_networked_good_certYs���
�
�
����#�#�#�&B�#�
�
-�.I�
J�
J�	2�	2��n�n�S�%<�=�=�G����W�0�#�2C�D�D�D����W�3�T�:�:�:��)�)�*J�K�K�K�
��*�+F��3:�<�<�<���	�	�%��%�%�%��}�}�������<�
�
�
�!�'�l�l���9�0�+�>�>�C�"�+�B�{�B�B�9�B�B�B�C�C�C������
����!�N�N�8�4�4�M��J�J�L�L�L�
�G�G�I�I�I��M�M�'�=�1�1�1�5	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2�	2�	2s9�A0F� AC"�!F�"
D1�,AD,�,D1�1AF�F�Fc��ddl}tjd��tjd��5|�|j��}|�t��tj
dd|���}|�|j��5}|�
dd��ddd��n#1swxYwY|�|jjd��ddd��dS#1swxYwYdS)	Nrr.r/r0r9r�rr1)r2rr3rr4rCrDrH�CERT_localhostrr�r�r5r�r�r@r()rr2r:r�r6s     r�test_networked_bad_certz!HTTPSTest.test_networked_bad_certzs����
�
�
����#�#�#�
�
-�.J�
K�
K�	U�	U��n�n�S�%<�=�=�G��)�)�.�9�9�9��&�'C�S�RY�Z�Z�Z�A��"�"�3�<�0�0�
&�H��	�	�%��%�%�%�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&����
&�
&�
&�
&����X�/�6�8S�T�T�T�
	U�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U����	U�	U�	U�	U�	U�	Us6�A&C.�B6�*C.�6B:	�:C.�=B:	�>#C.�.C2�5C2c�F�ddl}|�t��}tjd|j��}|�|j��5}|�dd��ddd��n#1swxYwY|�	|j
jd��dS)Nr�	localhostr�rr1)r2r*rSrr�rr�r5r�r�r@r()rr2r<r�r6s     r�test_local_unknown_certz!HTTPSTest.test_local_unknown_cert�s����
�
�
��!�!�.�1�1���"�;���<�<��
�
�
�s�|�
,�
,�	"��
�I�I�e�S�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�����+�2�4O�P�P�P�P�Ps�A6�6A:�=A:c���ddl}|�t��}|�|j��}|�t��t
jd|j|���}|�	|j
��|�dd��|���}|�	|j
��|�
|jd��dS)NrrVr9r��/nonexistentr,)r2r*rSrCrDrHrr�rr{r)r�r5r�r'�rr2r<r:r�r�s      r�test_local_good_hostnamez"HTTPSTest.test_local_good_hostname�s����
�
�
��!�!�.�1�1���.�.��!8�9�9���%�%�n�5�5�5��"�;���W�M�M�M������� � � �	�	�	�%��(�(�(��}�}��������
�#�#�#������c�*�*�*�*�*rc�|�ddl}|�t��}|�|j��}|�t��t
jd|j|���}|�	|j
��5|�dd��ddd��n#1swxYwYtj
dtf��5t
jd|j|d���}ddd��n#1swxYwY|�	|j
��5|�dd��ddd��n#1swxYwYd	|_tj
dtf��5t
jd|j|d	���}ddd��n#1swxYwY|�dd
��|���}|���|���|�|jd��d	|_t
jd|j|���}|�dd
��|���}|�|jd��|���|���tj
dtf��5t
jd|j|d���}ddd��n#1swxYwY|�	|j
��5|�dd��ddd��dS#1swxYwYdS)NrrVr9r�rr�T)r:rGFrYr,)r2r*�CERT_fakehostnamerCrDrHrr�rr��CertificateErrorr�r	�check_warnings�DeprecationWarningrGr5r)r�r'rZs      r�test_local_bad_hostnamez!HTTPSTest.test_local_bad_hostname�s����
�
�
��!�!�"3�4�4���.�.��!8�9�9���%�%�&7�8�8�8��"�;���W�M�M�M��
�
�
�s�3�
4�
4�	"�	"�
�I�I�e�S�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"��
+�R�1C�,D�
E�
E�	M�	M��&�{�F�K�/6�t�M�M�M�A�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M����	M�	M�	M�	M��
�
�s�3�
4�
4�	"�	"�
�I�I�e�S�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�"'���
�
+�R�1C�,D�
E�
E�	N�	N��&�{�F�K�/6�u�N�N�N�A�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N����	N�	N�	N�	N�	
�	�	�%��(�(�(��}�}�����
�
����	���	�	�	������c�*�*�*�"'����"�;���W�M�M�M��	�	�	�%��(�(�(��}�}���������c�*�*�*��
�
����	���	�	�	��
+�R�1C�,D�
E�
E�	M�	M��&�{�F�K�/6�t�M�M�M�A�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M����	M�	M�	M�	M��
�
�s�3�
4�
4�	"�	"�
�I�I�e�S�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"sl�	B,�,B0�3B0�C<�<D�D�!E�E�E�1F�F�"F�>K(�(K,�/K,�
L1�1L5�8L5r�z)http.client.HTTPSConnection not availablec��dD]-}|�tjtj|���.dD]P\}}}tj|��}|�||j��|�||j���QdS)Nr�)r�)zwww.python.org:443r�r0)r�r�r0)r�r�r0)r�r�r0)r�r�r0)r�rr�r�r�rrr�s     rr�zHTTPSTest.test_host_port�s���
I�	M�	M�B����f�/��1G��L�L�L�L�#�
	(�
	(�H�B��1��&�r�*�*�A����Q���'�'�'����Q���'�'�'�'�
	(�
	(rc��ddl}|js|�d��tjdd��}|�|jj��|�|j	��}|�
|j��tjdd|���}|�|j|��|�
|jj��tj
��5tjddt��tjdd|t ���}ddd��n#1swxYwY|�|jj��dS)	NrzTLS 1.3 support requiredrVr0r9�ignorez5key_file, cert_file and check_hostname are deprecated)r:�	cert_file)r2�HAS_TLSv1_3r%rr�r��_context�post_handshake_authrCrDr��assertIs�warnings�catch_warnings�filterwarningsr`rS)rr2r�r:s    r�test_tls13_phazHTTPSTest.test_tls13_pha�s����
�
�
���	6��M�M�4�5�5�5��"�;��4�4������
�6�7�7�7��.�.��!8�9�9������4�5�5�5��"�;��W�E�E�E���
�
�a�j�'�*�*�*������7�8�8�8�
�
$�
&�
&�	A�	A��#�H�.e�$6�
8�
8�
8��&�{�C��1?�A�A�A�A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A�
	
����
�6�7�7�7�7�7s�-9D2�2D6�9D6N)r8r9r:r�r*r,r7r>r�system_must_validate_certrArQrTrWr[rar�r�r�rr�rmr1rrr#r#%s(������2�2�2�:�:�:�(�(�(�
U�U�U����
�&�
5�
5�'�&�
5�2�2�2�B
U�
U�
U�Q�Q�Q�+�+�+�("�("�("�T�X�_����):�;�;�;�@�B�B�(�(�B�B�(�$8�8�8�8�8rr#c�H�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�ZdS)�RequestBodyTestz3Test cases where a request includes a message body.c��tjd��|_td��x|j_|_|j|j_dS)NrWr�)rr�r�rr�r.s rr�zRequestBodyTest.setUp�s9���)�-�8�8��	�%/��^�^�3��	�������	���rc��tj|jj��}|���tj|��}||fSr0)r;r<r�rrPrr��r�f�messages   r�get_headers_and_fpz"RequestBodyTest.get_headers_and_fp�s<���J�t�y�~�&�&��	�
�
�����&�q�)�)����z�rc�V�ddgdfdf}|D�]\}}|�|��5tjd��|_t	d��x|j_|_|j�dd|��|���\}}|�d	|��|�d
|��|�	|�
d��d��|�	||�����ddd��n#1swxYwY��dS)
Nr��bar�3
foo
3
bar
0

))r�rxryrWr�r�r3zContent-Typer�rr)r�rr�r�rr�r�rvrr��getrL)rr�r�r�r�rts      r�test_list_bodyzRequestBodyTest.test_list_body�sh��
�f�
�C�D�D�
��$�
	5�
	5�N�D�(����d�#�#�	
5�	
5�"�1�-�@�@��	�-7��^�^�;��	�����	�!�!�%���6�6�6��0�0�2�2���Q�� � ���5�5�5�� � �!1�3�7�7�7�� � ����)<�!=�!=�y�I�I�I�� � ��1�6�6�8�8�4�4�4�	
5�	
5�	
5�	
5�	
5�	
5�	
5�	
5�	
5�	
5�	
5����	
5�	
5�	
5�	
5��
	5�
	5s�C*D�D 	�#D 	c�.�|j�dddddi��|���\}}|�d|�d����|�dt|�������dS)Nr�r3r�r��42rr�)r�r�rvr�rzrorL�rrurts   r�test_manual_content_lengthz*RequestBodyTest.test_manual_content_lengths���	
�	���%���+�T�2�	4�	4�	4��,�,�.�.�
�������w�{�{�+;�<�<�=�=�=�����C������M�M�*�*�*�*�*rc��|j�ddd��|���\}}|�d|�����|�|�����|�d|�d����|�d|�����dS)Nr�r3r��
text/plain�4rsbody�	r�r�rvr��get_content_typer�get_charsetrzrLr~s   r�test_ascii_bodyzRequestBodyTest.test_ascii_bodys����	���%���0�0�0��,�,�.�.�
�������w�'?�'?�'A�'A�B�B�B����'�-�-�/�/�0�0�0�����g�k�k�*:�;�;�<�<�<�����!�&�&�(�(�+�+�+�+�+rc��|j�ddd��|���\}}|�d|�����|�|�����|�d|�d����|�d|�����dS)Nr�r3ubodyÁr��5r�body�r�r~s   r�test_latin1_bodyz RequestBodyTest.test_latin1_body#s����	���%���4�4�4��,�,�.�.�
�������w�'?�'?�'A�'A�B�B�B����'�-�-�/�/�0�0�0�����g�k�k�*:�;�;�<�<�<�����a�f�f�h�h�/�/�/�/�/rc��|j�ddd��|���\}}|�d|�����|�|�����|�d|�d����|�d|�����dS)Nr�r3r�r�r�rr�r~s   r�test_bytes_bodyzRequestBodyTest.test_bytes_body+s����	���%���5�5�5��,�,�.�.�
�������w�'?�'?�'A�'A�B�B�B����'�-�-�/�/�0�0�0�����g�k�k�*:�;�;�<�<�<�����a�f�f�h�h�/�/�/�/�/rc�J�|�tjtj��t	tjdd���5}|�d��ddd��n#1swxYwYt	tjd���5}|j�dd|��|���\}}|�	d|�
����|�|�����|�|�
d����|�	d	|�
d
����|�	d|�����ddd��dS#1swxYwYdS)N�wr�)�encodingr�r�r3r�rrztransfer-encodings4
body
0

)r{r�unlink�TESTFNr��writer�r�rvr�r�rr�rzrLrss   r�test_text_file_bodyz#RequestBodyTest.test_text_file_body3s������	�(�)�*:�;�;�;�
�)�"�C�'�
:�
:�
:�	�a�
�G�G�F�O�O�O�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�)�"�W�
5�
5�
5�		B���I���e�V�Q�/�/�/��0�0�2�2�J�G�Q����\�7�+C�+C�+E�+E�F�F�F����g�1�1�3�3�4�4�4�
���g�k�k�*:�;�;�<�<�<����Y����4G�(H�(H�I�I�I����6������A�A�A�		B�		B�		B�		B�		B�		B�		B�		B�		B�		B�		B�		B����		B�		B�		B�		B�		B�		Bs%�A)�)A-�0A-�C<F�F�Fc� �|�tjtj��t	tjd��5}|�d��ddd��n#1swxYwYt	tjd��5}|j�dd|��|���\}}|�	d|�
����|�|�����|�	d|�
d����|�d	|��|�	d
|�����ddd��dS#1swxYwYdS)N�wbr�r%r�r3r�rrr�s5
body�
0

)r{rr�r�r�r�r�r�rvr�r�rr�rzrrLrss   r�test_binary_file_bodyz%RequestBodyTest.test_binary_file_bodyBs������	�(�)�*:�;�;�;�
�)�"�D�
)�
)�	!�Q�
�G�G�K� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�
�)�"�D�
)�
)�	F�Q��I���e�V�Q�/�/�/��0�0�2�2�J�G�Q����\�7�+C�+C�+E�+E�F�F�F����g�1�1�3�3�4�4�4����Y����4G�(H�(H�I�I�I����-�w�7�7�7����:�A�F�F�H�H�E�E�E�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F�	F�	Fs%�A'�'A+�.A+�C*F�F�
FN)
r8r9r:rSr�rvr{rr�r�r�r�r�r1rrrprp�s�������=�=�#�#�#�
���5�5�5�(+�+�+�,�,�,�0�0�0�0�0�0�
B�
B�
B�F�F�F�F�Frrpc�2�eZdZd�Zd�Zd�Zd�Zd�Zd�ZdS)�HTTPResponseTestc��d}t|��}tj|��|_|j���dS)NzXHTTP/1.1 200 Ok
My-Header: first-value
My-Header:                 second-value

Text)rrr�r�r�)rr�r�s   rr�zHTTPResponseTest.setUpRs@��*���$�����'��-�-��	��	�������rc���|j�d��}|�|d��|j�dd��}|�|d��dS)Nz	My-Headerzfirst-value, second-valuezsome default�r�r�r��rr�s  r�test_getting_headerz$HTTPResponseTest.test_getting_headerYsb����$�$�[�1�1������!<�=�=�=���$�$�[�.�A�A������!<�=�=�=�=�=rc�h�|j�dd��}|�|d��dS)N�No-Such-Headerz
default-valuer�r�s  r�3test_getting_nonexistent_header_with_string_defaultzDHTTPResponseTest.test_getting_nonexistent_header_with_string_default`s6����$�$�%5��G�G�������1�1�1�1�1rc���|j�dddg��}|�|d��|j�dd��}|�|d��dS)Nr��default�valueszdefault, values)r�r�r�r�s  r�5test_getting_nonexistent_header_with_iterable_defaultzFHTTPResponseTest.test_getting_nonexistent_header_with_iterable_defaultdsl����$�$�%5�	�8�7L�M�M������!2�3�3�3���$�$�%5�7L�M�M������!2�3�3�3�3�3rc�f�|j�d��}|�|d��dS)Nr�r�r�s  r�/test_getting_nonexistent_header_without_defaultz@HTTPResponseTest.test_getting_nonexistent_header_without_defaultks4����$�$�%5�6�6�������&�&�&�&�&rc�j�|j�dd���}|�|d��dS)Nr�r�)r�r�r�s  r�test_getting_header_defaultintz/HTTPResponseTest.test_getting_header_defaultintos9����$�$�%5�b�$�A�A�������$�$�$�$�$rN)	r8r9r:r�r�r�r�r�r�r1rrr�r�Psn���������>�>�>�2�2�2�4�4�4�'�'�'�%�%�%�%�%rr�c�D�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�TunnelTestsc��d}d|_tj|j��|_|�|��|j_dS)Nz:HTTP/1.0 200 OK

HTTP/1.1 200 OK
Content-Length: 42

z	proxy.com)rrr�r�r\)r�
response_texts  rr�zTunnelTests.setUptsG��
)�	�
 ��	��)�$�)�4�4��	�'+�'>�'>�}�'M�'M��	�$�$�$rc�8�|j���dSr0)r�r)r.s rr�zTunnelTests.tearDown~s���	�������rc���d�fd�	}|S)Nc�@��t�|d|d���S)Nrr )rr)r)rqrr�r�s   �rr[z9TunnelTests._create_connection.<locals>.create_connection�s ����m�'�!�*�7�1�:�N�N�N�Nr)NNr1)rr�r[s ` rr\zTunnelTests._create_connection�s-���	O�	O�	O�	O�	O�	O� � rc��d}d}ddi}|j�|||���|j�ddd��|�|jjj|j��|�|jjjtj��|�|jj	|��|�|jj
|��|�|jj|��dS)	N�destination.comi�"z
User-Agentz!Mozilla/5.0 (compatible, MSIE 11))rr�r�rr�)r��
set_tunnelr�r�r�rrr�	HTTP_PORT�_tunnel_host�_tunnel_port�_tunnel_headers)r�tunnel_host�tunnel_port�tunnel_headerss    r�!test_set_tunnel_host_port_headersz-TunnelTests.test_set_tunnel_host_port_headers�s���'����&�(K�L���	���[�{�%3�	�	5�	5�	5��	���&�#�r�*�*�*�������,�d�i�8�8�8�������,�f�.>�?�?�?������/��=�=�=������/��=�=�=������2�N�C�C�C�C�Crc��|j���|�t|jjd��dS)Nr�)r�r`r��RuntimeErrorr�r.s r�&test_disallow_set_tunnel_after_connectz2TunnelTests.test_disallow_set_tunnel_after_connect�sD���	���������,��	�(<�+�	-�	-�	-�	-�	-rc�L�|j�d��|j�ddd��|�|jjj|j��|�|jjjtj��|�	d|jjj
��|�d|jjj
��|�	d|jjj
��|�d|jjj
��dS)	Nr�r�rr��CONNECT destination.comsHost: destination.com:None�Host: destination.comsHost: proxy.com)r�r�r�r�r�rrrr�r�rrr.s r�test_connect_with_tunnelz$TunnelTests.test_connect_with_tunnel�s����	���.�/�/�/��	���&�#�r�*�*�*�������,�d�i�8�8�8�������,�f�.>�?�?�?��
�
�0�$�)�.�2E�F�F�F����6��	��8K�L�L�L��
�
�.��	��0C�D�D�D�	
���+�T�Y�^�-@�A�A�A�A�Arc�`�tj�|jd��5}|j�d��|j���|j�dd��ddd��n#1swxYwY|���|�t|j
��dd|j
�����|j
d	dd	}|�d
|��|�|�
d��d|�����dS)
z8Regresstion test for https://bugs.python.org/issue43332.r�r�r�rNr z!unexpected number of send calls: )r�rr�r
zunexpected proxy data sent )r�patch�objectr�r�r`r��
assert_calledr�ro�
mock_callsr�r�r�)r�	mock_send�proxy_setup_data_sents   r�0test_tunnel_connect_single_send_connection_setupz<TunnelTests.test_tunnel_connect_single_send_connection_setup�sz��
�Z�
�
�t�y�&�
1�
1�	*�Y��I� � �!2�3�3�3��I�������I���e�S�)�)�)�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�	���!�!�!�����I�(�)�)�1�N�	�8L�N�N�	�	P�	P�	P�!*� 4�Q� 7�� :�1� =���
�
�0�2G�H�H�H����%�.�.�{�;�;�K�2G�K�K�	�	M�	M�	M�	M�	Ms�AB�B�Bc��|j�d��|j�ddd��|�|jjj|j��|�|jjjtj��|�	d|jjj
��|�	d|jjj
��dS)Nr�r�rr�r�r�)r�r�r�r�r�rrrr�r�rr.s r�test_connect_put_requestz$TunnelTests.test_connect_put_request�s����	���.�/�/�/��	���%��b�)�)�)�������,�d�i�8�8�8�������,�f�.>�?�?�?��
�
�0�$�)�.�2E�F�F�F��
�
�.��	��0C�D�D�D�D�Drc��d}d�|��}|j�d��|�|��|j_|j�d��tj��5}|j�ddd��ddd��n#1swxYwY|����	��}|�
d�|��|��dS)	Nz
X-Dummy: 1zHTTP/1.0 200 OK
{}

r r�r�rr�z
header: {})r�r��set_debuglevelr\r�rr�r�r�r�r�)r�expected_headerr�r�r�s     r�test_tunnel_debuglogz TunnelTests.test_tunnel_debuglog�s��&��7�>�>��O�O�
��	� � ��#�#�#�'+�'>�'>�}�'M�'M��	�$��	���.�/�/�/�
�
$�
&�
&�	.�&��I���e�S�"�-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.����!�!�,�,�.�.���
�
�l�)�)�/�:�:�E�B�B�B�B�Bs�>B'�'B+�.B+N)r8r9r:r�r�r\r�r�r�r�r�r�r1rrr�r�ss�������N�N�N����!�!�!�
D�D�D�-�-�-�B�B�B�M�M�M�"E�E�E�C�C�C�C�Crr��__main__r�)�	verbosity)>r�rD�httprrr;r��osr�rJrxr|rjr�r�TestCaserr�test.supportrrr	�requires_working_socket�path�dirnamer��herer�rSr]rIrr�chunk_extensionrrPr$rrzrr>r<rHr�rUrfr�r�r(r�r�r�r�r�r�rr#rpr�r�r8�mainr1rr�<module>r�sG����������#�#�#�#�#�#�#�#�	�	�	�	�����	�	�	�	�����	�	�	�	�
�
�
�
����������������������������"�"�"�"�"�"�&�&�&�&�&�&�(�(�(�(�(�(����t�,�,�,�,�	�w���x� � ������d�M�2�2���G�L�L��~�6�6��#%�7�<�<��6W�#X�#X� �	-��N����
�
��O�+�f�4��-�������
�
�
�
�
�
�
�
�B

�

�

�

�

�*�

�

�

������2�:����$2�2�2�2�2�v�4�2�2�2�"j;�j;�j;�j;�j;�(�j;�j;�j;�Z5�5�5�5�5�h�5�5�5�,}�}�}�}�}�8�}�}�}�@w
'�w
'�w
'�w
'�w
'��w
'�w
'�w
'�tz(�z(�z(�z(�z(�x�z(�z(�z(�z�����.����,��������DR8�R8�R8�R8�R8�(�R8�R8�R8�j7�7�7�7�7��7�7�7�>+�+�+�+�+�(�+�+�+�\E.�E.�E.�E.�E.�h�E.�E.�E.�PH8�H8�H8�H8�H8��H8�H8�H8�V]F�]F�]F�]F�]F�h�]F�]F�]F�@!%�!%�!%�!%�!%�x�!%�!%�!%�FWC�WC�WC�WC�WC�(�WC�WC�WC�t�z����H�M�A��������r