a ze/@sddlmZmZmZedddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z dZ dZerzddZnddZd d Zd d ZGd dde jZGddde jZddZedkre dS))verbose import_module reap_childrenZtermiosNI wish to buy a fish license. For my pet fish, Eric. cCs t|dSN)printmsgr A/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_pty.pydebugsr cCsdSrr r r r r r scCs0|dr|ddS|dr,|ddS|S)Ns   )endswithreplace)datar r r normalize_output%s    rcCstj|ddd}|S)z8Read one line. May block forever if no newline is read.rbF)modeclosefd)ioFileIOreadline)fdreaderr r r _readline9src@s8eZdZddZddZeddZddZd d Zd S) PtyTestcCs`ttj|j}|tjtj|ttj|j}|tjtj||tjdtddS)Nr )signalSIGALRM handle_sigZ addCleanupSIGHUP handle_sighupalarm)selfZ old_alarmZ old_sighupr r r setUpDs z PtyTest.setUpcCs|ddS)Nz isatty hung)fail)r%sigframer r r r!PszPtyTest.handle_sigcCsdSrr )signumr)r r r r#SszPtyTest.handle_sighupc CszLtdt\}}td||ftd|ft|}td|WntyhtdYn0|t |dt |}zlt |dzt |d}| d |Wn2ty}z|jtjkr΂WYd}~n d}~00Wt ||nt ||0td t|tt|}| d t|td t|tdd t|td dt|}| dt|t|t|dS)NzCalling master_open()z#Got master_fd '%d', slave_name '%s'zCalling slave_open(%r)zGot slave_fd '%d'z,Pseudo-terminals (seemingly) not functional.zslave_fd is not a ttyFizWriting to slave_fdrzWriting chunked outputr)r ptyZ master_openZ slave_openOSErrorunittestZSkipTestZ assertTrueosisatty get_blocking set_blockingread assertEqualerrnoEAGAINwrite TEST_STRING_1rr TEST_STRING_2close)r% master_fdZ slave_nameZslave_fdblockings1es2r r r test_basicZsF         zPtyTest.test_basiccCstdt\}}|tjkrtds:tdtdtdz tWnNtyhtdYnHt ytdYn0tdtdYn0td td td ntd |zt |d }WntyYqYn0|sqt j t|ddddqt|d\}}t|}td|||f|dkrZ|dn@|d krp|dn*|dkr|dn|d kr|dt|dS)Nzcalling pty.fork()zChild's fd 1 is not a tty?!zIn child, calling os.setsid()zGood: OSError was raised.zNo setsid() available?zAn unexpected error was raised.zos.setsid() succeeded! (bad!)z!Waiting for child (%d) to finish.Prrascii)encodingrz+Child (%d) exited with code %d (status %d).z3Child raised an unexpected exception in os.setsid()z1pty.fork() failed to make child a session leader.z8Child spawned by pty.fork() did not have a tty as stdoutz&pty.fork() failed for unknown reasons.)r r-forkZCHILDr0r1_exitsetsidr.AttributeErrorr4sysstdoutr8strrwaitpidwaitstatus_to_exitcoder'r;)r%pidr<rstatusresr r r test_forksV                      zPtyTest.test_forkN) __name__ __module__ __qualname__r&r! staticmethodr#rArUr r r r rCs   3rc@sHeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS) SmallPtyTestsz)These tests don't spawn children or hang.cCs4tj|_tj|_tj|_g|_g|_g|_ g|_ dSr) r- STDIN_FILENOorig_stdin_fileno STDOUT_FILENOorig_stdout_filenoselectorig_pty_selectfdsfilesselect_rfds_lengthsselect_rfds_results)r%r r r r&szSmallPtyTests.setUpc Csv|jt_|jt_|jt_|jD]$}z |Wqt y@Yq0q|j D]&}zt |WqJt ynYqJ0qJdSr) r\r-r[r^r]r`r_rbr;r.rar0)r%filerr r r tearDowns     zSmallPtyTests.tearDowncCst}|j||Sr)r0piperaextend)r%Zpipe_fdsr r r _pipes zSmallPtyTests._pipecCst}|j||Sr)socket socketpairrbrh)r%rkr r r _socketpairs zSmallPtyTests._socketpaircCs*||jdt||jdggfS)Nr)r5rcpoplenrd)r%rfdsZwfdsZxfdsr r r _mock_selectszSmallPtyTests._mock_selectcCs"|\}}|t_|\}}|t_|}dd|D}t|ddt|d|jt_|j d|j ||dg|j d| t t|dWdn1s0Yt||dgggdd}|||dg||t|d d|t|dd ddS) z6Test the normal data case on both master_fd and stdin.cSsg|] }|qSr fileno.0sr r r r+z4SmallPtyTests.test__copy_to_each..rBs from masters from stdinrDrN)rir-r]r[rlr0r8rpr_rcappendrd assertRaises IndexError_copyr5r4)r%read_from_stdout_fdmock_stdout_fd mock_stdin_fdwrite_to_stdin_fdrkmastersror r r test__copy_to_each s$      ,z SmallPtyTests.test__copy_to_eachcCs|\}}|t_|\}}|t_|}dd|D}|dt||jt_|j d|j ||dg|j d| t t|dWdn1s0YdS)z9Test the empty read EOF case on both master_fd and stdin.cSsg|] }|qSr rqrsr r r rv0r+z7SmallPtyTests.test__copy_eof_on_all..rBrDrN)rir-r]r[rlr;r0rpr_rcrxrdryrzr{)r%r|r}r~rrkrr r r test__copy_eof_on_all)s       z#SmallPtyTests.test__copy_eof_on_allN) rVrWrX__doc__r&rfrirlrprrr r r r rZs rZcCs tdSr)rr r r r tearDownModuleAsr__main__)Z test.supportrrrr6r-r0rMr_rrjrr/r9r:r rrZTestCaserrZrrVmainr r r r s.  !^