
    6\hF                        d 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
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                            d           ej                            d	           d
Zej        Z eed          Z e	j        ed          Zej        j        Z e	j        ed          Zej        Zej        j        fdZ er4er2 G d de
j!        e
j"                  Z# G d de
j!        e
j$                  Z%ej&        d             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. G d de
j/        e,          Z0er G d de
j!        e,          Z1 G d  d!e	j(                  Z2 G d" d#e	j(                  Z3e4d$k    r e	j5                     dS dS )%z
Test suite for socketserver.
    N)reap_childrenverbose)	os_helper)socket_helper)threading_helpernetworkT)modules   hello world
AF_UNIXzrequires Unix socketszrequires forkingc                     t          | gg g |          \  }}}| |v r|                     |          S t          d|           )Nztimed out on )_real_selectrecvRuntimeError)sockntimeoutrwxs         @/opt/python-3.11.14/usr/lib/python3.11/test/test_socketserver.pyreceiver   '   sK    D62r733GAq!qyyyy||l6777    c                       e Zd ZdS )ForkingUnixStreamServerN__name__
__module____qualname__ r   r   r   r   /           r   r   c                       e Zd ZdS )ForkingUnixDatagramServerNr   r   r   r   r!   r!   3   r   r   r!   c              #     K   t          j                    }|dk    rt          j        d           	 dV  n#   xY w	 t          j                            |d           dS # t          j                            |d           w xY w)zBTests that a custom child process is not waited on (Issue 1540386)r   H   N)exitcode)osfork_exittestsupportwait_process)testcasepids     r   simple_subprocessr-   8   s       '))C
axx
4



 	 	!!#!33333!!#!3333s   6 A  9A   #Bc                   p   e Zd 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dS )SocketServerTestzTest all socket servers.c                 "    d| _         g | _        d S Nr   )	port_seed
test_filesselfs    r   setUpzSocketServerTest.setUpJ   s    r   c                     t                       | j        D ]'}	 t          j        |           # t          $ r Y $w xY wg | j        d d <   d S N)r   r3   r%   removeOSError)r5   fns     r   tearDownzSocketServerTest.tearDownN   sf    / 	 	B	"   s   .
;;c                     |t           j        k    r	t          dfS d }t          j        d|          }| j                            |           |S )Nr   zunix_socket.)prefixdir)socketAF_INETHOSTtempfilemktempr3   append)r5   protor?   r;   s       r   pickaddrzSocketServerTest.pickaddrX   sO    FN""!9 CC@@@BO""2&&&Ir   c           	      T    G d d|          } G d d|          }t           rt          d           	  |||          }n5# t          $ r(}|                     d|d|d|           Y d }~nd }~ww xY w|                     |j        |j                                                   |S )	Nc                       e Zd Zd ZdS ).SocketServerTest.make_server.<locals>.MyServerc                 .    |                      |            r8   )close_requestr5   requestclient_addresss      r   handle_errorz;SocketServerTest.make_server.<locals>.MyServer.handle_errore   s    ""7+++r   N)r   r   r   rP   r   r   r   MyServerrJ   d   s#            r   rQ   c                       e Zd Zd ZdS )/SocketServerTest.make_server.<locals>.MyHandlerc                 l    | j                                         }| j                            |           d S r8   )rfilereadlinewfilewrite)r5   lines     r   handlez6SocketServerTest.make_server.<locals>.MyHandler.handlej   s1    z**,,
  &&&&&r   Nr   r   r   rZ   r   r   r   	MyHandlerrS   i   s#        ' ' ' ' 'r   r\   zcreating serverzCannot create server (z, z): )r   printPermissionErrorskipTestassertEqualserver_addressr@   getsockname)r5   addrsvrclshdlrbaserQ   r\   serveres           r   make_serverzSocketServerTest.make_serverc   s   	 	 	 	 	v 	 	 	
	' 	' 	' 	' 	' 	' 	' 	'
 ,E+,,,	-XdI..FF 	- 	- 	-MMM!66444, - - - - - - - -	- 	.0I0I0K0KLLLs   A 
A3A..A3c                 |   |                      |                     |j                  ||          }|j        }t          r t          d|           t          d|           t          j        d|z  |j        ddi          }d|_	        |
                                 t          rt          d           t          d	          D ]*}t          rt          d
