
    <eG                        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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
j0        e-          Z1er G d d e
j"        e-          Z2 G d! d"e	j)                  Z3 G d# d$e	j)                  Z4e5d%k    r e	j6                     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          t          d          rt          j        |            dS dS )z7Call signal.alarm when it exists (i.e. not on Windows).alarmN)hasattrsignalr   )ns    -/usr/lib/python3.11/test/test_socketserver.pysignal_alarmr   $   s/    vw Q     c                     t          | gg g |          \  }}}| |v r|                     |          S t          d|           )Nztimed out on )_real_selectrecvRuntimeError)sockr   timeoutrwxs         r   receiver   ,   sK    D62r733GAq!qyyyy||l6777r   c                       e Zd ZdS )ForkingUnixStreamServerN__name__
__module____qualname__ r   r   r   r   4           r   r   c                       e Zd ZdS )ForkingUnixDatagramServerNr   r#   r   r   r&   r&   8   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_subprocessr2   =   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                 @    t          d           d| _        g | _        d S )N<   r   )r   	port_seed
test_filesselfs    r   setUpzSocketServerTest.setUpO   s"    Rr   c                     t          d           t                       | j        D ]'}	 t          j        |           # t
          $ r Y $w xY wg | j        d d <   d S Nr   )r   r   r8   r*   removeOSError)r:   fns     r   tearDownzSocketServerTest.tearDownT   sq    Q/ 	 	B	"   s   =
A
	A
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mktempr8   append)r:   protorD   r@   s       r   pickaddrzSocketServerTest.pickaddr_   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                 .    |                      |            N)close_requestr:   requestclient_addresss      r   handle_errorz;SocketServerTest.make_server.<locals>.MyServer.handle_errorl   s    ""7+++r   N)r    r!   r"   rV   r#   r   r   MyServerrO   k   s#            r   rW   c                       e Zd Zd ZdS )/SocketServerTest.make_server.<locals>.MyHandlerc                 l    | j                                         }| j                            |           d S rQ   )rfilereadlinewfilewrite)r:   lines     r   handlez6SocketServerTest.make_server.<locals>.MyHandler.handleq   s1    z**,,
  &&&&&r   Nr    r!   r"   r`   r#   r   r   	MyHandlerrY   p   s#        ' ' ' ' 'r   rb   zcreating serverzCannot create server (z, z): )r   printPermissionErrorskipTestassertEqualserver_addressrE   getsockname)r:   addrsvrclshdlrbaserW   rb   serveres           r   make_serverzSocketServerTest.make_serverj   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)rn   rL   address_familyrg   r   rc   	threadingThreadserve_foreverdaemonstartrangeshutdownjoinserver_closerf   rE   filenoHAVE_FORKING
isinstancesocketserverForkingMixInassertFalseactive_children)r:   rj   rk   testfuncrl   ri   tis           r   
run_serverzSocketServerTest.run_server   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      
)rE   SOCK_STREAMconnectsendallTEST_STRr   rf   r:   rK   ri   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   )
rE   
SOCK_DGRAMHAVE_UNIX_SOCKETSr
   bindrL   sendtor   r   rf   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 rQ   )r   r   	TCPServerStreamRequestHandlerr   r9   s    r   test_TCPServerzSocketServerTest.test_TCPServer   s3    .$9+	- 	- 	- 	- 	-r   c                 f    |                      t          j        t          j        | j                   d S rQ   )r   r   ThreadingTCPServerr   r   r9   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 rQ   )r2   r   r   ForkingTCPServerr   r   r9   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 rQ   )r   r   UnixStreamServerr   r   r9   s    r   test_UnixStreamServerz&SocketServerTest.test_UnixStreamServer   s3    5$9+	- 	- 	- 	- 	-r   c                 f    |                      t          j        t          j        | j                   d S rQ   )r   r   ThreadingUnixStreamServerr   r   r9   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 rQ   )r2   r   r   r   r   r   r9   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 rQ   )r   r   	UDPServerDatagramRequestHandlerr   r9   s    r   test_UDPServerzSocketServerTest.test_UDPServer   s3    .$;*	, 	, 	, 	, 	,r   c                 f    |                      t          j        t          j        | j                   d S rQ   )r   r   ThreadingUDPServerr   r   r9   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 rQ   )r2   r   r   ForkingUDPServerr   r   r9   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 rQ   )r   r   UnixDatagramServerr   r   r9   s    r   test_UnixDatagramServerz(SocketServerTest.test_UnixDatagramServer   s3    7$;*	, 	, 	, 	, 	,r   c                 f    |                      t          j        t          j        | j                   d S rQ   )r   r   ThreadingUnixDatagramServerr   r   r9   s    r    test_ThreadingUnixDatagramServerz1SocketServerTest.test_ThreadingUnixDatagramServer   s3    @$;*	, 	, 	, 	, 	,r   c                 \    |                      t          t          j        | j                   d S rQ   )r   r&   r   r   r   r9   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   rW   r             Dr   rW   c                       e Zd ZdS )1SocketServerTest.test_shutdown.<locals>.MyHandlerNr   r#   r   r   rb   r     r   r   rb      r   zMyServer servingrp   rq   rr   T)r   r   r   r   rG   rz   r{   r|   r}   rJ   r~   r   r   r   )r:   rW   rb   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   rW   r     r   r   rW   r   c                      d S rQ   r#   r#   r   r   <lambda>z9SocketServerTest.test_close_immediately.<locals>.<lambda>  s    T r   )r   ThreadingMixInr   rG   r   )r:   rW   rl   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   rw   )r   assertRaisesOverflowErrorr   r   rG   r   )r:   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   rw   )r   r   rG   r   rf   rE   r   )r:   rl   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__r;   rA   rL   rn   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   r4   r4   L   s       ""  
	  	  	 	 	 	  * " "  " #" "D, , ,	, 	, 	,- - -
