a
     RîhÎ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)Úsanepathname2urlÚ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   ú</opt/python-3.9.24/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   r0   r1   r2   r3   ÚremoveZassertRaisesÚ
ValueErrorr   Úurlopen)r(   r8   Úfr4   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/#fragrC   )r(   Zredirect_url_with_fragrG   rH   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_openerrD   r$   Zheader_itemsr9   r'   Z
has_headerZ
add_headerrE   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URLrH   rG   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   rK   r9   r   r0   r1   ZsubTestÚ
isinstanceÚtupler   r!   r   ZINTERNET_TIMEOUTÚOSErrorÚtypeZassertIsInstanceZtime_outZsocket_peer_resetZioerror_peer_resetrN   ÚlenÚsocketÚtimeoutÚprintÚsysÚstderrr&   Úsleep)r(   r4   Úhandlersr7   rQ   rR   rT   r@   r)   rG   Zexpected_errrA   ÚerrÚmsgÚbufr   r   r   r2   Ó   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   r3   ú   s    


z!OtherNetworkTests._extra_handlersN)T)r   r   r   r/   Úskip_ftp_test_on_travisr5   rB   rI   rJ   rM   ÚunittestÚskiprO   r2   r3   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©r[   )ÚassertIsNonerZ   Ú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é<   )rm   rZ   rn   r   r    r   r!   Úsetdefaulttimeoutr"   r   r&   rE   r#   ro   rp   rq   rr   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 ©Nrv   rl   )rm   rZ   rn   r   r    r   r!   rw   r"   r   r&   r#   ro   rp   rq   rr   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   rl   )r   r    r   r!   r"   r   r&   rE   r#   ro   rp   rq   rr   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 rk   )rm   rZ   rn   r   r!   ÚFTP_HOSTr"   r   r&   r#   ro   rp   rq   ©r(   rs   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 ru   )rm   rZ   rn   r   r!   r}   rw   r"   r   r&   rE   r#   ro   rp   rq   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 ry   )rm   rZ   rn   r   r!   r}   rw   r"   r   r&   r#   ro   rp   rq   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 ry   )r   r!   r}   r"   r   r&   rE   r#   ro   rp   rq   r~   r   r   r   Útest_ftp_timeoutS  s    zTimeoutTest.test_ftp_timeoutN)r   r   r   r/   rt   rx   rz   r|   r}   rg   r   r€   r   r‚   r   r   r   r   rj     s   


rj   Ú__main__)rh   Útestr   Ztest.supportr   Ztest.test_urllib2r   r;   rZ   Zurllib.errorr   Zurllib.requestr]   Zrequiresr   r   ZskipIfÚenvironrg   r   r@   r0   r1   r"   ZTestCaser   r   r-   rj   r   Úmainr   r   r   r   Ú<module>   s0   
	ÿÿ' %V