
    <e+                     2   d Z ddlZddlZddlmZ ddlmZ ddlZddlZddl	Z	 ej
                    d             Z G d dej                  Z G d d	ej                  Z G d
 de          Z G d de          Zd Zedk    r ej                     dS dS )z&Unit tests for socket timeout feature.    N)support)socket_helperc                     t          j        |           5  t          j        | |t          j        t          j                  d         d         cddd           S # 1 swxY w Y   dS )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     (/usr/lib/python3.11/test/test_timeout.pyresolve_addressr      s     
	)$	/	/ < <!$fn"("46 66799:<< < < < < < < < < < < < < < < < < <s   7AA A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 )CreationTestCasez9Test case for socket.gettimeout() and socket.settimeout()c                 b    t          j         t           j        t           j                  | _        d S N)r   r
   r   sockselfs    r   setUpzCreationTestCase.setUp   s    M&.&2DEE			    c                 8    | j                                          d S r   r   closer   s    r   tearDownzCreationTestCase.tearDown       	r   c                 b    |                      | j                                        d d           d S )Nztimeout not disabled by default)assertEqualr   
gettimeoutr   s    r   testObjectCreationz#CreationTestCase.testObjectCreation"   s9    --//:	< 	< 	< 	< 	<r   c                    | j                             d           |                     | j                                         d           | j                             d           |                     | j                                         d           | j                             d            |                     | j                                         d            d S )NgzGa@   )r   
settimeoutr   r    r   s    r   testFloatReturnValuez%CreationTestCase.testFloatReturnValue'   s    	U###--//777	Q--//333	T"""--//66666r   c                    | j                             d           |                     t          | j                                                   t          d                     | j                             d           |                     t          | j                                                   t          d                     d S )N         ?g333333@)r   r$   r   typer    r   s    r   testReturnTypezCreationTestCase.testReturnType2   s    	Qdi224455tCyyAAA	S!!!di224455tCyyAAAAAr   c                    | j                             d           | j                             d           | j                             d           | j                             d            |                     t          | j         j        d           |                     t          | j         j        d           |                     t          | j         j        d           |                     t          | j         j        g            |                     t          | j         j        i            |                     t          | j         j        d           d S )Nr             y                )r   r$   assertRaises	TypeErrorr   s    r   testTypeCheckzCreationTestCase.testTypeCheck:   s   	Q	Q	S!!!	T""")TY%92>>>)TY%92>>>)TY%92>>>)TY%92>>>)TY%92>>>)TY%92>>>>>r   c                     |                      t          | j        j        d           |                      t          | j        j        d           |                      t          | j        j        d           d S )Ng      )r/   
ValueErrorr   r$   r   s    r   testRangeCheckzCreationTestCase.testRangeCheckG   s_    *di&:B???*di&:B???*di&:DAAAAAr   c                    | j                             d           | j                             d           |                     | j                                         d            | j                             d           |                     | j                                         d           | j                             d           | j                             d           |                     | j                                         d           | j                             d           |                     | j                                         d            d S )N
   TFr,   )r   r$   setblockingr   r    r   s    r   testTimeoutThenBlockingz(CreationTestCase.testTimeoutThenBlockingM   s   	R   	d###--//666	e$$$--//555	R   	e$$$--//555	d###--//66666r   c                    | j                             d           | j                             d           |                     | j                                         d           | j                             d           | j                             d           |                     | j                                         d           d S )NFr'   T)r   r8   r$   r   r    r   s    r   testBlockingThenTimeoutz(CreationTestCase.testBlockingThenTimeout[   s    	e$$$	Q--//333	d###	Q--//33333r   N)__name__
__module____qualname____doc__r   r   r!   r%   r*   r1   r5   r9   r;   r.   r   r   r   r      s        CCF F F  < < <
	7 	7 	7B B B? ? ?B B B7 7 74 4 4 4 4r   r   c                   0    e Zd ZdZej        Zd ZeZd Z	dS )TimeoutTestCaseg       @c                     t                      r   )NotImplementedErrorr   s    r   r   zTimeoutTestCase.setUpq   s    !###r   c                    | j                             |           t          | j         |          }t          |          D ]I}t	          j                    }	  ||  # t          $ r!}t	          j                    |z
  }Y d}~ nd}~ww xY w|                     d           |                     ||| j	        z              | 
                    ||dz
             dS )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 raisedr(   )r   r$   getattrrangetime	monotonicTimeoutErrorfail
assertLessfuzzassertGreater)	r   counttimeoutmethodargsit1edeltas	            r   _sock_operationzTimeoutTestCase._sock_operationv   s     		W%%%F++u 	5 	5A!!B   ((2- II3444w23335'C-00000s   A
B%BBN)
r<   r=   r>   rL   r   HOST	localhostr   r   rV   r.   r   r   rA   rA   f   sH         D"I$ $ $ H1 1 1 1 1r   rA   c                   p    e Zd ZdZd Zd Z ej        dd          d             Zd Z	d Z
d	 Zd
 Zd ZdS )TCPTimeoutTestCasez3TCP test case for socket.socket() timeout functionsc                     t          j         t           j        t           j                  | _        t	          dd          | _        d S )Nzwww.python.org.P   )r   r
   r   r   r   addr_remoter   s    r   r   zTCPTimeoutTestCase.setUp   s3    M&.&2DEE	*+<bAAr   c                 8    | j                                          d S r   r   r   s    r   r   zTCPTimeoutTestCase.tearDown   r   r   Tz*need to replace these hosts; see bpo-35518c           
      "   t          dd          }t          dd          }d}t          j        t          j        t          j                  }t          j        }|                    |           	 |                    |           n9# t          $ r Y n-t          $ r!}|j
        t          j        k    rd}Y d }~nd }~ww xY w|                                 ~n# |                                 ~w xY w|rD|                     d                    |d         |d	         ||d         |d	                              || _        t!          j        | j        d                   5  |                     d	d
