
    7bhE                        	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dl	mZmZ d dl	mZ d dl	mZ d dl	mZ e
j                   j#                  d       e
j                   j%                  d       d	Zej(                  Z eed
      Z ej.                  ed      Ze
j                   j2                  Z ej.                  ed      Zej                  Ze
j                   j:                  fdZe
j                   j?                         e j@                  d               Z! G d dejD                        Z# G d dejD                        Z$ G d dejJ                        Z& G d dejN                        Z( G d dejR                  e&      Z*er G d dejV                  e&      Z, G d dejD                        Z- G d dejD                        Z.e/dk(  r ej`                          yy)     N)reap_childrenverbose)	os_helper)socket_helper)threading_helpernetworkT)modules   hello world
AF_UNIXzrequires Unix socketszrequires forkingc                 n    t        | gg g |      \  }}}| |v r| j                  |      S t        d|       )Nztimed out on )_real_selectrecvRuntimeError)sockntimeoutrwxs         @/opt/python-3.12.12/usr/lib/python3.12/test/test_socketserver.pyreceiver   &   s=    D62r73GAq!qyyy|677    c              #     K   	 t        j                         }|dk(  rt        j                  d       	 d  	 t        j                  j                  |d       y #   xY w# t        j                  j                  |d       w xY ww)Nr   H   )exitcode)osfork_exittestsupportwait_process)testcasepids     r   simple_subprocessr#   .   sm      M
'')C
ax
4
 	!!#!3!!#!3s'   0BA "BAA   #BBc                   8   e Zd Z	 d Zd Zd Zd Zej                  d        Z	d Z
d Zd Zd	 Zed
        Zed        Zed        Zeed               Zd Zd Zed        Zed        Zed        Zeed               Zej                  d        Zd Zd Zd Zy)SocketServerTestc                      d| _         g | _        y Nr   )	port_seed
test_filesselfs    r   setUpzSocketServerTest.setUpA   s    r   c                     t                | j                  D ]  }	 t        j                  |        g | j                  d d  y # t        $ r Y 6w xY wN)r   r)   r   removeOSError)r+   fns     r   tearDownzSocketServerTest.tearDownE   sI    //B		" "
    s   A	AAc                     |t         j                  k(  rt        dfS t        j                         }| j
                  j                  |       |S r'   )socketAF_INETHOSTr   create_unix_domain_namer)   append)r+   protor1   s      r   pickaddrzSocketServerTest.pickaddrO   s?    FNN"!9 668BOO""2&Ir   c           	      0    G d d|      } G d d|      }t         rt        d       	  |||      }| j	                  j
                  |j                  j                                |S # t        $ r$}| j                  d|d|d|       Y d }~^d }~ww xY w)	Nc                       e Zd Zd Zy).SocketServerTest.make_server.<locals>.MyServerc                 &    | j                  |        r.   )close_requestr+   requestclient_addresss      r   handle_errorz;SocketServerTest.make_server.<locals>.MyServer.handle_error[   s    ""7+r   N)__name__
