o
    ACe3O                     @  sX  d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 ddl
mZmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlT ddlmZ ddlmZ d8ddZd9ddZd8ddZd:ddZd:ddZd8ddZ d8d d!Z!d8d"d#Z"d8d$d%Z#d8d&d'Z$d8d(d)Z%d8d*d+Z&d8d,d-Z'd8d.d/Z(d8d0d1Z)d8d2d3Z*d8d4d5Z+d8d6d7Z,dS );    )annotationsN)WarningsRecorder)Nursery)ReceiveStream
SendStream   )_coresleepsocket)can_bind_ipv6)StapledStreamaclose_forcefully)SocketListener)*)_assert_raises)_UnboundedByteQueuereturnNonec               	     s   g  d
 fdd} d
 fdd}t  4 I d H }||  || || W d   I d H  n1 I d H s9w   Y  g  d
 fdd}t  4 I d H }|| |j  W d   I d H  n1 I d H sjw   Y   d	gksvJ d S )Nr   r   c                    s,   t dD ]	} t I d H  q d d S )N
   zbusy bee exhausted)ranger   
checkpointappend)_record <usr/lib/python3.10/site-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   r   )r   open_nursery
start_sooncancel_scopecancel)r   r!   nurseryr%   r   r   r   test_wait_all_tasks_blocked   s    

(
(r,   
mock_clock	MockClockc              	     s   g  d 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s8J W d   I d H  d S 1 I d H sIw   Y  d S )	Nr   r   c                     s(     d tdI d H    d d S )Ntt start   tt finishedr   r	   r   r   r   r   timeout_task8   s   
z?test_wait_all_tasks_blocked_with_timeouts.<locals>.timeout_taskr/   r   r1   r&   )r   r'   r(   r    Zjump)r-   r3   r+   r   r   r   )test_wait_all_tasks_blocked_with_timeouts5   s   

.r4   c               	     s   g  d fdd} d fdd}d fdd}d fd	d
}t  4 I d H $}||  || || || || W d   I d H  n1 I d H sQw   Y   g dks^J d S )Nr   r   c                     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 endr2   r   r   r   r   blinkI   s   
z7test_wait_all_tasks_blocked_with_cushion.<locals>.blinkc                     r   )Nwait_no_cushion endr   r   r   r   r   wait_no_cushionP   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_cushionT      zDtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_small_cushionc                     r:   )NgQ?wait_big_cushion endr   r   r   r   r   wait_big_cushionX   r=   zBtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_big_cushion)r5   r8   r6   r;   r;   r>   r&   )r   r'   r(   )r7   r9   r<   r?   r+   r   r   r   (test_wait_all_tasks_blocked_with_cushionF   s   



(r@   recwarnr   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rA   Zpartial_yieldr   r   r   test_assert_checkpointsp   s2   "rK   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 rB   )	Zassert_no_checkpointsrD   rE   rF   r   r   rG   rH   rI   rJ   r   r   r   test_assert_no_checkpoints   s:   "rL   c               
     s  g  d fdddfd	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 sOw   Y   g dks\J W d   I d H  n1 I d H slw   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 )Nvalobjectr   r   c                   s   t |   |  d S rB   )rI   r   )rM   r   r   r   t   s   ztest_Sequencer.<locals>.tseq	Sequencerc              	     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   f1rR      rT   rU      rT   rW   r   rP   rO   r   r   rT      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   r\   r   r   rY   rZ   r   r   r\      s   
