a
    äzeÎ2  ã                   @   sî   d dl Z d dlmZ d dlmZ d dlmZ d dlZd dlZd dl	Z
d dlZ
d dlZe d¡ dd„ Zdd	„ Ze  d
ejv d¡Zee
jje
jjƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZedkrêe  ¡  dS )é    N)Úsupport)Úsocket_helper)Úsanepathname2urlZnetworkc                 O   s`   t dƒD ]N}z| |i |¤ŽW   S  |yT } z|}W Y d }~qW Y d }~qd }~0 0 q|‚d S )Né   )Úrange)ÚfuncÚexcÚargsÚkwargsÚiÚeÚlast_exc© r   ú*/usr/lib/python3.9/test/test_urllib2net.pyÚ_retry_thrice   s    $r   c                    s   ‡ ‡fdd„}|S )Nc                     s   t ˆˆ g| ¢R i |¤ŽS ©N)r   )r	   r
   ©r   r   r   r   Úwrapped   s    z(_wrap_with_retry_thrice.<locals>.wrappedr   )r   r   r   r   r   r   Ú_wrap_with_retry_thrice   s    r   ZTRAVISz%bpo-35411: skip FTP test on Travis CIc                   @   s   e Zd ZdS )Ú	AuthTestsN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   *   s   r   c                   @   s   e Zd Zdd„ ZdS )ÚCloseSocketTestc                 C   sp   |   tjj¡ tj}t |¡> t|ƒ}|j	}|  
|j¡ | ¡  |  |j¡ W d   ƒ n1 sb0    Y  d S r   )Ú
addCleanupÚurllibÚrequestÚ
urlcleanupr   ÚTEST_HTTP_URLr   Útransient_internetÚ_urlopen_with_retryÚfpÚassertFalseÚclosedÚcloseÚ
assertTrue)ÚselfÚurlÚresponseÚsockr   r   r   Ú
test_closeS   s    zCloseSocketTest.test_closeN)r   r   r   r*   r   r   r   r   r   Q   s   r   c                   @   sd   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	e
 d¡dd„ ƒZddd„Zdd„ ZdS )ÚOtherNetworkTestsc                 C   s   d S r   r   ©r&   r   r   r   ÚsetUpb   s    zOtherNetworkTests.setUpc                 C   s&   ddd t jjfg}|  ||  ¡ ¡ d S )Nzftp://www.pythontest.net/READMEz*ftp://www.pythontest.net/non-existent-file)r   ÚerrorÚURLErrorÚ
_test_urlsÚ_extra_handlers)r&   Úurlsr   r   r   Útest_ftpk   s    ÿþzOtherNetworkTests.test_ftpc              	   C   sŠ   t j}t|dƒ}zV| d¡ | ¡  dttj |¡ƒ dd t	j
jfg}| j||  ¡ dd W t |¡ nt |¡ 0 |  tt	jjd¡ d S )NÚwz	hi there
zfile:zfile:///nonsensename/etc/passwdT)Úretryz./relative_path/to/file)r   ÚTESTFNÚopenÚwriter$   r   ÚosÚpathÚabspathr   r.   r/   r0   r1   ÚremoveZassertRaisesÚ
ValueErrorr   Úurlopen)r&   r6   Úfr2   r   r   r   Ú	test_filet   s    

ÿþzOtherNetworkTests.test_filec                 C   sZ   d}t  |¡8 tj |¡}tj |¡}|  | ¡ d¡ W d   ƒ n1 sL0    Y  d S )Nz)http://www.pythontest.net/index.html#frag©r   r   r   r   ÚRequestr>   ÚassertEqualÚgeturl)r&   Zurlwith_fragÚreqÚresr   r   r   Útest_urlwithfrag¡   s    
ÿz"OtherNetworkTests.test_urlwithfragc                 C   sZ   d}t  |¡8 tj |¡}tj |¡}|  | ¡ d¡ W d   ƒ n1 sL0    Y  d S )Nz*http://www.pythontest.net/redir/with_frag/z)http://www.pythontest.net/elsewhere/#fragrA   )r&   Zredirect_url_with_fragrE   rF   r   r   r   Útest_redirect_url_withfrag©   s    
ÿz,OtherNetworkTests.test_redirect_url_withfragc                 C   s¨   t j}t |¡„ tj ¡ }tj |¡}|  | 	¡ ¡ | 
|¡ |  | 	¡ ¡ |  | d¡¡ | dd¡ | 
|¡ |  | d¡d¡ W d   ƒ n1 sš0    Y  d S )Nz
User-agentz
User-Agentz
Test-Agent)r   r   r   r   r   r   Úbuild_openerrB   r"   Zheader_itemsr7   r%   Z
has_headerZ
add_headerrC   Z
get_header)r&   r'   Úopenerr   r   r   r   Útest_custom_headers±   s    


z%OtherNetworkTests.test_custom_headersz XXX: http://www.imdb.com is gonec              	   C   s¨   d}t  |¡† z0tj |¡}W d   ƒ n1 s40    Y  W n ty\   |  d¡ Y n0 |  |¡ tj |¡}| ¡ }|  |¡ W d   ƒ n1 sš0    Y  d S )Nzhttp://www.imdb.comzOurlopen failed for site not sending                            Connection:close)	r   r   r   r   r>   r=   Zfailr%   Úread)r&   ZURLrF   rE   r   r   r   Útest_sites_no_connection_close¾   s    "
z0OtherNetworkTests.test_sites_no_connection_closeTc                 C   sü  dd l }dd l}| d¡j}tjj|Ž j}|r<t|tj	j
ƒ}|D ]´}| j|d t|tƒrl|\}}	}
nd  }	}
t |¡: z|||	tjƒ}W nP tyä } z8|
rÎd|
||	t|ƒ|f }|  ||
|¡ n‚ W Y d }~nÐd }~0 0 z”tjx tjP tj( | ¡ }|dt|ƒ ƒ W d   ƒ n1 s.0    Y  W d   ƒ n1 sN0    Y  W d   ƒ n1 sn0    Y  W n( tjy¢   td| tjd Y n0 | ¡  W d   ƒ n1 sÂ0    Y  |  d¡ W d   ƒ q@1 sì0    Y  q@d S )	Nr   Ztest_urllib2)r'   z5Didn't get expected error(s) %s for %s %s, got %s: %szread %d bytesz<timeout: %s>)Úfilegš™™™™™¹?)!ÚtimeÚloggingÚ	getLoggerÚdebugr   r   rI   r7   r   r.   r/   ZsubTestÚ
isinstanceÚtupler   r   r   ZINTERNET_TIMEOUTÚOSErrorÚtypeZassertIsInstanceZtime_outZsocket_peer_resetZioerror_peer_resetrL   ÚlenÚsocketÚtimeoutÚprintÚsysÚstderrr$   Úsleep)r&   r2   Úhandlersr5   rO   rP   rR   r>   r'   rE   Zexpected_errr?   ÚerrÚmsgÚbufr   r   r   r0   Ó   sB    

ÿÿþt(zOtherNetworkTests._test_urlsc                 C   s2   g }t j ¡ }|  |j¡ | d¡ | |¡ |S )Né   )r   r   ZCacheFTPHandlerr   Úclear_cacheZ
setTimeoutÚappend)r&   r^   Zcfhr   r   r   r1   ú   s    


z!OtherNetworkTests._extra_handlersN)T)r   r   r   r-   Úskip_ftp_test_on_travisr3   r@   rG   rH   rK   ÚunittestÚskiprM   r0   r1   r   r   r   r   r+   a   s   	
-

'r+   c                   @   sh   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdZe	dd„ ƒZ
e	dd„ ƒZe	dd„ ƒZe	dd„ ƒZdS )ÚTimeoutTestc                 C   s   |   tjj¡ d S r   )r   r   r   r   r,   r   r   r   r-     s    zTimeoutTest.setUpc                 C   sn   |   t ¡ ¡ tj}tj|d d8 t|ƒ}|  |j	¡ |   |j
jj ¡ ¡ W d   ƒ n1 s`0    Y  d S ©N©rY   )ÚassertIsNonerX   Úgetdefaulttimeoutr   r   r   r   r    r   r$   r!   ÚrawÚ_sockÚ
gettimeout©r&   r'   Úur   r   r   Útest_http_basic
  s    zTimeoutTest.test_http_basicc              
   C   s’   |   t ¡ ¡ tj}t |¡` t d¡ z"t|ƒ}|  	|j
¡ W t d ¡ nt d ¡ 0 |  |jjj ¡ d¡ W d   ƒ n1 s„0    Y  d S ©Né<   )rk   rX   rl   r   r   r   r   Úsetdefaulttimeoutr    r   r$   rC   r!   rm   rn   ro   rp   r   r   r   Útest_http_default_timeout  s    
z%TimeoutTest.test_http_default_timeoutc              
   C   s”   |   t ¡ ¡ tj}t |¡b t d¡ z&t|d d}|  	|j
¡ W t d ¡ nt d ¡ 0 |   |jjj ¡ ¡ W d   ƒ n1 s†0    Y  d S ©Nrt   rj   )rk   rX   rl   r   r   r   r   ru   r    r   r$   r!   rm   rn   ro   rp   r   r   r   Útest_http_no_timeout  s    
z TimeoutTest.test_http_no_timeoutc                 C   sb   t j}t |¡> t|dd}|  |j¡ |  |jj	j
 ¡ d¡ W d   ƒ n1 sT0    Y  d S )Néx   rj   )r   r   r   r   r    r   r$   rC   r!   rm   rn   ro   rp   r   r   r   Útest_http_timeout*  s
    zTimeoutTest.test_http_timeoutzftp://www.pythontest.net/c                 C   sn   |   t ¡ ¡ tj| jd d< t| jƒ}|  |j¡ |   |j	j	j
j ¡ ¡ W d   ƒ n1 s`0    Y  d S ri   )rk   rX   rl   r   r   ÚFTP_HOSTr    r   r$   r!   rm   rn   ro   ©r&   rq   r   r   r   Útest_ftp_basic3  s
    
