o
    ҷh*(                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlZddl	m
Z
 ddlmZmZ ddlmZmZ er>ddlmZ ejd	kZejje d
dZerUejdksUJ er^ddlmZ nee ddlmZ W d   n1 stw   Y  d/ddZd/ddZd0ddZd0ddZ d0ddZ!d0ddZ"d0ddZ#d0dd Z$d0d!d"Z%d1d%d&Z&d1d'd(Z'ejjej(d)d*dd0d+d,Z)ed0d-d.Z*dS )2    )annotationsN)TYPE_CHECKING   )_core)gc_collect_harderskip_if_fbsd_pipes_broken)check_one_way_streamwait_all_tasks_blocked)
_HasFileNoposixz
posix only)reasonunix)FdStreamreturntuple[FdStream, FdStream]c                    s   t  \} }t|t| fS )zMakes a new pair of pipes.)ospiper   )rw r   N/var/www/html/venv/lib/python3.10/site-packages/trio/_tests/test_unix_pipes.py	make_pipe   s   r   c                    sT   t  I d H \} }z	 ttdd}t|  d| d  q ty)   Y | |fS w )NTPIPE_BUFi       xr   )r   getattrselectr   writefilenoBlockingIOError)sr   buf_sizer   r   r   make_clogged_pipe$   s   r!   Nonec               	     s   t  \} }t|4 I d H +}| |ksJ |dI d H  t | ddks*J t |  W d   I d H  d S 1 I d H s@w   Y  d S Ns   123   )r   r   r   r   send_allreadclose)r   r   sendr   r   r   test_send_pipe>   s   .r)   c               	     s   t  \} }t| 4 I d H +}| | ksJ t |d |dI d H dks*J t | W d   I d H  d S 1 I d H s@w   Y  d S r#   )r   r   r   r   r   receive_somer'   )r   r   recvr   r   r   test_receive_pipeH   s   .r,   c               	     s   t  I d H \d d fdd} d fdd}t 4 I d H }||  || W d   I d H  n1 I d H s>w   Y   I d H   I d H  d S )	Ni   r   r"   c                    s   t  } | I d H  d S N)	bytearrayr%   )big)countr   r   r   senderV   s   z#test_pipes_combined.<locals>.senderc                    sJ   t  I d H  d} |  k r| tdI d H 7 } |  k s|  ks#J d S )Nr   i   )r	   lenr*   )received)r0   r&   r   r   readerZ   s   z#test_pipes_combined.<locals>.readerr   r"   )r   r   open_nursery
start_soonaclose)r1   r4   nr   )r0   r&   r   r   test_pipes_combinedR   s   
(r:   c               	     s   t t td  W d    n1 sw   Y  t \} }t| t| 4 I d H +}t jtdd |dI d H  W d    n1 sHw   Y  W d   I d H  d S 1 I d H s^w   Y  d S )Nz ^max_bytes must be integer >= 1$matchr   )	pytestraises	TypeErrorr   r   r   r'   
ValueErrorr*   )r   r   r   r   r   r   test_pipe_errorsj   s   

.rA   c                    s   t  I d H \} }|  | }}~ ~t  tjtdd}t| W d    n1 s.w   Y  |jj	t	j
ks<J tjtdd}t| W d    n1 sSw   Y  |jj	t	j
ksaJ d S )NBad file descriptor$r;   )r   r   r   r=   r>   OSErrorr   r'   valueerrnoEBADF)r   r   f1f2excinfor   r   r   test_delu   s   rJ   c               
     sB  t  I d H \} }| 4 I d H ' |4 I d H  W d   I d H  n1 I d H s'w   Y  W d   I d H  n1 I d H s<w   Y  |  dksIJ | dksQJ tjtdd}t|   W d    n1 sjw   Y  |jjtj	ksxJ tjtdd}t|  W d    n1 sw   Y  |jjtj	ksJ d S )NrB   r;   )