(
.ztest_Sequencer.<locals>.f2r0   )r[   rS   r]   rV   rX   r   )rM   rN   r   r   )rP   rQ   r   r   )rQ   r   r'   r(   r    rD   rE   RuntimeError)rT   r\   rP   r+   r   )r   rO   r   test_Sequencer   s2   (((*"r_   c               
     s8  g  t  d 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 sQw   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 )Niintr   r   c              
     s   t  L}| 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|  d Y n	w W d    d S W d    d S 1 sTw   Y  d S )NrR   zseq(z) RuntimeError)r   ZCancelScoper*   r^   r   )r`   scoper   rP   r   r   child   s    
("z$test_Sequencer_cancel.<locals>.childrR   r   r   zseq(1) RuntimeErrorzseq(2) RuntimeErrorrU   )r`   ra   r   r   )rQ   r   r'   r(   rD   rE   r^   )rd   r+   r   rc   r   test_Sequencer_cancel   s&   
*(*"re   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foorR   )rD   rE   rF   r   r^   	TypeErrorr   r   r   r   test__assert_raises   s    



rg   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  d fd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 sMw   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  d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   456rR      1r   s   23456   789string   abc   defs   ghi   ds   efghidatabytesr   r   c                   s   t  I d H   |  d S rB   )r    putrp   ubqr   r   putter  r"   z'test__UnboundeByteQueue.<locals>.putterexpectc                   sD   t     I d H | ksJ W d    d S 1 sw   Y  d S rB   )rC   get)rw   rt   r   r   getter  s   "z'test__UnboundeByteQueue.<locals>.getter   xyzs   asdf   ---    c                     s   t  I d H     d S rB   )r    closer   )ubq2r   r   closer<  s   z'test__UnboundeByteQueue.<locals>.closerrp   rq   r   r   )rw   rq   r   r   r&   )r   rr   
get_nowaitrD   rE   r   
WouldBlockrf   rC   rx   r'   r(   BusyResourceErrorr}   ClosedResourceError)rv   ry   r+   r   r   )ru   r~   r   test__UnboundeByteQueue   sr   






**0r   c               	     s   t  dfdd  dI d H  dd	ksJ  d
ks#J t   I d H  W d    n1 s8w   Y  ttj   W d    n1 sRw   Y  ttj d W d    n1 smw   Y   dI d H  t   I d H dksJ W d    n1 sw   Y  d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 s5J g dfdd}dfdd}dfdd}t |||j|u s[J j|u scJ j|u skJ dI d H   I d H  tI d H    g dksJ d S )Nrp   rq   r   r   c                   s>   t    | I d H  W d    d S 1 sw   Y  d S rB   )rC   send_allrs   )mssr   r   do_send_allH  s   "z*test_MemorySendStream.<locals>.do_send_allrh   rR   rj   s   23r   ri   r   c                     s6   z
 dI d H  W d S  t jy   d7 Y d S w )N   xxxrR   )r   r   r   )r   resource_busy_countr   r   do_send_all_count_resourcebusyb  s   z=test_MemorySendStream.<locals>.do_send_all_count_resourcebusyr   r|   r{   c                     s       dks	J d d S )Nrm   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_hookrm   )r   r   r   r   r   r&   )MemorySendStreamr   rC   Zwait_send_all_might_not_blockrD   rE   r   r   get_datar'   r(   acloser   r   r   r   r   r   r}   )r   r+   r   r   r   r   )r   r   r   r   r   r   test_MemorySendStreamE  sh   

(r   c               
     s  t   d 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s6J ttj2 t 4 I d H }|| d
 || d
 W d   I d H  n1 I d H sbw   Y  W d    n1 sqw   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  dfdd}g d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 sDw   Y  dgksQJ ttj
 d
I d H  W d    d S 1 slw   Y  d S )N	max_bytes
int | Noner   rq   c                   s<   t    | I d H W  d    S 1 sw   Y  d S rB   )rC   receive_somer   )mrsr   r   do_receive_some  s   $z1test_MemoryReceiveStream.<locals>.do_receive_somerm   rR      ar   s   bcrn   r|   r{   r   c                     r   )Nr   )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   yyyxxxr   s   zzzs   lost on closer   )r   r   r   rq   r&   )MemoryReceiveStreamr   rD   rE   r   r   r'   r(   r   Zput_eofr   r   r   rC   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   r|   rh   rz   )r   r}   rD   rE   r   r   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 )	Nrh   r   ri   rR   r      4s   56r|   )r   r   Zmemory_stream_pumpr   r   r}   )r   r   r   r   r   test_memory_stream_pump  s"   


