o
    OhȌ                  
   @  s  d dl m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
Z
d dlZd dlmZ zd dlZd dlmZ W n eyN Z z
ee W Y dZ[ndZ[ww d dlZd dlZd dlmZmZ d d	lmZmZ d
dlmZmZmZ eryd dlmZ e  Z!e!"dZ#ej$djddZ%djddZ&ej$djddZ'ej(j)ddej*dedgddgdZ+dkdd Z,edddd!dld'd(Z-e+dmd*d+Z.ednd.d/Z/dod0d1Z0dod2d3Z1dod4d5Z2dpd6d7Z3dpd8d9Z4dqd:d;Z5dpd<d=Z6drd?d@Z7ej()dAdBdCgdsdEdFZ8dtdGdHZ9dudIdJZ:dtdKdLZ;dpdMdNZ<edodOdPZ=dtdQdRZ>dodSdTZ?e+dvdUdVZ@ej(AdWdwdXdYZBej(AdWdqdZd[ZCej(AdWdqd\d]ZDej(AdWdqd^d_ZEdqd`daZFdudbdcZGdtdddeZHdpdfdgZIdpdhdiZJdS )x    )annotationsN)asynccontextmanager)count)TYPE_CHECKINGNoReturn)skip_if_optional_else_raise)SSL)DTLSChannelDTLSEndpoint)FakeNet	UDPPacket   )
binds_ipv6gc_collect_harderslow)AsyncGeneratorzexample.comreturnSSL.Contextc                  C     t t j} t|  | S N)r   ContextDTLS_METHODserver_certconfigure_certctx r   R/home/air/yokohama/back/venv/lib/python3.10/site-packages/trio/_tests/test_dtls.py
server_ctx"   s   
r   c                  C  r   r   )r   r   r   caconfigure_trustr   r   r   r   client_ctx_fn)   s   
r!   c                   C  s   t  S r   )r!   r   r   r   r   
client_ctx/   s   r"   ipv6FT)marksipv4)idskwargs
int | boolr
   c                  K  sD   |  dd}|rtjjntjj}tjjtjj|d}t|fi | S )Nr#   F)typefamily)poptriosocketAF_INET6AF_INET
SOCK_DGRAMr
   )r'   r#   r*   sockr   r   r   endpoint;   s   r2   )
autocancelmtur#   r3   boolr4   
int | None:AsyncGenerator[tuple[DTLSEndpoint, tuple[str, int]], None]c              
    s   t |da}|rdnd}|j|dfI d H  t 4 I d H ,}d fd	d
}||j| |I d H  ||j fV  |rB|j	  W d   I d H  n1 I d H sRw   Y  W d    d S W d    d S 1 sjw   Y  d S )Nr#   z::1	127.0.0.1r   dtls_channelr	   r   Nonec                   s   t d| jj d| j  d ur|   z/t d |  I d H  t d | 2 z3 d H W }t d|d| j | |I d H  q+6 W d S  tj	yW   t d Y d S w )Nzecho handler started: server z client zserver starting do_handshakezserver finished do_handshakezechoing  -> zecho handler channel broken)
printr2   r-   getsocknamepeer_addressset_ciphertext_mtudo_handshakesendr,   BrokenResourceError)r:   packetr4   r   r   echo_handlerO   s*   

z&dtls_echo_server.<locals>.echo_handler)r:   r	   r   r;   )
r2   r-   bindr,   open_nurserystartserver>   cancel_scopecancel)r   r3   r4   r#   server	localhostnurseryrF   r   rE   r   dtls_echo_serverB   s   
*"rP   r;   c              
     s  t | |d4 I d H \}}t| d}|||}ttj |  W d    n1 s/w   Y  | I d H  |	dI d H  |
 I d H dksNJ |	dI d H  |
 I d H dksaJ tjtdd |	dI d H  W d    n1 s{w   Y  |d | }|d	 | |ksJ |d | |ksJ W d    n1 sw   Y  W d   I d H  d S 1 I d H sw   Y  d S )
Nr#   r   r8      hellos   goodbyez4^openssl doesn't support sending empty DTLS packets$match    i  i  )rP   r2   connectpytestraisesr,   NeedHandshakeErrorget_cleartext_mturA   rB   receive
ValueErrorr@   )r#   r   r"   _server_endpointaddressclient_endpointclient_channelcleartext_mtu_1234r   r   r   
test_smokek   s8   



