a
    QIhP                  
   @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZ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mZmZmZmZ zd dl Z d dl!m"Z" W n. e#y Z$ zee$ W Y dZ$[$n
dZ$[$0 0 d dlZddl%m&Z&mZ' ddl(m)Z) ddl&m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZA erd dlBmCZCmDZDmEZEmFZF d dlGmHZH d dlImJZJ d dlKmLZL ddlMmNZN e O ZPePQdZReSejTjUZVeWedr:eV jXejY M  _XeRZeV ej[ddd gd!d"d#d$d%d&Z\d'd(d)d*d+d,d-d.Z]e	dd*d/d0d1d2Z^e	dd3d*d4d5d6d7Z_G d8d9 d9e)Z`d+d:d;d<Zae
dd3d=d>d?d@dAZbdddBd3dCdCdDdDdEdFdGdHZceeef ZddIeedJ< dd3dKdKdLdMdNdOZfeeef ZgdIeedP< dd3dKdKdQdMdRdSZhd3d+dTdUdVZid3d+dTdWdXZjd3d+dTdYdZZkd3d+dTd[d\Zld3d+dTd]d^Zme-d_d3d+d`dadbZnd3d+dTdcddZod+d:dedfZpejqjrejsdgkoejtdhkdidjd3d+dTdkdlZud3d+dTdmdnZvejqwdod'dpgd3d*d+dqdrdsZxd3d+dTdtduZyd3d+dTdvdwZzd3d+dTdxdyZ{d3d+dTdzd{Z|d3d+dTd|d}Z}d3d+dTd~dZ~d+d:ddZd3d+dTddZd3d+dTddZd3d+dTddZd3d+dTddZd3d+dTddZd3d+dTddZd3d+dTddZd3d+dTddZejqddd3d+dTddZd3d+dTddZd3d+dTddZd3d+dTddZd3d+dTddZdS )    )annotationsN)asynccontextmanagercontextmanagersuppress)partial)
SSLContext)TYPE_CHECKINGAnyNoReturn)StapledStream)skip_if_optional_else_raise)ReceiveStream
SendStream)MatcherMemoryReceiveStreamMemorySendStreamRaisesGroup)SSL   )_coresocket)Stream)BrokenResourceErrorClosedResourceError)slow)aclose_forcefully)open_tcp_stream)SocketListenerSocketStream)NeedHandshakeErrorSSLListener	SSLStream_is_eof)ConflictDetector)	Sequencerassert_checkpointscheck_two_way_streamlockstep_stream_pairmemory_stream_pair)AsyncIterator	AwaitableCallableIterator)	TypeAlias)	MockClock)T_Stream)CancelScopetrio-test-1.example.orgOP_IGNORE_UNEXPECTED_EOFmoduletls13tls12)scopeparamszpytest.FixtureRequestzssl.SSLContext)requestreturnc                 C  s^   t  }tt dr$| jt j M  _t| | jdv r<|S | jdkrTt jj	|_
|S t d S )Nr2   )defaultr4   r5   )sslcreate_default_contexthasattroptionsr2   TRIO_TEST_CAZconfigure_trustparam
TLSVersionTLSv1_2maximum_versionAssertionError)r8   ctx rF   N/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/trio/_tests/test_ssl.py
client_ctxb   s    




rH   Fexpect_failzstdlib_socket.socketboolNone)sockrJ   r9   c             
   C  s:  z(zt j| ddd}| |  |d}|stttj |  W d    n1 s\0    Y  W d    W W | 	  d S |
| q$W d    n1 s0    Y  W nb ttfy   Y W | 	  d S  ty } z(|rtd| ntd|  W Y d }~nd }~0 0 |r tdW | 	  n
| 	  0 d S )NTF)server_sidesuppress_ragged_eofsi   z*ssl_echo_serve_sync got error as expected:z)ssl_echo_serve_sync got unexpected error:zfailed to fail?)
SERVER_CTXwrap_socketdo_handshakerecvr   BrokenPipeErrorr;   SSLZeroReturnErrorunwrapclosesendallConnectionResetErrorConnectionAbortedError	ExceptionprintRuntimeError)rM   rJ   wrappeddataexcrF   rF   rG   ssl_echo_serve_synct   s8    
&.