r   c               	     sl  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 d 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 sjw   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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s4J d S )Nrh   r   expectedrq   r   r   c                   s     dI d H | ksJ d S Nr   r   )r   rr   r   receiver     z1test_memory_stream_one_way_pair.<locals>.receiverrm   r|   ri   r+   r   c                   s   t  I d H  | j  d S rB   )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   )rD   rE   r   r$   r   r   r   r   r   check_for_cancel1  s   "z9test_memory_stream_one_way_pair.<locals>.check_for_cancelrk   s   456789)r   rq   r   r   )r+   r   r   r   r&   )memory_stream_one_way_pairr   r   r   r   r   r   r   r'   r(   r    r   r}   )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 dfdd} d fd	d
}t 4 I d H }|| ||  W d   I d H  d S 1 I d H ssw   Y  d S )Nrh   rm   r   r|   r   r   c                     s"   t  I d H   dI d H  d S )Nrz   )r    r   r   )br   r   senderJ  s   z'test_memory_stream_pair.<locals>.senderc                     s     dI d H dksJ d S )Nr   rz   r   r   )ar   r   r   N  r   z)test_memory_stream_pair.<locals>.receiverr&   )memory_stream_pairr   r   Zsend_eofr   r'   r(   )r   r   r+   r   )r   r   r   test_memory_stream_pair@  s   

.r   c                    s:   ddd} t | d I d H  d	dd}t|d I d H  d S )
Nr   ,tuple[MemorySendStream, MemoryReceiveStream]c                        t  S rB   )r   r   r   r   r   one_way_stream_makerW     zDtest_memory_streams_with_generic_tests.<locals>.one_way_stream_makerqtuple[StapledStream[MemorySendStream, MemoryReceiveStream], StapledStream[MemorySendStream, MemoryReceiveStream]]c                     r   rB   )r   r   r   r   r   half_closeable_stream_maker\     zKtest_memory_streams_with_generic_tests.<locals>.half_closeable_stream_maker)r   r   )r   r   )check_one_way_streamZcheck_half_closeable_stream)r   r   r   r   r   &test_memory_streams_with_generic_testsV  
   

r   c                    s:   ddd} t | | I d H  d	dd}t||I d H  d S )
Nr    tuple[SendStream, ReceiveStream]c                     r   rB   )Zlockstep_stream_one_way_pairr   r   r   r   r   f  r   zFtest_lockstep_streams_with_generic_tests.<locals>.one_way_stream_makerYtuple[StapledStream[SendStream, ReceiveStream], StapledStream[SendStream, ReceiveStream]]c                     r   rB   )Zlockstep_stream_pairr   r   r   r   two_way_stream_makerk  r   zFtest_lockstep_streams_with_generic_tests.<locals>.two_way_stream_maker)r   r   )r   r   )r   Zcheck_two_way_stream)r   r   r   r   r   (test_lockstep_streams_with_generic_testse  r   r   c                    s2  ddd} t  }|dI d H  |d | t|I d H  t  }|d	I d H  |d | t|I d H  trYt 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 )Nlistenerr   r   r   c                   s   | 4 I d H f t | I d H }|4 I d H B |  I d H }|4 I d H  |dI d H  |dI d H dks8J W d   I d H  n1 I d H sHw   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 ssw   Y  d S )N   xrR   )Zopen_stream_to_socket_listeneracceptr   r   )r   Zclient_streamZserver_streamr   r   r   checku  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)r   r   r   r   )tsocketr
   bindlistenr   r   AF_INET6hasattrr   tempfileTemporaryDirectory)r   sockZtmpdirpathr   r   r   #test_open_stream_to_socket_listenert  s0   








"r   r&   )r-   r.   r   r   )rA   r   r   r   )-
__future__r   r   rD   r   trior   Ztrio.abcr   r    r   r	   r
   r   Z_core._tests.tutilr   Z_highlevel_genericr   r   Z_highlevel_socketr   testingZtesting._check_streamsr   Ztesting._memory_streamsr   r,   r4   r@   rK   rL   r_   re   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s>    

 

*


&
 

H
Z
=


8