.rb   autojump_clocktrio.testing.MockClockc                   s  d}t dt     d| _t|d4 I d H \}}t 4 I d H d fd	d
dfdd}| _t	|D ]k}t
d t
d t
d t R}||t }t
d | I d H  t
d t| }		 td}
||	I d H  | I d H |	ksJ W d    n1 sw   Y  |
jsnqmW d    n1 sw   Y  q>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 )Nd   r   gMbP?r   rD   r   r   r;   c                   s   	 j g dg ddd }t| j d| j d|  |dkr#d S |d	kr- |  n/|d
kr>t d I d H  n|dksDJ t| j d| j d| j	    
|  d S q)NT)deliverdropdupedelay)gffffff?皙?rk   rk   )weightsr   r<   z: rh   ri   rj      rg   z: delivered )choicesr=   sourcedestinationsend_packetr,   sleeprandompayloadhexdeliver_packet)rD   op)fnrr   r   route_packet   s0   
z:test_handshake_over_terrible_network.<locals>.route_packetc                   s(   z	  |  W d S  ty   Y d S w r   )
start_soonRuntimeErrorrD   )rO   rz   r   r   route_packet_wrapper   s
   zBtest_handshake_over_terrible_network.<locals>.route_packet_wrapperzP################################################################################zclient starting do_handshakezclient finished do_handshakeT
   rD   r   r   r;   )rs   Randomr   enableautojump_thresholdrP   r,   rH   rz   ranger=   r2   rV   r!   rA   strencodemove_on_afterrB   r[   cancelled_caught)rc   r   
HANDSHAKES_r^   r~   ir_   clientmsgcscoper   )rx   rO   ry   rz   r   $test_handshake_over_terrible_network   sF   
-*.r   c              	     s   t | d4 I d H :\}}t !}|||}|dI d H  | I d H dks*J W d    n1 s4w   Y  W d   I d H  d S 1 I d H sJw   Y  d S )Nrf      xyz)rP   r2   rV   rB   r[   r   r"   r   r^   r_   r   r   r   r   test_implicit_handshake   s   .r   c                   sD  t  }t  x}|jdI d H  t 4 I d H T}d	dd}||j| |I d H  ||j |}t 4 I d H }|	|j
d |	|j W d   I d H  n1 I d H sZw   Y  |j  W d   I d H  n1 I d H stw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )
Nr9   r   channelr	   r   r;   c              	     s^   t  4 I d H }|| jd || j W d   I d H  d S 1 I d H s(w   Y  d S )Ns   from server)r,   rH   r{   rB   r[   )r   rO   r   r   r   handler   s
   .z!test_full_duplex.<locals>.handlers   from clientr   r	   r   r;   )r2   r-   rG   r,   rH   rI   rJ   rV   r>   r{   rB   r[   rK   rL   )r   r"   server_endpointr_   server_nurseryr   r   rO   r   r   r   test_full_duplex   s$   
((Pr   c              
     s  t | d4 I d H x\}}t _}|||}| I d H  |  ttj |	dI d H  W d    n1 s;w   Y  ttj |
 I d H  W d    n1 sXw   Y  |  | I d H  W d    n1 srw   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nrf      abc)rP   r2   rV   rA   closerW   rX   r,   ClosedResourceErrorrB   r[   acloser   r   r   r   test_channel_closing  s    .r   c              	     sZ   t d| d4 I d H \}}|  W d   I d H  n1 I d H s"w   Y  |  d S )NF)r3   r   )rP   r   )r   r   _addressr   r   r   !test_serve_exits_cleanly_on_close  s   