ra   zAsyncIterator[SocketStream])rJ   r9   c                 C s   t  \}}t 4 I d H }|^ |: |tjjtt|| d t	t
|V  W d    n1 sh0    Y  W d    n1 s0    Y  W d   I d H  q1 I d H s0    Y  d S )NrI   )stdlib_socket
socketpairtrioopen_nursery
start_soon	to_threadZrun_syncr   ra   r   tsocketfrom_stdlib_socket)rJ   abnurseryrF   rF   rG   ssl_echo_server_raw   s    rm   r   z AsyncIterator[SSLStream[Stream]])rH   rJ   r9   c              	   C sR   t |d4 I d H &}t|| ddV  W d   I d H  qN1 I d H sD0    Y  d S )NrI   r1   server_hostname)rm   r!   )rH   rJ   rM   rF   rF   rG   ssl_echo_server   s    rp   c                   @  sx   e Zd ZddddddZdddd	Zd
dddZddddZddddZdddddZddddddZ	dS )PyOpenSSLEchoStreamN'Callable[[str], Awaitable[None]] | NonerL   )sleeperr9   c                 C  s   t t j}ddlm} | }||jj tt dr:J t	
| t |d | _| j  t | _t | _td| _td| _|  |d u rdddd	d
}|| _n|| _d S )Nr   )BindingZOP_NO_TLSv1_4z2simultaneous calls to PyOpenSSLEchoStream.send_allz6simultaneous calls to PyOpenSSLEchoStream.receive_someobjectrL   _r9   c                   s   d S NrF   rw   rF   rF   rG   no_op_sleeper   s    z3PyOpenSSLEchoStream.__init__.<locals>.no_op_sleeper)r   ContextZSSLv23_METHODZ,cryptography.hazmat.bindings.openssl.bindingrt   Zset_optionslibZSSL_OP_NO_TLSv1_3r=   TRIO_TEST_1_CERTconfigure_cert
Connection_connZset_accept_stater   Z
ParkingLot_lot	bytearray_pending_cleartextr#   _send_all_conflict_detector_receive_some_conflict_detectorrs   )selfrs   rE   rt   rk   rz   rF   rF   rG   __init__   s*    


zPyOpenSSLEchoStream.__init__r9   c                   s   | j   d S rx   )r   Zbio_shutdownr   rF   rF   rG   aclose   s    zPyOpenSSLEchoStream.acloserK   c                 C  s
   | j  S rx   )r   renegotiate_pendingr   rF   rF   rG   r      s    z'PyOpenSSLEchoStream.renegotiate_pendingc                 C  s   | j  sJ d S rx   )r   renegotiater   rF   rF   rG   r      s    zPyOpenSSLEchoStream.renegotiatec                   sV   | j < t I d H  t I d H  | dI d H  W d    n1 sH0    Y  d S )Nwait_send_all_might_not_block)r   r   
checkpointrs   r   rF   rF   rG   r     s    z1PyOpenSSLEchoStream.wait_send_all_might_not_blockbytesr_   r9   c              	     s  t d | j t I d H  t I d H  | dI d H  | j| | dI d H  z| jd}W nH tj	y   | j
  t d| j  Y qY qH tjy   Y qY qH0 |  j|7  _qH| j  | dI d H  t d W d    n1 s0    Y  d S )Nz  --> transport_stream.send_allsend_all   zrenegotiations:z(  <-- transport_stream.send_all finished)r\   r   r   r   rs   r   Z	bio_writerS   r   ZZeroReturnErrorshutdownZtotal_renegotiationsWantReadErrorr   r   Z
unpark_allr   r_   rF   rF   rG   r   
  s&    


zPyOpenSSLEchoStream.send_all
int | None)nbytesr9   c                   s  t d |d u rd}| j zzt I d H  t I d H  | dI d H  z6| j|W W | dI d H  t d W  d    S  tjy|   | j	r`t d| j	 z"| j	dd }| j
t| W n tjyP   z>| j|W  Y  Y W | dI d H  t d W  d    S  tjyJ   t d | j I d H  Y n0 Y n0 | j	dd= nt d	 | j I d H  Y q>0 q>W | dI d H  t d n| dI d H  t d 0 W d    n1 s0    Y  d S )
Nz#  --> transport_stream.receive_somei   receive_somez,  <-- transport_stream.receive_some finishedz
    tryingr   r   zparking (a)zparking (b))r\   r   r   r   rs   r   Zbio_readr   r   r   sendr   r   Zpark)r   r   Z	next_byterF   rF   rG   r   !  sF    
)
z PyOpenSSLEchoStream.receive_some)N)N)
__name__
__module____qualname__r   r   r   r   r   r   r   rF   rF   rF   rG   rq      s    -rq   r   c                    sj   dddddddd} | ddddI d H  | ddd	d
I d H  | d	d
d	d
I d H  | ddddI d H  d S )Nstrztuple[object, ...]rL   )func1args1func2args2r9   c              
     s   t  }tttjd| t 4 I d H F}|jt|| g|R   |jt||g|R   W d   I d H  q1 I d H sz0    Y  W d    n1 s0    Y  d S )NZsimultaneous)rq   r   r   r   BusyResourceErrorre   rf   getattr)r   r   r   r   srl   rF   rF   rG   do_test`  s
    zDtest_PyOpenSSLEchoStream_gives_resource_busy_errors.<locals>.do_testr   )   xr   rF   r   )r   rF   )r   rF   rF   rG   3test_PyOpenSSLEchoStream_gives_resource_busy_errorsY  s    
