
    <e6                     4   d dl Z d dlZd dlmZ d dlm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j        d           d Zd	 Z eej        j        ej        j                  Z G d
 de          Z eee j                  Z eee j                  Z eee j                  Z G d dej                   Z! G d dej                   Z" G d dej                   Z# G d dej                   Z$e%dk    r ej&                     dS dS )    N)support)	os_helper)socket_helper)ResourceDenied)sanepathname2urlnetworkc                 f    t          d          D ] }	  | |i |c S # |$ r}|}Y d }~d }~ww xY w|)N   )range)funcexcargskwargsielast_excs          +/usr/lib/python3.11/test/test_urllib2net.py_retry_thricer      sm    1XX  	4(((((( 	 	 	HHHHH	 Ns   .).c                       fd}|S )Nc                  &    t          g| R i |S N)r   )r   r   r   r   s     r   wrappedz(_wrap_with_retry_thrice.<locals>.wrapped   s#    T38888888     )r   r   r   s   `` r   _wrap_with_retry_thricer      s'    9 9 9 9 9 9Nr   c                   &    e Zd ZdZd Zd ZddZdS )TransientResourcezRaise ResourceDenied if an exception is raised while the context manager
    is in effect that matches the specified exception and attributes.c                 "    || _         || _        d S r   )r   attrs)selfr   r   s      r   __init__zTransientResource.__init__+   s    


r   c                     | S r   r   r    s    r   	__enter__zTransientResource.__enter__/   s    r   Nc                     |mt          | j        |          rZ| j                                        D ]/\  }}t	          ||          s dS t          ||          |k    r dS 0t          d          dS dS )zIf type_ is a subclass of self.exc and value has attributes matching
        self.attrs, raise ResourceDenied.  Otherwise let the exception
        propagate (if any).Nz%an optional resource is not available)
issubclassr   r   itemshasattrgetattrr   )r    type_value	tracebackattr
attr_values         r   __exit__zTransientResource.__exit__2   s     DHe!<!<$(J$4$4$6$6 N N jud++ EE5$'':55EE 6 %%LMMM r   )NNN)__name__
__module____qualname____doc__r!   r$   r/   r   r   r   r   r   &   sX        I I    N N N N N Nr   r   )errnoc                       e Zd ZdZdS )	AuthTestsz&Tests urllib2 authentication features.N)r0   r1   r2   r3   r   r   r   r6   r6   G   s        0000r   r6   c                       e Zd Zd ZdS )CloseSocketTestc                 |   |                      t          j        j                   t          j        }t          j        |          5  t          |          }|j	        }| 
                    |j                   |                                 |                     |j                   d d d            d S # 1 swxY w Y   d S r   )
addCleanupurllibrequest
urlcleanupr   TEST_HTTP_URLr   transient_internet_urlopen_with_retryfpassertFalseclosedclose
assertTrue)r    urlresponsesocks       r   
test_closezCloseSocketTest.test_closep   s    1222 #-c22 	) 	)*3//H;DT[)))NNOODK(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   AB11B58B5N)r0   r1   r2   rI   r   r   r   r8   r8   n   s#        ) ) ) ) )r   r8   c                   r    e Zd Zd Zd Zd Zd Zd Zd Z e	j
        d          d             Zdd
Zd ZdS )OtherNetworkTestsc                     d S r   )logging	getLogger
addHandlerStreamHandler)r    rM   loggers      r   setUpzOtherNetworkTests.setUp   s    	7 	7r   c                     d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    urlss     r   test_ftpzOtherNetworkTests.test_ftp   sK     .-96<(* 	d224455555r   c                    t           j        }t          |d          }	 |                    d           |                                 dt          t          j                            |                    z   dd t          j
        j        fg}|                     ||                                 d           t          j        |           n# t          j        |           w xY w|                     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writerD   r   ospathabspathr;   rT   rU   rV   rW   removeassertRaises
ValueErrorr<   urlopen)r    r]   frX   s       r   	test_filezOtherNetworkTests.test_file   s    !
	GGL!!!GGIII*27??6+B+BCCC2D&(D
 OOD$"6"6"8"8OEEEIfBIf*fn&<=VWWWWWs   BC	 	Cc                 0   d}t          j        |          5  t          j                            |          }t          j                            |          }|                     |                                d           d d d            d S # 1 swxY w Y   d S )Nz)http://www.pythontest.net/index.html#fragr   r?   r;   r<   Requestrf   assertEqualgeturl)r    urlwith_fragreqress       r   test_urlwithfragz"OtherNetworkTests.test_urlwithfrag   s    B-l;; 	A 	A.((66C.((--CSZZ\\?A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A   A'BBBc                 0   d}t          j        |          5  t          j                            |          }t          j                            |          }|                     |                                d           d d d            d S # 1 swxY w Y   d S )Nz*http://www.pythontest.net/redir/with_frag/z)http://www.pythontest.net/elsewhere/#fragrj   )r    redirect_url_with_fragro   rp   s       r   test_redirect_url_withfragz,OtherNetworkTests.test_redirect_url_withfrag   s    !M-.DEE 	A 	A.(()?@@C.((--CSZZ\\?A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Arr   c                    t           j        }t          j        |          5  t          j                                        }t          j                            |          }|                     |	                                           |
                    |           |                     |	                                           |                     |                    d                     |                    dd           |
                    |           |                     |                    d          d           d d d            d S # 1 swxY w Y   d S )Nz