|            ||j        |           +t          rt          d           |                                 |                                 |                                 |                     d|j                                                   t$          r4t'          |t(          j                  r|                     |j                   t          rt          d           d S d S )NzADDR =zCLASS =z
%s servingpoll_interval{Gz?nametargetkwargsTzserver running   ztest clientzwaiting for serverdone)rh   rG   address_familyra   r   r]   	threadingThreadserve_foreverdaemonstartrangeshutdownjoinserver_closer`   r@   filenoHAVE_FORKING
isinstancesocketserverForkingMixInassertFalseactive_children)r5   rd   re   testfuncrf   rc   tis           r   
run_serverzSocketServerTest.run_serverx   s   !!$--0E"F"F"((4 4 $ 	%(D!!!)V$$$&' $D)+ + + 				+E*+++q 	2 	2A/mQ///HV*D1111/E.///	V]1133444 	5Jv|/HII 	5 V3444!E&MMMMM!!r   c                 p   t          j         |t           j                  5 }|                    |           |                    t                     t          |d          x}}|rd|vrt          |d          }||z  }|rd|v|                     |t                     d d d            d S # 1 swxY w Y   d S Nd      
)r@   SOCK_STREAMconnectsendallTEST_STRr   r`   r5   rF   rc   sbufdatas         r   stream_examinezSocketServerTest.stream_examine   s    ]5&"455 	,IIdOOOIIh C(C$ 5++q#t  5++ S(+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   A>B++B/2B/c                    t          j         |t           j                  5 }t          r8|t           j        k    r(|                    |                     |                     |                    t          |           t          |d          x}}|rd|vrt          |d          }||z  }|rd|v| 	                    |t                     d d d            d S # 1 swxY w Y   d S r   )
r@   
SOCK_DGRAMHAVE_UNIX_SOCKETSr
   bindrG   sendtor   r   r`   r   s         r   dgram_examinezSocketServerTest.dgram_examine   s$   ]5&"344 	,  -Ufn%<%<t}}U++,,,HHXt$$$ C(C$ 5++q#t  5++ S(+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   B)CCCc                 f    |                      t          j        t          j        | j                   d S r8   )r   r   	TCPServerStreamRequestHandlerr   r4   s    r   test_TCPServerzSocketServerTest.test_TCPServer   s3    .$9+	- 	- 	- 	- 	-r   c                 f    |                      t          j        t          j        | j                   d S r8   )r   r   ThreadingTCPServerr   r   r4   s    r   test_ThreadingTCPServerz(SocketServerTest.test_ThreadingTCPServer   s3    7$9+	- 	- 	- 	- 	-r   c                     t          |           5  |                     t          j        t          j        | j                   d d d            d S # 1 swxY w Y   d S r8   )r-   r   r   ForkingTCPServerr   r   r4   s    r   test_ForkingTCPServerz&SocketServerTest.test_ForkingTCPServer   s    t$$ 	1 	1OOL9(= /1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1   1AAAc                 f    |                      t          j        t          j        | j                   d S r8   )r   r   UnixStreamServerr   r   r4   s    r   test_UnixStreamServerz&SocketServerTest.test_UnixStreamServer   s3    5$9+	- 	- 	- 	- 	-r   c                 f    |                      t          j        t          j        | j                   d S r8   )r   r   ThreadingUnixStreamServerr   r   r4   s    r   test_ThreadingUnixStreamServerz/SocketServerTest.test_ThreadingUnixStreamServer   s3    >$9+	- 	- 	- 	- 	-r   c                     t          |           5  |                     t          t          j        | j                   d d d            d S # 1 swxY w Y   d S r8   )r-   r   r   r   r   r   r4   s    r   test_ForkingUnixStreamServerz-SocketServerTest.test_ForkingUnixStreamServer   s     t$$ 	1 	1OO3(= /1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   ,A		AAc                 f    |                      t          j        t          j        | j                   d S r8   )r   r   	UDPServerDatagramRequestHandlerr   r4   s    r   test_UDPServerzSocketServerTest.test_UDPServer   s3    .$;*	, 	, 	, 	, 	,r   c                 f    |                      t          j        t          j        | j                   d S r8   )r   r   ThreadingUDPServerr   r   r4   s    r   test_ThreadingUDPServerz(SocketServerTest.test_ThreadingUDPServer   s3    7$;*	, 	, 	, 	, 	,r   c                     t          |           5  |                     t          j        t          j        | j                   d d d            d S # 1 swxY w Y   d S r8   )r-   r   r   ForkingUDPServerr   r   r4   s    r   test_ForkingUDPServerz&SocketServerTest.test_ForkingUDPServer   s    t$$ 	0 	0OOL9(? .0 0 0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0r   c                 f    |                      t          j        t          j        | j                   d S r8   )r   r   UnixDatagramServerr   r   r4   s    r   test_UnixDatagramServerz(SocketServerTest.test_UnixDatagramServer   s3    7$;*	, 	, 	, 	, 	,r   c                 f    |                      t          j        t          j        | j                   d S r8   )r   r   ThreadingUnixDatagramServerr   r   r4   s    r    test_ThreadingUnixDatagramServerz1SocketServerTest.test_ThreadingUnixDatagramServer   s3    @$;*	, 	, 	, 	, 	,r   c                 \    |                      t          t          j        | j                   d S r8   )r   r!   r   r   r   r4   s    r   test_ForkingUnixDatagramServerz/SocketServerTest.test_ForkingUnixDatagramServer   s3     	1$;*	, 	, 	, 	, 	,r   c                     G d dt           j                  } G d dt           j                  }g }t          d          D ]Q} |t          df|          }t          j        d|j        dd	i
          }d|_        |	                    ||f           R|D ]-\  }}|
                                 |                                 .|D ]-\  }}|                                 |                                 .d S )Nc                       e Zd ZdS )0SocketServerTest.test_shutdown.<locals>.MyServerNr   r   r   r   rQ   r              Dr   rQ   c                       e Zd ZdS )1SocketServerTest.test_shutdown.<locals>.MyHandlerNr   r   r   r   r\   r      r   r   r\      r   zMyServer servingrj   rk   rl   T)r   r   r   ry   rB   rt   ru   rv   rw   rE   rx   rz   r{   r|   )r5   rQ   r\   threadsr   r   r   s          r   test_shutdownzSocketServerTest.test_shutdown   sB   	 	 	 	 	|- 	 	 		 	 	 	 	9 	 	 	 r 	# 	#A$I..A ''-/ / /A AHNNAq6"""" 	 	DAqGGIIIJJLLLL 	 	DAqFFHHHNN	 	r   c                      G d dt           j        t           j                  } |t          dfd           }|                                 d S )Nc                       e Zd ZdS )9SocketServerTest.test_close_immediately.<locals>.MyServerNr   r   r   r   rQ   r     r   r   rQ   r   c                      d S r8   r   r   r   r   <lambda>z9SocketServerTest.test_close_immediately.<locals>.<lambda>  s    T r   )r   ThreadingMixInr   rB   r|   )r5   rQ   rf   s      r   test_close_immediatelyz'SocketServerTest.test_close_immediately  se    	 	 	 	 	|2L4J 	 	 	 4)\\22r   c                     t          d          D ]Z}|                     t                    5  t          j        t
          dft          j                   d d d            n# 1 swxY w Y   [d S )Ni   rq   )ry   assertRaisesOverflowErrorr   r   rB   r   )r5   r   s     r   test_tcpserver_bind_leakz)SocketServerTest.test_tcpserver_bind_leak  s    
 t 	J 	JA""=11 J J&bz'3'HJ J JJ J J J J J J J J J J J J J J	J 	Js   'AA#	&A#	c                     t          j        t          dft           j                  5 }	 d d d            n# 1 swxY w Y   |                     d|j                                                   d S )Nr   rq   )r   r   rB   r   r`   r@   r}   )r5   rf   s     r   test_context_managerz%SocketServerTest.test_context_manager$  s    #T1I$0$EG G 	JP	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	V]113344444s   599N)r   r   r   __doc__r6   r<   rG   rh   r   reap_threadsr   r   r   r   r   requires_forkingr   requires_unix_socketsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   G   s       ""       	 	 	  * " "  " #" "D, , ,	, 	, 	,- - -