r   rr   z(Iterator[SSLStream[PyOpenSSLEchoStream]])rH   rs   r9   c                 c  s   t |d}t|| ddV  d S )Nrs   r1   rn   )rq   r!   )rH   rs   ZfakesockrF   rF   rG   virtual_ssl_echo_serverw  s    
r   client_kwargsserver_kwargsr/   zdict[str, Any] | Nonez/tuple[SSLStream[T_Stream], SSLStream[T_Stream]])rH   client_transportserver_transportr   r   r9   c                C  sL   |d u ri }|d u ri }t || fddi|}t |tfddi|}||fS )Nro   r1   rN   T)r!   rP   )rH   r   r   r   r   
client_ssl
server_sslrF   rF   rG   ssl_wrap_pair  s*    r   r-   MemoryStapledStreamz+dict[str, str | bytes | bool | None] | NoneEtuple[SSLStream[MemoryStapledStream], SSLStream[MemoryStapledStream]])rH   r   r   r9   c                 C  s   t  \}}t| ||||dS Nr   )r(   r   rH   r   r   r   r   rF   rF   rG   ssl_memory_stream_pair  s    
r   MyStapledStream=tuple[SSLStream[MyStapledStream], SSLStream[MyStapledStream]]c                 C  s   t  \}}t| ||||dS r   )r'   r   r   rF   rF   rG   ssl_lockstep_stream_pair  s    
r   )rH   r9   c              	     s  t | 4 I d H V}|jrJ |dI d H  |dI d H dksDJ | I d H  W d   I d H  q|1 I d H sr0    Y  tdd4 I d H }t }t||dd}|jrJ t	
t }|dI d H  W d    n1 s0    Y  t|jjtjsJ W d   I d H  q,1 I d H s"0    Y  tdd4 I d H }t|| dd}|jrZJ t	
t }|dI d H  W d    n1 s0    Y  t|jjtjsJ W d   I d H  q1 I d H s0    Y  d S )Nr   r   TrI   r1   rn   ztrio-test-2.example.org)rp   rN   r   r   r   rm   r;   r<   r!   pytestraisesr   
isinstancevalue	__cause__SSLErrorCertificateError)rH   r   rM   Zbad_client_ctxexcinforF   rF   rG   test_ssl_client_basics  s$    
8
.B0r   c              	     s  t  \ }  | t|}tt|tdd}|js>J dd fdd}tj	|d}|
  |dI d H d	ks~J |d
I d H  |dI d H dksJ |dI d H dksJ | I d H  |  W d    n1 s0    Y  W d    n1 s0    Y  d S )NTrN   rL   r   c                    s`   j  dd>} | d | ddks,J | d |   W d    n1 sR0    Y  d S )Nr1   rn   r   r      y   z)rQ   rX   rS   rV   )Zclient_sockrj   rH   rF   rG   client  s    

z&test_ssl_server_basics.<locals>.client)targetr   r   r   r       )rb   rc   rh   ri   r!   r   rP   rN   	threadingThreadstartr   r   r   join)rH   rk   Zserver_sockr   r   trF   r   rG   test_ssl_server_basics  s$    


r   c              	     s  t dd4 I d H }| }t }t||dd}|j|u s>J |j|u sLJ |jdksZJ |jdkshJ t	t
 |j W d    n1 s0    Y  dt|v sJ dt|v sJ t	t
 d|_W d    n1 s0    Y  t	t
 d|_W d    n1 s0    Y  ||_|j|u s0J t	t}| I d H  W d    n1 s`0    Y  t|jjtjsJ W d   I d H  q1 I d H s0    Y  d S )	NTrI   r1   rn   Ftransport_streamcontextZasdf)rm   r;   r<   r!   r   r   rN   ro   r   r   AttributeErrorZ