__module____qualname__rC    r   r   MyServerr=   Z   s    r   rH   c                       e Zd Zd Zy)/SocketServerTest.make_server.<locals>.MyHandlerc                 n    | j                   j                         }| j                  j                  |       y r.   )rfilereadlinewfilewrite)r+   lines     r   handlez6SocketServerTest.make_server.<locals>.MyHandler.handle`   s&    zz**,

  &r   NrD   rE   rF   rQ   rG   r   r   	MyHandlerrJ   _   s    'r   rS   zcreating serverzCannot create server (z, z): )r   printPermissionErrorskipTestassertEqualserver_addressr4   getsockname)r+   addrsvrclshdlrbaserH   rS   serveres           r   make_serverzSocketServerTest.make_serverY   s    	v 	
	' 	'
 E+,	-dI.F
 	..0I0I0KL  	-MM!4, - -	-s   	A( (	B1BBc                 (   | j                  | j                  |j                        ||      }|j                  }t        rt        d|       t        d|       t        j                  d|z  |j                  ddi      }d|_	        |j                          t        rt        d       t        d	      D ]'  }t        rt        d
|        ||j                  |       ) t        rt        d       |j                          |j                          |j                          | j                  d|j                   j#                                t$        r5t'        |t(        j*                        r| j-                  |j.                         t        rt        d       y y )NzADDR =zCLASS =z
%s servingpoll_interval{Gz?nametargetkwargsTzserver running   ztest clientzwaiting for serverdone)r_   r:   address_familyrX   r   rT   	threadingThreadserve_foreverdaemonstartrangeshutdownjoinserver_closerW   r4   filenoHAVE_FORKING
isinstancesocketserverForkingMixInassertFalseactive_children)r+   r[   r\   testfuncr]   rZ   tis           r   
run_serverzSocketServerTest.run_servern   s:   !!$--0E0E"F"((4 $$(D!)V$&'' $D)+ 		E*+qAmQ/V**D1  E./	V]]1134Jv|/H/HI V334E&M7r   c                 F   t        j                   |t         j                        5 }|j                  |       |j                  t               t        |d      x}}|rd|vrt        |d      }||z  }|rd|vr| j                  |t               d d d        y # 1 sw Y   y xY wNd      
)r4   SOCK_STREAMconnectsendallTEST_STRr   rW   r+   r9   rZ   sbufdatas         r   stream_examinezSocketServerTest.stream_examine   s    ]]5&"4"45IIdOIIh C(C$5+q#t 5+ S(+ 655s   AB8BB c                    t        j                   |t         j                        5 }t        r3|t         j                  k(  r |j	                  | j                  |             |j                  t        |       t        |d      x}}|rd|vrt        |d      }||z  }|rd|vr| j                  |t               d d d        y # 1 sw Y   y xY wr   )
r4   
SOCK_DGRAMHAVE_UNIX_SOCKETSr
   bindr:   sendtor   r   rW   r   s         r   dgram_examinezSocketServerTest.dgram_examine   s    ]]5&"3"34 Ufnn%<t}}U+,HHXt$ C(C$5+q#t 5+ S(+ 544s   A;C !C  C	c                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   	TCPServerStreamRequestHandlerr   r*   s    r   test_TCPServerzSocketServerTest.test_TCPServer   s(    ..$99++	-r   c                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   ThreadingTCPServerr   r   r*   s    r   test_ThreadingTCPServerz(SocketServerTest.test_ThreadingTCPServer   s(    77$99++	-r   c                     t        |       5  | j                  t        j                  t        j                  | j
                         d d d        y # 1 sw Y   y xY wr.   )r#   r~   rw   ForkingTCPServerr   r   r*   s    r   test_ForkingTCPServerz&SocketServerTest.test_ForkingTCPServer   s<    t$OOL99(== //1 %$$   :AAc                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   UnixStreamServerr   r   r*   s    r   test_UnixStreamServerz&SocketServerTest.test_UnixStreamServer   s(    55$99++	-r   c                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   ThreadingUnixStreamServerr   r   r*   s    r   test_ThreadingUnixStreamServerz/SocketServerTest.test_ThreadingUnixStreamServer   s(    >>$99++	-r   c                     t        |       5  | j                  t        j                  t        j                  | j
                         d d d        y # 1 sw Y   y xY wr.   )r#   r~   rw   ForkingUnixStreamServerr   r   r*   s    r   test_ForkingUnixStreamServerz-SocketServerTest.test_ForkingUnixStreamServer   s>     t$OOL@@(== //1 %$$r   c                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   	UDPServerDatagramRequestHandlerr   r*   s    r   test_UDPServerzSocketServerTest.test_UDPServer   s(    ..$;;**	,r   c                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   ThreadingUDPServerr   r   r*   s    r   test_ThreadingUDPServerz(SocketServerTest.test_ThreadingUDPServer   s(    77$;;**	,r   c                     t        |       5  | j                  t        j                  t        j                  | j
                         d d d        y # 1 sw Y   y xY wr.   )r#   r~   rw   ForkingUDPServerr   r   r*   s    r   test_ForkingUDPServerz&SocketServerTest.test_ForkingUDPServer   s<    t$OOL99(?? ..0 %$$r   c                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   UnixDatagramServerr   r   r*   s    r   test_UnixDatagramServerz(SocketServerTest.test_UnixDatagramServer   s(    77$;;**	,r   c                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   ThreadingUnixDatagramServerr   r   r*   s    r    test_ThreadingUnixDatagramServerz1SocketServerTest.test_ThreadingUnixDatagramServer   s(    @@$;;**	,r   c                 v    | j                  t        j                  t        j                  | j                         y r.   )r~   rw   ForkingUnixDatagramServerr   r   r*   s    r   test_ForkingUnixDatagramServerz/SocketServerTest.test_ForkingUnixDatagramServer   s*     	>>$;;**	,r   c                     G d dt         j                        } G d dt         j                        }g }t        d      D ]O  } |t        df|      }t        j                  d|j                  dd	i
      }d|_        |j                  ||f       Q |D ]%  \  }}|j                          |j                          ' |D ]%  \  }}|j                          |j                          ' y )Nc                       e Zd Zy)0SocketServerTest.test_shutdown.<locals>.MyServerNrD   rE   rF   rG   r   r   rH   r          r   rH   c                       e Zd Zy)1SocketServerTest.test_shutdown.<locals>.MyHandlerNr   rG   r   r   rS   r      r   r   rS      r   zMyServer servingra   rb   rc   T)rw   r   r   rp   r6   rk   rl   rm   rn   r8   ro   rq   rr   rs   )r+   rH   rS   threadsr}   r   r|   s          r   test_shutdownzSocketServerTest.test_shutdown   s    	|-- 		99 	 rA$I.A  ''-/A AHNNAq6"  DAqGGIJJL  DAqFFHNN r   c                      G d dt         j                  t         j                        } |t        dfd       }|j	                          y )Nc                       e Zd Zy)9SocketServerTest.test_close_immediately.<locals>.MyServerNr   rG   r   r   rH   r   
  r   r   rH   r   c                       y r.   rG   rG   r   r   <lambda>z9SocketServerTest.test_close_immediately.<locals>.<lambda>  s    Tr   )rw   ThreadingMixInr   r6   rs   )r+   rH   r]   s      r   test_close_immediatelyz'SocketServerTest.test_close_immediately	  s:    	|22L4J4J 	 4)\2r   c                     t        d      D ]J  }| j                  t              5  t        j                  t
        dft        j                         d d d        L y # 1 sw Y   WxY w)Ni   rh   )rp   assertRaisesOverflowErrorrw   r   r6   r   )r+   r}   s     r   test_tcpserver_bind_leakz)SocketServerTest.test_tcpserver_bind_leak  sM    
 tA""=1&&bz'3'H'HJ 21 11s   +AA#	c                     t        j                  t        dft         j                        5 }	 d d d        | j	                  dj
                  j                                y # 1 sw Y   4xY w)Nr   rh   )rw   r   r6   r   rW   r4   rt   )r+   r]   s     r   test_context_managerz%SocketServerTest.test_context_manager  sX    ##T1I$0$E$EGJPG 	V]]1134G Gs   A  A)N)rD   rE   rF   r,   r2   r:   r_   r   reap_threadsr~   r   r   r   r   requires_forkingr   requires_unix_socketsr   r   r   r   r   r   r   r   r   r   r   r   r   rG   r   r   r%   r%   >   s,   " * "" " # "D,	,-
-
 1 1 - -
 - -
 1  1,
,
 0 0 , ,
 , ,
 ,  ,
 "" #2J5r   r%   c                   R    e Zd Z	 d Zd Zd Zd Zd Zed        Z	ed        Z
d Zy	)
ErrorHandlerTestc                 J    t        j                  t         j                         y r.   )r   unlinkTESTFNr*   s    r   r2   zErrorHandlerTest.tearDown&  s    ))*r   c                 F    t        t               | j                  d       y NThandled)BaseErrorTestServer
ValueErrorcheck_resultr*   s    r   test_sync_handledz"ErrorHandlerTest.test_sync_handled)  s    J'$'r   c                     | j                  t              5  t        t               d d d        | j                  d       y # 1 sw Y   xY wNFr   )r   
SystemExitr   r   r*   s    r   test_sync_not_handledz&ErrorHandlerTest.test_sync_not_handled-  s7    z*
+ +%( +*s   AA
c                 F    t        t               | j                  d       y r   )ThreadingErrorTestServerr   r   r*   s    r   test_threading_handledz'ErrorHandlerTest.test_threading_handled2  s     ,$'r   c                     t        j                         5 }t        t               | j	                  d       | j                  |j                  t               d d d        y # 1 sw Y   y xY wr   )r   catch_threading_exceptionr   r   r   assertIsexc_type)r+   cms     r   test_threading_not_handledz+ErrorHandlerTest.test_threading_not_handled6  sG    779R$Z0e,MM"++z2	 :99s   AA  A)c                 F    t        t               | j                  d       y r   )ForkingErrorTestServerr   r   r*   s    r   test_forking_handledz%ErrorHandlerTest.test_forking_handled=  s    z*$'r   c                 F    t        t               | j                  d       y r   )r   r   r   r*   s    r   test_forking_not_handledz)ErrorHandlerTest.test_forking_not_handledB  s    z*%(r   c                     t        t        j                        5 }dd|z  z   }| j                  |j	                         |       d d d        y # 1 sw Y   y xY w)NHandler called
Error handled
)openr   r   rW   read)r+   r   logexpecteds       r   r   zErrorHandlerTest.check_resultG  sD    )""#s),=,GGHSXXZ2 $##s   )AAN)rD   rE   rF   r2   r   r   r   r   r   r   r   r   rG   r   r   r   r   !  sM    )+()
(3 ( ( ) )3r   r   c                   *     e Zd Z fdZd Zd Z xZS )r   c                 >   || _         t        | 	  t        dft               t        j                  | j                        5  	 d d d        	 | j                          | j                          | j                          y # 1 sw Y   ;xY w# | j                          w xY wr'   )	exceptionsuper__init__r6   
BadHandlerr4   create_connectionrX   handle_requestrs   	wait_done)r+   r   	__class__s     r   r   zBaseErrorTestServer.__init__N  sx    "$J/%%d&9&9: ;	 ! ;:
 s   A>B
 >B
Bc                     t        t        j                  d      5 }|j                  d       d d d        y # 1 sw Y   y xY w)Nar   )r   r   r   rO   )r+   rA   rB   r   s       r   rC   z BaseErrorTestServer.handle_errorY  s-    )""C(CII'( )((s   6?c                      y r.   rG   r*   s    r   r  zBaseErrorTestServer.wait_done]  s    r   )rD   rE   rF   r   rC   r  __classcell__r  s   @r   r   r   M  s    	)r   r   c                       e Zd Zd Zy)r   c                     t        t        j                  d      5 }|j                  d       d d d        | j                  j                  d      # 1 sw Y   $xY w)Nr  r   z
Test error)r   r   r   rO   r]   r   )r+   r   s     r   rQ   zBadHandler.handleb  sD    )""C(CII() )kk##L11 )(s   AANrR   rG   r   r   r   r   a  s    2r   r   c                   .     e Zd Z fdZ fdZd Z xZS )r   c                 V    t        j                         | _        t        |   |i | y r.   )rk   Eventri   r   r   r+   poskwr  s      r   r   z!ThreadingErrorTestServer.__init__j  s#    OO%	#$$r   c                 X    t        |   |i | | j                  j                          y r.   )r   shutdown_requestri   setr  s      r   r  z)ThreadingErrorTestServer.shutdown_requestn  s"     #,,		r   c                 8    | j                   j                          y r.   )ri   waitr*   s    r   r  z"ThreadingErrorTestServer.wait_doner  s    		r   )rD   rE   rF   r   r  r  r  r  s   @r   r   r   h  s    %r   r   c                       e Zd Zy)r   Nr   rG   r   r   r   r   w  s    r   r   c                       e Zd Zd Zd Zy)SocketWriterTestc                 B    G d dt         j                        }t        j                  t        df|      }| j	                  |j
                         t        j                  |j                  t        j                  t        j                        }|5  |j                  |j                         d d d        |j                          | j                  |j                  t        j                          | j#                  |j$                  |j&                         y # 1 sw Y   jxY w)Nc                       e Zd Zd Zy)-SocketWriterTest.test_basics.<locals>.Handlerc                     | j                   | j                  _         | j                   j                         | j                  _        | j                  j                         | j                  _        y r.   )rN   r]   rt   wfile_filenorA   request_filenor*   s    r   rQ   z4SocketWriterTest.test_basics.<locals>.Handler.handle~  sD    $(JJ!+/::+<+<+>(-1\\-@-@-B*r   NrR   rG   r   r   Handlerr  }  s    Cr   r  r   )rw   r   r   r6   
addCleanuprs   r4   rj   r   IPPROTO_TCPr   rX   r   assertIsInstancerN   ioBufferedIOBaserW   r  r  )r+   r  r]   r   s       r   test_basicszSocketWriterTest.test_basics|  s    	Cl77 	C ''q	7;++,MM!!6#5#5v7I7IKIIf++, fllB,=,=>,,f.C.CD	 Qs   DDc                   	
 t         j                  j                  t        d       G d dt        j
                        }t	        j                  t        df|      | j                  j                         t        j                         fd}t        j                  t        j                  |      }| j                  t        j                  t        j                  |       d 
d 	t        j                         	
fd}t        j                  |      }|j                          j!                          |j#                          | j%                  j&                  t)        
             | j%                  
d       | j%                  j*                  d	       | j%                  j,                  t         j                  j.                         | j%                  	t         j                  j.                  d
z
         y )Npthread_killc                       e Zd Zd Zy),SocketWriterTest.test_write.<locals>.Handlerc                 8   | j                   j                  d      | j                  _        | j                  j                         | j                  _        dt        j                  j                  z  }| j                   j                  |      | j                  _
        y )N   write data
    )rN   rO   r]   sent1rL   rM   receivedr   r   SOCK_MAX_SIZEsent2)r+   	big_chunks     r   rQ   z3SocketWriterTest.test_write.<locals>.Handler.handle  se    $(JJ$4$4_$E!'+zz':':'<$!DLL$>$>>	$(JJ$4$4Y$?!r   NrR   rG   r   r   r  r(    s    @r   r  r   c                 &    j                          y r.   )r  )signumframeinterrupteds     r   signal_handlerz3SocketWriterTest.test_write.<locals>.signal_handler  s    OOr   c                  0   t        j                   j                  t         j                  t         j                        } | 5  | j	                  d      5 }| j                  j                         |j                         | j                  d       |j                  d       	  t        j                         j                  t        d            rn4t        |j                               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrb   client response
r      )r   )r4   rj   r   r   makefiler   rX   rM   r   r   signalSIGUSR1r  floatlen)r   readerr4  main_threadr&  	received2	response1r]   s     r   
run_clientz/SocketWriterTest.test_write.<locals>.run_client  s    f33V5G5G""$AAJJt$		&//0"OO-			./C   fnn="''a'9 
  .	# %$$s%   DBD /D D		DD)re   r*  r8  r   )r   r   get_attributer;  rw   r   r   r6   r  rs   rk   r  r<  	get_identrl   ro   r   rr   rW   r,  r>  r-  r/  r.  )r+   r  r5  originalrC  
backgroundr4  r@  r&  rA  rB  r]   s         @@@@@@r   
test_writezSocketWriterTest.test_write  sh    ||11&.I	@l77 	@ ''q	7;++,oo'	 ==@v~~x@		))+	/ 	/, %%Z8
s9~6O4*>?t||'A'ABDLL$>$>$DEr   N)rD   rE   rF   r$  rH  rG   r   r   r  r  {  s    E"8Fr   r  c                       e Zd Zd Zd Zd Zy)MiscTestCasec                     g }t        t              D ]F  }|j                  d      rt        t        |      }t        |dd       dk(  s6|j	                  |       H | j                  t        j                  |       y )N_rE   rw   )dirrw   
startswithgetattrr8   assertCountEqual__all__)r+   r   rd   
mod_objects       r   test_allzMiscTestCase.test_all  sc    %D??3'$\48
:|T:nLOOD)	 &
 	l22H=r   c                     G d dt         j                        } |t        dft         j                        }t	        j                  |j
                  t        j                        }|j                  |j                         |j                          |j                          | j                  |j                  d       |j                          y )Nc                       e Zd Zd ZdZd Zy)SMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServerc                      y)NFrG   r@   s      r   verify_requestzbMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServer.verify_request  s    r   r   c                 n    | xj                   dz  c_         t        j                  j                  | |       y )Nr9  )shutdown_calledrw   r   r  )r+   rA   s     r   r  zdMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServer.shutdown_request  s)    $$)$&&77gFr   N)rD   rE   rF   rX  rZ  r  rG   r   r   rH   rV    s      OGr   rH   r   r9  )rw   r   r6   r   r4   rj   r   r   rX   closer   rW   rZ  rs   )r+   rH   r]   r   s       r   4test_shutdown_request_called_if_verify_request_falsezAMiscTestCase.test_shutdown_request_called_if_verify_request_false  s    	G|-- 	G 4)\%F%FGMM&//1C1CD			&''(		//3r   c                    	  G d dt         j                  t         j                        } |t        dft         j                        }t        d      D ]:  }t        j                  |j                        5  |j                          d d d        < | j                  t        |j                        d       |j                          y # 1 sw Y   |xY w)Nc                       e Zd Zy)2MiscTestCase.test_threads_reaped.<locals>.MyServerNr   rG   r   r   rH   r_    r   r   rH   r   
   )rw   r   r   r6   r   rp   r4   r   rX   r   
assertLessr>  _threadsrs   )r+   rH   r]   r   s       r   test_threads_reapedz MiscTestCase.test_threads_reaped  s    	
	|22L4J4J 	 4)\%F%FGrA))&*?*?@%%' A@  	FOO,b1 A@s   4CC	N)rD   rE   rF   rS  r\  rc  rG   r   r   rJ  rJ    s    >*r   rJ  __main__)1
contextlibr"  r   selectr;  r4   rk   unittestrw   test.supportr   r   r   r   r   r   r   requiresrequires_working_socketr   r6   hasattrr   
skipUnlessr   has_fork_supportru   r   r   SHORT_TIMEOUTr   requires_forkcontextmanagerr#   TestCaser%   r   r   r   BaseRequestHandlerr   r   r   rx   r   r  rJ  rD   mainrG   r   r   <module>rt     s    	 	        / " & )   i    $ $D $ 1 FI. +++,=,CE ||,,&8&&|5GH  }}!\\77 8 4  4`5x(( `5F)3x(( )3X,00 (200 2|:: !:!:<O JFx(( JFZ/8$$ /d zHMMO r   