- - -
 1 1 1 - - -
 - - -
 1 1  1, , ,
, , ,
 0 0 0 , , ,
 , , ,
 , ,  ,
 "  #"2  J J J5 5 5 5 5r   r/   c                   b    e Zd ZdZd Zd Zd Zd Zd Ze	d             Z
e	d             Zd	 Zd
S )ErrorHandlerTestzTest that the servers pass normal exceptions from the handler to
    handle_error(), and that exiting exceptions like SystemExit and
    KeyboardInterrupt are not passed.c                 B    t          j        t           j                   d S r8   )r   unlinkTESTFNr4   s    r   r<   zErrorHandlerTest.tearDown0  s    )*****r   c                 Z    t          t                     |                     d           d S NThandled)BaseErrorTestServer
ValueErrorcheck_resultr4   s    r   test_sync_handledz"ErrorHandlerTest.test_sync_handled3  s-    J'''$'''''r   c                     |                      t                    5  t          t                     d d d            n# 1 swxY w Y   |                     d           d S NFr   )r   
SystemExitr   r   r4   s    r   test_sync_not_handledz&ErrorHandlerTest.test_sync_not_handled7  s    z** 	, 	,
+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,%(((((s   <A A c                 Z    t          t                     |                     d           d S r   )ThreadingErrorTestServerr   r   r4   s    r   test_threading_handledz'ErrorHandlerTest.test_threading_handled<  s-     ,,,$'''''r   c                     t          j                    5 }t          t                     |                     d           |                     |j        t                     d d d            d S # 1 swxY w Y   d S r   )r   catch_threading_exceptionr   r   r   assertIsexc_type)r5   cms     r   test_threading_not_handledz+ErrorHandlerTest.test_threading_not_handled@  s    799 	3R$Z000e,,,MM"+z222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   AA,,A03A0c                 Z    t          t                     |                     d           d S r   )ForkingErrorTestServerr   r   r4   s    r   test_forking_handledz%ErrorHandlerTest.test_forking_handledG  s-    z***$'''''r   c                 Z    t          t                     |                     d           d S r   )r   r   r   r4   s    r   test_forking_not_handledz)ErrorHandlerTest.test_forking_not_handledL  s-    z***%(((((r   c                     t          t          j                  5 }dd|z  z   }|                     |                                |           d d d            d S # 1 swxY w Y   d S )NHandler called
Error handled
)openr   r   r`   read)r5   r   logexpecteds       r   r   zErrorHandlerTest.check_resultQ  s    )"## 	3s),=,GGHSXXZZ222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   1AAAN)r   r   r   r   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   +  s        ) )+ + +( ( () ) )
( ( (3 3 3 ( ( ( ) ) )3 3 3 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            n# 1 swxY w Y   	 |                                  | 	                                 n# | 	                                 w xY w| 
                                 d S r1   )	exceptionsuper__init__rB   
BadHandlerr@   create_connectionra   handle_requestr|   	wait_done)r5   r  	__class__s     r   r  zBaseErrorTestServer.__init__X  s    "$J///%d&9:: 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 		 !!!Ds   AA"%A"*B B)c                     t          t          j        d          5 }|                    d           d d d            d S # 1 swxY w Y   d S )Nar   )r   r   r   rX   )r5   rN   rO   r   s       r   rP   z BaseErrorTestServer.handle_errorc  s    )"C(( 	)CII'(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   >AAc                     d S r8   r   r4   s    r   r  zBaseErrorTestServer.wait_doneg  s    r   )r   r   r   r  rP   r  __classcell__r	  s   @r   r   r   W  sV        	 	 	 	 	) ) )      r   r   c                       e Zd Zd ZdS )r  c                     t          t          j        d          5 }|                    d           d d d            n# 1 swxY w Y   | j                            d          )Nr  r   z
Test error)r   r   r   rX   rf   r  )r5   r   s     r   rZ   zBadHandler.handlel  s    )"C(( 	*CII()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*k##L111s   =AANr[   r   r   r   r  r  k  s#        2 2 2 2 2r   r  c                   .     e Zd Z fdZ fdZd Z xZS )r   c                 j    t          j                    | _         t                      j        |i | d S r8   )rt   Eventrr   r  r  r5   poskwr	  s      r   r  z!ThreadingErrorTestServer.__init__t  s4    O%%	#$$$$$$r   c                 l     t                      j        |i | | j                                         d S r8   )r  shutdown_requestrr   setr  s      r   r  z)ThreadingErrorTestServer.shutdown_requestx  s2      #,,,,	r   c                 8    | j                                          d S r8   )rr   waitr4   s    r   r  z"ThreadingErrorTestServer.wait_done|  s    	r   )r   r   r   r  r  r  r  r  s   @r   r   r   r  s`        % % % % %          r   r   c                       e Zd ZdS )r   Nr   r   r   r   r   r     s        r   r   c                       e Zd Zd Zd ZdS )SocketWriterTestc                     G d dt           j                  }t          j        t          df|          }|                     |j                   t          j        |j        t          j        t          j	                  }|5  |
                    |j                   d d d            n# 1 swxY w Y   |                                 |                     |j        t          j                   |                     |j        |j                   d S )Nc                       e Zd Zd ZdS )-SocketWriterTest.test_basics.<locals>.Handlerc                     | j         | j        _         | j                                         | j        _        | j                                        | j        _        d S r8   )rW   rf   r}   wfile_filenorN   request_filenor4   s    r   rZ   z4SocketWriterTest.test_basics.<locals>.Handler.handle  sD    $(J!+/:+<+<+>+>(-1\-@-@-B-B***r   Nr[   r   r   r   Handlerr!    s(        C C C C Cr   r%  r   )r   r   r   rB   
