
    0hh*                     ,   S r SSKrSSKrSSKJr  SSKJr  SSKrSSKrSSK	r	\R                  " 5       S 5       r " S S\R                  5      r " S S	\R                  5      r " S
 S\5      r " S S\5      rS r\S:X  a  \R&                  " 5         gg)z&Unit tests for socket timeout feature.    N)support)socket_helperc                     [         R                  " U 5         [        R                  " X[        R                  [        R
                  5      S   S   sSSS5        $ ! , (       d  f       g= f)zResolve an (host, port) to an address.

We must perform name resolution before timeout tests, otherwise it will be
performed by connect().
r      N)r   transient_internetsocketgetaddrinfoAF_INETSOCK_STREAM)hostports     :/opt/python-3.13.8/usr/lib/python3.13/test/test_timeout.pyresolve_addressr      sM     
	)	)$	/!!$fnn"("4"466799:< 
0	/	/s   :A
A)c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)CreationTestCase   z9Test case for socket.gettimeout() and socket.settimeout()c                     U R                  [        R                  " [        R                  [        R                  5      5      U l        g N)enterContextr   r
   r   sockselfs    r   setUpCreationTestCase.setUp   s,    %%MM&..&*<*<=?	    c                 Z    U R                  U R                  R                  5       S S5        g )Nztimeout not disabled by default)assertEqualr   
gettimeoutr   s    r   testObjectCreation#CreationTestCase.testObjectCreation    s$    --/:	<r   c                    U R                   R                  S5        U R                  U R                   R                  5       S5        U R                   R                  S5        U R                  U R                   R                  5       S5        U R                   R                  S 5        U R                  U R                   R                  5       S 5        g )NgzGa@   )r   
settimeoutr   r   r   s    r   testFloatReturnValue%CreationTestCase.testFloatReturnValue%   s    		U#--/7		Q--/3		T"--/6r   c                 L   U R                   R                  S5        U R                  [        U R                   R	                  5       5      [
        5        U R                   R                  S5        U R                  [        U R                   R	                  5       5      [
        5        g )N   g333333@)r   r#   assertIstyper   floatr   s    r   testReturnTypeCreationTestCase.testReturnType0   sf    		Qd499//12E:		S!d499//12E:r   c                    U R                   R                  S5        U R                   R                  S5        U R                   R                  S5        U R                   R                  S 5        U R                  [        U R                   R                  S5        U R                  [        U R                   R                  S5        U R                  [        U R                   R                  S5        U R                  [        U R                   R                  / 5        U R                  [        U R                   R                  0 5        U R                  [        U R                   R                  S5        g )Nr             y                )r   r#   assertRaises	TypeErrorr   s    r   testTypeCheckCreationTestCase.testTypeCheck8   s    		Q		Q		S!		T")TYY%9%92>)TYY%9%92>)TYY%9%92>)TYY%9%92>)TYY%9%92>)TYY%9%92>r   c                    U R                  [        U R                  R                  S5        U R                  [        U R                  R                  S5        U R                  [        U R                  R                  S5        g )Ng      )r1   
ValueErrorr   r#   r   s    r   testRangeCheckCreationTestCase.testRangeCheckE   sV    *dii&:&:B?*dii&:&:B?*dii&:&:DAr   c                    U R                   R                  S5        U R                   R                  S5        U R                  U R                   R	                  5       S 5        U R                   R                  S5        U R                  U R                   R	                  5       S5        U R                   R                  S5        U R                   R                  S5        U R                  U R                   R	                  5       S5        U R                   R                  S5        U R                  U R                   R	                  5       S 5        g )N
   TFr.   )r   r#   setblockingr   r   r   s    r   testTimeoutThenBlocking(CreationTestCase.testTimeoutThenBlockingK   s    		R 		d#--/6		e$--/5		R 		e$--/5		d#--/6r   c                    U R                   R                  S5        U R                   R                  S5        U R                  U R                   R	                  5       S5        U R                   R                  S5        U R                   R                  S5        U R                  U R                   R	                  5       S5        g )NFr'   T)r   r<   r#   r   r   r   s    r   testBlockingThenTimeout(CreationTestCase.testBlockingThenTimeoutY   s    		e$		Q--/3		d#		Q--/3r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r$   r+   r3   r8   r=   r@   __static_attributes__r0   r   r   r   r      s.    C?<
	7;?B74r   r   c                   <    \ rS rSrSr\R                  rS rS r	Sr