- - -
 1 1 1 - - -
 - - -
 1 1  1, , ,
, , ,
 0 0 0 , , ,
 , , ,
 , ,  ,
 "  #"2  J J J5 5 5 5 5r   r4   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 rQ   )r   unlinkTESTFNr9   s    r   rA   zErrorHandlerTest.tearDown7  s    )*****r   c                 Z    t          t                     |                     d           d S NThandled)BaseErrorTestServer
ValueErrorcheck_resultr9   s    r   test_sync_handledz"ErrorHandlerTest.test_sync_handled:  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   r9   s    r   test_sync_not_handledz&ErrorHandlerTest.test_sync_not_handled>  s    z** 	, 	,
+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,%(((((s   <A A c                 Z    t          t                     |                     d           d S r   )ThreadingErrorTestServerr   r   r9   s    r   test_threading_handledz'ErrorHandlerTest.test_threading_handledC  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)r:   cms     r   test_threading_not_handledz+ErrorHandlerTest.test_threading_not_handledG  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   r9   s    r   test_forking_handledz%ErrorHandlerTest.test_forking_handledN  s-    z***$'''''r   c                 Z    t          t                     |                     d           d S r   )r   r   r   r9   s    r   test_forking_not_handledz)ErrorHandlerTest.test_forking_not_handledS  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   rf   read)r:   r   logexpecteds       r   r   zErrorHandlerTest.check_resultX  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   rA   r   r   r   r   r   r   r   r   r#   r   r   r   r   2  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 r=   )	exceptionsuper__init__rG   
BadHandlerrE   create_connectionrg   handle_requestr   	wait_done)r:   r  	__class__s     r   r
  zBaseErrorTestServer.__init___  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   r^   )r:   rT   rU   r  s       r   rV   z BaseErrorTestServer.handle_errorj  s    )"C(( 	)CII'(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   >AAc                     d S rQ   r#   r9   s    r   r  zBaseErrorTestServer.wait_donen  s    r   )r    r!   r"   r
  rV   r  __classcell__r  s   @r   r   r   ^  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   r^   rl   r  )r:   r  s     r   r`   zBadHandler.handles  s    )"C(( 	*CII()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*k##L111s   =AANra   r#   r   r   r  r  r  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 rQ   )rz   Eventrx   r	  r
  r:   poskwr  s      r   r
  z!ThreadingErrorTestServer.__init__{  s4    O%%	#$$$$$$r   c                 l     t                      j        |i | | j                                         d S rQ   )r	  shutdown_requestrx   setr  s      r   r  z)ThreadingErrorTestServer.shutdown_request  s2      #,,,,	r   c                 8    | j                                          d S rQ   )rx   waitr9   s    r   r  z"ThreadingErrorTestServer.wait_done  s    	r   )r    r!   r"   r
  r  r  r  r  s   @r   r   r   y  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 rQ   )r]   rl   r   wfile_filenorT   request_filenor9   s    r   r`   z4SocketWriterTest.test_basics.<locals>.Handler.handle  sD    $(J!+/:+<+<+>+>(-1\-@-@-B-B***r   Nra   r#   r   r   Handlerr'    s(        C C C C Cr   r+  r   )r   r   r   rG   
addCleanupr   rE   ry   r   IPPROTO_TCPr   rg   r  assertIsInstancer]   ioBufferedIOBaserf   r)  r*  )r:   r+  rl   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
    )r]   r^   rl   sent1r[   r\   receivedr-   r.   SOCK_MAX_SIZEsent2)r:   	big_chunks     r   r`   z3SocketWriterTest.test_write.<locals>.Handler.handle  sc    $(J$4$4_$E$E!'+z':':'<'<$!DL$>>	$(J$4$4Y$?$?!!!r   Nra   r#   r   r   r+  r5    s(        @ @ @ @ @r   r+  r   c                 0                                      d S rQ   )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   )rE   ry   r   r-  makefiler   rg   r\   r   r  r   SIGUSR1r!  floatlen)r   readerrA  main_threadr3  	received2	response1rl   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')rt   r7  rE  r   )r-   r.   get_attributer   r   r   r   rG   r,  r   rz   r  rH  	get_identr{   r~   r  r   rf   r9  rJ  r:  r<  r;  )r:   r+  rB  originalrO  
backgroundrA  rL  r3  rM  rN  rl   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"   r1  rT  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   )rD   r   
startswithgetattrrJ   assertCountEqual__all__)r:   r  rs   
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#   rS   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 )NrF  )shutdown_calledr   r   r  )r:   rT   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"   rc  re  r  r#   r   r   rW   ra    s>            OG G G G Gr   rW   r   rF  )r   r   rG   r   rE   ry   r   r   rg   closer  rf   re  r   )r:   rW   rl   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   rW   rj     r   r   rW   r   
   N)r   r   r   rG   r   r   rE   r  rg   r  
assertLessrJ  _threadsr   )r:   rW   rl   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"   r^  rg  rn  r#   r   r   rV  rV    sA        > > >  *    r   rV  __main__)7r   
contextlibr/  r*   selectr   rE   rH   rz   unittestr   test.supportr-   r   r   r   r   r   r.   requiresrequires_working_socketr   rG   r   r   
skipUnlessr   has_fork_supportr   r   r   r   SHORT_TIMEOUTr   r   r   r   r   r&   contextmanagerr2   TestCaser4   r   r   r   BaseRequestHandlerr  r   r   r   r$  rV  r    mainr#   r   r   <module>r}     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c5 c5 c5 c5 c5x( c5 c5 c5L)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   