(r   c           	        s`  t | d4 I d H \}}t | d4 I d H \}}t }||t }||t }|dI d H  |dI d H  | I d H dksGJ | I d H dksRJ |  tt	j
 |dI d H  W d    n1 sow   Y  tt	j
 | I d H  W d    n1 sw   Y  tt	j
 ||t  W d    n1 sw   Y  dd	d
}t	 4 I d H ,}tt	j
 ||j| |I d H  W d    n1 sw   Y  W d   I d H  n1 I d H sw   Y  W d    n1 sw   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 s)w   Y  d S )Nrf   r   r      xxxr   objectr   r;   c                      d S r   r   r   r   r   r   null_handlerA     z+test_client_multiplex.<locals>.null_handlerr   r   r   r;   )rP   r2   rV   r!   rB   r[   r   rW   rX   r,   r   rH   rI   rJ   )	r   r   address1address2r_   client1client2r   rO   r   r   r   test_client_multiplex*  sB   

(\r   c               	     sx   t j ,} tjtdd t|  W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S )Nz#^DTLS requires a SOCK_DGRAM socket$rS   )r,   r-   rW   rX   r\   r
   )sr   r   r   test_dtls_over_dgram_onlyI  s   
"r   c              
     sT  ddd}t  }|jdI d H  t 4 I d H <}||j| |I d H  ttj	 ||j| |I d H  W d    n1 sCw   Y  |j
  W d   I d H  n1 I d H s]w   Y  t 4 I d H }||j| |I d H  |j
  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 )	Nr   r   r   r;   c                   r   r   r   r   r   r   r   r   P  r   z'test_double_serve.<locals>.null_handlerr   r   )r2   r-   rG   r,   rH   rI   rJ   rW   rX   BusyResourceErrorrK   rL   )r   r   r   rO   r   r   r   test_double_serveO  s$   
(*	"r   trio.abc.Clockc              
     s   t  }|  t W}t ;}|jdI d H  td}||j |}|	 I d H  W d    n1 s9w   Y  |j
sCJ W d    n1 sMw   Y  W d    d S W d    d S 1 sew   Y  d S )Nr   re   )r   r   r2   r-   rG   r,   r   rV   r>   rA   r   )rc   r"   rx   r   r   r   r   r   r   r   test_connect_to_non_servera  s   Pr   buffer_sizer      intc              	     s>  t  }|  t|d4 I d H \}}t|df}|j|ks!J |||}t|d D ]}	|t|		 I d H  t
dI d H  q-| }
|
jdksOJ t|D ]}	| I d H t|		 ksdJ qS|dI d H  | I d H dksxJ W d    n1 sw   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nrf   )incoming_packets_buffer      s   buffer clear now)r   r   rP   r2   r   rV   r   rB   r   r   r,   rr   
statistics incoming_packets_dropped_in_trior[   )rc   r   r"   r   rx   r   r^   r_   r   r   statsr   r   r   test_incoming_buffer_overflowo  s$    .r   c                   s  t  }|  ddlm}m}m}m}m}m}m	}	 |	||j
|jd|||jddddtddd}
|
d }|
d d }|
d d }t|
}d	|d
< |	||j
|jd|||jddddtddd}|	||j
|jd|||jddddtddd d}|	||j
|jddd}|	||j
|jdtdd d}t|d4 I d H G\}}tjjtjjd(}dd||||||||f
D ]}|||I d H  tdI d H  qW d    n1 sw   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nr   )ContentTypeHandshakeFragmentHandshakeTypeProtocolVersionRecordencode_handshake_fragmentencode_recordr   )msg_typemsg_lenmsg_seqfrag_offsetfrag_lenfrag)content_typeversionepoch_seqnort                r   rU   #      rf   r)   r   r   )r   r   
trio._dtlsr   r   r   r   r   r   r   	handshakeDTLS10client_hellobytes	bytearrayrP   r,   r-   r0   sendtorr   )rc   r   rx   r   r   r   r   r   r   r   r   client_hello_extendedclient_hello_shortclient_hello_really_shortclient_hello_corrupt_record_lenclient_hello_fragmented$client_hello_trailing_data_in_recordhandshake_empty client_hello_truncated_in_cookier   r^   r1   
bad_packetr   r   r   *test_server_socket_doesnt_crash_on_garbage  s   $

	
	.r   c              
     s   t    ddlm m t Stdd fdd	}|_t	|d
4 I d H %\}}	 t
 }|||}| I d H  W d    n1 sOw   Y  q41 I d H s[w   Y  W d    n1 sjw   Y  jstJ d S )Nr   )	BadPacketdecode_client_hello_untrustedr   rD   r   r   r;   c                   s   z
| j \}}}W n	  y   Y n/w t|dkrBt| j }t}|t|kr3t|d }  ||  dN  < tj| |d} |  d S )Nr   r   )rt   )rt   lenr   nextrL   attrsevolverv   )rD   r   cookiert   offsetr   r   r   rx   offset_to_corruptr   r   rz     s   
z2test_invalid_cookie_rejected.<locals>.route_packetrf   Tr   )r   r   r   r   r   r,   CancelScoper   rz   rP   r2   rV   rA   r   )rc   r   r"   rz   r   r^   r   r   r   r   r   test_invalid_cookie_rejected  s$   
!r   c                   s  t  }|  t }t }|jdI d H  t 4 I d H t}dd fdd}||j||I d H  t	d	 t
  ||j t }| I d H  W d    n1 s[w   Y   jseJ t	d
 ||j t }| I d H dks~J tdI d H  |j  W d   I d H  n1 I d H sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   Tr   r	   r   r;   c                   s   r9dt d    tdI d H  t d ttj |  I d H  W d    d S 1 s2w   Y  d S t d | dI d H  d S )NFz'handler: first time, cancelling connectg      ?z"handler: handshake should fail nowz&handler: not first time, sending hellorR   )	r=   rL   r,   rr   rW   rX   rC   rA   rB   r   connect_cscope
first_timer   r   r   3  s   "zAtest_client_cancels_handshake_and_starts_new_one.<locals>.handlerzclient: starting first connectzclient: starting second connectrR   r   r   )r   r   r2   r-   rG   r,   rH   rI   rJ   r=   r   rV   r>   r!   rA   r   r[   rr   rK   rL   )rc   r   rx   rM   r   rO   r   r   r   r   r   0test_client_cancels_handshake_and_starts_new_one%  s.   

(Pr   c                   s  t  }t  }|jdI d H  |jdI d H  ddd d fdd	}t 4 I d H }||j| |I d H  ||j|  I d H  ||j t	 }|
d
I d H  | I d H d
kscJ ||j t	 }| I d H  ttj |
dI d H  W d    n1 sw   Y  |
dI d H  | I d H dksJ |j  W d   I d H  n1 I d H sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r   r	   r   r;   c                   s*   | 2 z3 d H W }|  |I d H  q6 d S r   )rB   )r   rD   r   r   r   rF   W  s   z-test_swap_client_server.<locals>.echo_handlerc                   sB   t tj  | I d H  W d    d S 1 sw   Y  d S r   )rW   rX   r,   rC   r   rF   r   r   crashing_echo_handler[     "z6test_swap_client_server.<locals>.crashing_echo_handlers   b as clients   association brokens   a as clientr   )r2   r-   rG   r,   rH   rI   rJ   rV   r>   r!   rB   r[   rA   rW   rX   rC   rK   rL   )r   abr   rO   b_to_aa_to_br   r   r   test_swap_client_serverR  s.   
(Pr   c                   s  t    ddfdd}|_t| d4 I d H d\} t Kt 4 I d H 0}d fd	d
}|| tdI d H  d|j	
dj	 I d H  W d   I d H  n1 I d H scw   Y  W d    n1 srw   Y  W d   I d H  d S 1 I d H sw   Y  d S )NTrD   r   r   r;   c                   s*    r	t d|  d S t d|  |  d S )Nzdropped packetzdelivered packet)r=   rv   r}   
blackholedrx   r   r   rz   }  s
   

z@test_openssl_retransmit_doesnt_break_stuff.<locals>.route_packetrf   c                    sJ     } | jddI d H  | dI d H  |  I d H dks#J d S )Ng      ?initial_retransmit_timeout   hi)rV   rA   rB   r[   )r   )r^   r"   r_   r   r   	connecter  s
   z=test_openssl_retransmit_doesnt_break_stuff.<locals>.connecterg?Fr   r   r   r;   )r   r   rz   rP   r2   r,   rH   r{   rr   r-   r   r>   )r   r"   rz   r   rO   r  r   )r^   r   r"   r_   rx   r   *test_openssl_retransmit_doesnt_break_stuffq  s*   
(.r  c           
   
     s   t    d d fdd}|_t|d4 I d H H\}}d	D ]7}t *}t }d ||t }|j	|d
I d H  t }	|	| |ksKJ W d    n1 sUw   Y  q#W d   I d H  d S 1 I d H slw   Y  d S )NTrD   r   r   r;   c                   s    rd d S  |  d S )NF)rv   r}   r   r   r   rz     s   zCtest_initial_retransmit_timeout_configuration.<locals>.route_packetrf   )r   r      r  r   )
r   r   rz   rP   r2   r,   current_timerV   r!   rA   )
rc   r   rz   r   r^   tr   beforer   afterr   r   r   -test_initial_retransmit_timeout_configuration  s&   .r  c              	     s   d t    d
 fdd}|_t | d4 I d H F\}}t -}|||}|  | I d H  |d	I d H  |	 I d H d	ksKJ W d    n1 sUw   Y  W d   I d H  d S 1 I d H skw   Y  d S )Ni,  rD   r   r   r;   c                   sB   t d|   t dt| j  t| j ksJ |  d S )Ndelivering zpayload size: )r=   r   rt   rv   r}   MTUrx   r   r   rz     s   z9test_explicit_tiny_mtu_is_respected.<locals>.route_packet)r4   r   r  r   )
r   r   rz   rP   r2   rV   r@   rA   rB   r[   )r   r"   rz   _serverr^   r   r   r   r  r   #test_explicit_tiny_mtu_is_respected  s   
.r  c           	   	     s   t      | rdndd fdd}| _t| |d	4 I d H I\}}t| d
.}|||}|d |dI d H  | I d H dksJJ |	 dksRJ W d    n1 s\w   Y  W d   I d H  d S 1 I d H srw   Y  d S )Ni  i$  rD   r   r   r;   c                   s<   t | jkrtd|   d S td|    |  d S )Nz	dropping r  )r   rt   r=   rv   r}   rx   r4   r   r   rz     s   z@test_handshake_handles_minimum_network_mtu.<locals>.route_packetrQ   r8   i'  r   i(#  r   )
r   r   rz   rP   r2   rV   r@   rB   r[   rZ   )	r#   rc   r   r"   rz   r   r^   r_   r   r   r  r   *test_handshake_handles_minimum_network_mtu  s   
.r  z$always:unclosed DTLS:ResourceWarningc                   s   t j j}d fdd}tt | I d H }t j I d H  t	  W d    n1 s/w   Y  t j I d H  t j j}||k sHJ ||ksNJ d S )Nr   r   c               
     s   t  } tjjtjjdI}|dI d H  | |  }t 4 I d H }||j	 tj
 I d H  |j  W d   I d H  n1 I d H sJw   Y  W d    n1 sYw   Y  tj j}|S )Nr   r   )r2   r,   r-   r0   rG   rV   r>   rH   r{   rA   testingwait_all_tasks_blockedrK   rL   lowlevelcurrent_statisticstasks_living)er   crO   during_tasksr"   r   r   start_and_forget_endpoint  s   (zDtest_system_task_cleaned_up_on_gc.<locals>.start_and_forget_endpoint)r   r   )
r,   r  r  r  rW   warnsResourceWarningr  r  r   )r"   before_tasksr  r  after_tasksr   r  r   !test_system_task_cleaned_up_on_gc  s   r"  c                    sN   t  } tt ~ t  W d    n1 sw   Y  tj I d H  d S r   )r2   rW   r  r  r   r,   r  r  r  r   r   r   !test_gc_before_system_task_starts(  s   r$  c                    s   t  } |   t }|jdI d H  |  tj I d H  tjjtjj	d}|
d|j I d H  W d    n1 s@w   Y  tt ~t  W d    d S 1 sZw   Y  d S )Nr   r   r   )r   r   r2   r-   rG   _ensure_receive_loopr,   r  r  r0   r   r>   rW   r  r  r   )rx   r  r   r   r   r   test_gc_as_packet_received3  s   "r&  c                  C  sL   ddd} t | }tt ~t  W d    d S 1 sw   Y  d S )Nr   r
   c                    s   t  } |   t S r   )r   r   r2   )rx   r   r   r   mainJ  s   z&test_gc_after_trio_exits.<locals>.main)r   r
   )r,   runrW   r  r  r   )r'  r  r   r   r   test_gc_after_trio_exitsH  s   

	"r)  c                    sH   t  } | j  tj I d H  W d    d S 1 sw   Y  d S r   )r2   r-   r   r,   r  r  r#  r   r   r   'test_already_closed_socket_doesnt_crashY  s
   
"r*  c              
     s   t      t|d4 I d H N\}d	 fdd}| _t *}td |||}| I d H  W d    n1 s@w   Y  W d    n1 sOw   Y  W d   I d H  d S 1 I d H sew   Y  d S )
Nrf   rD   r   r   r;   c                   s     |  j  d S r   )rv   r-   r   r}   rx   rM   r   r   rz   l  s   
zEtest_socket_closed_while_processing_clienthello.<locals>.route_packetr   r   )	r   r   rP   rz   r2   r,   r   rV   rA   )rc   r   r"   r^   rz   r_   r   r   r+  r   /test_socket_closed_while_processing_clienthellob  s   .r,  c           	        s  t  }|  ddd}||_t|d4 I d H a\}}t H}||t  t 4 I d H &}d fdd	}|	| t
d
I d H  ||t  W d   I d H  n1 I d H s[w   Y  W d    n1 sjw   Y  W d   I d H  d S 1 I d H sw   Y  d S )NrD   r   r   r;   c                 S  s   d S r   r   r}   r   r   r   rz   ~  s   zGtest_association_replaced_while_handshake_running.<locals>.route_packetrf   c                     sB   t tj   I d H  W d    d S 1 sw   Y  d S r   )rW   rX   r,   rC   rA   r   c1r   r   doomed_handshake  r   zKtest_association_replaced_while_handshake_running.<locals>.doomed_handshaker   r   r  )r   r   rz   rP   r2   rV   r!   r,   rH   r{   rr   )	rc   r   rx   rz   r   r^   r_   rO   r/  r   r-  r   1test_association_replaced_while_handshake_runningx  s"   

(.r0  c              
     s   t  }|  ddd}||_t| d4 I d H L\}}t 3}||t }||t  tt	j
 | I d H  W d    n1 sFw   Y  W d    n1 sUw   Y  W d   I d H  d S 1 I d H skw   Y  d S )	NrD   r   r   r   c                 S  s   t  r   )AssertionErrorr}   r   r   r   rz     s   zGtest_association_replaced_before_handshake_starts.<locals>.route_packetrf   )rD   r   r   r   )r   r   rz   rP   r2   rV   r!   rW   rX   r,   rC   rA   )r   rx   rz   r   r^   r_   r.  r   r   r   1test_association_replaced_before_handshake_starts  s   
.r2  c                   s  t | d4 I d H u\}}t \}t 4 I d H A}tddD ]}|d|ft }||j q||t }|	dI d H  |
 I d H dksKJ |j  W d   I d H  n1 I d H s`w   Y  W d    n1 sow   Y  W d   I d H  d S 1 I d H sw   Y  d S )Nrf   r   r   r9   r   )rP   r2   r,   rH   r   rV   r!   r{   rA   rB   r[   rK   rL   )r   r   r^   r_   rO   r   r   r   r   r   test_send_to_closed_local_port  s   (.r3  )r   r   )r'   r(   r   r
   )
r   r   r3   r5   r4   r6   r#   r5   r   r7   )r#   r5   r   r   r"   r   r   r;   )rc   rd   r   r   r   r;   )r   r   r"   r   r   r;   )r   r   r   r;   r  )rc   r   r"   r   r   r;   )
rc   r   r   r   r"   r   r   r   r   r;   )rc   r   r   r   r   r;   )rc   r   r   r   r"   r   r   r;   )
r#   r5   rc   r   r   r   r"   r   r   r;   )r"   r   r   r;   )K
__future__r   rs   
contextlibr   	itertoolsr   typingr   r   r   rW   trio._tests.pytest_pluginr   trustmeOpenSSLr   ImportErrorerrorr,   trio.testingr	   r
   trio.testing._fake_netr   r   _core._tests.tutilr   r   r   collections.abcr   CAr   
issue_certr   fixturer   r!   r"   markparametrizeparamparametrize_ipv6r2   rP   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  filterwarningsr"  r$  r&  r)  r*  r,  r0  r2  r3  r   r   r   r   <module>   s    


( 
Y








r
,
-
6

$
#




	