User-agentz
User-Agentz
Test-Agent)r   r>   r   r?   r;   r<   build_openerrk   rB   header_itemsr^   rE   
has_header
add_headerrl   
get_header)r    rF   openerr<   s       r   test_custom_headersz%OtherNetworkTests.test_custom_headers   sw   #-c22 		L 		L^0022Fn,,S11GW1133444KK   OOG0022333OOG..|<<===|L999KK   W//==lKKK		L 		L 		L 		L 		L 		L 		L 		L 		L 		L 		L 		L 		L 		L 		L 		L 		L 		Ls   DEEEz XXX: http://www.imdb.com is gonec                    d}t          j        |          5  	 t          j                            |          5 }	 d d d            n# 1 swxY w Y   |                     |           n%# t          $ r |                     d           Y nw xY wt          j                            |          }|                                }|                     |           d d d            d S # 1 swxY w Y   d S )Nzhttp://www.imdb.comzOurlopen failed for site not sending                            Connection:close)	r   r?   r;   r<   rf   rE   re   failread)r    URLrp   ro   s       r   test_sites_no_connection_closez0OtherNetworkTests.test_sites_no_connection_close   s}   
 $-c22 	! 	!%^++C00 C               $$$$	  . . .		 - . . . . .. .((--C((**COOC   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!sW   C!A'AA'A
	
A'A
	A'C!'B	C!B		AC!!C%(C%Tc                 Z   dd l }dd l}|                    d          j        }t	          j        j        | j        }|rt          |t          j	        j
                  }|D ]}|                     |          5  t          |t                    r|\  }}	}
nd x}	}
t          j        |          5  	  |||	t           j                  }	 t$          5  t&          5  t(          5  |                                } |dt-          |          z             d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   n.# t.          $ r! t1          d|z  t2          j                   Y nw xY w|                                 nP# t8          $ rC}|
r6d|
d|d	|	d
t;          |          d|
}|                     ||
|           n Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   |                    d           d d d            n# 1 swxY w Y   d S )Nr   test_urllib2)rF   zread %d bytesz<timeout: %s>)filezDidn't get expected error(s) z for  z, got z: g?) timerM   rN   debugr;   r<   rw   r^   r   rT   rU   subTest
isinstancetupler   r?   r   INTERNET_TIMEOUTtime_outsocket_peer_resetioerror_peer_resetr   lenTimeoutErrorprintsysstderrrD   OSErrortypeassertIsInstancesleep)r    rX   handlersr\   r   rM   r   rf   rF   ro   expected_errrg   buferrmsgs                  r   rV   zOtherNetworkTests._test_urls   s   !!.117.-x8= 	N-gv|7LMMG 	  	 C#&&    c5)) .-0*Cll)--C,"5c:: " ""#GCg.FGGJ!) B B!2B B!3B B '(ffhh %oC&@ A A A	B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B
  , J J J!/C"7cjIIIIIIJ				! # " " "' " "$0LL###sssDIIIIss$LC 11#|SIIII! JIIII	"	" " " " " " " " " " " " " " "* 

37                             	  	 s   75H,G2.FEE	D00DD0DD0 D!D0$E	0D44E	7D48E	;EEEEEG2(E>	;G2=E>	>G2
G#	 9G	G2G#	#G2&H2G66H9G6:HH"	%H"	c                     g }t           j                                        }|                     |j                   |                    d           |                    |           |S )N   )r;   r<   CacheFTPHandlerr:   clear_cache
setTimeoutappend)r    r   cfhs      r   rW   z!OtherNetworkTests._extra_handlers  sW    n,,..(((qr   N)T)r0   r1   r2   rR   rY   rh   rq   ru   r}   unittestskipr   rV   rW   r   r   r   rK   rK   ~   s        7 7 76 6 6X X XZA A AA A AL L L X]566! ! 76!(%  %  %  % N    r   rK   c                   H    e Zd Zd Zd Zd Zd Zd ZdZd Z	d Z
d	 Zd
 ZdS )TimeoutTestc                 N    |                      t          j        j                   d S r   )r:   r;   r<   r=   r#   s    r   rR   zTimeoutTest.setUp$  s    122222r   c                    |                      t          j                               t          j        }t          j        |d           5  t          |          }|                     |j	                   |                      |j
        j        j                                                   d d d            d S # 1 swxY w Y   d S Ntimeout)assertIsNonesocketgetdefaulttimeoutr   r>   r   r?   r@   r:   rD   rA   raw_sock
