o
    US`cJ                     @   s  d dl Z d dlZddlmZ ddlmZ ddlmZ ddlmZ ddl	T ddl
mZ dd	lmZ dd
lmZ ddlmZ dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Z d*d+ Z!d,d- Z"d.d/ Z#dS )0    N   )can_bind_ipv6)sleep)_core)aclose_forcefully)*)_assert_raises)_UnboundedByteQueue)socket)SocketListenerc               	      s   g   fdd}  fdd}t  4 I d H }||  || || W d   I d H  n1 I d H s7w   Y  g   fdd}t  4 I d H }|| |j  W d   I d H  n1 I d H sgw   Y   dgkssJ d S )Nc                     s,   t dD ]	} t I d H  q d d S )N
   zbusy bee exhausted)ranger   
checkpointappend)_record B/usr/local/lib/python3.10/dist-packages/trio/tests/test_testing.pybusy_bee   s   z-test_wait_all_tasks_blocked.<locals>.busy_beec                         t  I d H   d d S )Nzquiet at last!wait_all_tasks_blockedr   r   r   r   r   waiting_for_bee_to_leave      z=test_wait_all_tasks_blocked.<locals>.waiting_for_bee_to_leavec                      s6   z	t  I d H  W d S  tjy    d Y d S w )Nok)r   r   	Cancelledr   r   r   r   r   cancelled_while_waiting&   s   z<test_wait_all_tasks_blocked.<locals>.cancelled_while_waitingr   )r   open_nursery
start_sooncancel_scopecancel)r   r   nurseryr   r   r   r   test_wait_all_tasks_blocked   s    

(
(r#   c              	      s   g   fdd}t  4 I d H 1}|| t I d H   dgks$J | d t I d H   ddgks7J W d   I d H  d S 1 I d H sHw   Y  d S )Nc                      s(     d tdI d H    d d S )Ntt start   tt finishedr   r   r   r   r   r   timeout_task5   s   
z?test_wait_all_tasks_blocked_with_timeouts.<locals>.timeout_taskr$   r   r&   )r   r   r   r   Zjump)Z
mock_clockr(   r"   r   r   r   )test_wait_all_tasks_blocked_with_timeouts2   s   

.r)   c               	      s   g   fdd}  fdd} fdd} fdd}t  4 I d H $}||  || || || || W d   I d H  n1 I d H sMw   Y   g d	ksZJ d S )
Nc                      sD     d tdI d H  tdI d H  tdI d H    d d S )Nblink startg{Gz?	blink endr'   r   r   r   r   blinkF   s   
z7test_wait_all_tasks_blocked_with_cushion.<locals>.blinkc                      r   )Nwait_no_cushion endr   r   r   r   r   wait_no_cushionM   r   zAtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_no_cushionc                         t dI d H   d d S )Ng{Gz?wait_small_cushion endr   r   r   r   r   wait_small_cushionQ      zDtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_small_cushionc                      r/   )NgQ?wait_big_cushion endr   r   r   r   r   wait_big_cushionU   r2   zBtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_big_cushion)r*   r-   r+   r0   r0   r3   )r   r   r   )r,   r.   r1   r4   r"   r   r   r   (test_wait_all_tasks_blocked_with_cushionC   s   



(r5   c              
      sD  t   t I d H  W d    n1 sw   Y  tt t   W d    n1 s/w   Y  W d    n1 s>w   Y  tjtjfD ]4}t| tt! t   | I d H  W d    n1 siw   Y  W d    n1 sxw   Y  qIt   t I d H  t I d H  W d    d S 1 sw   Y  d S N)	assert_checkpointsr   r   pytestraisesAssertionErrorcheckpoint_if_cancelledcancel_shielded_checkpointprintZrecwarnZpartial_yieldr   r   r   test_assert_checkpointsm   s2   "r?   c              
      s~  t   W d    n1 sw   Y  tt" t   t I d H  W d    n1 s/w   Y  W d    n1 s>w   Y  tjtjfD ]4}t| tt! t   | I d H  W d    n1 siw   Y  W d    n1 sxw   Y  qItt2 t   t I d H  t I d H  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S r6   )	Zassert_no_checkpointsr8   r9   r:   r   r   r;   r<   r=   r>   r   r   r   test_assert_no_checkpoints   s:   "r@   c               
      s  g   fddfdd} fdd}t  }t 4 I d H C}|| | ||| |d4 I d H  t I d H  W d   I d H  n1 I d H sLw   Y   g dksYJ W d   I d H  n1 I d H siw   Y  t  }|d	4 I d H  W d   I d H  n1 I d H sw   Y  tt/ |d	4 I d H  W d   I d H  n1 I d H sw   Y  W d    d S W d    d S 1 sw   Y  d S )
Nc                    s   t |   |  d S r6   )r=   r   )valr   r   r   t   s   ztest_Sequencer.<locals>.tc              	      s   | d4 I d H   d W d   I d H  n1 I d H sw   Y  | d4 I d H   d W d   I d H  n1 I d H s@w   Y  | d4 I d H   d W d   I d H  d S 1 I d H scw   Y  d S )N   f1rC      rE   rF      rE   rH   r   seqrB   r   r   rE      s   
(
(
.ztest_Sequencer.<locals>.f1c              	      s   | d4 I d H   d W d   I d H  n1 I d H sw   Y  | d4 I d H   d W d   I d H  d S 1 I d H sAw   Y  d S )Nr   f2r   r   rN   r   r   rJ   rL   r   r   rN      s   
(
.ztest_Sequencer.<locals>.f2r%   )rM   rD   rO   rG   rI   r   )	Sequencerr   r   r   r   r8   r9   RuntimeError)rE   rN   rK   r"   r   )r   rB   r   test_Sequencer   s2   (((*"rR   c               
      s6  g  t   fdd} t 4 I d H 5}|| d || d d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 sPw   Y   ddgks]J tt/ d4 I d H  W d   I d H  n1 I d H s|w   Y  W d    d S W d    d S 1 sw   Y  d S )	Nc              
      s   t  K}| dkr|  z | 4 I d H  W d   I d H  n1 I d H s(w   Y  W n ty?    d|  Y n	w W d    d S W d    d S 1 sSw   Y  d S )NrC   zseq({}) RuntimeError)r   ZCancelScoper!   rQ   r   format)iscoper   rK   r   r   child   s    
("z$test_Sequencer_cancel.<locals>.childrC   r   r   zseq(1) RuntimeErrorzseq(2) RuntimeErrorrF   )rP   r   r   r   r8   r9   rQ   )rW   r"   r   rV   r   test_Sequencer_cancel   s&   
*(*"rX   c                	      s   t t tt W d    n1 sw   Y  W d    n1 s%w   Y  t t  tt dd  W d    n1 sCw   Y  W d    n1 sRw   Y  tt t1 saw   Y  d S )NZfoorC   )r8   r9   r:   r   rQ   	TypeErrorr   r   r   r   test__assert_raises   s    



rZ   c               
      s  t    d  d  ddksJ  ddks J  d   dks-J ttj  d W d    n1 sCw   Y  ttj    W d    n1 s]w   Y  tt  d W d    n1 sww   Y   d	 t   	dI d H d	ksJ W d    n1 sw   Y   d
  d t   	dI d H dksJ W d    n1 sw   Y  t   	 I d H dksJ W d    n1 sw   Y   fdd}  fdd}t
 4 I d H }||d || d W d   I d H  n1 I d H sw   Y  ttj3 t
 4 I d H }||d ||d W d   I d H  n1 I d H sKw   Y  W d    n	1 s[w   Y     ttj  d W d    n	1 s{w   Y   ddksJ   dksJ  	dI d H dksJ  	 I d H dksJ    t  fdd}t
 4 I d H }||d || W d   I d H  d S 1 I d H sw   Y  d S )N   123   456rC      1r   s   23456   789string   abc   defs   ghi   ds   efghic                    s   t  I d H   |  d S r6   )r   putdataubqr   r   putter  r   z'test__UnboundeByteQueue.<locals>.putterc                    sD   t     I d H | ksJ W d    d S 1 sw   Y  d S r6   )r7   get)expectrf   r   r   getter  s   "z'test__UnboundeByteQueue.<locals>.getter   xyzs   asdf   ---    c                      s   t  I d H     d S r6   )r   closer   )ubq2r   r   closer9  s   z'test__UnboundeByteQueue.<locals>.closer)r	   rc   
get_nowaitr8   r9   r   
WouldBlockrY   r7   ri   r   r   BusyResourceErrorro   ClosedResourceError)rh   rk   r"   rq   r   )rg   rp   r   test__UnboundeByteQueue   sr   






**0rv   c               	      s  t  fdd  dI d H  ddksJ  dks"J t   I d H  W d    n1 s7w   Y  ttj   W d    n1 sQw   Y  ttj d W d    n1 slw   Y   dI d H  t   I d H dksJ W d    n1 sw   Y  d	 fd
d} t	 4 I d H }|
|  |
|  W d   I d H  n1 I d H sw   Y  dksJ t   I d H  W d    n1 sw   Y   I d H dksJ  I d H dksJ ttj  dI d H  W d    n	1 sw   Y  jd u s#J jd u s+J jd u s3J g fdd}fdd}fdd}t |||j|u sVJ j|u s^J j|u sfJ dI d H   I d H  tI d H    g dksJ d S )Nc                    s>   t    | I d H  W d    d S 1 sw   Y  d S r6   )r7   send_allrd   )mssr   r   do_send_allE  s   "z*test_MemorySendStream.<locals>.do_send_allr[   rC   r]   s   23r   r\   r   c                      s6   z
 dI d H  W d S  t jy   d7 Y d S w )N   xxxrC   )r   rt   r   )ry   resource_busy_countr   r   do_send_all_count_resourcebusy_  s   z=test_MemorySendStream.<locals>.do_send_all_count_resourcebusyrz   rn   rm   c                      s       dks	J d d S )Nr`   send_all_hook)get_data_nowaitr   r   )mss2r   r   r   r}   |  s   z,test_MemorySendStream.<locals>.send_all_hookc                           d d S )N"wait_send_all_might_not_block_hookr   r   r   r   r   r        zAtest_MemorySendStream.<locals>.wait_send_all_might_not_block_hookc                           d d S )N
