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

�KeCf���ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZddl
mZddl
mZ	ddlZn
#e$rdZYnwxYwejd���ej�e��Zej�ed��Zej�ed	��ZGd
�dejj��ZGd�d
ej��ZGd�d��Z Gd�dejj!��Z"Gd�dejj!��Z#Gd�de	j$��Z%ej&dd���Gd�de	j$����Z'd�Z(Gd�de	j$��Z)d�Z*e+dkre	j,��dSdS)�N)�support)�hashlib_helper)�threading_helper)�warnings_helperT)�modulezkeycert.pemzkeycert2.pemc��eZdZdZd�Zd�ZdS)�LoopbackHttpServerz^HTTP server w/ a few modifications that make it useful for
    loopback testing purposes.
    c��tjj�|||��|j�d��dS)Ng�������?)�http�server�
HTTPServer�__init__�socket�
settimeout)�self�server_address�RequestHandlerClasss   �D/usr/local/apps/python3/lib/python3.11/test/test_urllib2_localnet.pyrzLoopbackHttpServer.__init__%sE�����'�'��(6�(;�	=�	=�	=�	
����s�#�#�#�#�#�c�l�|j���\}}|�d��||fS)zHTTPServer method, overridden.g$@)r�acceptr)r�request�client_addresss   r�get_requestzLoopbackHttpServer.get_request.s=��#'�+�"4�"4�"6�"6����
	���4� � � ���(�(rN)�__name__�
__module__�__qualname__�__doc__rr�rrr	r	 s<��������$�$�$�
)�
)�
)�
)�
)rr	c�$�eZdZdZd�Zd�Zd�ZdS)�LoopbackHttpServerThreadz2Stoppable thread that runs a loopback http server.c���tj�|��d|_tj��|_d|_td|��|_|jj	|_
dS)NFzHTTP/1.0)z	127.0.0.1r)�	threading�Threadr�_stop_server�Event�ready�protocol_versionr	�httpd�server_port�port�r�request_handlers  rrz!LoopbackHttpServerThread.__init__=s_����!�!�$�'�'�'�!����_�&�&��
�+5��(�'�(8�(7�9�9��
��J�*��	�	�	rc�n�d|_|���|j���dS)z.Stops the webserver if it's currently running.TN)r%�joinr)�server_close�rs r�stopzLoopbackHttpServerThread.stopFs3��!����	�	�����
���!�!�!�!�!rc��|j���|js"|j���|j� dSdS�N)r'�setr%r)�handle_requestr1s r�runzLoopbackHttpServerThread.runNsT���
�������#�	(��J�%�%�'�'�'��#�	(�	(�	(�	(�	(rN)rrrrrr2r7rrrr!r!:sG������<�<�+�+�+�"�"�"�(�(�(�(�(rr!c�H�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�ZdS)�DigestAuthHandlerz-Handler for performing digest authentication.c�L�d|_g|_i|_d|_d|_dS)Nrz
Test Realm�auth)�_request_num�_nonces�_users�_realm_name�_qopr1s rrzDigestAuthHandler.__init__Xs+�����������'�����	�	�	rc��||_dSr4)r@)r�qops  r�set_qopzDigestAuthHandler.set_qop_s
����	�	�	rc�B�t|t��sJ�||_dSr4)�
isinstance�dictr>)r�userss  r�	set_userszDigestAuthHandler.set_usersbs#���%��&�&�&�&�&�����rc��||_dSr4)r?)r�realms  r�	set_realmzDigestAuthHandler.set_realmfs�� ����rc���|xjdz
c_tjt|j���d�������}|j�|��|S)N��ascii)r<�hashlib�md5�str�encode�	hexdigestr=�append)r�nonces  r�_generate_noncez!DigestAuthHandler._generate_nonceise�����Q������C�� 1�2�2�9�9�'�B�B�C�C�M�M�O�O������E�"�"�"��rc�R�|�d��}||dzd�}|�d��}i}|D]j}|�d��\}}|���}|ddkr|ddkr|dd�}n|���}|||<�k|S)N� rM�,�=r�"���)�find�split�strip)r�auth_str�first_space_index�parts�	auth_dict�part�name�values        r�_create_auth_dictz#DigestAuthHandler._create_auth_dictos���$�M�M�#�.�.���-�a�/�0�0�1�����s�#�#���	��	$�	$�D��*�*�S�/�/�K�D�%��:�:�<�<�D��Q�x�3���5��9��#3�#3��a��d�������
�
��#�I�d�O�O��rc���i}|�|��||d<||d<||d<d|z}tj|�d�������}d|z}tj|�d�������}	||d<|	|d<d	|z}
tj|
�d�������}||d
kS)N�password�method�uriz#%(username)s:%(realm)s:%(password)srNz%(method)s:%(uri)s�HA1�HA2z3%(HA1)s:%(nonce)s:%(nc)s:%(cnonce)s:%(qop)s:%(HA2)s�response)�updaterOrPrRrS)rrcrirjrk�
final_dict�HA1_strrl�HA2_strrm�response_strrns            r�_validate_authz DigestAuthHandler._validate_auth�s����
����)�$�$�$�!)�
�:��%�
�8���
�5��7�*�D���k�'�.�.��1�1�2�2�<�<�>�>��&��3���k�'�.�.��1�1�2�2�<�<�>�>���
�5���
�5��4�6@�A���;�|�2�2�7�;�;�<�<�F�F�H�H���9�Z�0�0�0rc
�2�|�dd��|�dd��|�dd|j�d|j�d|����d	���|���|j�d
��dS)Ni�zProxy Authentication Required�Content-Type�	text/htmlzProxy-AuthenticatezDigest realm="z", qop="z	",nonce="z", sProxy Authentication Required.F)�
send_response�send_headerr?r@rV�end_headers�wfile�writer,s  r�_return_auth_challengez(DigestAuthHandler._return_auth_challenge�s����%�%�c�+J�K�K�K��#�#�N�K�@�@�@��#�#� � ��
�
�
�t�y�y�y�$�*>�*>�*@�*@�*@�*@�#B�	C�	C�	C�	�#�#�%�%�%���#�#�$E�F�F�F��urc�Z�t|j��dkrdSd|jvr|�|��S|�|jd��}|d|jvr|j|d}n|�|��S|�d��|jvr|�|��S|j�|d��d}|j|j	fD]!}|�
|||j|��rd}�"|s|�|��SdS)aPerforms digest authentication on the given HTTP request
        handler.  Returns True if authentication was successful, False
        otherwise.

        If no users have been set, then digest auth is effectively
        disabled and this method will always return True.
        rTzProxy-Authorization�usernamerUF)�lenr>�headersr}rg�getr=�remove�path�
