1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
U
Z±d-Oã@sfddlZddlZddlZddlZddlZddlmZddlmZ    ddl
Z
ddl m Z ddl mZmZmZmZmZmZmZmZmZddlmZmZddlmZdd    lmZmZejd
kZ e rÐdd lm!Z!m"Z"m#Z#n
d \Z!Z"Z#d d„Z$e$dƒZ%e$dƒZ&e$dƒZ'e r
dd„Z(ndd„Z(dd„Z)e dd„ƒZ*e dd„ƒZ+e
j,j-de*e+gddgdZ.e.dd „ƒZ/e.d!d"„ƒZ0e.d#d$„ƒZ1d%d&„Z2d'd(„Z3e$d)ƒZ4e.d*d+„ƒZ5e.d,d-„ƒZ6d.d/„Z7d0d1„Z8ed2d3„ƒZ9e.d4d5„ƒZ:d6d7„Z;e.d8d9„ƒZ<e
j,j=e  d:d;e.d<d=„ƒƒZ>ed>d?„ƒZ?d@dA„Z@dBdC„ZAe
j,j=e  dDd;dEdF„ƒZBdGdH„ZCe
j,j=e    dIƒ D¡ dJd;dKdL„ƒZEdMdN„ZFdS)OéN)Úpartial)ÚPath)Úasynccontextmanageré)    ÚClosedResourceErrorÚEventÚProcessÚ_coreÚ
fail_afterÚ move_on_afterÚ run_processÚsleepÚ sleep_forever)Úskip_if_fbsd_pipes_brokenÚslow)Ú open_process)Úassert_no_checkpointsÚwait_all_tasks_blockedÚposix)ÚSIGKILLÚSIGTERMÚSIGUSR1)NNNcCstjddd|gS)Nz-uú-cz import sys; )ÚsysÚ
executable)Úcode©rúQd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\trio/tests/test_subprocess.pyÚpython%srz sys.exit(0)z sys.exit(1)z0sys.stdout.buffer.write(sys.stdin.buffer.read())cCs dt|ƒgS)Nz
/bin/sleep)Ústr©ÚsecondsrrrÚ<lambda>.ór"cCstd |¡ƒS)Nzimport time; time.sleep({}))rÚformatr rrrr"0r#cCstr|j| kS|jdkSdS)Nr)rÚ
returncode)ÚprocÚsigrrrÚ
got_signal3s r(cOs8t||ŽIdH}z
|VW5| ¡| ¡IdHXdS©N)rÚkillÚwait)ÚargsÚkwargsr&rrrÚopen_process_then_kill:s
 
r.c
Os^t ¡4IdHš>}| dd¡| ttf|ž|Ž¡IdH}|V|j ¡W5QIdHRXdS)NÚcheckF)r    Ú open_nurseryÚ
setdefaultÚstartrr Ú cancel_scopeÚcancel)r,r-Únurseryr&rrrÚrun_process_in_nurseryDs
 r6Úbackground_processrzrun_process in nursery)Úidsc