asfdasdfsadirr   rR   r   r   r   r   )rH   rM   Zgood_ctxZbad_ctxr   r   rF   rF   rG   test_attributes  s*    $$&.r   c              
     s<  d d  t  t  ddd fdd}dddfdd	}t| 4 I d H }t 4 I d H F}||| ||| ||j ||j W d   I d H  q1 I d H s0    Y  | I d H  W d   I d H  q1 I d H s0    Y  tt  kr$ks*n J ks8J d S )
N   i   r   rL   r   r9   c                   s@   t  D ]2}t| t|g }|7 | |I d H  qd S rx   )ranger\   r   r   )r   ichunk)CHUNKS
CHUNK_SIZEsentrF   rG   senderP  s
    z'test_full_duplex_basics.<locals>.senderc                   s.   t k r*|  d I d H }|7 q d S )Nr   )lenr   )r   r   )r   EXPECTEDreceivedrF   rG   receiverX  s    z)test_full_duplex_basics.<locals>.receiver)r   rp   r   re   rf   rR   r   r   )rH   r   r   r   rl   rF   )r   r   r   r   r   rG   test_full_duplex_basicsH  s     6:&r   c                   s   t | }| I d H  |j  |dI d H  |dI d H dksJJ |dI d H  |dI d H dksrJ | I d H  W d    n1 s0    Y  d S )N   ar      b)r   rR   r   r   r   r   r   rH   r   rF   rF   rG   test_renegotiation_simplem  s    

r   r.   )
mock_clockrH   r9   c                   s,  d| _ dd l}|ddddfdd}dd fdd	}d
ddfddd
ddfdd t||d I d H  dI d H  j   dI d H  | I d H  tdD ]}t|d g}td| d g}j  t	
 4 I d H 0}|| | | W d   I d H  qH1 I d H s>0    Y  t	
 4 I d H 0}| | || W d   I d H  q1 I d H s0    Y  | I d H  qtdD ]}t|d g}td| d g}|I d H  j   |I d H  t	
 4 I d H 0}| | || W d   I d H  qX1 I d H sN0    Y  | I d H  qW d    n1 s~0    Y  ddddd}	ddfdd}
t||	ddI d H  j  t	
 4 I d H .}| d ||
 W d   I d H  q&1 I d H s0    Y  | I d H   I d H  W d    n1 sV0    Y  ddddd}t||ddI d H  j  t	
 4 I d H 0}| d |j W d   I d H  q1 I d H s0    Y  | I d H   I d H  W d    n1 s0    Y  d S )Nr   ru   rL   rv   c                   s   t  ddI d H  d S )Nr   
   )rd   sleepuniformry   )rrF   rG   rs     s    z.test_renegotiation_randomized.<locals>.sleeperr   c                     s   j  rtt  dI d H  W d    n1 s40    Y  t   dI d H  W d    q 1 sh0    Y  q td d S )N   -z-- clear --)r   r   r%   r\   rF   )expectr   r   rF   rG   clear  s    