addCleanupr|   r@   rs   r   IPPROTO_TCPr   ra   r  assertIsInstancerW   ioBufferedIOBaser`   r#  r$  )r5   r%  rf   r   s       r   test_basicszSocketWriterTest.test_basics  sF   	C 	C 	C 	C 	Cl7 	C 	C 	C 'q	7;;+,,,M!6#5v7IK K 	- 	-IIf+,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-flB,=>>>,f.CDDDDDs    B''B+.B+c                   	
 t           j                            t          d           G d dt          j                  }t	          j        t          df|          |                     j	                   t          j                    fd}t          j        t          j        |          }|                     t          j        t          j        |           d 
d 	t          j                    	
fd}t          j        |          }|                                                                  |                                 |                     j        t)          
                     |                     
d           |                     j        d	           |                     j        t           j        j                   |                     	t           j        j        d
z
             d S )Npthread_killc                       e Zd Zd ZdS ),SocketWriterTest.test_write.<locals>.Handlerc                    | j                             d          | j        _        | j                                        | j        _        dt          j        j	        z  }| j                             |          | j        _
        d S )N   write data
    )rW   rX   rf   sent1rU   rV   receivedr(   r)   SOCK_MAX_SIZEsent2)r5   	big_chunks     r   rZ   z3SocketWriterTest.test_write.<locals>.Handler.handle  sc    $(J$4$4_$E$E!'+z':':'<'<$!DL$>>	$(J$4$4Y$?$?!!!r   Nr[   r   r   r   r%  r/    s(        @ @ @ @ @r   r%  r   c                 0                                      d S r8   )r  )signumframeinterrupteds     r   signal_handlerz3SocketWriterTest.test_write.<locals>.signal_handler  s    OOr   c                  `   t          j         j        t           j        t           j                  } | 5  |                     d          5 }|                     j                   |                                |                     d           |	                    d           	  t          j                                       t          d                    rn;t          |	                                          d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nrb   client response