close_hookr   r   r   r   r   r        z)test_MemorySendStream.<locals>.close_hookr`   )r}   r   r   r   )MemorySendStreamr~   r7   Zwait_send_all_might_not_blockr8   r9   r   rs   get_datar   r   acloseru   r}   r   r   rw   r   ro   )r|   r"   r}   r   r   r   )ry   rx   r   r   r{   r   test_MemorySendStreamB  sh   

(r   c               
      s  t    fdd}  d | dI d H dksJ | dI d H dks%J  d | d I d H dks5J ttj2 t 4 I d H }|| d || d W d   I d H  n1 I d H saw   Y  W d    n1 spw   Y   jd u s|J  d  	   	  | dI d H dksJ | dI d H d	ksJ | dI d H d	ksJ ttj
  d
 W d    n1 sw   Y  fdd}g fdd}t ||j|u sJ j|u sJ d dI d H dksJ dI d H dksJ dI d H dksJ d d _dI d H dks&J d t   I d H  W d    n	1 sAw   Y  dgksNJ ttj
 dI d H  W d    d S 1 siw   Y  d S )Nc                    s<   t    | I d H W  d    S 1 sw   Y  d S r6   )r7   receive_someZ	max_bytes)mrsr   r   do_receive_some  s   $z1test_MemoryReceiveStream.<locals>.do_receive_somer`   rC      ar   s   bcra   rn   rm   c                      r   )Nrz   )put_datar   )mrs2r   r   receive_some_hook  r   z3test_MemoryReceiveStream.<locals>.receive_some_hookc                      r   )Nclosedr   r   r   r   r   r     r   z,test_MemoryReceiveStream.<locals>.close_hooks   yyys   yyyxxxrz   s   zzzs   lost on closer   )MemoryReceiveStreamr   r8   r9   r   rt   r   r   r   Zput_eofru   r   r   r7   r   )r   r"   r   r   r   )r   r   r   r   test_MemoryReceiveStream  s\   