,.z,test_renegotiation_randomized.<locals>.clearr   )byter9   c                   sV    j dI d H  td|  t    | I d H  W d    n1 sH0    Y  d S )Nz
outer sendzcalling SSLStream.send_all)r   rs   r\   r%   r   )r   r   rF   rG   r     s    
z+test_renegotiation_randomized.<locals>.send)expectedr9   c                   sn    j dI d H  td|  t| dks,J t (  dI d H | ksLJ W d    n1 s`0    Y  d S )Nr   z)calling SSLStream.receive_some, expectingr   )r   rs   r\   r   r%   r   )r   r   rF   rG   r     s
    
z-test_renegotiation_randomized.<locals>.expectr   r   d      r   r   )methodr9   c                   s   | dkrt dI d H  d S )Nr   順 rd   r   r   rF   rF   rG   sleeper_with_slow_send_all  s    zAtest_renegotiation_randomized.<locals>.sleeper_with_slow_send_allc                     s"   t dI d H    I d H  d S )N  )rd   r   r   rF   r   rF   rG   sleep_then_wait_writable  s    z?test_renegotiation_randomized.<locals>.sleep_then_wait_writabler   c                   s6   | dkrt dI d H  n| dkr2t dI d H  d S )Nr   r   r   r   r   r   rF   rF   rG   *sleeper_with_slow_wait_writable_and_expect  s    zQtest_renegotiation_randomized.<locals>.sleeper_with_slow_wait_writable_and_expect)Zautojump_thresholdrandomRandomr   rR   r   r   r   r   r   re   rf   r   r   )r   rH   r   rs   r   r   b1b2rl   r   r   r   rF   )r   r   r   r   rG   test_renegotiation_randomized~  sr    


::
:0	
8.
:r   c                   s   t jt jt jjt jjf  }ddddd}ddddd}ddddd	}d
d
dd fdd}|||I d H  |||I d H  |||I d H  |||I d H  d S )NSrL   r   c                   s:   t    | dI d H  W d    n1 s,0    Y  d S )Nr   )r%   r   r   rF   rF   rG   do_send_all  s    z.test_resource_busy_errors.<locals>.do_send_allc                   s:   t    | dI d H  W d    n1 s,0    Y  d S Nr   )r%   r   r   rF   rF   rG   do_receive_some  s    z2test_resource_busy_errors.<locals>.do_receive_somec                   s8   t   |  I d H  W d    n1 s*0    Y  d S rx   )r%   r   r   rF   rF   rG    do_wait_send_all_might_not_block  s    zCtest_resource_busy_errors.<locals>.do_wait_send_all_might_not_blockzCallable[[S], Awaitable[None]])r   r   r9   c              
     s   t  \}}tttjdd t 4 I d H .}|| | ||| W d   I d H  qr1 I d H sh0    Y  W d    n1 s0    Y  d S )Nzanother task)r   r   r   r   r   re   rf   )r   r   r   rw   rl   rH   rF   rG   r   
  s
    z*test_resource_busy_errors.<locals>.do_test)rd   r!   r   abcr   r   )rH   r  r  r  r  r   rF   r  rG   test_resource_busy_errors  s    
r  c                    sP   g  G  fdddt } t }t|  |dd}| I d H   dgksLJ d S )Nc                      sN   e Zd Zdd fddZddddZddd	d
ddZdddddZdS )zEtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStreamrL   r   c                   s     d d S )Nok)appendr   recordrF   rG   r     s    zctest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.wait_send_all_might_not_blockc                   s   t dd S NzShould not get calledrD   r   rF   rF   rG   r   "  s    zLtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.acloseNr   zbytes | bytearray)	max_bytesr9   c                   s   t dd S r  r  )r   r  rF   rF   rG   r   %  s    zRtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.receive_somezbytes | bytearray | memoryviewr   c                   s   t dd S r  r  r   rF   rF   rG   r   (  s    zNtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.send_all)N)r   r   r   r   r   r   r   rF   r  rF   rG   
NotAStream  s   r  xrn   r	  )r   r;   r<   r!   r   )r  rE   r   rF   r  rG   1test_wait_writable_calls_underlying_wait_writable  s    r  nt)   r   z)frequently fails on Windows + Python 3.10)reasonc              	     sz  t | 4 I d H }t  | I d H  W d    n1 s>0    Y  t  | I d H  W d    n1 sr0    Y  t  | I d H  W d    n1 s0    Y  t   |dI d H  W d    n1 s0    Y  t   |dI d H  W d    n1 s0    Y  t   |dI d H  W d    n1 sL0    Y  t   |dI d H  W d    n1 s0    Y  t  | I d H  W d    n1 s0    Y  W d   I d H  q1 I d H s0    Y  t | 4 I d H \}| I d H  t  | I d H  W d    n1 s>0    Y  W d   I d H  qv1 I d H sl0    Y  d S )Ns   xxxr   )rp   r%   rR   r   r   r   rV   r   r   rF   rF   rG   test_checkpoints1  s*    ,,,.000\r  c              	     s   t | 4 I d H }| I d H  t   |dI d H  W d    n1 sL0    Y  t   |dI d H  W d    n1 s0    Y  |dI d H  |dI d H dksJ | I d H  W d   I d H  q1 I d H s0    Y  d S )Nr   r   r   )rp   rR   r%   r   r   r   r   rF   rF   rG   test_send_all_empty_stringR  s    ..r  https_compatibleT)rH   r  r9   c                   s:   dd fdd}dd fdd}t ||I d H  d S )Nr   r   c                     s   t  dididS )Nr  r   )r   rF   rH   r  rF   rG   stream_makerg  s
    z,test_SSLStream_generic.<locals>.stream_makerr   c               	     sh   t  \} }t 4 I d H .}|| j ||j W d   I d H  q`1 I d H sV0    Y  | |fS rx   )r   r   re   rf   rR   )r   serverrl   r  rF   rG   clogged_stream_makerq  s
    6z4test_SSLStream_generic.<locals>.clogged_stream_maker)r&   )rH   r  r  r  rF   r  rG   test_SSLStream_genericb  s    
