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ZdS )Ú	AuthTestsz&Tests urllib2 authentication features.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__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/   r0   r1   r2   ÚremoveZassertRaisesÚ
ValueErrorr   Úurlopen)r'   r7   Úfr3   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/#fragrB   )r'   Zredirect_url_with_fragrF   rG   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_openerrC   r#   Zheader_itemsr8   r&   Z
has_headerZ
add_headerrD   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URLrG   rF   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   rJ   r8   r   r/   r0   ZsubTestÚ
isinstanceÚtupler   r    r   ZINTERNET_TIMEOUTÚOSErrorÚtypeZassertIsInstanceZtime_outZsocket_peer_resetZioerror_peer_resetrM   ÚlenÚsocketÚtimeoutÚprintÚsysÚstderrr%   Úsleep)r'   r3   Úhandlersr6   rP   rQ   rS   r?   r(   rF   Zexpected_errr@   ÚerrÚmsgÚbufr   r   r   r1   Ó   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   r2   ú   s    


z!OtherNetworkTests._extra_handlersN)T)r   r   r   r.   Úskip_ftp_test_on_travisr4   rA   rH   rI   rL   ÚunittestÚskiprN   r1   r2   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©rZ   )ÚassertIsNonerY   Ú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é<   )rl   rY   rm   r   r   r   r    Úsetdefaulttimeoutr!   r   r%   rD   r"   rn   ro   rp   rq   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 ©Nru   rk   )rl   rY   rm   r   r   r   r    rv   r!   r   r%   r"   rn   ro   rp   rq   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   rk   )r   r   r   r    r!   r   r%   rD   r"   rn   ro   rp   rq   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 rj   )rl   rY   rm   r   r    ÚFTP_HOSTr!   r   r%   r"   rn   ro   rp   ©r'   rr   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 rt   )rl   rY   rm   r   r    r|   rv   r!   r   r%   rD   r"   rn   ro   rp   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 rx   )rl   rY   rm   r   r    r|   rv   r!   r   r%   r"   rn   ro   rp   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 rx   )r   r    r|   r!   r   r%   rD   r"   rn   ro   rp   r}   r   r   r   Útest_ftp_timeoutS  s    zTimeoutTest.test_ftp_timeoutN)r   r   r   r.   rs   rw   ry   r{   r|   rf   r~   r   r€   r   r   r   r   r   ri     s   


ri   Ú__main__)rg   Útestr   Ztest.supportr   Ztest.test_urllib2r   r:   rY   Zurllib.errorr   Zurllib.requestr\   Zrequiresr   r   ZskipIfÚenvironrf   r   r?   r/   r0   r!   ZTestCaser   r   r,   ri   r   Úmainr   r   r   r   Ú<module>   s0   
	ÿÿ' %V