r   r   r=   r>   rC   r   r'   rD   rE   rF   )r   r   rI   r   r   r   test_async_with   s   RrL   c               
     s6  t  I d H \} }| }|  I d H  | I d H  t \}}||kr0t|| t| t|4 I d H V   |ksAJ d fdd}t	 4 I d H (}|
| t I d H  | I d H  t I d H  t| W d   I d H  n1 I d H s~w   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nr   r"   c                     s     dI d H dksJ d S )N
       )r*   r   r2r   r   
expect_eof   s   z6test_misdirected_aclose_regression.<locals>.expect_eofr5   )r   r   r8   r   r   dup2r'   r   r   r6   r7   r	   )r   r   old_r_fdr2_fdw2_fdrQ   nurseryr   rO   r   "test_misdirected_aclose_regression   s(   

*.rW   monkeypatchpytest.MonkeyPatchc                   s$  dfdd}t jjj d fd	d
}| t jjd| t I d H \}|4 I d H Y 4 I d H < t  4 I d H }|| t I d H  |	dI d H  W d   I d H  n1 I d H s`w   Y  W d   I d H  n1 I d H suw   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nr   r"   c                     D   t tj  dI d H  W d    d S 1 sw   Y  d S )NrM   )r=   r>   r   ClosedResourceErrorr*   r   )r   r   r   expect_closedresourceerror      "zKtest_close_at_bad_time_for_receive_some.<locals>.expect_closedresourceerrorself_core._run.TheIOManagerfdint | _HasFileNoc                   $    | |I d H    I d H  d S r-   r8   r^   r`   orig_wait_readabler   r   r   patched_wait_readable      zFtest_close_at_bad_time_for_receive_some.<locals>.patched_wait_readablewait_readabler   r5   r^   r_   r`   ra   r   r"   )
r   _runTheIOManagerri   setattrr   r6   r7   r	   r%   )rX   r\   rg   r   rV   r   re   r   'test_close_at_bad_time_for_receive_some   s   


*Xrn   c                   s<  dfdd}t jjj d fd	d
}| t jjd| t I d H \}4 I d H e |4 I d H H t  4 I d H *}|| t I d H  |	dI d H }|r\|	dI d H }|sRW d   I d H  n1 I d H slw   Y  W d   I d H  n1 I d H sw   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nr   r"   c                     rZ   )Nsd   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r=   r>   r   r[   r%   r   )r   r   r   r\      r]   zGtest_close_at_bad_time_for_send_all.<locals>.expect_closedresourceerrorr^   r_   r`   ra   c                   rb   r-   rc   rd   orig_wait_writabler   r   r   patched_wait_writable   rh   zBtest_close_at_bad_time_for_send_all.<locals>.patched_wait_writablewait_writablei'  r5   rj   )
r   rk   rl   rr   rm   r!   r6   r7   r	   r*   )rX   r\   rq   r   rV   received_datar   ro   r   #test_close_at_bad_time_for_send_all   s    

*Xrt   freebsdz7no way to make read() return a bizarro error on FreeBSDc                    s   t  I d H \} }| 4 I d H d |4 I d H G tdtjd}z-t||  ttj	 |
dI d H  W d    n1 sAw   Y  W t| nt| w W d   I d H  n1 I d H scw   Y  W d   I d H  d S 1 I d H syw   Y  d S )N/r   rM   )r   r   openO_DIRECTORYrR   r   r=   r>   r   BrokenResourceErrorr*   r'   )r   r   dir_fdr   r   r   !test_bizarro_OSError_from_receive
  s   Xr{   c                     s   t ttI d H  d S r-   )r   r   r!   r   r   r   r   test_pipe_fully!  s   r|   )r   r   r5   )rX   rY   r   r"   )+
__future__r   rE   r   r   systypingr   r=    r   _core._tests.tutilr   r   testingr   r	   _file_ior
   namer   markskipif
pytestmarkplatform_unix_pipesr   r>   ImportErrorr   r!   r)   r,   r:   rA   rJ   rL   rW   rn   rt   
startswithr{   r|   r   r   r   r   <module>   sL    












&
!.