r  c              	     s   t | \  jjt dd fdd}ddfdd}t 4 I d H *}|| || W d   I d H  q1 I d H s0    Y  d S )NrL   r   c               	     s     I d H   dI d H   dI d H dks6J  dI d H  d4 I d H & jj} d j_W d   I d H  q1 I d H s0    Y   dI d H dksJ  ju sJ   I d H \}}|u sJ |dksJ  jd u sJ |dI d H  | j_j I d H  d S )Nr   r   r   r   r   r      trailing)rR   r   r   send_streamsend_all_hookr   rV   )r   rawtrailing)r   r   seqrF   rG   r     s     2ztest_unwrap.<locals>.clientc               	     s     I d H  dI d H dks&J dI d H  dI d H dksNJ  d4 I d H (  I d H \} }W d   I d H  q1 I d H s0    Y  | u sJ |dksJ jd u sJ d S )Nr   r   r   r   r  )rR   r   r   rV   r   )r!  r"  )r#  r   r   rF   rG   r    s    <ztest_unwrap.<locals>.server)r   r   r$   r   re   rf   rH   r   r  rl   rF   )r   r   r#  r   r   rG   test_unwrap  s    
r%  c              	     s  t | \  j}dd fdd}ddfdd}t 4 I d H *}|| || W d   I d H  q1 I d H s|0    Y  tt  |dI d H  W d    n1 s0    Y  t	   
 I d H  W d    n1 s0    Y  t	   
 I d H  W d    n1 s 0    Y  tt  dI d H  W d    n1 s\0    Y  tt*  dI d H d	ksJ W d    n1 s0    Y  tt   I d H  W d    n1 s0    Y  tt   I d H  W d    n1 s0    Y  t | \ ddfd
d}t 4 I d H .}| j
 || W d   I d H  q1 I d H s0    Y  d S )NrL   r   c                     s8   t     I d H  W d    n1 s*0    Y  d S rx   )r%   r   rF   )r   rF   rG   client_closer  s    z-test_closing_nice_case.<locals>.client_closerc                     sh     dI d H dksJ   dI d H dks0J t    I d H  W d    n1 sZ0    Y  d S Nr   r   )r   r%   r   rF   r   rF   rG   server_closer  s    z-test_closing_nice_case.<locals>.server_closers   123r   r   c                     sv   t  (  dI d H dks J W d    n1 s40    Y  t     I d H  W d    n1 sh0    Y  d S r'  )r%   r   r   rF   r(  rF   rG   expect_eof_server  s    6z1test_closing_nice_case.<locals>.expect_eof_server)r   r   r   re   rf   r   r   r   r   r%   r   r   rV   rR   )rH   r   r&  r)  rl   r*  rF   )r   r   rG   test_closing_nice_case  s4    
4.,.0:..r+  c              	     s4  t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  dddd}||jj_t	t
  |dI d H  W d    n1 s0    Y  t	t | I d H  W d    n1 s0    Y  d dd fdd	}||jj_||jj_| I d H   d
ks0J d S )Nr
   r   c                     s   t d S rx   KeyErrorrF   rF   rF   rG   bad_hook  s    z3test_send_all_fails_in_the_middle.<locals>.bad_hookr   r   rL   c                     s    d7  d S r  rF   rF   closedrF   rG   
close_hook  s    z5test_send_all_fails_in_the_middle.<locals>.close_hookr   )r   r   re   rf   rR   r   r  r   r   r   r-  r   r   r   r1  receive_streamr   )rH   r   r  rl   r.  r1  rF   r/  rG   !test_send_all_fails_in_the_middle  s     6
.,

r3  c              	     s   t  \}}t|| dd}t|tdd}t|| dd t|tdddd fdd}ddfd	d
}t 4 I d H *}|| || W d   I d H  q1 I d H s0    Y  d S )Nr1   rn   Tr   rL   r   c                     s,     dI d H   dI d H dks(J d S )N   hir      bye)r   r   rF   )client_2rF   rG   r   (  s    z!test_ssl_over_ssl.<locals>.clientc                     s,     dI d H dksJ  dI d H  d S )Nr   r4  r5  )r   r   rF   )server_2rF   rG   r  ,  s    z!test_ssl_over_ssl.<locals>.server)r(   r!   rP   r   re   rf   )rH   Zclient_0Zserver_0Zclient_1Zserver_1r   r  rl   rF   )r6  r7  rG   test_ssl_over_ssl  s$    

