a 5êdgÀFã@sÎddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z m Z mZddl mZe j d¡dZejZeedƒZe ed¡ZeedƒZe ed ¡Zd d „ZejZe jjfd d „ZererGdd„de je jƒZ Gdd„de je j!ƒZ"ej#dd„ƒZ$Gdd„dej%ƒZ&Gdd„dej%ƒZ'Gdd„de j(ƒZ)Gdd„de j*ƒZ+Gdd„de j,e)ƒZ-er”Gdd„de je)ƒZ.Gd d!„d!ej%ƒZ/Gd"d#„d#ej%ƒZ0e1d$krÊe 2¡dS)%éN)Ú reap_childrenÚ reap_threadsÚverbose)Ú socket_helperZnetworks hello world ÚAF_UNIXzrequires Unix socketsÚforkzrequires forkingcCsttdƒrt |¡dS)NÚalarm)ÚhasattrÚsignalr)Ún©r ú2/usr/local/lib/python3.9/test/test_socketserver.pyÚ signal_alarm s rcCs:t|ggg|ƒ\}}}||vr(| |¡Std|fƒ‚dS)Nztimed out on %r)Ú _real_selectÚrecvÚ RuntimeError)Úsockr ÚtimeoutÚrÚwÚxr r r Úreceive(s rc@s eZdZdS)ÚForkingUnixStreamServerN©Ú__name__Ú __module__Ú __qualname__r r r r r0src@s eZdZdS)ÚForkingUnixDatagramServerNrr r r r r4src cs`t ¡}|dkrt d¡z.z dVWn‚Yn0Wtjj|ddntjj|dd0dS)NréH)Úexitcode)ÚosrÚ_exitÚtestÚsupportZ wait_process)ZtestcaseÚpidr r r Úsimple_subprocess9s   r%c@sôeZdZdd„Zdd„Zdd„Zdd„Zed d „ƒZd d „Z d d„Z dd„Z dd„Z e dd„ƒZedd„ƒZedd„ƒZee dd„ƒƒZdd„Zdd„Ze dd „ƒZed!d"„ƒZed#d$„ƒZee d%d&„ƒƒZed'd(„ƒZd)d*„Zd+d,„Zd-d.„Zd/S)0ÚSocketServerTestcCstdƒd|_g|_dS)Né<r)rZ port_seedÚ test_files©Úselfr r r ÚsetUpKszSocketServerTest.setUpc CsNtdƒtƒ|jD]&}zt |¡Wqty8Yq0qg|jdd…<dS©Nr)rrr(r ÚremoveÚOSError)r*Úfnr r r ÚtearDownPs  zSocketServerTest.tearDowncCs8|tjkrtdfSd}tjd|d}|j |¡|SdS)Nrz unix_socket.)ÚprefixÚdir)ÚsocketÚAF_INETÚHOSTÚtempfileÚmktempr(Úappend)r*Úprotor2r/r r r Úpickaddr[s   zSocketServerTest.pickaddrc CsŒGdd„d|ƒ}Gdd„d|ƒ}tr,tdƒz|||ƒ}Wn8tyr}z | d|||f¡WYd}~n d}~00| |j|j ¡¡|S)Nc@seZdZdd„ZdS)z.SocketServerTest.make_server..MyServercSs| |¡‚dS©N)Z close_request©r*ÚrequestÚclient_addressr r r Ú handle_errorhs z;SocketServerTest.make_server..MyServer.handle_errorN)rrrr?r r r r ÚMyServergsr@c@seZdZdd„ZdS)z/SocketServerTest.make_server..MyHandlercSs|j ¡}|j |¡dSr;)ÚrfileÚreadlineÚwfileÚwrite)r*Úliner r r Úhandlems z6SocketServerTest.make_server..MyHandler.handleN©rrrrFr r r r Ú MyHandlerlsrHzcreating serverz!Cannot create server (%s, %s): %s)rÚprintÚPermissionErrorZskipTestÚ assertEqualÚserver_addressr3Ú getsockname)r*ÚaddrÚsvrclsÚhdlrbaser@rHÚserverÚer r r Ú make_serverfs ÿzSocketServerTest.make_servercCsò| | |j¡||¡}|j}tr4td|ƒtd|ƒtjd||jddid}d|_ |  ¡trhtdƒt d ƒD]}tr‚td |ƒ||j|ƒqptrœtd ƒ|  ¡|  ¡| ¡| d |j ¡¡trât|tjƒrâ| |j¡trîtd ƒdS)NzADDR =zCLASS =z %s servingÚ poll_intervalç{®Gáz„?©ÚnameÚtargetÚkwargsTzserver runningéz test clientzwaiting for serveréÿÿÿÿÚdone)rSr:Úaddress_familyrLrrIÚ threadingÚThreadÚ serve_foreverÚdaemonÚstartÚrangeÚshutdownÚjoinÚ server_closerKr3ÚfilenoÚ HAVE_FORKINGÚ isinstanceÚ socketserverÚ ForkingMixInZ assertFalseÚactive_children)r*rOrPZtestfuncrQrNÚtÚir r r Ú run_server{s4ÿ  ú    zSocketServerTest.run_servercCs€t |tj¡^}| |¡| t¡t|dƒ}}|rRd|vrRt|dƒ}||7}q2| |t¡Wdƒn1sr0YdS©Nédó )r3Ú SOCK_STREAMÚconnectÚsendallÚTEST_STRrrK©r*r9rNÚsÚbufÚdatar r r Ústream_examinežs     zSocketServerTest.stream_examinecCs–t |tj¡t}tr.|tjkr.| | |¡¡| t|¡t|dƒ}}|rhd|vrht|dƒ}||7}qH|  |t¡Wdƒn1sˆ0YdSrp) r3Ú SOCK_DGRAMÚHAVE_UNIX_SOCKETSrÚbindr:ÚsendtorvrrKrwr r r Ú dgram_examine¨s    zSocketServerTest.dgram_examinecCs| tjtj|j¡dSr;)rorjÚ TCPServerÚStreamRequestHandlerr{r)r r r Útest_TCPServer³sþzSocketServerTest.test_TCPServercCs| tjtj|j¡dSr;)rorjZThreadingTCPServerr‚r{r)r r r Útest_ThreadingTCPServer¸sþz(SocketServerTest.test_ThreadingTCPServercCs@t|ƒ$| tjtj|j¡Wdƒn1s20YdSr;)r%rorjZForkingTCPServerr‚r{r)r r r Útest_ForkingTCPServer½s  þz&SocketServerTest.test_ForkingTCPServercCs| tjtj|j¡dSr;)rorjÚUnixStreamServerr‚r{r)r r r Útest_UnixStreamServerÄsþz&SocketServerTest.test_UnixStreamServercCs| tjtj|j¡dSr;)rorjZThreadingUnixStreamServerr‚r{r)r r r Útest_ThreadingUnixStreamServerÊsþz/SocketServerTest.test_ThreadingUnixStreamServercCs>t|ƒ"| ttj|j¡Wdƒn1s00YdSr;)r%rorrjr‚r{r)r r r Útest_ForkingUnixStreamServerÐs  þz-SocketServerTest.test_ForkingUnixStreamServercCs| tjtj|j¡dSr;)rorjZ UDPServerÚDatagramRequestHandlerr€r)r r r Útest_UDPServerØsþzSocketServerTest.test_UDPServercCs| tjtj|j¡dSr;)rorjZThreadingUDPServerrŠr€r)r r r Útest_ThreadingUDPServerÝsþz(SocketServerTest.test_ThreadingUDPServercCs@t|ƒ$| tjtj|j¡Wdƒn1s20YdSr;)r%rorjZForkingUDPServerrŠr€r)r r r Útest_ForkingUDPServerâs  þz&SocketServerTest.test_ForkingUDPServercCs| tjtj|j¡dSr;)rorjÚUnixDatagramServerrŠr€r)r r r Útest_UnixDatagramServerésþz(SocketServerTest.test_UnixDatagramServercCs| tjtj|j¡dSr;)rorjZThreadingUnixDatagramServerrŠr€r)r r r Ú test_ThreadingUnixDatagramServerïsþz1SocketServerTest.test_ThreadingUnixDatagramServercCs| ttj|j¡dSr;)rorrjrŠr€r)r r r Útest_ForkingUnixDatagramServerõsþz/SocketServerTest.test_ForkingUnixDatagramServercCs®Gdd„dtjƒ}Gdd„dtjƒ}g}tdƒD]<}|tdf|ƒ}tjd|jdd id }d |_|  ||f¡q0|D]\}}|  ¡|  ¡qr|D]\}}|  ¡|  ¡qdS) Nc@s eZdZdS)z0SocketServerTest.test_shutdown..MyServerNrr r r r r@sr@c@s eZdZdS)z1SocketServerTest.test_shutdown..MyHandlerNrr r r r rHsrHérzMyServer servingrTrUrVT)rjrr‚rcr5r^r_r`rar8rbrdrerf)r*r@rHÚthreadsrnrxrmr r r Ú test_shutdownüs$ ý   zSocketServerTest.test_shutdowncCs4Gdd„dtjtjƒ}|tdfdd„ƒ}| ¡dS)Nc@s eZdZdS)z9SocketServerTest.test_close_immediately..MyServerNrr r r r r@sr@rcSsdSr;r r r r r Úóz9SocketServerTest.test_close_immediately..)rjÚThreadingMixInrr5rf)r*r@rQr r r Útest_close_immediatelysz'SocketServerTest.test_close_immediatelyc CsNtdƒD]@}| t¡"t tdftj¡Wdƒq1s>0YqdS)Nir[)rcÚ assertRaisesÚ OverflowErrorrjrr5r‚)r*rnr r r Útest_tcpserver_bind_leaks    ÿz)SocketServerTest.test_tcpserver_bind_leakcCsHt tdftj¡}Wdƒn1s(0Y| d|j ¡¡dS)Nrr[)rjrr5r‚rKr3rg)r*rQr r r Útest_context_manager's  ÿz%SocketServerTest.test_context_managerN)rrrr+r0r:rSrror{r€rƒr„Úrequires_forkingr…Úrequires_unix_socketsr‡rˆr‰r‹rŒrrrr‘r”r˜r›rœr r r r r&HsF   "            r&c@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zed d „ƒZ ed d„ƒZ dd„Z dS)ÚErrorHandlerTestcCstj tjj¡dSr;)r"r#ÚunlinkÚTESTFNr)r r r r03szErrorHandlerTest.tearDowncCsttƒ|jdddS©NT©Úhandled)ÚBaseErrorTestServerÚ ValueErrorÚ check_resultr)r r r Útest_sync_handled6sz"ErrorHandlerTest.test_sync_handledcCsB| t¡ttƒWdƒn1s(0Y|jdddS©NFr£)r™Ú SystemExitr¥r§r)r r r Útest_sync_not_handled:s &z&ErrorHandlerTest.test_sync_not_handledcCsttƒ|jdddSr¢)ÚThreadingErrorTestServerr¦r§r)r r r Útest_threading_handled?sz'ErrorHandlerTest.test_threading_handledcCsttƒ|jdddSr©)r¬rªr§r)r r r Útest_threading_not_handledCsz+ErrorHandlerTest.test_threading_not_handledcCsttƒ|jdddSr¢)ÚForkingErrorTestServerr¦r§r)r r r Útest_forking_handledGsz%ErrorHandlerTest.test_forking_handledcCsttƒ|jdddSr©)r¯rªr§r)r r r Útest_forking_not_handledLsz)ErrorHandlerTest.test_forking_not_handledcCsLttjjƒ,}dd|}| | ¡|¡Wdƒn1s>0YdS)NúHandler called úError handled )Úopenr"r#r¡rKÚread)r*r¤ÚlogÚexpectedr r r r§Qs zErrorHandlerTest.check_resultN) rrrr0r¨r«r­r®rr°r±r§r r r r rŸ.s  rŸcs,eZdZ‡fdd„Zdd„Zdd„Z‡ZS)r¥csp||_tƒ tdft¡t |j¡Wdƒn1s:0Yz| ¡W|  ¡n |  ¡0|  ¡dSr,) Ú exceptionÚsuperÚ__init__r5Ú BadHandlerr3Úcreate_connectionrLÚhandle_requestrfÚ wait_done)r*r¸©Ú __class__r r rºXs zBaseErrorTestServer.__init__cCs<ttjjdƒ}| d¡Wdƒn1s.0YdS)NÚar³)r´r"r#r¡rD)r*r=r>r¶r r r r?csz BaseErrorTestServer.handle_errorcCsdSr;r r)r r r r¾gszBaseErrorTestServer.wait_done)rrrrºr?r¾Ú __classcell__r r r¿r r¥Ws r¥c@seZdZdd„ZdS)r»cCsHttjjdƒ}| d¡Wdƒn1s.0Y|j d¡‚dS)NrÁr²z Test error)r´r"r#r¡rDrQr¸)r*r¶r r r rFls(zBadHandler.handleNrGr r r r r»ksr»cs0eZdZ‡fdd„Z‡fdd„Zdd„Z‡ZS)r¬cs t ¡|_tƒj|i|¤ŽdSr;)r^ÚEventr\r¹rº©r*ÚposÚkwr¿r r rºts z!ThreadingErrorTestServer.__init__cs tƒj|i|¤Ž|j ¡dSr;)r¹Úshutdown_requestr\ÚsetrÄr¿r r rÇxsz)ThreadingErrorTestServer.shutdown_requestcCs|j ¡dSr;)r\Úwaitr)r r r r¾|sz"ThreadingErrorTestServer.wait_done)rrrrºrÇr¾rÂr r r¿r r¬rs  r¬c@s eZdZdS)r¯Nrr r r r r¯sr¯c@seZdZdd„Zdd„ZdS)ÚSocketWriterTestcCsžGdd„dtjƒ}t tdf|¡}| |j¡t |jtjtj ¡}||  |j ¡Wdƒn1sh0Y|  ¡|  |jtj¡| |j|j¡dS)Nc@seZdZdd„ZdS)z-SocketWriterTest.test_basics..HandlercSs*|j|j_|j ¡|j_|j ¡|j_dSr;)rCrQrgÚ wfile_filenor=Úrequest_filenor)r r r rFˆs z4SocketWriterTest.test_basics..Handler.handleNrGr r r r ÚHandler‡srÍr)rjr‚rr5Ú addCleanuprfr3r]rsÚ IPPROTO_TCPrtrLr½ZassertIsInstancerCÚioÚBufferedIOBaserKrËrÌ)r*rÍrQrxr r r Ú test_basics†s  ÿ*zSocketWriterTest.test_basicscstj td¡‰Gdd„dtjƒ}t tdf|¡‰| ˆj ¡t   ¡‰‡fdd„}t tj |¡}| tjtj |¡d‰d‰t   ¡‰‡‡‡‡‡‡fdd„}t j|d }| ¡ˆ ¡| ¡| ˆjtˆƒ¡| ˆd ¡| ˆjd ¡| ˆjtjj¡| ˆtjjd ¡dS) NÚ pthread_killc@seZdZdd„ZdS)z,SocketWriterTest.test_write..HandlercSs>|j d¡|j_|j ¡|j_dtjj }|j |¡|j_ dS)Nó write data ó) rCrDrQÚsent1rArBÚreceivedr"r#Ú SOCK_MAX_SIZEÚsent2)r*Z big_chunkr r r rFs z3SocketWriterTest.test_write..Handler.handleNrGr r r r rÍœsrÍrcs ˆ ¡dSr;)rÈ)ÚsignumÚframe)Ú interruptedr r Úsignal_handler¨sz3SocketWriterTest.test_write..signal_handlerc sºt ˆjtjtj¡}|Ž| d¡d}| ˆj¡| ¡‰| d¡|  d¡ˆˆt j ƒˆj t dƒdrNqnqNt|  ¡ƒ‰Wdƒn1sŽ0YWdƒn1s¬0YdS)NÚrbóclient response rqé)r)r3r]rsrÏÚmakefilertrLrBrurµr ÚSIGUSR1rÉÚfloatÚlen)rxÚreader©rÜÚ main_threadrÓZ received2Z response1rQr r Ú run_client±s ÿ    z/SocketWriterTest.test_write..run_client)rXrÔrßrq)r"r#Z get_attributer rjr‚rr5rÎrfr^rÃrâÚ get_identr_rbr½rerKrÖrär×rÙrØ)r*rÍrÝZoriginalrèZ backgroundr rær Ú test_write—s*    zSocketWriterTest.test_writeN)rrrrÒrêr r r r rÊ…srÊc@s$eZdZdd„Zdd„Zdd„ZdS)Ú MiscTestCasecCsRg}ttƒD]2}| d¡s tt|ƒ}t|ddƒdkr | |¡q | tj|¡dS)NÚ_rrj)r2rjÚ startswithÚgetattrr8ZassertCountEqualÚ__all__)r*r·rWZ mod_objectr r r Útest_allÔs    zMiscTestCase.test_allcCshGdd„dtjƒ}|tdftjƒ}t |jtj¡}| |j¡|  ¡|  ¡|  |j d¡|  ¡dS)Nc@s eZdZdd„ZdZdd„ZdS)zSMiscTestCase.test_shutdown_request_called_if_verify_request_false..MyServercSsdS)NFr r<r r r Úverify_requestãszbMiscTestCase.test_shutdown_request_called_if_verify_request_false..MyServer.verify_requestrcSs |jd7_tj ||¡dS)Nrà)Úshutdown_calledrjrrÇ)r*r=r r r rÇçszdMiscTestCase.test_shutdown_request_called_if_verify_request_false..MyServer.shutdown_requestN)rrrrñròrÇr r r r r@âsr@rrà)rjrr5r‚r3r]rsrtrLÚcloser½rKròrf)r*r@rQrxr r r Ú4test_shutdown_request_called_if_verify_request_falseÞs  zAMiscTestCase.test_shutdown_request_called_if_verify_request_falsec Cs†Gdd„dtjtjƒ}|tdftjƒ}tdƒD]8}t |j¡|  ¡Wdƒq.1s\0Yq.|  t |j ƒd¡|  ¡dS)Nc@s eZdZdS)z2MiscTestCase.test_threads_reaped..MyServerNrr r r r r@ùsr@ré )rjr—rr5r‚rcr3r¼rLr½Z assertLessräZ_threadsrf)r*r@rQr r r r Útest_threads_reapedós (z MiscTestCase.test_threads_reapedN)rrrrðrôrör r r r rëÒs rëÚ__main__)3Ú contextlibrÐr Úselectr r3r6r^ZunittestrjZ test.supportr"rrrrr#Zrequiresrvr5r r}Z skipUnlessržrhrrrZ SHORT_TIMEOUTrrkr†rrŽrÚcontextmanagerr%ZTestCaser&rŸrr¥ZBaseRequestHandlerr»r—r¬r¯rÊrërÚmainr r r r Ús^   ÿ   ÿÿ g)ÿM2