a 8êdg`hã@s´ddlZddlZddlZddlZddlZddlmZddlZddlmZddlmZddl m Z ddl m Z ejdkr‚ddlmZejd d gZejd d  d ¡gZd d„ZGdd„dejƒZGdd„de jƒZGdd„dƒZejdkr|Gdd„deƒZGdd„dee jƒZe d¡Gdd„dee jƒƒZGdd„dee jƒZGdd„dee jƒZd d!„Z e !e ƒd"¡Gd#d$„d$ee jƒƒZ"nGd%d&„d&ee jƒZ#Gd'd(„d(ƒZ$e%d)kr°e &¡dS)*éN)Úmock)Úbase_subprocess)Ú subprocess)Úutils)ÚsupportÚwin32)Ú unix_eventsú-czimport time; time.sleep(3600)ú;)ú import syszdata = sys.stdin.buffer.read()zsys.stdout.buffer.write(data)cCst d¡dS©N)ÚasyncioZset_event_loop_policy©rrú=/usr/local/lib/python3.9/test/test_asyncio/test_subprocess.pyÚtearDownModulesrc@seZdZdd„ZdS)ÚTestSubprocessTransportcOs.t ¡|_d|j_d|j_d|j_d|j_dS)Néÿÿÿÿ)rÚMockÚ_procÚstdinÚstdoutÚstderrÚpid)ÚselfÚargsÚkwargsrrrÚ_start!s  zTestSubprocessTransport._startN)Ú__name__Ú __module__Ú __qualname__rrrrrr srcs6eZdZ‡fdd„Zd dd„Zdd„Zdd „Z‡ZS) ÚSubprocessTransportTestscs$tƒ ¡| ¡|_| |j¡dSr )ÚsuperÚsetUpZ new_test_loopÚloopÚset_event_loop©r©Ú __class__rrr"*s  zSubprocessTransportTests.setUpNc Cs>t ¡}d|j_d|j_t|j|dgddddd|d }||fS)NFÚtestr)Úwaiter)rrÚconnection_madeZ _is_coroutineÚprocess_exitedrr#)rr)ÚprotocolÚ transportrrrÚcreate_transport/s  þz)SubprocessTransportTests.create_transportcCsè|j ¡}| |¡\}}| d¡|j |¡| | ¡d¡| |jj ¡| |j j ¡| |j j ¡| |j j dd¡|  | ¡¡| |j¡| |j¡| |j¡| t|jtj¡| t|j¡| t|j¡| ¡dS)Nérr )r#Ú create_futurer.Ú_process_exitedÚrun_until_completeÚ assertEqualÚget_returncodeÚ assertTruer*Úcalledr+Zconnection_lostZ call_argsÚ assertFalseZ is_closingÚ assertIsNoneZ_looprZ _protocolÚ assertRaisesÚProcessLookupErrorÚ send_signalÚsignalÚSIGTERMÚ terminateÚkillÚclose©rr)r-r,rrrÚtest_proc_exited8s&      ÿz)SubprocessTransportTests.test_proc_exitedcCs||j ¡}| |¡\}}| d¡|j |¡| t|ƒd¡d|_| t|ƒd¡d|_d|_| t|ƒd¡|  ¡dS)Nr/z-z(z%) r#r0r.r1r2r3ÚreprZ _returncodeÚ_pidr@rArrrÚtest_subprocess_reprRs(   þþþz-SubprocessTransportTests.test_subprocess_repr)N)rrrr"r.rBrEÚ __classcell__rrr&rr )s  r c@seZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Ze   e j d kd¡dd„ƒZ dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Z d7d8„Z!d9d:„Z"d;d<„Z#d=d>„Z$d?S)@ÚSubprocessMixincsPt‰‡fdd„}|dƒ}t |d¡}|j |¡\}}| |d¡| |d¡dS)Nc“shtjˆtjtjdœŽIdH}|j |¡|j ¡IdH|j ¡|j  ¡IdH}|  ¡IdH}||fS©N)rr) r Úcreate_subprocess_execrÚPIPErÚwriteÚdrainr@rÚreadÚwait)ÚdataÚprocÚexitcode©rrrÚrunosý  z.SubprocessMixin.test_stdin_stdout..runó some datagN@r)Ú PROGRAM_CATr Úwait_forr#r2r3©rrSÚtaskrQrrrRrÚtest_stdin_stdoutls   z!SubprocessMixin.test_stdin_stdoutcsRt‰‡fdd„}|dƒ}t |tj¡}|j |¡\}}| |d¡| |d¡dS)Nc“s:tjˆtjtjdœŽIdH}| |¡IdH\}}|j|fSrH)r rIrrJÚ communicateÚ returncode)rOrPrrrRrrrS‰sýz-SubprocessMixin.test_communicate..runrTr)rUr rVrZ LONG_TIMEOUTr#r2r3rWrrRrÚtest_communicate†s  z SubprocessMixin.test_communicatecCs2|j t d¡¡}|j | ¡¡}| |d¡dS)Nzexit 7é©r#r2r Úcreate_subprocess_shellrNr3©rrPrQrrrÚ test_shell˜s ÿzSubprocessMixin.test_shellcCs6|j tjddd¡}|j | ¡¡}| |d¡dS)Nzexit 8T)Ústart_new_sessionér^r`rrrÚtest_start_new_sessionŸsþÿz&SubprocessMixin.test_start_new_sessioncCsZt}|j tj|Ž¡}| ¡|j | ¡¡}tjdkrF|  |t ¡n|  t j |¡dS©Nr)ÚPROGRAM_BLOCKEDr#r2r rIr?rNÚsysÚplatformÚassertIsInstanceÚintr3r<ÚSIGKILL©rrrPr[rrrÚ test_killªsÿ zSubprocessMixin.test_killcCsZt}|j tj|Ž¡}| ¡|j | ¡¡}tjdkrF|  |t ¡n|  t j |¡dSre)rfr#r2r rIr>rNrgrhrirjr3r<r=rlrrrÚtest_terminate·sÿ zSubprocessMixin.test_terminaterzDon't have SIGHUPc sŽt tjtj¡}zhd}tjd|g}ˆj tj|dt j iŽ¡}‡fdd„}ˆj ||ƒ¡}ˆ  tj |¡Wt tj|¡nt tj|¡0dS)Nz.send_signal) r<rpÚSIG_DFLrgÚ executabler#r2r rIrrJr3)rZ old_handlerÚcoderrPr;r[rr%rÚtest_send_signalÄs ÿþÿ z SubprocessMixin.test_send_signalcCs0dtj}|j tjtjddtj d¡}||fS)Nóxr Úpass©r) rZ PIPE_MAX_SIZEr#r2r rIrgrsrrJ)rÚ large_datarPrrrÚprepare_broken_pipe_testâs þÿz(SubprocessMixin.prepare_broken_pipe_testcCsp| ¡\}}dd„}|||ƒ}t ¡&| ttf|jj|¡Wdƒn1sR0Y|j | ¡¡dS)NcÓs0t d¡IdH|j |¡|j ¡IdHdS)Ngà?)r ÚsleeprrKrL)rPrOrrrÚ write_stdinós z;SubprocessMixin.test_stdin_broken_pipe..write_stdin) rzÚ test_utilsÚdisable_loggerr9ÚBrokenPipeErrorÚConnectionResetErrorr#r2rN)rrPryr|ÚcororrrÚtest_stdin_broken_pipeðs    ÿ"z&SubprocessMixin.test_stdin_broken_pipecCsB| ¡\}}|j dd„¡|j | |¡¡|j | ¡¡dS)NcSsdSr r)r#ÚmsgrrrÚózESubprocessMixin.test_communicate_ignore_broken_pipe..)rzr#Zset_exception_handlerr2rZrN)rrPryrrrÚ#test_communicate_ignore_broken_pipeÿs z3SubprocessMixin.test_communicate_ignore_broken_pipecsbd‰ˆdd‰‡‡‡fdd„}ˆj |ƒ¡\}}ˆ |dˆ¡ˆ |jj¡ˆ |jj¡dS)Né ééc“s|d ddˆdf¡}ˆjj‰‡fdd„}|ˆj_tjtjd|tjjtjjˆdIdH}|j   d ¡}|  ¡IdH\}}||fS) NÚ r zsys.stdout.write("x" * %s)úsys.stdout.flush()cŸs4ˆ|i|¤ŽIdH\}}t ¡|_t ¡|_||fSr )rrÚ pause_readingÚresume_reading)rÚkwr-r,©Úconnect_read_piperrÚconnect_read_pipe_mocks  z^SubprocessMixin.test_pause_reading..test_pause_reading..connect_read_pipe_mockr )rrÚlimitr‰) Újoinr#rr rIrgrsrrJZ _transportZget_pipe_transportrZ)rtr‘rPZstdout_transportrr©r’rÚsizerrÚtest_pause_reading s"ý ü  z>SubprocessMixin.test_pause_reading..test_pause_readingrv)r#r2r3r5rŒr6r)rr–rr-rr”rr–s "z"SubprocessMixin.test_pause_readingcCs<dd„}|j |dƒ¡\}}| | ¡d¡| |d¡dS)Nc ÓsZd}tjtjd|tjjtjjtjjddIdH}| |¡IdH\}}| ¡IdH}||fS©Nú5import sys; data = sys.stdin.read(); print(len(data))r F©rrrÚ close_fds©r rIrgrsrrJrZrN)ÚmessagertrPrrrQrrrÚ len_message6sû z?SubprocessMixin.test_stdin_not_inheritable..len_messageóabcó3r©r#r2r3Úrstrip)rrÚoutputrQrrrÚtest_stdin_not_inheritable3s z*SubprocessMixin.test_stdin_not_inheritablecCs:dd„}|j |ƒ¡\}}| | ¡d¡| |d¡dS)Nc ÓsZd}tjtjd|tjjtjjtjjddIdH}| d¡IdH\}}| ¡IdH}||fS)Nr˜r Fr™r…r›©rtrPrrrQrrrÚ empty_inputIsû z5SubprocessMixin.test_empty_input..empty_inputó0rr ©rr¥r¢rQrrrÚtest_empty_inputGs z SubprocessMixin.test_empty_inputcCs:dd„}|j |ƒ¡\}}| | ¡d¡| |d¡dS)Nc ÓsXd}tjtjd|tjjtjjtjjddIdH}| ¡IdH\}}| ¡IdH}||fSr—) r rIrgrsrÚDEVNULLrJrZrNr¤rrrr¥\sû z7SubprocessMixin.test_devnull_input..empty_inputr¦rr r§rrrÚtest_devnull_inputZs z"SubprocessMixin.test_devnull_inputcCs6dd„}|j |ƒ¡\}}| |d¡| |d¡dS)Nc ÓsZd}tjtjd|tjjtjjtjjddIdH}| d¡IdH\}}| ¡IdH}||fS©Nr˜r Fr™rž© r rIrgrsrrJr©rZrNr¤rrrÚ empty_outputosû z9SubprocessMixin.test_devnull_output..empty_outputr©r#r2r3)rr­r¢rQrrrÚtest_devnull_outputms  z#SubprocessMixin.test_devnull_outputcCs6dd„}|j |ƒ¡\}}| |d¡| |d¡dS)Nc ÓsZd}tjtjd|tjjtjjtjjddIdH}| d¡IdH\}}| ¡IdH}||fSr«r¬r¤rrrÚ empty_error‚sû z7SubprocessMixin.test_devnull_error..empty_errorrr®)rr°r¢rQrrrÚtest_devnull_error€s  z"SubprocessMixin.test_devnull_errorcs‡fdd„}ˆj |ƒ¡dS)Nc“sttjtŽIdH}ˆj | ¡¡}ˆj |j¡z|IdHWntjyPYn0| ¡|  ¡| ¡IdHdSr ) r rIrfr#Ú create_taskrNÚ call_soonÚcancelÚCancelledErrorr?)rPrXr%rrÚ cancel_wait–sz=SubprocessMixin.test_cancel_process_wait..cancel_wait©r#r2)rr¶rr%rÚtest_cancel_process_wait“s z(SubprocessMixin.test_cancel_process_waitcsF‡fdd„}t ¡ˆj |ƒ¡Wdƒn1s80YdS)Nc“sLtjtŽ}ˆj |¡}ˆj |j¡z|IdHWntjyFYn0dSr )r rIrfr#r²r³r´rµ©rrXr%rrÚcancel_make_transport¬s  zYSubprocessMixin.test_cancel_make_subprocess_transport_exec..cancel_make_transport)r}r~r#r2©rrºrr%rÚ*test_cancel_make_subprocess_transport_execªs z:SubprocessMixin.test_cancel_make_subprocess_transport_execcsR‡fdd„}t ¡*ˆj |ƒ¡t ˆj¡Wdƒn1sD0YdS)Nc“sXˆjjtjgt¢RŽ}ˆj |¡}ˆj |j¡z|IdHWntjyRYn0dSr ) r#Úsubprocess_execr ÚSubprocessProtocolrfr²r³r´rµr¹r%rrrº½s ÿ zDSubprocessMixin.test_cancel_post_init..cancel_make_transport)r}r~r#r2Ú run_brieflyr»rr%rÚtest_cancel_post_init»s z%SubprocessMixin.test_cancel_post_initc sއfdd„}t ¡Fzˆj |ƒ¡\}}WntjyJˆ d¡Yn0Wdƒn1s`0Yˆ |¡ˆ |¡t  ˆj¡dS)Nc“szˆjjtjgt¢RŽ}|IdH\}}d‰‡‡fdd„}| d¡}|j‰||_| ¡}| ¡t  |  ¡d¡IdH|ˆfS)NFcsd‰ˆƒdS)NTrr©Z kill_calledZ orig_killrrr?ÖszKSubprocessMixin.test_close_kill_running..kill_running..killré) r#r½r r¾rfÚget_extra_infor?r4r@rVÚ_wait)Úcreater-r,r?rPr[r%rÁrÚ kill_runningÐs ÿ z=SubprocessMixin.test_close_kill_running..kill_runningz2Timeout failure on waiting for subprocess stopping) r}r~r#r2r Ú TimeoutErrorZskipTestr8r5r¿)rrÆr[Úkilledrr%rÚtest_close_kill_runningÎs  ÿ ÿ(  z'SubprocessMixin.test_close_kill_runningcsœ‡fdd„}t ¡*ˆj |ƒ¡}t ˆj¡Wdƒn1sD0Y|\}}}ˆ |¡ˆ |¡ˆ |¡tj dkr˜t ˆt ƒr˜t   ¡j ¡dS)Nc“snˆjjtjgt¢RŽ}|IdH\}}| d¡}| ¡| ¡t  ¡|_|  ¡}|  ¡}|  ¡|||jj fS)Nr)r#r½r r¾rfrÃr?rNrrÚpollr4r@r6)rÅr-r,rPÚproc_returncodeZtransport_returncoder%rrrÆõs ÿ  zCSubprocessMixin.test_close_dont_kill_finished..kill_runningr)r}r~r#r2r¿ZassertIsNotNoner8r7rgrhÚ isinstanceÚSubprocessFastWatcherTestsr Úget_child_watcherZ _callbacksÚclear)rrÆÚresultrËZtransport_return_coderÈrr%rÚtest_close_dont_kill_finishedós  *     ÿz-SubprocessMixin.test_close_dont_kill_finishedc ÃsÈtjdkrd}nd}t |¡–}t}||_tjdd`}| |¡*t j tj dd|dIdHWdƒn1sr0Y|  |g¡Wdƒn1sœ0YWdƒn1sº0YdS) Nrzasyncio.windows_utils.Popenzsubprocess.PopenT)Úrecordr rwrx) rgrhrZpatchÚZeroDivisionErrorZ side_effectÚwarningsÚcatch_warningsr9r rIrsr3)rrÚtargetÚpopenÚexcZwarnsrrrÚ_test_popen_errors   ü*z!SubprocessMixin._test_popen_errorcCs|j |jdd¡dS©Nrx)r#r2rÙr%rrrÚtest_popen_error/sz SubprocessMixin.test_popen_errorcCs|j |jtjd¡dSrÚ)r#r2rÙrrJr%rrrÚ test_popen_error_with_stdin_pipe4s ÿz0SubprocessMixin.test_popen_error_with_stdin_pipecCsdd„}|j |ƒ¡dS)NcÓs\d gd¢¡}tjtjd|tjjdIdH}|j d¡IdH}|rXt  d¡IdHq,qXq,dS)NrŠ)r zfor _ in range(64):z sys.stdout.write("x" * 4096)r‹z sys.exit(1)r )rig333333Ó?) r“r rIrgrsrrJrrMr{)rtÚprocessrOrrrÚexecute<sþ zDSubprocessMixin.test_read_stdout_after_process_exit..executer·©rrÞrrrÚ#test_read_stdout_after_process_exit:sz3SubprocessMixin.test_read_stdout_after_process_exitcs‡fdd„}ˆj |ƒ¡dS)Nc“sĈ t¡&tjtjddIdHWdƒn1s60Yˆ t¡&tjtjddIdHWdƒn1sv0Yˆ t¡&tjtjddIdHWdƒn1s¶0YdS©NT)Útextzutf-8)ÚencodingÚstrict)Úerrors)r9Ú ValueErrorrrIrgrsrr%rrrÞRs ÿ* ÿ* ÿzLSubprocessMixin.test_create_subprocess_exec_text_mode_fails..executer·rßrr%rÚ+test_create_subprocess_exec_text_mode_failsQs z;SubprocessMixin.test_create_subprocess_exec_text_mode_failscs‡fdd„}ˆj |ƒ¡dS)Nc“sĈ t¡&tjtjddIdHWdƒn1s60Yˆ t¡&tjtjddIdHWdƒn1sv0Yˆ t¡&tjtjddIdHWdƒn1s¶0YdSrá)r9rærr_rgrsrr%rrrÞcs ÿ* ÿ* ÿzMSubprocessMixin.test_create_subprocess_shell_text_mode_fails..executer·rßrr%rÚ,test_create_subprocess_shell_text_mode_failsas z.execute©r8r#r2rßrrrÚ%test_create_subprocess_exec_with_pathrsz5SubprocessMixin.test_create_subprocess_exec_with_pathcs‡fdd„}ˆj |ƒ¡dS)Nc“sXˆ t¡,tjtjddˆjdIdH}Wdƒn1s<0Y| ¡IdHdS)Nr rw©r#)Ú assertWarnsÚDeprecationWarningr rIrgrsr#rN©rPr%rrÚgo~s  þ*z5SubprocessMixin.test_exec_loop_deprecated..gor·©rròrr%rÚtest_exec_loop_deprecated}s z)SubprocessMixin.test_exec_loop_deprecatedcs‡fdd„}ˆj |ƒ¡dS)Nc“sRˆ t¡&tjdˆjdIdH}Wdƒn1s60Y| ¡IdHdS)Nzexit 0rî)rïrðr r_r#rNrñr%rrròˆs  þ*z6SubprocessMixin.test_shell_loop_deprecated..gor·rórr%rÚtest_shell_loop_deprecated‡s z*SubprocessMixin.test_shell_loop_deprecatedN)%rrrrYr\rardrmrnÚunittestZskipIfrgrhrurzr‚r†r–r£r¨rªr¯r±r¸r¼rÀrÉrÑrÙrÛrÜràrçrèrírôrõrrrrrGjs>    ,%)  rGcs,eZdZdZ‡fdd„Z‡fdd„Z‡ZS)ÚSubprocessWatcherMixinNcsJtƒ ¡t ¡}| ¡|_| |j¡| ¡}| |j¡|  |¡dSr ) r!r"r Úget_event_loop_policyZnew_event_loopr#r$ÚWatcherÚ attach_loopÚset_child_watcher©rZpolicyÚwatcherr&rrr"˜s    zSubprocessWatcherMixin.setUpcs:tƒ ¡t ¡}| ¡}| d¡| d¡| ¡dSr )r!ÚtearDownr rørÎrûrúr@rür&rrrþ¢s    zSubprocessWatcherMixin.tearDown)rrrrùr"rþrFrrr&rr÷”s r÷c@seZdZejZdS)ÚSubprocessThreadedWatcherTestsN)rrrrZThreadedChildWatcherrùrrrrrÿªsrÿzqbpo-38323: MultiLoopChildWatcher has a race condition and these tests can hang the test suitec@seZdZejZdS)ÚSubprocessMultiLoopWatcherTestsN)rrrrZMultiLoopChildWatcherrùrrrrr¯src@seZdZejZdS)ÚSubprocessSafeWatcherTestsN)rrrrZSafeChildWatcherrùrrrrr¶src@seZdZejZdS)rÍN)rrrrZFastChildWatcherrùrrrrrÍ»srÍcCs@ttdƒsdSzt t t ¡¡¡Wnty:YdS0dS)NÚ pidfd_openFT)ÚhasattrÚosr@rÚgetpidÚOSErrorrrrrÚhas_pidfd_supportÀs  rz(operating system does not support pidfdsc@seZdZejZdS)ÚSubprocessPidfdWatcherTestsN)rrrrZPidfdChildWatcherrùrrrrrÉsrcseZdZ‡fdd„Z‡ZS)ÚSubprocessProactorTestscs$tƒ ¡t ¡|_| |j¡dSr )r!r"r ZProactorEventLoopr#r$r%r&rrr"Õs  zSubprocessProactorTests.setUp)rrrr"rFrrr&rr Ósr c@seZdZdd„ZdS)ÚGenericWatcherTestscs$‡fdd„}ˆ ˆj |ƒ¡¡dS)Nc“srt tj¡}d|j_t |¡ˆ t¡,t   t   t j¡dd¡IdHWdƒn1sZ0Y|j ¡dS)NFr rw)rZcreate_authspecr ZAbstractChildWatcherZ is_activeZ return_valuerûr9Ú RuntimeErrorrrIrrêrgrsZadd_child_handlerZassert_not_called)rýr%rrrÞßs   ÿ(zWGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher..executerìrßrr%rÚ2test_create_subprocess_fails_with_inactive_watcherÝs zFGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcherN)rrrr rrrrr Ûsr Ú__main__)'rr<rgrörÔrr rrZtest.test_asynciorr}r(rrhrrsrfr“rUrZBaseSubprocessTransportrZTestCaser rGr÷rÿÚskiprrrÍrZ skipUnlessrr r rÚmainrrrrÚsf        þ A,  ÿ ÿ ÿ ÿ þ ÿ