r8  c              	     s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  t|I d H  tt	  |
dI d H  W d    n1 s0    Y  tt	  |dI d H  W d    n1 s0    Y  | I d H  d S )Nr   
   xxxxxxxxxx)r   r   re   rf   rR   rd   r   r   r   r   r   r   r   r$  rF   rF   rG   test_ssl_bad_shutdown5  s    6..r:  c              	     s   t | ddiddid\}}t 4 I d H .}||j ||j W d   I d H  qn1 I d H sd0    Y  t|I d H  |dI d H dksJ t	t
  |dI d H  W d    n1 s0    Y  | I d H  d S )Nr  Tr   r   r   r   r9  )r   r   re   rf   rR   rd   r   r   r   r   r   r   r   r$  rF   rF   rG    test_ssl_bad_shutdown_but_its_okF  s    
6.r<  c               	     s   t dd4 I d H d} t }t| |dd}tt | I d H  W d    n1 sX0    Y  W d   I d H  q1 I d H s0    Y  d S )NTrI   r1   rn   )rm   r;   r<   r!   r   r   r   r   )rM   rH   r   rF   rF   rG   (test_ssl_handshake_failure_during_acloseZ  s
    r=  c              	     s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  |jjj ddd fdd}||jj_t	t
 | I d H  W d    n1 s0    Y  dksJ d S )Nr   r
   r   c                     s"    d usJ    d7 t d S r  r,  rF   Zclient_orig_close_hookZtransport_close_countrF   rG   r1  y  s    z4test_ssl_only_closes_stream_once.<locals>.close_hookr   )r   r   re   rf   rR   r   r  r1  r   r   r-  r   )rH   r   r  rl   r1  rF   r>  rG    test_ssl_only_closes_stream_oncem  s    6

,r?  c              	     s   t | ddiddid\} t 4 I d H .}||j | j W d   I d H  qn1 I d H sd0    Y  dd fdd}t 4 I d H ,}||j || W d   I d H  q1 I d H s0    Y  d S )	Nr  FTr;  rL   r   c                    sN   t t }  dI d H  W d    n1 s00    Y  t| jjsJJ d S )Nr   )r   r   r   r   r"   r   r   )r   r  rF   rG   receive_and_expect_error  s    .zKtest_ssl_https_compatibility_disagreement.<locals>.receive_and_expect_error)r   r   re   rf   rR   r   )rH   r   rl   rA  rF   r@  rG   )test_ssl_https_compatibility_disagreement  s    
6rB  c              	     s   t | ddiddid\} dd fdd}t 4 I d H ,}||j || W d   I d H  q~1 I d H st0    Y  d S )Nr  Tr;  rL   r   c                     s     dI d H dksJ d S r'  )r   rF   r@  rF   rG   server_expect_clean_eof  s    zEtest_https_mode_eof_before_handshake.<locals>.server_expect_clean_eof)r   r   re   rf   r   )rH   r   rC  rl   rF   r@  rG   $test_https_mode_eof_before_handshake  s    
rD  c              	     s   t | \}}dddd}||jj_ttD t  | I d H  W d    n1 sZ0    Y  W d    n1 sx0    Y  tt	D t  | I d H  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr
   r   c                     s   t d S rx   r,  rF   rF   rF   rG   r.    s    z2test_send_error_during_handshake.<locals>.bad_hook)
r   r   r  r   r   r   r-  r%   rR   r   )rH   r   _serverr.  rF   rF   rG    test_send_error_during_handshake  s    
JrF  c              	     s   t | \ }dddd}| jj_ddd fdd	}t 4 I d H 0}|||j ||j W d   I d H  q1 I d H s0    Y  t	
tD t    I d H  W d    n1 s0    Y  W d    n1 s0    Y  d S )
Nr
   r   c                     s   t d S rx   r,  rF   rF   rF   rG   r.    s    z5test_receive_error_during_handshake.<locals>.bad_hookr0   rL   )cancel_scoper9   c              	     sj   t tD t    I d H  W d    n1 s60    Y  W d    n1 sT0    Y  |   d S rx   )r   r   r-  r%   rR   cancel)rG  r   rF   rG   client_side  s    Jz8test_receive_error_during_handshake.<locals>.client_side)r   r   r2  Zreceive_some_hookr   re   rf   rG  rR   r   r   r   r%   )rH   r  r.  rJ  rl   rF   rI  rG   #test_receive_error_during_handshake  s    