short_pathrt�command)rr-rcri�auth_validatedr�s      rr6z DigestAuthHandler.handle_request�sU���t�{���q� � ��4� ��(?�?�?��.�.��?�?�?��.�.��'�(=�>���I���$���3�3��;�	�*�(=�?����2�2�?�C�C�C��=�=��)�)�T�\�9�9��2�2�?�C�C�C���#�#�I�g�$6�7�7�7�"�N�)�-��/I�J�
*�
*���&�&�y�'/�'6�'>�'+�-�-�*�&*�N��!�
D��2�2�?�C�C�C��4rN)
rrrrrrCrHrKrVrgrtr}r6rrrr9r9Us�������7�7����������!�!�!�������"1�1�1�$
�
�
�*�*�*�*�*rr9c��eZdZdZdZdZdZe�de��Zej	e�
d�����d��Zd�Z
d�Zd	�Zd
�Zd�ZdS)
�BasicAuthHandlerz,Handler for performing basic authentication.�testUser�testPass�Test�:rNc�D�tjjj|g|�Ri|��dSr4)rr�BaseHTTPRequestHandlerr)r�args�kwargss   rrzBasicAuthHandler.__init__�s.����*�3�D�J�4�J�J�J�6�J�J�J�J�Jrc��dSr4r�r�formatr�s   r�log_messagezBasicAuthHandler.log_message�s���rc��|�d��|�dd��|���dS)N���Content-typerw)rxryrzr1s r�do_HEADzBasicAuthHandler.do_HEAD�sD�����3���������5�5�5��������rc��|�d��|�dd|jz��|�dd��|���dS)Ni�zWWW-AuthenticatezBasic realm="%s"r�rw)rxry�REALMrzr1s r�do_AUTHHEADzBasicAuthHandler.do_AUTHHEAD�sc�����3�������+�-A�D�J�-N�O�O�O������5�5�5��������rc��|j�dd��s0|���|j�d��dS|j�dd��d|jzkrE|�d��|���|j�d��dS|���dS)N�
Authorization�sNo Auth header receivedzBasic r�sIt works)r�r�r�r{r|�ENCODED_AUTHrxrzr1s r�do_GETzBasicAuthHandler.do_GET�s����|�����4�4�
	��������J���7�8�8�8�8�8�
�\�
�
���%�%�(0�4�3D�(D�E�E����s�#�#�#��������J���[�)�)�)�)�)�
�������rN)rrrr�USER�PASSWDr��USER_PASSWD�base64�	b64encoderR�decoder�rr�r�r�r�rrrr�r��s�������6�6��D�
�F��E�!�T�T�6�6�*�K�#�6�#�K�$6�$6�w�$?�$?�@�@�G�G��P�P�L�K�K�K�
�
�
����
�������rr�c�$�eZdZdZd�Zd�Zd�ZdS)�FakeProxyHandlerz�This is a 'fake proxy' that makes it look like the entire
    internet has gone down due to a sudden zombie invasion.  It main
    utility is in providing us with authentication support for
    testing.
    c�R�||_tjjj|g|�Ri|��dSr4)�digest_auth_handlerrrr�r)rr�r�r�s    rrzFakeProxyHandler.__init__s8��$7�� ���*�3�D�J�4�J�J�J�6�J�J�J�J�Jrc��dSr4rr�s   rr�zFakeProxyHandler.log_messages	��	