g)TimeoutTestCased   g       @c                     [        5       er   )NotImplementedErrorr   s    r   r   TimeoutTestCase.setUpo   s    !##r   c                    U R                   R                  U5        [        U R                   U5      n[        U5       H  n[        R
                  " 5       n U" U6   M      U R                  S5        U R                  WX R                  -   5        U R                  XS-
  5        g! [         a$  n[        R
                  " 5       U-
  n SnA  M\  SnAff = f)z
Test the specified socket method.

The method is run at most `count` times and must raise a TimeoutError
within `timeout` + self.fuzz seconds.
NzTimeoutError was not raisedg      ?)r   r#   getattrrangetime	monotonicTimeoutErrorfail
assertLessfuzzassertGreater)	r   counttimeoutmethodargsit1edeltas	            r   _sock_operationTimeoutTestCase._sock_operationr   s     			W%F+uA!B  II34w235C-0   (2-s   B##
C-CCr0   N)rC   rD   rE   rF   rW   r   HOST	localhostr   ra   rH   r0   r   r   rJ   rJ   d   s     D""I$1r   rJ   c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)TCPTimeoutTestCase   z3TCP test case for socket.socket() timeout functionsc                     U R                  [        R                  " [        R                  [        R                  5      5      U l        [        SS5      U l        g )Nzwww.python.org.P   )r   r   r
   r   r   r   addr_remoter   s    r   r   TCPTimeoutTestCase.setUp   s<    %%MM&..&*<*<=?	*+<bAr   c           
         [        SS5      n[        SS5      nSn[        R                  " [        R                  [        R                  5       n [        R
                  nUR                  U5        UR                  U5        S S S 5        U(       a0  U R                  SR                  US   US   WUS   US   5      5        Xl        [        R                   " U R                  S   5         U R#                  SS	S
U R                  5        S S S 5        g ! [         a     N[         a*  nUR                  [        R                  :X  a  Sn S nANS nAff = f! , (       d  f       N= f! , (       d  f       g = f)Nzpythontest.netiZ  i[  TFzWe didn't receive a connection reset (RST) packet from {}:{} within {} seconds, so we're unable to test connect timeout against the corresponding {}:{} (which is configured to silently drop packets).r   r'   gMbP?connect)r   r   r
   r   r   LOOPBACK_TIMEOUTr#   rm   rT   OSErrorerrnoECONNREFUSEDskipTestformatrj   r   r   ra   )r   	blackhole	whiteholeskipr   rZ   errs          r   testConnectTimeout%TCPTimeoutTestCase.testConnectTimeout   s;   
 $$4e<	 $$4e<	0 ]]6>>6+=+=>$!!22(i)	 ? MM8 V!!!!!!!! %--d.>.>q.AB  E9d6F6FG CB/    !99 2 22 D! ?>8 CBsH   E2D*E%
EE	E' EEEE
E"%
E3c                     [         R                  " U R                  S   5         U R                  R	                  U R                  5        U R                  SSSS5        S S S 5        g ! , (       d  f       g = f)Nr   r'         ?recv   )r   r   rj   r   rm   ra   r   s    r   testRecvTimeout"TCPTimeoutTestCase.testRecvTimeout   sT    --d.>.>q.ABIId../  C6 CBBs   :A''
A5c                     [         R                  " U R                  U R                  5        U R                  R	                  5         U R                  SSS5        g )Nr'   r{   accept)r   	bind_portr   rd   listenra   r   s    r   testAcceptTimeout$TCPTimeoutTestCase.testAcceptTimeout   s<    		4>>:		QX.r   c                 ~   [         R                   " [         R                  [         R                  5       n[        R                  " XR
                  5        UR                  5         U R                  R                  UR                  5       5        U R                  SSSSS-  5        S S S 5        g ! , (       d  f       g = f)NrK   r{   send   X@ r   r
   r   r   r   rd   r   r   rm   getsocknamera   r   servs     r   testSendTCPTimeoutTestCase.testSend   sv    ]]6>>6+=+=>$##D..9KKMIId..01  c64&=A ?>>   A1B..
B<c           	         [         R                   " [         R                  [         R                  5       n[        R                  " XR
                  5        UR                  5         U R                  R                  UR                  5       5        U R                  SSSSS-  UR                  5       5        S S S 5        g ! , (       d  f       g = f)NrK   r{   sendtor   r   r   r   s     r   
testSendtoTCPTimeoutTestCase.testSendto   s    ]]6>>6+=+=>$##D..9KKMIId..01  c8TF]!%!1!1!35 ?>>s   B B==
Cc                 ~   [         R                   " [         R                  [         R                  5       n[        R                  " XR
                  5        UR                  5         U R                  R                  UR                  5       5        U R                  SSSSS-  5        S S S 5        g ! , (       d  f       g = f)NrK   r{   sendallr   r   r   r   s     r   testSendallTCPTimeoutTestCase.testSendall   sv    ]]6>>6+=+=>$##D..9KKMIId..01  c9dVmD ?>>r   )rj   r   N)rC   rD   rE   rF   rG   r   rx   r~   r   r   r   r   rH   r0   r   r   rf   rf      s.    =B
GHR7/B5Er   rf   c                   $    \ rS rSrSrS rS rSrg)UDPTimeoutTestCasei  z3UDP test case for socket.socket() timeout functionsc                     U R                  [        R                  " [        R                  [        R                  5      5      U l        g r   )r   r   r
   
SOCK_DGRAMr   r   s    r   r   UDPTimeoutTestCase.setUp  s,    %%MM&..&*;*;<>	r   c                     [         R                  " U R                  U R                  5        U R	                  SSSS5        g )Nr'   r{   recvfromr}   )r   r   r   rd   ra   r   s    r   testRecvfromTimeout&UDPTimeoutTestCase.testRecvfromTimeout
  s0     			4>>:QZ6r   rB   N)rC   rD   rE   rF   rG   r   r   rH   r0   r   r   r   r     s    =>7r   r   c                  X    [         R                  " S5        [         R                  " SS9  g )NnetworkT)module)r   requiresrequires_working_socketr0   r   r   setUpModuler     s    Y##40r   __main__)rG   	functoolsunittesttestr   test.supportr   rR   rp   r   	lru_cacher   TestCaser   rJ   rf   r   r   rC   mainr0   r   r   <module>r      s    ,    &    < <H4x(( H4V"1h'' "1JwE wEt7 71
 zMMO r   