r   T   )r   )r@   rs   r   r'  makefiler   ra   rV   r   r   signalSIGUSR1r  floatlen)r   readerr;  main_threadr-  	received2	response1rf   s     r   
run_clientz/SocketWriterTest.test_write.<locals>.run_client  s   f3V5G"$ $A / /AJJt$$ /		&/000"OO--			.///C    Lfn==="''a'99 
  ..	#/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /s6   D#	B6D?D#D	D#D	D##D'*D')rn   r1  r?  r   )r(   r)   get_attributerB  r   r   r   rB   r&  r|   rt   r  rC  	get_identru   rx   r  r{   r`   r3  rE  r4  r6  r5  )r5   r%  r<  originalrJ  
backgroundr;  rG  r-  rH  rI  rf   s         @@@@@@r   
test_writezSocketWriterTest.test_write  s    |11&.II	@ 	@ 	@ 	@ 	@l7 	@ 	@ 	@ 'q	7;;+,,,o''	 	 	 	 	 =@@v~x@@@		)++	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/, %Z888
s9~~666O444*>???t|'ABBBDL$>$DEEEEEr   N)r   r   r   r+  rO  r   r   r   r  r    s:        E E E"8F 8F 8F 8F 8Fr   r  c                        e Zd Zd Zd Zd ZdS )MiscTestCasec                     g }t          t                    D ]V}|                    d          s?t          t          |          }t          |dd           dk    r|                    |           W|                     t          j        |           d S )N_r   r   )r?   r   
startswithgetattrrE   assertCountEqual__all__)r5   r   rm   
mod_objects       r   test_allzMiscTestCase.test_all  s    %% 	* 	*D??3'' *$\488
:|T::nLLOOD)))l2H=====r   c                     G d dt           j                  } |t          dft           j                  }t	          j        |j        t          j                  }|                    |j                   |	                                 |
                                 |                     |j        d           |                                 d S )Nc                       e Zd Zd ZdZd ZdS )SMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServerc                     dS )NFr   rM   s      r   verify_requestzbMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServer.verify_request  s    ur   r   c                 f    | xj         dz  c_         t          j                            | |           d S )Nr@  )shutdown_calledr   r   r  )r5   rN   s     r   r  zdMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServer.shutdown_request  s5    $$)$$&77gFFFFFr   N)r   r   r   r^  r`  r  r   r   r   rQ   r\    s>            OG G G G Gr   rQ   r   r@  )r   r   rB   r   r@   rs   r   r   ra   closer  r`   r`  r|   )r5   rQ   rf   r   s       r   4test_shutdown_request_called_if_verify_request_falsezAMiscTestCase.test_shutdown_request_called_if_verify_request_false  s    	G 	G 	G 	G 	G|- 	G 	G 	G 4)\%FGGM&/1CDD			&'(((				/333r   c                     G d dt           j        t           j                  } |t          dft           j                  }t          d          D ]G}t          j        |j                  5  |	                                 ddd           n# 1 swxY w Y   H| 
                    t          |j                  d           |                                 dS )z
        In #37193, users reported a memory leak
        due to the saving of every request thread. Ensure that
        not all threads are kept forever.
        c                       e Zd ZdS )2MiscTestCase.test_threads_reaped.<locals>.MyServerNr   r   r   r   rQ   re    r   r   rQ   r   
   N)r   r   r   rB   r   ry   r@   r  ra   r  
assertLessrE  _threadsr|   )r5   rQ   rf   r   s       r   test_threads_reapedz MiscTestCase.test_threads_reaped  s   	 	 	 	 	|2L4J 	 	 	 4)\%FGGr 	( 	(A)&*?@@ ( (%%'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (FO,,b111s   +BB	B	N)r   r   r   rY  rb  ri  r   r   r   rQ  rQ    sA        > > >  *    r   rQ  __main__)6r   
contextlibr)  r%   selectrB  r@   rC   rt   unittestr   test.supportr(   r   r   r   r   r   r)   requiresrequires_working_socketr   rB   hasattrr   
skipUnlessr   has_fork_supportr~   r   r   SHORT_TIMEOUTr   r   r   r   r   r!   contextmanagerr-   TestCaser/   r   r   r   BaseRequestHandlerr  r   r   r   r  rQ  r   mainr   r   r   <module>ry     s        				 				                  / / / / / / / / " " " " " " & & & & & & ) ) ) ) ) )   i        $ $D $ 1 1 1 GFI.. ++,=,CE E |,&8&|5GHH  }!\7 8 8 8 8       ,";"."?      L$=$0$C  
 4 4 4a5 a5 a5 a5 a5x( a5 a5 a5H)3 )3 )3 )3 )3x( )3 )3 )3X    ,0   (2 2 2 2 20 2 2 2    |:        !:<O   JF JF JF JF JFx( JF JF JFZ/ / / / /8$ / / /d zHMOOOOO r   