ÃsÌ|tƒ4IdHš}| ¡IdHW5QIdHRXt|tƒs>t‚|jdksLt‚|jdksZt‚t|ƒdt›dksrt‚|tƒ4IdHš}| ¡IdHW5QIdHRX|jdks°t‚t|ƒd     td¡ksÈt‚dS)Nrz<trio.Process z: exited with status 0>éú<trio.Process {!r}: {}>úexited with status 1)
Ú    EXIT_TRUEr+Ú
isinstancerÚAssertionErrorÚ_pidfdr%ÚreprÚ
EXIT_FALSEr$)r7r&rrrÚ
test_basicTs
ÿrBc
Ãs”|tdƒƒ4IdHšp}|jdks$t‚dt|ƒks4t‚| ¡|j ¡|jdk    sTt‚dt|ƒksdt‚|jdksrt‚|jdk    s€t‚W5QIdHRXdS)Né'ZrunningZexited)ÚSLEEPr%r>r@r*Ú_procr+r?)r7ÚprrrÚtest_auto_update_returncodees
rGc Ãsà|tdƒƒ4IdHš¼}t ¡4IdHš@}| |j¡| |j¡| |j¡tƒIdH|j ¡W5QIdHRXt ¡4IdHš>}| |j¡| |j¡| |j¡tƒIdH| ¡W5QIdHRXW5QIdHRXdS)Né
)    rDr    r0Ú
start_soonr+rr3r4r*)r7r&r5rrrÚtest_multi_waitrs        rJc
Ãs’tttjtjdIdH4IdHš}W5QIdHRX|jdk    s@t‚t t¡|j     
d¡IdHW5QRXt t¡|j   ¡IdHW5QRXdS)N)ÚstdinÚstdoutóx) rÚCATÚ
subprocessÚPIPEr%r>ÚpytestÚraisesrrKÚsend_allrLÚ receive_some)Úrecwarnr&rrrÚ!test_async_with_basics_deprecated‡sÿ  rVc Ãs¤tdƒV}ttdƒƒIdH4IdHš*}| ¡dks6t‚| ¡tƒIdHW5QIdHRXW5QRX|jsnt‚t|t    ƒs|t‚t
|ƒd  tdƒt r”dnd¡ks t‚dS)NédrHr:zexited with signal 9r;) r rrDÚpollr>r4rÚcancelled_caughtr(rr@r$r)rUÚscoper&rrrÚ test_kill_when_context_cancelled”s
&
 
 
ÿr[zbdata = sys.stdin.buffer.read(); sys.stdout.buffer.write(data); sys.stderr.buffer.write(data[::-1])c ƒsÖ|ttjtjtjd4IdHš¨‰d‰‡‡fdd„}dd„}t ¡4IdHšJ}t ¡d|j_| |¡| |ˆj    ˆ¡| |ˆj
ˆddd…¡W5QIdHRX|jj r¬t ‚d    ˆ  ¡IdHksÂt ‚W5QIdHRXdS)
N©rKrLÚstderrs+the quick brown fox jumps over the lazy dogc“s&ˆj ˆ¡IdHˆj ¡IdHdSr))rKrSÚacloser©Úmsgr&rrÚ
feed_input²sztest_pipes.<locals>.feed_inputcÓs2tƒ}|2z3dHW}||7}q
6||ks.t‚dSr))Ú    bytearrayr>)ÚstreamÚexpectedÚseenÚchunkrrrÚ check_output¶s z test_pipes.<locals>.check_outputg>@éÿÿÿÿr)Ú+COPY_STDIN_TO_STDOUT_AND_BACKWARD_TO_STDERRrOrPr    r0Ú current_timer3ÚdeadlinerIrLr]rYr>r+)r7rargr5rr_rÚ
test_pipes¨s"ü
* rlc ƒsÞ|tdƒtjtjtjd4IdHšš‰tr.dnd‰‡‡fdd„}tdƒjˆj d¡IdHtd    ƒIdHˆj d
ˆ¡IdH|d d ƒIdHˆj d ˆdˆ¡IdH|ddƒIdH|ddƒIdHˆj dˆ¡IdH|dd ƒIdHˆj d¡IdHtd    ƒ}|dd ƒIdHW5QRX|j    s8t
‚ˆj ˆ¡IdH|ddƒIdHˆj  ¡IdHˆj   d¡IdHdks†t
‚ˆj  d¡IdHdks¢t
‚ˆ ¡IdHW5QRXW5QIdHRXˆjd ksÚt
‚dS)Nz×idx = 0
while True:
    line = sys.stdin.readline()
    if line == '': break
    request = int(line.strip())
    print(str(idx * 2) * request)
    print(str(idx * 2 + 1) * request * 2, file=sys.stderr)
    idx += 1
r\ó
s
c
“sft ¡4IdHšF}‡fdd„}| |ˆj||d¡| |ˆj|d|dd¡W5QIdHRXdS)Nc“sr|dkrF| |¡IdH}|d |¡ d¡t|ƒks8t‚|t|ƒ8}q|dksRt‚| tˆƒ¡IdHˆksnt‚dS)Nrz{}úutf-8)rTr$ÚencodeÚlenr>)rcÚcountÚdigitÚresult)ÚnewlinerrÚ    drain_oneésÿ z3test_interactive.<locals>.expect.<locals>.drain_onerr9)r    r0rIrLr])ÚidxÚrequestr5ru©rtr&rrÚexpectæs
z test_interactive.<locals>.expectés12gš™™™™™¹?s345ri90s100s200r9rWréÈó0és999999éi?Br#)rrOrPrr
rKrSr r rYr>r^rLrTr]r+r%)r7ryrZrrxrÚtest_interactiveÇs@ ÿ
ó  
 (rc    Ãstdd„tdƒDƒƒ}tt|dddIdH}|jtks:t‚|jdksHt‚|j|ksVt‚|jdksdt‚ttddIdH}|jtks„t‚|jdks’t‚|jdks t‚|jdks®t‚tt    |dddIdH}|jt    ksÒt‚|jdksàt‚|j|ksît‚|j|ddd    …kst‚t
  t ¡ttd
d IdHW5QRXt
  t ¡tttjd IdHW5QRXt
  t ¡tttjd IdHW5QRXt
  t ¡tttjd IdHW5QRXt
  t ¡ttdtjdIdHW5QRXt
  t ¡ttdddIdHW5QRXdS)Ncss|]}t dd¡VqdS)réÿN)ÚrandomÚrandint)Ú.0Ú_rrrÚ    <genexpr>sztest_run.<locals>.<genexpr>iT)rKÚcapture_stdoutÚcapture_stderrrr#)r†rhzoh no, it's text©rK)rL)r])r†rL)r‡r])ÚbytesÚranger rNr,r>r%rLr]rirQrRÚ UnicodeErrorÚ