6rK  c                 C  st   t | \}}tt |  W d    n1 s40    Y  tt |  W d    n1 sf0    Y  d S rx   )r   r   r   r   selected_alpn_protocolrH   r   r  rF   rF   rG   ,test_selected_alpn_protocol_before_handshake  s
    &rN  c              	     s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  | d u spJ | d u sJ | | ksJ d S rx   )r   r   re   rf   rR   rL  r$  rF   rF   rG   (test_selected_alpn_protocol_when_not_set  s    6rO  c                 C  st   t | \}}tt |  W d    n1 s40    Y  tt |  W d    n1 sf0    Y  d S rx   )r   r   r   r   selected_npn_protocolrM  rF   rF   rG   +test_selected_npn_protocol_before_handshake  s
    &rQ  zCignore: ssl module. NPN is deprecated, use ALPN instead:UserWarningzAignore:ssl NPN is deprecated, use ALPN instead:DeprecationWarningc              	     s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  | d u spJ | d u sJ | | ksJ d S rx   )r   r   re   rf   rR   rP  r$  rF   rF   rG   'test_selected_npn_protocol_when_not_set  s    6rR  c                 C  st   t | \}}tt |  W d    n1 s40    Y  tt |  W d    n1 sf0    Y  d S rx   )r   r   r   r   get_channel_bindingrM  rF   rF   rG   )test_get_channel_binding_before_handshake  s
    &rT  c              	     s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  | d uspJ | d usJ | | ksJ d S rx   )r   r   re   rf   rR   rS  r$  rF   rF   rG   (test_get_channel_binding_after_handshake  s    6rU  c              	     s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  | d u spJ t|  d| d v sJ d S )N)DNSr1   subjectAltName)r   r   re   rf   rR   getpeercertr\   r$  rF   rF   rG   test_getpeercert#  s    6rY  c                   s  d
ddd fdd}| I d H \}}}|4 I d H  |  I d H }|4 I d H t |jr\J t 4 I d H .}||j ||j W d   I d H  q1 I d H s0    Y  W d   I d H  q1 I d H s0    Y  | I d H  | dksJ W d   I d H  q&1 I d H s0    Y  |dd	I d H \}}}|  I d H }|jsVJ t|I d H  t|I d H  t|I d H  d S )NFrK   zMtuple[tsocket.SocketType, SSLListener[SocketStream], SSLStream[SocketStream]])r  r9   c                   sb   t  }|dI d H  |d t|}t|t| d}t|  I d H }t	| dd}|||fS )N)z	127.0.0.1r   r   r  r1   rn   )
rh   r   bindlistenr   r    rP   r   getsocknamer!   )r  listen_sockZsocket_listenerssl_listenerZtransport_client
ssl_clientr  rF   rG   setup1  s     
ztest_SSLListener.<locals>.setupTrZ  )F)	acceptZ_https_compatibler   re   rf   rR   r   filenor   )rH   ra  r^  r_  r`  Z
ssl_serverrl   rw   rF   r  rG   test_SSLListener0  s$     
`>re  )F)F)N)NN)NN)
__future__r   osr   rb   r;   sysr   
contextlibr   r   r   	functoolsr   r   typingr   r	   r
   r   rd   r   Ztrio._tests.pytest_pluginr   Ztrio.abcr   r   Ztrio.testingr   r   r   r   ZtrustmeZOpenSSLr   ImportErrorerror r   rh   _abcr   r   r   Z_core._tests.tutilr   Z_highlevel_genericr   Z_highlevel_open_tcp_streamr   Z_highlevel_socketr   r   _sslr   r    r!   r"   Z_utilr#   testingr$   r%   r&   r'   r(   collections.abcr)   r*   r+   r,   Ztyping_extensionsr-   Z
trio._corer.   Z	trio._sslr/   Z
_core._runr0   CAr?   Zissue_server_certr}   r<   PurposeCLIENT_AUTHrP   r=   r>   r2   r~   ZfixturerH   ra   rm   rp   rq   r   r   r   r   __annotations__r   r   r   r   r   r   r   r   r   r  r  markZskipifnameversion_infor  r  Zparametrizer  r%  r+  r3  r8  r:  r<  r=  r?  rB  rD  rF  rK  rN  rO  rQ  filterwarningsrR  rT  rU  rY  re  rF   rF   rF   rG   <module>   s   

	7       !E%z!!6>