gettimeoutr    rF   us      r   test_http_basiczTimeoutTest.test_http_basic(  s    &244555#-c4@@@ 	; 	;#C((AOOAG$$$adhn7799:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   	A B66B:=B:c                 
   |                      t          j                               t          j        }t          j        |          5  t          j        d           	 t          |          }| 	                    |j
                   t          j        d            n# t          j        d            w xY w|                     |j        j        j                                        d           d d d            d S # 1 swxY w Y   d S N<   )r   r   r   r   r>   r   r?   setdefaulttimeoutr@   r:   rD   rl   rA   r   r   r   r   s      r   test_http_default_timeoutz%TimeoutTest.test_http_default_timeout0  s&   &244555#-c22 	> 	>$R(((/',,((((....(....QTX^6688"===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s*   C8)BC8B11:C88C<?C<c                    |                      t          j                               t          j        }t          j        |          5  t          j        d           	 t          |d           }| 	                    |j
                   t          j        d            n# t          j        d            w xY w|                      |j        j        j                                                   d d d            d S # 1 swxY w Y   d S Nr   r   )r   r   r   r   r>   r   r?   r   r@   r:   rD   rA   r   r   r   r   s      r   test_http_no_timeoutz TimeoutTest.test_http_no_timeout<  s)   &244555#-c22 	; 	;$R(((/'T:::((((....(....adhn7799:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s*   C9+BC9B339C99C= C=c                 <   t           j        }t          j        |          5  t	          |d          }|                     |j                   |                     |j        j	        j
                                        d           d d d            d S # 1 swxY w Y   d S )Nx   r   )r   r>   r   r?   r@   r:   rD   rl   rA   r   r   r   r   s      r   test_http_timeoutzTimeoutTest.test_http_timeoutH  s    #-c22 	? 	?#C555AOOAG$$$QTX^6688#>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   A#BBBzftp://www.pythontest.net/c                    |                      t          j                               t          j        | j        d           5  t          | j                  }|                     |j                   |                      |j	        j	        j
        j                                                   d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   r?   FTP_HOSTr@   r:   rD   rA   r   r   r   r    r   s     r   test_ftp_basiczTimeoutTest.test_ftp_basicQ  s    &244555-dmTJJJ 	> 	>#DM22AOOAG$$$adgk/::<<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   A*B99B= B=c                    |                      t          j                               t          j        | j                  5  t          j        d           	 t          | j                  }|                     |j	                   t          j        d            n# t          j        d            w xY w| 
                    |j        j        j        j                                        d           d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   r?   r   r   r@   r:   rD   rl   rA   r   r   r   r   s     r   test_ftp_default_timeoutz$TimeoutTest.test_ftp_default_timeoutX  s9   &244555-dm<< 	A 	A$R(((/'66((((....(....QTW[.99;;R@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As*    C;.BC;B//?C;;C?C?c                    |                      t          j                               t          j        | j                  5  t          j        d           	 t          | j        d           }|                     |j	                   t          j        d            n# t          j        d            w xY w|                      |j
        j
        j        j                                                   d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   r?   r   r   r@   r:   rD   rA   r   r   r   r   s     r   test_ftp_no_timeoutzTimeoutTest.test_ftp_no_timeoutc  s(   &244555-dm<< 	> 	>$R(((/'tDDD((((....(....adgk/::<<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s*    C<0BC<B11>C<<D D c                 B   t          j        | j                  5  t          | j        d          }|                     |j                   |                     |j        j        j        j	        
                                d           d d d            d S # 1 swxY w Y   d S r   )r   r?   r   r@   r:   rD   rl   rA   r   r   r   r   s     r   test_ftp_timeoutzTimeoutTest.test_ftp_timeoutn  s    -dm<< 	A 	A#DM2>>>AOOAG$$$QTW[.99;;R@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   A-BBBN)r0   r1   r2   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   #  s        3 3 3; ; ;
> 
> 
>
; 
; 
;? ? ? +H> > >	A 	A 	A	> 	> 	>A A A A Ar   r   __main__)'r4   r   testr   test.supportr   r   r   test.test_urllib2r   r`   r   urllib.errorr;   urllib.requestr   requiresr   r   r<   rf   rT   rU   r@   objectr   r   	ETIMEDOUTr   
ECONNRESETr   r   TestCaser6   r8   rK   r   r0   mainr   r   r   <module>r      sm           " " " " " " & & & & & & ' ' ' ' ' ' . . . . . . 				          



          .-fn.D.4l.CE E N N N N N N N N8 WEO<<<%%gU5EFFF &&we6FGGG 1 1 1 1 1! 1 1 1N) ) ) ) )h' ) ) ) b b b b b) b b bJOA OA OA OA OA(# OA OA OAd zHMOOOOO r   