�rc��tj�|jd��\}}}}}}||_|j�|��r�|�dd��|�dd��|�	��|j
�td|jzd����|j
�d��dSdS)	Nrr��OKrvrwzYou've reached %s!<BR>rNsFOur apologies, but our server is down due to a sudden zombie invasion.)
�urllib�parse�urlparser�r�r�r6rxryrzr{r|�bytes)r�scm�netlocr��params�query�fragments       rr�zFakeProxyHandler.do_GETs���7=�|�7L�7L��I�v�8�8�4��f�d�F�E�8�����#�2�2�4�8�8�	;����s�D�)�)�)����^�[�9�9�9��������J���U�#;�d�i�#G�#*�,�,�
-�
-�
-��J���:�
;�
;�
;�
;�
;�
	;�	;rN)rrrrrr�r�rrrr�r��sN��������K�K�K�
�
�
�
;�;�;�;�;rr�c�J��eZdZdZdZdZdZ�fd�Zd�Z�fd�Z	d�Z
d	�Z�xZS)
�BasicAuthTestsr�r��	Incorrectr�c�N��tt|�����d�}t|��|_|�|j��d|jjz|_|j�	��|jj
���dS)Nc��t|i|��Sr4)r�)r�r�s  r�#http_server_with_basic_auth_handlerzABasicAuthTests.setUp.<locals>.http_server_with_basic_auth_handler$s��#�T�4�V�4�4�4rzhttp://127.0.0.1:%s)�superr��setUpr!r�
addCleanup�stop_serverr+�
server_url�startr'�wait)rr��	__class__s  �rr�zBasicAuthTests.setUp!s����
�n�d�#�#�)�)�+�+�+�	5�	5�	5�.�/R�S�S�������(�)�)�)�/�$�+�2B�B��������������� � � � � rc�F�|j���d|_dSr4�rr2r1s rr�zBasicAuthTests.stop_server,�!�������������rc�V��tt|�����dSr4)r�r��tearDown)rr�s �rr�zBasicAuthTests.tearDown0s%���
�n�d�#�#�,�,�.�.�.�.�.rc���tj���}|�|j|j|j|j��tj�tj�	|����	|�
tj�|j����dS#tjj
$r!|�d|jz��YdSwxYw)Nz!Basic auth failed for the url: %s)r�r�HTTPBasicAuthHandler�add_passwordr�r�r�r��install_opener�build_opener�
assertTrue�urlopen�error�	HTTPError�fail�r�ahs  r�test_basic_auth_successz&BasicAuthTests.test_basic_auth_success3s���
�^�
0�
0�
2�
2��
����
�D�O�T�Y���L�L�L���%�%�f�n�&A�&A�"�&E�&E�F�F�F�	M��O�O�F�N�2�2�4�?�C�C�D�D�D�D�D���|�%�	M�	M�	M��I�I�9�D�O�K�L�L�L�L�L�L�	M���s�7C�1C6�5C6c��tj���}|�|j|j|j|j��tj�tj�	|����|�
tjjtjj
|j��dSr4)r�rr�r�r�r�r��INCORRECT_PASSWDr�r��assertRaisesr�r�r�r�s  r�test_basic_auth_httperrorz(BasicAuthTests.test_basic_auth_httperror<s���
�^�
0�
0�
2�
2��
����
�D�O�T�Y��@U�V�V�V���%�%�f�n�&A�&A�"�&E�&E�F�F�F����&�,�0�&�.�2H�$�/�Z�Z�Z�Z�Zr)
rrrr�r�r�r�r�r�r�r�r��
__classcell__�r�s@rr�r�s���������D�
�F�"���E�	!�	!�	!�	!�	!����/�/�/�/�/�M�M�M�[�[�[�[�[�[�[rr�rP)�opensslc�L��eZdZdZdZdZdZ�fd�Zd�Zd�Z	d�Z
d	�Zd
�Z�xZ
S)�ProxyAuthTestszhttp://localhost�tester�test123�	TestRealmc�|���tt������d�}��|tj�����dtjd<dtjd<t���_�j�	�j
�ji���j��j
���fd�}t|���_���j���j����jj���d�jjz}t*j�d|i��}t*j����_t*j�|�j���_dS)Nc��tj���tj�|��dSr4��os�environ�clearro��old_environs r�restore_environz-ProxyAuthTests.setUp.<locals>.restore_environN�2���J�������J���k�*�*�*�*�*rr��NO_PROXY�no_proxyc�.��t�jg|�Ri|��Sr4)r�r�)r�r�rs  �r�create_fake_proxy_handlerz7ProxyAuthTests.setUp.<locals>.create_fake_proxy_handlerYs$���#�D�$<�N�t�N�N�N�v�N�N�Nrzhttp://127.0.0.1:%dr)r�r�r�r�r�r��copyr9r�rHr�r�rKr�r!rr�r�r'r�r+r�r�ProxyHandler�ProxyDigestAuthHandler�proxy_digest_handlerr��opener)rr�r��	proxy_url�handlerr�s`    �rr�zProxyAuthTests.setUpKs�����
�n�d�#�#�)�)�+�+�+�	+�	+�	+�	
��������):�):�;�;�;�!#��
�:��!#��
�:��#4�#6�#6�� �� �*�*�D�I�t�{�+C�D�D�D�� �*�*�4�:�6�6�6�	O�	O�	O�	O�	O�/�/H�I�I�������(�)�)�)������������� � � �)�D�K�,<�<�	��.�-�-�v�	�.B�C�C��$*�N�$I�$I�$K�$K��!��n�1�1��T�.�0�0����rc�F�|j���d|_dSr4r�r1s rr�zProxyAuthTests.stop_serverfr�rc��|j�|j|j|j|jdz��|j�d��|�tj
j|jj
|j��dS)N�badr;)r�r�r��URLr�r�r�rCr�r�r�r�r��openr1s r�-test_proxy_with_bad_password_raises_httperrorz<ProxyAuthTests.test_proxy_with_bad_password_raises_httperrorjs����!�.�.�t�z�4�8�/3�y�$�+�e�:K�	M�	M�	M�� �(�(��0�0�0����&�,�0��+�*��(�	$�	$�	$�	$�	$rc��|j�d��|�tjj|jj|j��dS�Nr;)	r�rCr�r�r�r�r�r�r�r1s r�,test_proxy_with_no_password_raises_httperrorz;ProxyAuthTests.test_proxy_with_no_password_raises_httperrorrsO��� �(�(��0�0�0����&�,�0��+�*��(�	$�	$�	$�	$�	$rc�^�|j�|j|j|j|j��|j�d��|j�	|j��5}|�
��r	|�
���ddd��dS#1swxYwYdSr)r�r�r�r�r�r�r�rCr�r��read�r�results  r�test_proxy_qop_auth_worksz(ProxyAuthTests.test_proxy_qop_auth_worksxs����!�.�.�t�z�4�8�/3�y�$�+�	G�	G�	G�� �(�(��0�0�0�
�[�
�
�d�h�
'�
'�	�6��+�+�-�-�
���+�+�-�-�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�+*B"�"B&�)B&c��|j�|j|j|j|j��|j�d��	|j�	|j��}|5|�
��r	|�
���ddd��dS#1swxYwYdS#tjj
$rYdSwxYw)Nzauth-int)r�r�r�r�r�r�r�rCr�r�rr�r��URLErrorrs  r�0test_proxy_qop_auth_int_works_or_throws_urlerrorz?ProxyAuthTests.test_proxy_qop_auth_int_works_or_throws_urlerror�s ���!�.�.�t�z�4�8�/3�y�$�+�	G�	G�	G�� �(�(��4�4�4�
	��[�%�%�d�h�/�/�F��
�
��k�k�m�m����k�k�m�m��
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�
�
��
�|�$�	�	�	�
�D�D�		���s$�
B2�.*B%�%B)�,B)�2C
�	C
)rrrr�r�r�r�r�r�r�rrr	r�r�s@rr�r�Cs��������
�C��D�
�F��E�0�0�0�0�0�6���$�$�$�$�$�$����������rr�c�J���G��fd�dtjj����S)Nc�>��eZdZdZgZgZdZd�Zd�Z��fd�Z	d�Z
dS)�1GetRequestHandler.<locals>.FakeHTTPRequestHandlerz	TestHTTP/�Pc��|���}|r(|j�|��}||d�}|�&dSdSr4)�	send_headr{r|)r�body�dones   rr�z8GetRequestHandler.<locals>.FakeHTTPRequestHandler.do_GET�sY���>�>�#�#�D��
#��z�'�'��-�-���D�E�E�{���
#�
#�
#�
#�
#rc���|jd}|j�t|����}|���|j�|��dS)NzContent-Length)r��rfiler�intr��requestsrT)r�content_length�	post_datas   r�do_POSTz9GetRequestHandler.<locals>.FakeHTTPRequestHandler.do_POST�sS��!�\�*:�;�N��
����N�(;�(;�<�<�I��K�K�M�M�M��M� � ��+�+�+�+�+rc���|j�_|j�|j����d��\}}}|�|��|D]%\}}|�||d|jiz���&|r,|�dd��|�	��|S|�	��dS)Nrr+r�z
text/plain)
r��headers_receivedrrTr��poprxryr+rz)r�
response_coder�r�headerrf�FakeHTTPRequestHandler�	responsess      ��rrz;GetRequestHandler.<locals>.FakeHTTPRequestHandler.send_head�s����6:�l�"�3��M� � ���+�+�+�+4�=�=��+;�+;�(�M�7�D����}�-�-�-�#*�
E�
E����� � ���&���1C�)C�D�D�D�D��
�� � ���>�>�>�� � �"�"�"����������rc��dSr4r)rr�s  rr�z=GetRequestHandler.<locals>.FakeHTTPRequestHandler.log_message�s���DrN)rrr�server_versionrrr+r�rrr�)rrs��rrr�su�������$��������	#�	#�	#�	,�	,�	,�
	�
	�
	�
	�
	�
	�	�	�	�	�	rr)rrr�)rrs`@r�GetRequestHandlerr"�sK����#�#�#�#�#�#�#�#���!C�#�#�#�L"�!rc���eZdZdZ�fd�Zdd�Zd�Zdd�Zdd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z�xZS)�TestUrlopenaNTests urllib.request.urlopen using the network.

    These tests are not exhaustive.  Assuming that testing using files does a
    good job overall of some of the basic interface features.  There are no
    tests exercising the optional 'data' and 'proxies' arguments.  No tests
    for transparent redirection have been written.
    c�D��tt|�����|�tjj��d�}|�|tj�	����dtjd<dtjd<dS)Nc��tj���tj�|��dSr4r�r�s rr�z*TestUrlopen.setUp.<locals>.restore_environ�r�r�*r�r�)
r�r$r�r�r�r�
urlcleanupr�r�r�)rr�r�s  �rr�zTestUrlopen.setUp�s����
�k�4� � �&�&�(�(�(�	
�����1�2�2�2�	+�	+�	+�	
��������):�):�;�;�;�!$��
�:��!$��
�:���rNc��g}tjj||fi|��}	|�|�d����|�|�����|�|�d����|�|�����|���n#|���wxYwd�	|��S)Nr�ir)
r�rr��extend�	readlinesrT�readliner�closer/)r�url�datar��l�fs      rr�zTestUrlopen.urlopen�s������N�"�3��7�7��7�7��	�
�H�H�Q�[�[��%�%�&�&�&�
�H�H�Q�Z�Z�\�\�"�"�"�
�H�H�Q�V�V�D�\�\�"�"�"�
�H�H�Q�V�V�X�X����
�G�G�I�I�I�I��A�G�G�I�I�I�I�����x�x��{�{�s�BC�C%c�F�|j���d|_dSr4r�r1s rr�zTestUrlopen.stop_server�r�rc�$�|�dgdfg}t|��}t|��|_|�|j��|j���|jj���|jj}||_|S)Nr�s
we don't care)	r"r!rr�r�r�r'r�r+)rrr�r+s    r�start_serverzTestUrlopen.start_server�s������r�#3�4�5�I�#�I�.�.��.�w�7�7�������(�)�)�)������������� � � ��{�������rc���ttjd��s|�d��ddlm}|�dgdfg}t
|��}||fd|i|��}|j|_|S)N�HTTPSHandlerzssl support requiredr)�make_https_serverr��
we care a bit�
handler_class)�hasattrr�r�skipTest�test.ssl_serversr7r"r+)rrr�r7r�rs      r�start_https_serverzTestUrlopen.start_https_server�s����v�~�~�6�6�	2��M�M�0�1�1�1�6�6�6�6�6�6����r�#3�4�5�I�#�I�.�.��"�"�4�I�I�w�I�&�I�I���{����rc���d}ddgdfdg|fg}|�|��}|�d|jz��}|�||��|�|jddg��dS)	NsWe got here...i.)�Locationz(http://localhost:%(port)s/somewhere_elser�r��http://localhost:%s/�/z/somewhere_else�r4r�r+�assertEqualr)r�expected_responserr�r/s     r�test_redirectionzTestUrlopen.test_redirection�s���-��
�K�L�
�
�
�"�'�(�
�	��#�#�I�.�.���|�|�2�W�\�A�B�B������0�1�1�1�����)�C�1B�+C�D�D�D�D�Drc��d}d}ddg|fg}|�|��}|�d|jz��}|�||��dS)Nshello worldsa
hello worl
1
d
0
r�)zTransfer-Encoding�chunkedr@)r4r�r+rC)rrD�
chunked_startrnr�r/s      r�test_chunkedzTestUrlopen.test_chunked	sp��*��!�	��;�<�m�L�M���#�#�H�-�-���|�|�2�W�\�A�B�B������0�1�1�1�1�1rc��d}|�dg|fg��}	|�d|jz��|�d��nI#tjj$r2}|���}|���Yd}~nd}~wwxYw|�	||��|�	|j
dg��dS)NsBad bad bad...i�zhttp://localhost:%s/weeblez404 should raise URLErrorz/weeble)r4r�r+r�r�r�rrr-rCr)rrDr�r1r/s     r�test_404zTestUrlopen.test_404s���-���#�#�c�2�/@�%A�$B�C�C��	3��L�L�5���D�E�E�E�

�I�I�1�2�2�2�2��	�|�$�	�	�	��6�6�8�8�D�
�G�G�I�I�I�I�I�I�I�I�����	����	
����0�1�1�1�����)�I�;�7�7�7�7�7s�A�B�$(B�Bc���d}|�dg|fg��}|�d|jz��}|�||��|�|jdg��dS)N�
pycon 2008...r��http://localhost:%s/bizarre�/bizarrerB�rrDr�r/s    r�test_200zTestUrlopen.test_200&sw��,���#�#�c�2�/@�%A�$B�C�C���|�|�9�G�L�H�I�I������0�1�1�1�����)�J�<�8�8�8�8�8rc���d}|�dg|fg��}|�d|jzd��}|�||��|�|jddg��dS)NrMr�rNsget=with_feelingrOrBrPs    r�test_200_with_parametersz$TestUrlopen.test_200_with_parameters-s���,���#�#�c�2�/@�%A�$B�C�C���|�|�9�G�L�H�0�2�2������0�1�1�1�����)�J�8K�+L�M�M�M�M�Mrc���|���}tjt���}|�d|jz|���}|�|d��dS)N��cafile�https://localhost:%s/bizarre��contextr8)r=�ssl�create_default_context�CERT_localhostr�r+rC)rr�rYr/s    r�
test_httpszTestUrlopen.test_https5sa���)�)�+�+���,�N�C�C�C���|�|�:�W�\�I�SZ�|�[�[������/�0�0�0�0�0rc���|�t���}tjdtf��5|�d|jzt���}|�|d��|�tj
j��5}|�d|jzt���ddd��n#1swxYwY|�t���}|�tj
j��5}|�d|jzt���ddd��n#1swxYwYddd��dS#1swxYwYdS)N��certfiler�rWrUr8)
r=r\r�check_warnings�DeprecationWarningr�r+rCr�r�r�r�CERT_fakehostname)rr�r/�cms    r�test_https_with_cafilez"TestUrlopen.test_https_with_cafile;s���)�)�>�)�B�B��
�
+�R�1C�,D�
E�
E�
	7�
	7��<�<� >��� M�'5� �7�7�D����T�#3�4�4�4��"�"�6�<�#8�9�9�
7�R����;�g�l�J�$5��7�7�7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7��-�-�7H�-�I�I�G��"�"�6�<�#8�9�9�
7�R����;�g�l�J�$5��7�7�7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7�
	7�
	7�
	7�
	7�
	7�
	7�
	7�
	7�
	7�
	7�
	7�
	7����
	7�
	7�
	7�
	7�
	7�
	7s[�AE�%C�;E�C	�E�C	�AE�%E�6E�E	�E�	E	�
E�E�!Ec�Z�|�t���}tjdtf��5|�tjj��5}|�	d|j
zd���ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr_r�rWT)�	cadefault)r=r\rrarbr�r�r�rr�r+)rr�rds   r�test_https_with_cadefaultz%TestUrlopen.test_https_with_cadefaultLs&���)�)�>�)�B�B��
�
+�R�1C�,D�
E�
E�	-�	-��"�"�6�<�#8�9�9�
-�R����;�g�l�J�'+��-�-�-�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-����
-�
-�
-�
-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�	-�	-s5�%B � B�<B �B	�B �B	�B � B$�'B$c����t�|�d��tjs|�d��d��fd�}tjtj��}|�|��|�|t���}tjt���}|�	d|j
z|���|��d��dS)	Nzssl module requiredzSNI support required in OpenSSLc���|�dSr4r)�ssl_sock�server_name�initial_context�sni_names   �r�cb_sniz*TestUrlopen.test_https_sni.<locals>.cb_sniZs���"�H�H�Hr)rYr`rUzhttps://localhost:%srX�	localhost)rZr;�HAS_SNI�
SSLContext�PROTOCOL_TLS_SERVER�set_servername_callbackr=r\r[r�r+rC)rrorYr�rns    @r�test_https_snizTestUrlopen.test_https_sniTs�����;��M�M�/�0�0�0��{�	=��M�M�;�<�<�<���	#�	#�	#�	#�	#��.��!8�9�9���'�'��/�/�/��)�)�'�N�)�S�S���,�N�C�C�C�����+�g�l�:�G��L�L�L�����;�/�/�/�/�/rc�6�|���}tj�d|jzddi���}tj�|��5	ddd��n#1swxYwY|�|jdd��dS)Nr@�Rangezbytes=20-39�r�)r4r�r�Requestr+r�rCr�rr��reqs   r�test_sending_headersz TestUrlopen.test_sending_headersds����#�#�%�%���n�$�$�%;�g�l�%J�.5�}�-E�%�G�G��
�^�
#�
#�C�
(�
(�	�	��	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�����1�'�:�M�J�J�J�J�J��A-�-A1�4A1c��|���}tj�d|jzddi���}tj�|��5	ddd��n#1swxYwY|�d|j�����|�	d|j�����dS)Nr@z
X-SoMe-hEader�foobarrxz
X-Some-Header)
r4r�rryr+r��assertInr�keys�assertNotInrzs   r�test_sending_headers_camelz&TestUrlopen.test_sending_headers_camells����#�#�%�%���n�$�$�%;�g�l�%J�.=�x�-H�%�J�J��
�^�
#�
#�C�
(�
(�	�	��	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��
�
�o�w�'?�'D�'D�'F�'F�G�G�G�����'�*B�*G�*G�*I�*I�J�J�J�J�Jr}c�V�|���}tj�d|jz��5}dD])}|�t
||��d|z���*|�|���d��ddd��dS#1swxYwYdS)N�http://localhost:%s)rr-�info�geturlz3object returned from urlopen lacks the %s attributezcalling 'read' failed)r4r�rr�r+r�r:r)rr��open_url�attrs    r�
test_basiczTestUrlopen.test_basicus���#�#�%�%��
�^�
#�
#�$9�G�L�$H�
I�
I�	F�X�;�
F�
F�������$� 7� 7�:>�@D�:E�F�F�F�F��O�O�H�M�M�O�O�-D�E�E�E�		F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F�	F�	Fs�AB�B"�%B"c�t�|���}tj�d|jz��}|5|���}ddd��n#1swxYwY|�|tjj	d��|�
|���d��dS)Nr�zEobject returned by 'info' is not an instance of email.message.Message�plain)r4r�rr�r+r��assertIsInstance�email�message�MessagerC�get_content_subtype)rr�r��info_objs    r�	test_infozTestUrlopen.test_info}s����#�#�%�%���>�)�)�!�G�L�0�2�2��
�	'�	'��}�}���H�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'����	'�	'�	'�	'����h��
�(=�B�	C�	C�	C�	
����5�5�7�7��A�A�A�A�A��A�A#�&A#c��|���}tj�d|jz��}|5|���}ddd��n#1swxYwY|�|d|jz��dS)Nr�)r4r�rr�r+r�rC)rr�r�r.s    r�test_geturlzTestUrlopen.test_geturl�s����#�#�%�%���>�)�)�*?�'�,�*N�O�O��
�	$�	$��/�/�#�#�C�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�����3�g�l�B�C�C�C�C�Cr�c��d}|�dg|fg��}tj�d|jz��}|D]}|�||���dS)NrMr�r�)r4r�rr�r+rC)rrDr�r/�lines     r�test_iterationzTestUrlopen.test_iteration�sv��,���#�#�c�2�/@�%A�$B�C�C���~�%�%�&;�g�l�&J�K�K���	6�	6�D����T�#4�5�5�5�5�	6�	6rc
���dddddzdzg}d�|��}|�dg|fg��}tj�d	|jz��}t
|��D]K\}}|�|||d
|�dt||���dt|�������L|�|d
zt|����dS)NsWe
sgot
shere
s	verylong i �
rr�r�zFetched line number z1 doesn't match expected:
    Expected length was z, got rM)	r/r4r�rr�r+�	enumeraterCr�)r�linesrDr�r/�indexr�s       r�test_line_iterationzTestUrlopen.test_line_iteration�s���(�I�|�d�/B�U�/J�K���H�H�U�O�O���#�#�c�2�/@�%A�$B�C�C���~�%�%�&;�g�l�&J�K�K��$�T�?�?�	D�	D�K�E�4����T�5��<�<�$�e�e�S��u��%6�%6�%6�%6��D�	�	�	�C�
D�
D�
D�
D�	
������C��J�J�/�/�/�/�/rc��|�dgdfdgdfg��}tj���}tj�d|jz��}|�d|j��|�|d�	d����|�d|j��|�d|�
d����|�|d�	d����|�d	|j��|�d
|�
d����dS)Nr�sanyr��1zus-ascii�1zContent-length�
1234567890s
1234567890�10)r4r�rr�ryr+rCr/r�rR�
get_header)rr�r�rs    r�test_issue16464zTestUrlopen.test_issue16464�s>���#�#�
�"�f��
�"�f��%
������,�,�.�.���.�(�(�)>���)M�N�N������w�|�,�,�,����G�S�Z�Z�
�3�3�4�4�4�����w�|�,�,�,�����g�0�0�1A�B�B�C�C�C����G�\�0�0��<�<�=�=�=�������5�5�5�����w�1�1�2B�C�C�D�D�D�D�Drr4)rrrrr�r�r�r4r=rErIrKrQrSr]rerhrur|r�r�r�r�r�r�r�r�r�s@rr$r$�s����������%�%�%�%�%������������	�	�	�	�E�E�E�2�2�2�
8�
8�
8�9�9�9�N�N�N�1�1�1�7�7�7�"-�-�-�0�0�0� K�K�K�K�K�K�F�F�F�	B�	B�	B�D�D�D�6�6�6�
0�
0�
0�E�E�E�E�E�E�Err$c�d�tj��}tjtjg|�R�dSr4)r�threading_setup�unittest�addModuleCleanup�threading_cleanup)�thread_infos r�setUpModuler��s3��"�2�4�4�K���.�@�O�;�O�O�O�O�O�Or�__main__)-r�r�r��urllib.parser��urllib.request�http.serverrr#r�rO�testr�test.supportrrrrZ�ImportError�requires_working_socketr��dirname�__file__�herer/r\rcrr
r	r$r!r9r�r�r��TestCaser��requires_hashdigestr�r"r$r�r�mainrrr�<module>r�s2��
�
�
�
�	�	�	�	�����������������������������������'�'�'�'�'�'�)�)�)�)�)�)�(�(�(�(�(�(���J�J�J�J������
�C�C�C����� ���t�,�,�,�,�	�w���x� � ������d�M�2�2���G�L�L��~�6�6��
)�)�)�)�)���/�)�)�)�4(�(�(�(�(�y�/�(�(�(�6v�v�v�v�v�v�v�v�r&�&�&�&�&�t�{�9�&�&�&�X;�;�;�;�;�t�{�9�;�;�;�B%[�%[�%[�%[�%[�X�&�%[�%[�%[�P$��#�E�4�8�8�8�J�J�J�J�J�X�&�J�J�9�8�J�Z("�("�("�VxE�xE�xE�xE�xE�(�#�xE�xE�xE�tP�P�P�
�z����H�M�O�O�O�O�O��s�A�A
�A