d| j                   d d d            d S # 1 swxY w Y   d S )Nzblackhole.snakebite.netiZ  zwhitehole.snakebite.neti[  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$   r`   rI   OSErrorerrnoECONNREFUSEDr   skipTestformatr]   r   r   rV   )r   	blackhole	whiteholeskipr   rO   errs          r   testConnectTimeoutz%TCPTimeoutTestCase.testConnectTimeout   s    $$=uEE	 $$=uEE	: }V^V-?@@*   		LL)%%%% 	 	 	D 	 	 	yE...	 JJLLL JJLLLHHHH 	MM8 V!!!!!!!!    %-d.>q.ABB 	H 	H  E9d6FGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	HsN   .B C 
B:C 	B:B50C 5B::C C*FFFc                     t          j        | j        d                   5  | j                            | j                   |                     dddd           d d d            d S # 1 swxY w Y   d S )Nr   r'         ?recv   )r   r   r]   r   r`   rV   r   s    r   testRecvTimeoutz"TCPTimeoutTestCase.testRecvTimeout   s    -d.>q.ABB 	7 	7Id.///  C666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   8A%%A),A)c                     t          j        | j        | j                   | j                                         |                     ddd           d S )Nr'   rm   accept)r   	bind_portr   rX   listenrV   r   s    r   testAcceptTimeoutz$TCPTimeoutTestCase.testAcceptTimeout   sK    	4>:::	QX.....r   c                 t   t          j         t           j        t           j                  5 }t          j        || j                   |                                 | j                            |	                                           | 
                    dddddz             d d d            d S # 1 swxY w Y   d S )Nd   rm   send   X@ r   r
   r   r   rs   rX   rt   r   r`   getsocknamerV   r   servs     r   testSendzTCPTimeoutTestCase.testSend   s    ]6>6+=>> 	B$#D$.999KKMMMId..00111  c64&=AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B   A6B--B14B1c           	         t          j         t           j        t           j                  5 }t          j        || j                   |                                 | j                            |	                                           | 
                    dddddz  |	                                           d d d            d S # 1 swxY w Y   d S )Nrw   rm   sendtory   rz   r{   r}   s     r   
testSendtozTCPTimeoutTestCase.testSendto   s    ]6>6+=>> 	5$#D$.999KKMMMId..00111  c8TF]!%!1!1!3!35 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   B	C  CCc                 t   t          j         t           j        t           j                  5 }t          j        || j                   |                                 | j                            |	                                           | 
                    dddddz             d d d            d S # 1 swxY w Y   d S )Nrw   rm   sendallry   rz   r{   r}   s     r   testSendallzTCPTimeoutTestCase.testSendall  s    ]6>6+=>> 	E$#D$.999KKMMMId..00111  c9dVmDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Er   N)r<   r=   r>   r?   r   r   unittestskipIfrk   rp   ru   r   r   r   r.   r   r   rZ   rZ      s        ==B B B   X_TGHHOH OH IHOHb7 7 7/ / /B B B5 5 5E E E E Er   rZ   c                   $    e Zd ZdZd Zd Zd ZdS )UDPTimeoutTestCasez3UDP test case for socket.socket() timeout functionsc                 b    t          j         t           j        t           j                  | _        d S r   )r   r
   
SOCK_DGRAMr   r   s    r   r   zUDPTimeoutTestCase.setUp  s    M&.&2CDD			r   c                 8    | j                                          d S r   r   r   s    r   r   zUDPTimeoutTestCase.tearDown  r   r   c                 t    t          j        | j        | j                   |                     dddd           d S )Nr'   rm   recvfromro   )r   rs   r   rX   rV   r   s    r   testRecvfromTimeoutz&UDPTimeoutTestCase.testRecvfromTimeout  s;     		4>:::QZ66666r   N)r<   r=   r>   r?   r   r   r   r.   r   r   r   r     sJ        ==E E E  7 7 7 7 7r   r   c                  X    t          j        d           t          j        d           d S )NnetworkT)module)r   requiresrequires_working_socketr.   r   r   setUpModuler   "  s-    Y#4000000r   __main__)r?   	functoolsr   testr   test.supportr   rG   rc   r   	lru_cacher   TestCaser   rA   rZ   r   r   r<   mainr.   r   r   <module>r      s   , ,            & & & & & &    < < <J4 J4 J4 J4 J4x( J4 J4 J4Z$1 $1 $1 $1 $1h' $1 $1 $1NBE BE BE BE BE BE BE BEJ7 7 7 7 7 7 7 7 1 1 1
 zHMOOOOO r   