ValueErrorrOrPÚDEVNULL)ÚdatarsrrrÚtest_runsLÿ ü        rc    ÃsÈtdƒ}t tj¡}t|tjddIdHW5QRX|jj|ksFt    ‚|jj
dksVt    ‚|jj dksft    ‚|jj dksvt    ‚t|ddddIdH}|j |ksšt    ‚|j dks¨t    ‚|j dks¶t    ‚|j
dksÄt    ‚dS)    Nz/sys.stderr.buffer.write(b'test\n'); sys.exit(1)T)rKr‡r9stest
F)r†r‡r/r#)rrQrRrOÚCalledProcessErrorr rÚvalueÚcmdr>r%r]rLr,)r’ÚexcinforsrrrÚtest_run_check9s" ÿ r”cÃsNttjddgdddIdH}|jdks,t‚|j|jkrDdksJnt‚dS)Nrzimport sys; sys.stdin.close()rMirˆr)r rrr%r>rLr])rsrrrÚtest_run_with_broken_pipeKs 
ÿ r•c
Ãsl|ttjtjtjd4IdHš‚}|jdk    s.t‚|jdks<t‚|j d¡IdH|j     ¡IdHg}|j 
d¡IdH}|dkr~qŠ|  |¡qbd  |¡dksœt‚W5QIdHRX|j dksºt‚ttddtjdIdH}|j dksàt‚|jdksît‚|jdksüt‚|ttjtjd    4IdHšD}|jdks(t‚|jdks8t‚|j ¡IdH| ¡IdHW5QIdHRX|j dksvt‚trhzÞt ¡\}}|ttj|tjd4IdHš¦}t |¡|jdksÂt‚|jdksÒt‚|jdksât‚|j d¡IdH|j ¡IdH| ¡IdHdkst‚t |d
¡dks2t‚t |d
¡dksHt‚W5QIdHRXW5t |¡XdS) Nr\s1234ér#s12344321rT)rKr†r])rKr]i)rirOrPÚSTDOUTrLr>r]ZstdiorSZsend_eofrTÚappendÚjoinr%r rNrKr^r+rÚosÚcloseÚpipeÚread)r7r&ÚoutputrfrsÚrÚwrrrÚtest_stderr_stdoutTstü "ü ÿ ü
*r¡c    Ãs¨t t¡}tdgddIdHW5QRXdt|jƒks<t‚dt|jƒksNt‚tr¤t t¡}tdgddIdHW5QRXt t¡}tdddIdHW5QRXdS)    NZlsrn)Úencodingzunbuffered byte streamsz&the 'encoding' option is not supportedT)ÚshellF)rQrRÚ    TypeErrorrrr‘r>r)r“rrrÚ test_errors—s   r¥cƒsL‡fdd„}|tjtƒIdH|tjtƒIdHtrH|dd„tƒIdHdS)Nc “s‚tdƒB}ˆtdƒƒ4IdHš}||ƒ| ¡IdHW5QIdHRXW5QRX|jrZt‚trp|j| ks~t‚n|jdks~t‚dS)Nçð?ér)r rDr+rYr>rr%)Zsend_itÚsignumrZr&©r7rrÚtest_one_signal¦s
(
z%test_signals.<locals>.test_one_signalcSs
| t¡Sr))Ú send_signalr©r&rrrr"»r#ztest_signals.<locals>.<lambda>)rr*rÚ    terminaterrr)r7rªrr©rÚ test_signals¤s
 r®zPOSIX specific)Úreasonc Ãs¼t tjtj¡}z–|tdƒƒ4IdHšr}t ¡4IdHš6}| |j¡tƒIdH|     ¡t 
¡d|j _ W5QIdHRX|j j r†t‚|jdks”t‚W5QIdHRXW5t tj|¡XdS)Nr§r¦r)ÚsignalZSIGCHLDÚSIG_IGNrDr    r0rIr+rr*rjr3rkrYr>r%)r7Z old_sigchldr&r5rrrÚtest_wait_reapable_fails¾s    "r²c
s¸ddlm}|j d¡s"t d¡ddlm}d‰t     ddg¡‰‡‡fd    d
„}t
 
t
j |¡}z,t
 d ¡|ˆjƒˆjd d d ks†t‚W5ˆj dkr¤ˆ  ¡ˆ ¡t
 