zTimeoutTest.test_ftp_basicc              
   C   s’   |   t ¡ ¡ t | j¡d t d¡ z$t| jƒ}|  |j	¡ W t d ¡ nt d ¡ 0 |  
|jjjj ¡ d¡ W d   ƒ n1 s„0    Y  d S rs   )rk   rX   rl   r   r   r{   ru   r    r   r$   rC   r!   rm   rn   ro   r|   r   r   r   Útest_ftp_default_timeout;  s    

z$TimeoutTest.test_ftp_default_timeoutc              
   C   s”   |   t ¡ ¡ t | j¡f t d¡ z(t| jd d}|  |j	¡ W t d ¡ nt d ¡ 0 |   |j
j
jj ¡ ¡ W d   ƒ n1 s†0    Y  d S rw   )rk   rX   rl   r   r   r{   ru   r    r   r$   r!   rm   rn   ro   r|   r   r   r   Útest_ftp_no_timeoutG  s    
zTimeoutTest.test_ftp_no_timeoutc                 C   sb   t  | j¡B t| jdd}|  |j¡ |  |jjjj	 
¡ d¡ W d   ƒ n1 sT0    Y  d S rw   )r   r   r{   r    r   r$   rC   r!   rm   rn   ro   r|   r   r   r   Útest_ftp_timeoutS  s    zTimeoutTest.test_ftp_timeoutN)r   r   r   r-   rr   rv   rx   rz   r{   re   r}   r~   r   r€   r   r   r   r   rh     s   


rh   Ú__main__)rf   Útestr   Ztest.supportr   Ztest.test_urllib2r   r9   rX   Zurllib.errorr   Zurllib.requestr[   Zrequiresr   r   ZskipIfÚenvironre   r   r>   r.   r/   r    ZTestCaser   r   r+   rh   r   Úmainr   r   r   r   Ú<module>   s0   
	ÿÿ' %V