(




$r   c                     s   t  } |   ttj | dI d H dksJ W d    n1 s%w   Y  |   ttj | d W d    n1 sDw   Y  t  }|d |  ttj |dI d H  W d    d S 1 sow   Y  d S )Nr   rn   r[   rl   )r   ro   r8   r9   r   ru   r   r   )r   r   r   r   r   test_MemoryRecvStream_closing  s    
"r   c                     s   t  } t }t| | | dI d H  t| | |dI d H dks%J | dI d H  t| |dds6J |dI d H dksBJ t| |ddsKJ t| |ddsTJ t| |ddr]J |dI d H dksiJ |   t| | |dI d H dks~J d S )	Nr[   r   r\   rC   r      4s   56rn   )r   r   Zmemory_stream_pumprw   r   ro   )rx   r   r   r   r   test_memory_stream_pump  s"   


r   c               	      sf  t  \}  | jd usJ | jd u sJ | jd usJ  jd u s"J | dI d H   dI d H dks6J  fdd}t 4 I d H }|	|d t
 I d H  | dI d H  W d   I d H  n1 I d H siw   Y  t 4 I d H }|	|d t
 I d H  |  I d H  W d   I d H  n1 I d H sw   Y  t  \}  t 4 I d H }|	|d t
 I d H  |   W d   I d H  n1 I d H sw   Y  t  \}  | j}d | _| dI d H  dd	 } fd