t
j |¡XdS)Nr)Úwait_child_exitingZwaitidz waitid only)Úsync_wait_reapableFr Z3600csd‰ˆ ¡dS©NT)r*)r'Úframe©Z    got_alarmZsleeperrrÚon_alarmßsz#test_waitid_eintr.<locals>.on_alarmr9)Útimeouti÷ÿÿÿ)Z_subprocess_platformr³Ú
__module__ÚendswithrQÚskipZ_subprocess_platform.waitidr´rOÚPopenr°ZSIGALRMr%r*r+ZalarmÚpidr>)r³r´r¸Z old_sigalrmrr·rÚtest_waitid_eintrÒs   
 
 
 
r¿c
ƒsld‰‡fdd„}t ¡4IdHš4}| tttdƒ|d¡tƒIdH|j ¡W5QIdHRXˆsht    ‚dS)NFc“s2d‰| ¡ztƒIdHW5|jdk    s,t‚XdSrµ)r­r%r>rr¬©Zcustom_deliver_cancel_calledrrÚcustom_deliver_cancelõs
z9test_custom_deliver_cancel.<locals>.custom_deliver_cancelrC)Zdeliver_cancel)
r    r0rIrr rDrr3r4r>)rÁr5rrÀrÚtest_custom_deliver_cancelòs ÿ rÂc ƒs†tj‰‡fdd„}| td|¡tjtddNt ¡4IdHš,}| t    t
dƒ¡t ƒIdH|j   ¡W5QIdHRXW5QRXdS)Ncsˆ|ƒtdƒ‚dS)NZwhoops)ÚOSError)Úself©Zoriginal_terminaterrÚbroken_terminate sz>test_warn_on_failed_cancel_terminate.<locals>.broken_terminater­z
.*whoops.*©ÚmatchrC)rr­ÚsetattrrQÚwarnsÚRuntimeWarningr    r0rIr rDrr3r4)Ú monkeypatchrÆr5rrÅrÚ$test_warn_on_failed_cancel_terminate
s  rÍz
posix onlyc Ãsx| tddd„¡tjtddNt ¡4IdHš,}| tt    dƒ¡t
ƒIdH|j   ¡W5QIdHRXW5QRXdS)Nr­cWsdSr)r)r,rrrr"r#z8test_warn_on_cancel_SIGKILL_escalation.<locals>.<lambda>z.*ignored SIGTERM.*rÇrC) rÉrrQrÊrËr    r0rIr rDrr3r4)Zautojump_clockrÌr5rrrÚ&test_warn_on_cancel_SIGKILL_escalations  rÎc Ãs^t tj¡:t ¡4IdHš}| tt¡IdH}W5QIdHRXW5QRX|j    dksZt
‚dS)Nr9) rQrRrOrr    r0r2r rAr%r>)r5r&rrrÚ test_run_process_background_fail's,rÏú/dev/fdz,requires a way to iterate through open filesc    Ãs¶ttdƒ ¡ƒ}ttƒIdHttdƒ ¡ƒ|ks6t‚t tj    ¡tt
ƒIdHW5QRXttdƒ ¡ƒ|kstt‚t t ¡tdgƒIdHW5QRXttdƒ ¡ƒ|ks²t‚dS)NrÐz    /dev/fd/0) ÚsetÚSyncPathÚiterdirr r<r>rQrRrOrrAÚPermissionError)Z starting_fdsrrrÚtest_for_leaking_fds.s rÕc
ƒsÒd‰ddœ‡fdd„ }ttdƒƒIdH}t ¡4IdHšŠ}| ||¡tƒIdHtˆtƒs`t‚|     ¡t
ƒ|j   ¡|  ¡W5QRXtdƒˆ  ¡IdHW5QRXˆ ¡s¾tdƒ‚W5QIdHRXdS)N)Úreturnc“s tƒ‰| ¡IdHˆ ¡dSr))rr+rÑr¬©Z noticed_exitrrÚ wait_and_tellDsz7test_subprocess_pidfd_unnotified.<locals>.wait_and_tellrCrzz,child task wasn't woken after poll, DEADLOCK)rrDr    r0rIrr=rr>r­rrEr+rXr Úis_set)rØr&r5rr×rÚ test_subprocess_pidfd_unnotifiedAs  
 
rÚ)Gršrr°rOrÚ    functoolsrÚpathlibrrÒrQÚasync_generatorrÚrrrr    r
r r r rZ_core.tests.tutilrrZlowlevelrZtestingrrÚnamerrrrrr<rArNrDr(r.r6ÚmarkZ parametrizeZbackground_process_paramrBrGrJrVr[rirlrrr”r•r¡r¥r®Zskipifr²r¿rÂrÍrÎrÏÚexistsrÕrÚrrrrÚ<module>s’   ,  
 
 
 
    
ý
 
 
  ÿ
 
F+
 
B 
 
 
 þ