d}t 4 I d H }|	|| |	| W d   I d H  n1 I d H sw   Y  || _| dI d H   dI d H dks1J d S )Nr[   r   c                    s     dI d H | ksJ d S Nr   r   )expectedrr   r   receiver     z1test_memory_stream_one_way_pair.<locals>.receiverr`   rn   r\   c                    s   t  I d H  | j  d S r6   )r   r    r!   )r"   r   r   r   cancel_after_idle*  r   z:test_memory_stream_one_way_pair.<locals>.cancel_after_idlec                      sD   t tj  dI d H  W d    d S 1 sw   Y  d S r   )r8   r9   r   r   r   r   r   r   r   check_for_cancel.  s   "z9test_memory_stream_one_way_pair.<locals>.check_for_cancelr^   s   456789)memory_stream_one_way_pairr}   r   r   r   rw   r   r   r   r   r   r   ro   )sr   r"   oldr   r   r   r   r   test_memory_stream_one_way_pair  sL   
((

(
*r   c               	      s   t  \  dI d H  dI d H  dI d H dks"J  dI d H dks.J   I d H  dI d H dksAJ fdd}  fdd}t 4 I d H }|| ||  W d   I d H  d S 1 I d H sqw   Y  d S )	Nr[   r`   r   rn   c                      s"   t  I d H   dI d H  d S )Nrl   )r   rw   r   )br   r   senderG  s   z'test_memory_stream_pair.<locals>.senderc                      s     dI d H dksJ d S )Nr   rl   r   r   )ar   r   r   K  r   z)test_memory_stream_pair.<locals>.receiver)memory_stream_pairrw   r   Zsend_eofr   r   r   )r   r   r"   r   )r   r   r   test_memory_stream_pair=  s   

.r   c                     s6   dd } t | d I d H  dd }t|d I d H  d S )Nc                         t  S r6   )r   r   r   r   r   one_way_stream_makerT     zDtest_memory_streams_with_generic_tests.<locals>.one_way_stream_makerc                      r   r6   )r   r   r   r   r   half_closeable_stream_makerY  r   zKtest_memory_streams_with_generic_tests.<locals>.half_closeable_stream_maker)check_one_way_streamZcheck_half_closeable_stream)r   r   r   r   r   &test_memory_streams_with_generic_testsS  
   r   c                     s6   dd } t | | I d H  dd }t||I d H  d S )Nc                      r   r6   )Zlockstep_stream_one_way_pairr   r   r   r   r   `  r   zFtest_lockstep_streams_with_generic_tests.<locals>.one_way_stream_makerc                      r   r6   )Zlockstep_stream_pairr   r   r   r   two_way_stream_makere  r   zFtest_lockstep_streams_with_generic_tests.<locals>.two_way_stream_maker)r   Zcheck_two_way_stream)r   r   r   r   r   (test_lockstep_streams_with_generic_tests_  r   r   c                     s0  dd } t  }|dI d H  |d | t|I d H  t  }|dI d H  |d | t|I d H  trXt jt jd}|dI d H  |d | t|I d H  tt drt jt jd}t	
 $}d	|}||I d H  |d | t|I d H  W d    d S 1 sw   Y  d S d S )
Nc                    s   | 4 I d H d t | I d H }|4 I d H @ |  I d H }|4 I d H  |dI d H  |dI d H dk W d   I d H  n1 I d H sFw   Y  W d   I d H  n1 I d H s[w   Y  W d   I d H  d S 1 I d H sqw   Y  d S )N   xrC   )Zopen_stream_to_socket_listeneracceptrw   r   )ZlistenerZclient_streamZserver_streamr   r   r   checkl  s   **.z2test_open_stream_to_socket_listener.<locals>.check)z	127.0.0.1r   r   )z0.0.0.0r   )family)z::r   AF_UNIXz{}/sock)tsocketr
   bindlistenr   r   AF_INET6hasattrr   tempfileTemporaryDirectoryrS   )r   sockZtmpdirpathr   r   r   #test_open_stream_to_socket_listenerk  s0   







"r   )$r   r8   Z_core.tests.tutilr    r   r   Z_highlevel_genericr   testingZtesting._check_streamsr   Ztesting._memory_streamsr	   r
   r   Z_highlevel_socketr   r#   r)   r5   r?   r@   rR   rX   rZ   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s:    *& HZ=8