o
    ᡡiJ                  
   @  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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 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#[#ww 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l/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@ erd dlAmBZBmCZCmDZDmEZE d dlFmGZG d dlHmIZI ddlJmKZK eL ZMeMNdZOePejQjRZSeTedreS jUejV M  _UeOWeS ejXdddgd dd%d&ZYd'd(dd.d/ZZe	ddd1d2Z[e		'ddd5d6Z\G d7d8 d8e(Z]dd9d:Z^e
	ddd>d?Z_ddd@ddHdIZ`eeef ZadJebdK< 		dddNdOZceeef ZddJebdP< 		dddRdSZeddTdUZfddVdWZgddXdYZhddZd[Zidd\d]Zje,dd`daZkddbdcZlddddeZmejnjoejpdfkoejqdgkdhdiddjdkZrddldmZsejntdnd'dogddpdqZuddrdsZvddtduZwddvdwZxddxdyZyddzd{Zzdd|d}Z{dd~dZ|dddZ}dddZ~dddZdddZdddZdddZdddZdddZejndddddZdddZdddZdddZdddZdS )    )annotationsN)asynccontextmanagercontextmanagersuppress)partial)
SSLContext)TYPE_CHECKINGAnyNoReturn	TypeAlias)StapledStream)skip_if_optional_else_raise)ReceiveStream
SendStream)MemoryReceiveStreamMemorySendStream)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)	MockClock)T_Stream)CancelScopetrio-test-1.example.orgOP_IGNORE_UNEXPECTED_EOFmoduletls13tls12)scopeparamsrequestpytest.FixtureRequestreturnssl.SSLContextc                 C  sZ   t  }tt dr| jt j M  _t| | jdv r|S | jdkr*t jj	|_
|S t )Nr0   )defaultr2   r3   )sslcreate_default_contexthasattroptionsr0   TRIO_TEST_CAconfigure_trustparam
TLSVersionTLSv1_2maximum_versionAssertionError)r6   ctx rG   e/var/www/html/asbeauty/laura_geller_scraping/env/lib/python3.10/site-packages/trio/_tests/test_ssl.py
client_ctxW   s   




rI   Fexpect_failsockstdlib_socket.socketrK   boolNonec             
   C  s6  zzPt j| ddd}|< |  	 |d}|sBtttj |  W d    n1 s.w   Y  	 W d    W W | 	  d S |
| q1 sKw   Y  W n0 ttfyb   Y W | 	  d S  ty } z|rqtd| ntd|  W Y d }~nd }~ww |rtdW | 	  d S W | 	  d S | 	  w )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)rL   rK   wrappeddataexcrG   rG   rH   ssl_echo_serve_synci   sJ   

&

rc   AsyncIterator[SocketStream]c                 C s   t  \}}t 4 I d H E}|/ | |tjjtt|| d t	t
|V  W d    n1 s5w   Y  W d    n1 sDw   Y  W d   I d H  d S 1 I d H sZw   Y  d S )NrJ   )stdlib_socket
socketpairtrioopen_nursery
start_soon	to_threadrun_syncr   rc   r   tsocketfrom_stdlib_socket)rK   abnurseryrG   rG   rH   ssl_echo_server_raw   s    .rq   r    AsyncIterator[SSLStream[Stream]]c              	   C sV   t |d4 I d H }t|| ddV  W d   I d H  d S 1 I d H s$w   Y  d S )NrJ   r/   server_hostname)rq   r    )rI   rK   rL   rG   rG   rH   ssl_echo_server   s   .ru   c                   @  sX   e Zd Z	ddddZddd	ZdddZdddZdddZdddZddddZ	dS )PyOpenSSLEchoStreamNsleeper'Callable[[str], Awaitable[None]] | Noner8   rO   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 rQdd
d}|| _d S || _d S )Nr   )BindingOP_NO_TLSv1_4z2simultaneous calls to PyOpenSSLEchoStream.send_allz6simultaneous calls to PyOpenSSLEchoStream.receive_some_objectr8   rO   c                   s   d S NrG   r{   rG   rG   rH   no_op_sleeper      z3PyOpenSSLEchoStream.__init__.<locals>.no_op_sleeperr{   r|   r8   rO   )r   ContextSSLv23_METHOD,cryptography.hazmat.bindings.openssl.bindingry   set_optionslibSSL_OP_NO_TLSv1_3r=   TRIO_TEST_1_CERTconfigure_cert
Connection_connset_accept_stater   
ParkingLot_lot	bytearray_pending_cleartextr"   _send_all_conflict_detector_receive_some_conflict_detectorrw   )selfrw   rF   ry   ro   r   rG   rG   rH   __init__   s*   





zPyOpenSSLEchoStream.__init__c                   s   | j   d S r}   )r   bio_shutdownr   rG   rG   rH   aclose      zPyOpenSSLEchoStream.acloserN   c                 C  s
   | j  S r}   )r   renegotiate_pendingr   rG   rG   rH   r      s   
z'PyOpenSSLEchoStream.renegotiate_pendingc                 C  s   | j  sJ d S r}   )r   renegotiater   rG   rG   rH   r      s   zPyOpenSSLEchoStream.renegotiatec                   sZ   | j  t I d H  t I d H  | dI d H  W d    d S 1 s&w   Y  d S )Nwait_send_all_might_not_block)r   r   
checkpointrw   r   rG   rG   rH   r      s   "z1PyOpenSSLEchoStream.wait_send_all_might_not_blockra   bytesc              	     s  t d | jp t I d H  t I d H  | dI d H  | j| 	 | dI d H  z| jd}W n  tj	yM   | j
  t d| j  Y n tjyV   Y n	w |  j|7  _q&| j  | dI d H  t d W d    d S 1 s{w   Y  d S )Nz  --> transport_stream.send_allsend_allT   zrenegotiations:z(  <-- transport_stream.send_all finished)r^   r   r   r   rw   r   	bio_writerU   r   ZeroReturnErrorshutdowntotal_renegotiationsWantReadErrorr   r   
unpark_allr   ra   rG   rG   rH   r      s0   


"zPyOpenSSLEchoStream.send_allnbytes
int | Nonec                   s  t d |d u rd}| j zt I d H  t I d H  	 | dI d H  z| j|W W | dI d H  t d W  d    S  tjy   | j	rt d| j	 z| j	dd }| j
t| W n@ tjy   z| j|W  Y  Y W | dI d H  t d W  d    S  tjy   t d	 | j I d H  Y nw Y nw | j	dd= nt d
 | j I d H  Y nw q| dI d H  t d w 1 sw   Y  d S )Nz#  --> transport_stream.receive_somei   Treceive_somez,  <-- transport_stream.receive_some finishedz
    tryingr   r   zparking (a)zparking (b))r^   r   r   r   rw   r   bio_readr   r   r   sendr   r   park)r   r   	next_byterG   rG   rH   r     sT   ) ,
z PyOpenSSLEchoStream.receive_somer}   )rw   rx   r8   rO   r8   rO   )r8   rN   )ra   r   r8   rO   )r   r   r8   r   )
__name__
__module____qualname__r   r   r   r   r   r   r   rG   rG   rG   rH   rv      s    
-



rv   c                    s`   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func1strargs1tuple[object, ...]func2args2r8   rO   c              
     s   t  }ttjtjddG t 4 I d H #}|jt|| g|R   |jt||g|R   W d   I d H  n1 I d H sAw   Y  W d    d S W d    d S 1 sYw   Y  d S )Nsimultaneousmatch)	rv   pytestRaisesGroup	RaisesExcr   BusyResourceErrorrh   ri   getattr)r   r   r   r   srp   rG   rG   rH   do_testU  s   *"zDtest_PyOpenSSLEchoStream_gives_resource_busy_errors.<locals>.do_testr   )   xr   rG   r   )r   )
r   r   r   r   r   r   r   r   r8   rO   rG   )r   rG   rG   rH   3test_PyOpenSSLEchoStream_gives_resource_busy_errorsN  s   

r   rw   rx   (Iterator[SSLStream[PyOpenSSLEchoStream]]c                 c  s     t |d}t|| ddV  d S )Nrw   r/   rs   )rv   r    )rI   rw   fakesockrG   rG   rH   virtual_ssl_echo_servern  s   
r   client_kwargsserver_kwargsclient_transportr-   server_transportr   dict[str, Any] | Noner   /tuple[SSLStream[T_Stream], SSLStream[T_Stream]]c                C  sL   |d u ri }|d u ri }t || fddi|}t |tfddi|}||fS )Nrt   r/   rP   T)r    rR   )rI   r   r   r   r   
client_ssl
server_sslrG   rG   rH   ssl_wrap_pairw  s*   r   r   MemoryStapledStream+dict[str, str | bytes | bool | None] | NoneEtuple[SSLStream[MemoryStapledStream], SSLStream[MemoryStapledStream]]c                 C     t  \}}t| ||||dS Nr   )r'   r   rI   r   r   r   r   rG   rG   rH   ssl_memory_stream_pair     
r   MyStapledStream=tuple[SSLStream[MyStapledStream], SSLStream[MyStapledStream]]c                 C  r   r   )r&   r   r   rG   rG   rH   ssl_lockstep_stream_pair  r   r   c              	     s  t | 4 I d H +}|jrJ |dI d H  |dI d H dks#J | I d H  W d   I d H  n1 I d H s:w   Y  tdd4 I d H B}t }t||dd}|jrYJ t	
t}|dI d H  W d    n1 sqw   Y  t|jjtjsJ W d   I d H  n1 I d H sw   Y  tdd4 I d H ?}t|| dd}|jrJ t	
t}|dI d H  W d    n1 sw   Y  t|jjtjsJ W d   I d H  d S 1 I d H sw   Y  d S )Nr   r   TrJ   r/   rs   ztrio-test-2.example.org)ru   rP   r   r   r   rq   r;   r<   r    r   raisesr   
isinstancevalue	__cause__SSLErrorCertificateError)rI   r   rL   bad_client_ctxexcinforG   rG   rH   test_ssl_client_basics  s0   
(
(	
.r   c              	     s$  t  \ }  |d t|}tt|tdd}|js J 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sRJ |dI d H dks^J | I d H  |  W d    n1 ssw   Y  W d    d S W d    d S 1 sw   Y  d S )NTrP   r8   rO   c                    sb   j  dd } | d | ddksJ | d |   W d    d S 1 s*w   Y  d S )Nr/   rs   r   r      y   z)rS   rZ   rU   rX   )client_sockrn   rI   rG   rH   client  s   


"z&test_ssl_server_basics.<locals>.client)targetr   r   r   r       r   )re   rf   rl   rm   r    r   rR   rP   	threadingThreadstartr   r   r   join)rI   ro   server_sockr   r   trG   r   rH   test_ssl_server_basics  s(   



Pr   c              	     s  t dd4 I d H }| }t }t||dd}|j|u sJ |j|u s&J |jdks-J |jdks4J t	t
 |j W d    n1 sGw   Y  dt|v sTJ dt|v s\J t	t
 d|_W d    n1 sow   Y  t	t
 d|_W d    n1 sw   Y  ||_|j|u sJ t	t}| I d H  W d    n1 sw   Y  t|jjtjsJ W d   I d H  d S 1 I d H sw   Y  d S )	NTrJ   r/   rs   Ftransport_streamcontextasdf)rq   r;   r<   r    r   r   rP   rt   r   r   AttributeError
asfdasdfsadirr   rT   r   r   r   r   )rI   rL   good_ctxbad_ctxr   r   rG   rG   rH   test_attributes  s6   .r   c              
     s,  d d  t  t  d fdd}dfd	d
}t| 4 I d H H}t 4 I d H #}||| ||| ||j ||j W d   I d H  n1 I d H s[w   Y  | I d H  W d   I d H  n1 I d H sww   Y  tt  krksJ  J ksJ d S )N   i   r   r   r8   rO   c                   sB   t  D ]}t| t|g }|7 | |I d H  qd S r}   )ranger^   r   r   )r   ichunk)CHUNKS
CHUNK_SIZEsentrG   rH   senderG  s   z'test_full_duplex_basics.<locals>.senderc                   s>   t k r|  d I d H }|7 t k sd S d S )Nr   )lenr   )r   r  )r  EXPECTEDreceivedrG   rH   receiverO  s
   z)test_full_duplex_basics.<locals>.receiver)r   r   r8   rO   )r   ru   r   rh   ri   rT   r   r  )rI   r  r	  r   rp   rG   )r  r  r  r  r  rH   test_full_duplex_basics?  s&   (($r
  c                   s   t | D}| I d H  |j  |dI d H  |dI d H dks&J |dI d H  |dI d H dks:J | I d H  W d    d S 1 sLw   Y  d S )N   ar      b)r   rT   r   r   r   r   r   rI   r   rG   rG   rH   test_renegotiation_simpled  s   

"r  
mock_clockr,   c                   s  d| _ dd l}|ddfdd}d  fdd	}d!f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 ]q}t|d g}td| d g}j  t	
 4 I d H }|| | | W d   I d H  n1 I d H sw   Y  t	
 4 I d H }| | || W d   I d H  n1 I d H sw   Y  | I d H  qVtdD ]V}t|d g}td| d g}|I d H  j   |I d H  t	
 4 I d H }| | || W d   I d H  n1 I d H sw   Y  | I d H  qW d    n	1 s.w   Y  d#dd}	d fdd}
t||	dKdI d H  j  t	
 4 I d H }| d ||
 W d   I d H  n1 I d H sww   Y  | I d H   I d H  W d    n	1 sw   Y  d#dd}t||dMdI d H  j  t	
 4 I d H }| d |j W d   I d H  n1 I d H sw   Y  | I d H   I d H  W d    d S 1 sw   Y  d S )$Nr   r{   r|   r8   rO   c                   s   t  ddI d H  d S )Nr   
   )rg   sleepuniformr~   )rrG   rH   rw        z.test_renegotiation_randomized.<locals>.sleeperc                     s   j  r?t  dI d H  W d    n1 sw   Y  t   dI d H  W d    n1 s5w   Y  j  std d S )N   -z-- clear --)r   r   r$   r^   rG   )expectr   r   rG   rH   clear  s   

z,test_renegotiation_randomized.<locals>.clearbyter   c                   sZ    j dI d H  td|  t   | I d H  W d    d S 1 s&w   Y  d S )Nz
outer sendzcalling SSLStream.send_all)r   rw   r^   r$   r   )r  r   rG   rH   r     s   
"z+test_renegotiation_randomized.<locals>.sendexpectedc                   sr    j dI d H  td|  t| dksJ t   dI d H | ks'J W d    d S 1 s2w   Y  d S )Nr  z)calling SSLStream.receive_some, expectingr   )r   rw   r^   r  r$   r   )r  r  rG   rH   r    s   
"z-test_renegotiation_randomized.<locals>.expectr   r  d      r   methodr   c                   s"   | dkrt dI d H  d S d S )Nr   順 rg   r  r  rG   rG   rH   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  )rg   r  r   rG   r  rG   rH   sleep_then_wait_writable  s   z?test_renegotiation_randomized.<locals>.sleep_then_wait_writabler   c                   s>   | dkrt dI d H  d S | dkrt dI d H  d S d S )Nr   r  r  r"  r  r   rG   rG   rH   *sleeper_with_slow_wait_writable_and_expect  s   zQtest_renegotiation_randomized.<locals>.sleeper_with_slow_wait_writable_and_expectr   r   )r  r   r8   rO   )r  r   r8   rO   )r  r   r8   rO   )autojump_thresholdrandomRandomr   rT   r   r   r   r   r   rh   ri   r   r   )r  rI   r&  rw   r  r   b1b2rp   r!  r#  r$  rG   )r  r  r   r   rH   test_renegotiation_randomizedu  s   


((
*
'
*

*$r*  c                   s   t jt jt jjt jjf  }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 )Nr   Sr8   rO   c                   >   t   | dI d H  W d    d S 1 sw   Y  d S )Nr   )r$   r   r  rG   rG   rH   do_send_all     "z.test_resource_busy_errors.<locals>.do_send_allc                   r,  Nr   )r$   r   r  rG   rG   rH   do_receive_some  r.  z2test_resource_busy_errors.<locals>.do_receive_somec                   s<   t   |  I d H  W d    d S 1 sw   Y  d S r}   )r$   r   r  rG   rG   rH    do_wait_send_all_might_not_block     "zCtest_resource_busy_errors.<locals>.do_wait_send_all_might_not_blockr   Callable[[S], Awaitable[None]]r   c              
     s   t  \}}ttjtjdd; t 4 I d H }|| | ||| W d   I d H  n1 I d H s8w   Y  W d    d S W d    d S 1 sPw   Y  d S )Nzanother taskr   )r   r   r   r   r   r   rh   ri   )r   r   r   r{   rp   rI   rG   rH   r     s   *"z*test_resource_busy_errors.<locals>.do_test)r   r+  r8   rO   )r   r3  r   r3  r8   rO   )rg   r    r   abcr   r   )rI   r+  r-  r0  r1  r   rG   r4  rH   test_resource_busy_errors  s   


r6  c                    sR   g  G  fdddt } t }t|  |dd}| I d H   dgks'J d S )Nc                      s:   e Zd Zd fddZdddZddddZdddZdS )zEtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStreamr8   rO   c                   s     d d S )Nok)appendr   recordrG   rH   r     r   zctest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.wait_send_all_might_not_blockc                   
   t dNzShould not get calledrE   r   rG   rG   rH   r        zLtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.acloseN	max_bytesr   bytes | bytearrayc                   r;  r<  r=  )r   r?  rG   rG   rH   r     r>  zRtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.receive_somera   bytes | bytearray | memoryviewc                   r;  r<  r=  r   rG   rG   rH   r   !  r>  zNtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.send_allr   r}   )r?  r   r8   r@  )ra   rA  r8   rO   )r   r   r   r   r   r   r   rG   r9  rG   rH   
NotAStream  s
    
rB  xrs   r7  )r   r;   r<   r    r   )rB  rF   r   rG   r9  rH   1test_wait_writable_calls_underlying_wait_writable  s   rD  nt)   r  z)frequently fails on Windows + Python 3.10)reasonc              	     sn  t | 4 I d H }t  | I d H  W d    n1 sw   Y  t  | I d H  W d    n1 s9w   Y  t  | I d H  W d    n1 sSw   Y  t  |dI d H  W d    n1 snw   Y  t  |dI d H  W d    n1 sw   Y  t  |dI d H  W d    n1 sw   Y  t  |dI d H  W d    n1 sw   Y  t  | I d H  W d    n1 sw   Y  W d   I d H  n1 I d H sw   Y  t | 4 I d H .}| I d H  t  | I d H  W d    n	1 sw   Y  W d   I d H  d S 1 I d H s0w   Y  d S )Ns   xxxr   )ru   r$   rT   r   r   r   rX   r   r  rG   rG   rH   test_checkpoints*  sB   ( 0rH  c              	     s   t | 4 I d H d}| I d H  t  |dI d H  W d    n1 s'w   Y  t  |dI d H  W d    n1 sBw   Y  |dI d H  |dI d H dks[J | I d H  W d   I d H  d S 1 I d H ssw   Y  d S )Nr   r   r   )ru   rT   r$   r   r   r   r  rG   rG   rH   test_send_all_empty_stringK  s   .rI  https_compatibleTc                   s4   d fdd}d	 fdd}t ||I d H  d S )
Nr8   r   c                     s   t  dididS )NrJ  r   )r   rG   rI   rJ  rG   rH   stream_maker`  s   z,test_SSLStream_generic.<locals>.stream_makerr   c               	     sp   t  \} }t 4 I d H }|| j ||j W d   I d H  | |fS 1 I d H s/w   Y  | |fS r}   )r   r   rh   ri   rT   )r   serverrp   r4  rG   rH   clogged_stream_makerj  s   z4test_SSLStream_generic.<locals>.clogged_stream_maker)r8   r   )r8   r   )r%   )rI   rJ  rL  rN  rG   rK  rH   test_SSLStream_generic[  s   
rO  c              	     s   t | \  jjt d fdd}dfdd}t 4 I d H }|| || W d   I d H  d S 1 I d H sFw   Y  d S )Nr8   rO   c               	     s     I d H   dI d H   dI d H dksJ  dI d H  d4 I d H  jj} d j_W d   I d H  n1 I d H sEw   Y   dI d H dksVJ  ju s]J   I d H \}}|u slJ |dksrJ  jd u syJ |dI d H  | j_j I d H  d S )Nr   r   r   r   r   r      trailing)rT   r   r   send_streamsend_all_hookr   rX   )rR  rawtrailing)r   r   seqrG   rH   r     s$   
(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s(J  d4 I d H   I d H \} }W d   I d H  n1 I d H sJw   Y  | u sUJ |dks[J jd u sbJ d S )Nr   r   r   r   rP  )rT   r   r   rX   r   )rS  rT  )rU  r   r   rG   rH   rM    s   (ztest_unwrap.<locals>.serverr   )r   r   r#   r   rh   ri   rI   r   rM  rp   rG   )r   r   rU  r   r   rH   test_unwrap}  s   
.rW  c              	     s  t | \  j}d fdd}dfdd}t 4 I d H }|| || W d   I d H  n1 I d H s;w   Y  tt |dI d H  W d    n1 sXw   Y  t	   
 I d H  W d    n1 srw   Y  t	   
 I d H  W d    n1 sw   Y  tt dI d H  W d    n1 sw   Y  tt  dI d H d	ksJ W d    n1 sw   Y  tt   I d H  W d    n1 sw   Y  tt   I d H  W d    n	1 sw   Y  t | \ dfd
d}t 4 I d H }| j
 || W d   I d H  d S 1 I d H s;w   Y  d S )Nr8   rO   c                     s<   t     I d H  W d    d S 1 sw   Y  d S r}   )r$   r   rG   )r   rG   rH   client_closer  r2  z-test_closing_nice_case.<locals>.client_closerc                     sl     dI d H dksJ   dI d H dksJ t    I d H  W d    d S 1 s/w   Y  d S Nr  r   )r   r$   r   rG   r   rG   rH   server_closer  s   "z-test_closing_nice_case.<locals>.server_closers   123r  r   c                     sz   t    dI d H dksJ W d    n1 sw   Y  t     I d H  W d    d S 1 s6w   Y  d S rY  )r$   r   r   rG   rZ  rG   rH   expect_eof_server  s   "z1test_closing_nice_case.<locals>.expect_eof_serverr   )r   r   r   rh   ri   r   r   r   r   r$   r   r   rX   rT   )rI   r   rX  r[  rp   r\  rG   )r   r   rH   test_closing_nice_case  sH   
(0r]  c              	     s,  t | \}}t 4 I d H }||j ||j W d   I d H  n1 I d H s,w   Y  ddd}||jj_t	t
 |dI d H  W d    n1 sSw   Y  t	t | I d H  W d    n1 sow   Y  d d fdd	}||jj_||jj_| I d H   d
ksJ d S )Nr8   r
   c                        t r}   KeyErrorrG   rG   rG   rH   bad_hook  r   z3test_send_all_fails_in_the_middle.<locals>.bad_hookr   r   rO   c                     s    d7  d S r/  rG   rG   closedrG   rH   
close_hook  s   z5test_send_all_fails_in_the_middle.<locals>.close_hookr   r8   r
   r   )r   r   rh   ri   rT   r   rQ  rR  r   r   r`  r   r   r   rd  receive_streamr   )rI   r   rM  rp   ra  rd  rG   rb  rH   !test_send_all_fails_in_the_middle  s(   (



rg  c              	     s   t  \}}t|| dd}t|tdd}t|| dd t|tddd fdd}dfd	d
}t 4 I d H }|| || W d   I d H  d S 1 I d H sTw   Y  d S )Nr/   rs   Tr   r8   rO   c                     s.     dI d H   dI d H dksJ d S )N   hir     bye)r   r   rG   )client_2rG   rH   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  rh  ri  )r   r   rG   )server_2rG   rH   rM  %  s   z!test_ssl_over_ssl.<locals>.serverr   )r'   r    rR   r   rh   ri   )rI   client_0server_0client_1server_1r   rM  rp   rG   )rj  rk  rH   test_ssl_over_ssl  s(   

.rp  c              	     s   t | \}}t 4 I d H }||j ||j W d   I d H  n1 I d H s,w   Y  t|I d H  tt	 |
dI d H  W d    n1 sQw   Y  tt	 |dI d H  W d    n1 snw   Y  | I d H  d S )Nr  
   xxxxxxxxxx)r   r   rh   ri   rT   rg   r   r   r   r   r   r   r   rV  rG   rG   rH   test_ssl_bad_shutdown.  s   (rr  c              	     s   t | ddiddid\}}t 4 I d H }||j ||j W d   I d H  n1 I d H s3w   Y  t|I d H  |dI d H dksLJ t	t
 |dI d H  W d    n1 sdw   Y  | I d H  d S )NrJ  Tr   r   r  r   rq  )r   r   rh   ri   rT   rg   r   r   r   r   r   r   r   rV  rG   rG   rH    test_ssl_bad_shutdown_but_its_ok?  s    
(rt  c               	     s   t dd4 I d H 3} t }t| |dd}tt | I d H  W d    n1 s-w   Y  W d   I d H  d S 1 I d H sCw   Y  d S )NTrJ   r/   rs   )rq   r;   r<   r    r   r   r   r   )rL   rI   r   rG   rG   rH   (test_ssl_handshake_failure_during_acloseS  s   .ru  c              	     s   t | \}}t 4 I d H }||j ||j W d   I d H  n1 I d H s,w   Y  |jjj dd fdd}||jj_t	t
 | I d H  W d    n1 s\w   Y  dksgJ d S )Nr   r8   r
   c                     s    d usJ    d7 t r/  r_  rG   client_orig_close_hooktransport_close_countrG   rH   rd  r  s   z4test_ssl_only_closes_stream_once.<locals>.close_hookr   re  )r   r   rh   ri   rT   r   rQ  rd  r   r   r`  r   )rI   r   rM  rp   rd  rG   rv  rH    test_ssl_only_closes_stream_oncef  s   (

ry  c              	     s   t | ddiddid\} t 4 I d H }||j | j W d   I d H  n1 I d H s3w   Y  d	 fdd}t 4 I d H }||j || W d   I d H  d S 1 I d H sdw   Y  d S )
NrJ  FTrs  r8   rO   c                    sP   t t}  dI d H  W d    n1 sw   Y  t| jjs&J d S )Nr  )r   r   r   r   r!   r   r   )r   rM  rG   rH   receive_and_expect_error  s
   zKtest_ssl_https_compatibility_disagreement.<locals>.receive_and_expect_errorr   )r   r   rh   ri   rT   r   )rI   r   rp   r{  rG   rz  rH   )test_ssl_https_compatibility_disagreement  s   
(.r|  c              	     s   t | ddiddid\} d fdd}t 4 I d H }||j || W d   I d H  d S 1 I d H s:w   Y  d S )	NrJ  Trs  r8   rO   c                     s     dI d H dksJ d S rY  )r   rG   rz  rG   rH   server_expect_clean_eof  r  zEtest_https_mode_eof_before_handshake.<locals>.server_expect_clean_eofr   )r   r   rh   ri   r   )rI   r   r}  rp   rG   rz  rH   $test_https_mode_eof_before_handshake  s   
.r~  c              	     s   t | \}}ddd}||jj_tt" t  | I d H  W d    n1 s,w   Y  W d    n1 s;w   Y  tt	+ t  | I d H  W d    n1 s[w   Y  W d    d S W d    d S 1 ssw   Y  d S )Nr8   r
   c                     r^  r}   r_  rG   rG   rG   rH   ra    r   z2test_send_error_during_handshake.<locals>.bad_hookre  )
r   r   rQ  rR  r   r   r`  r$   rT   r   )rI   r   _serverra  rG   rG   rH    test_send_error_during_handshake  s"   

"r  c              	     s   t | \ }d
dd}| jj_d fdd	}t 4 I d H }|||j ||j W d   I d H  n1 I d H s>w   Y  t	
t+ t    I d H  W d    n1 s^w   Y  W d    d S W d    d S 1 svw   Y  d S )Nr8   r
   c                     r^  r}   r_  rG   rG   rG   rH   ra    r   z5test_receive_error_during_handshake.<locals>.bad_hookcancel_scoper.   rO   c              	     sl   t t" t    I d H  W d    n1 sw   Y  W d    n1 s+w   Y  |   d S r}   )r   r   r`  r$   rT   cancel)r  r   rG   rH   client_side  s   z8test_receive_error_during_handshake.<locals>.client_sidere  )r  r.   r8   rO   )r   r   rf  receive_some_hookr   rh   ri   r  rT   r   r   r   r$   )rI   rM  ra  r  rp   rG   r  rH   #test_receive_error_during_handshake  s    

("r  c                 C  v   t | \}}tt |  W d    n1 sw   Y  tt |  W d    d S 1 s4w   Y  d S r}   )r   r   r   r   selected_alpn_protocolrI   r   rM  rG   rG   rH   ,test_selected_alpn_protocol_before_handshake     

"r  c              	        t | \}}t 4 I d H }||j ||j W d   I d H  n1 I d H s,w   Y  | d u s9J | d u sAJ | | ksKJ d S r}   )r   r   rh   ri   rT   r  rV  rG   rG   rH   (test_selected_alpn_protocol_when_not_set  s   (r  c                 C  r  r}   )r   r   r   r   selected_npn_protocolr  rG   rG   rH   +test_selected_npn_protocol_before_handshake  r  r  zCignore: ssl module. NPN is deprecated, use ALPN instead:UserWarningzAignore:ssl NPN is deprecated, use ALPN instead:DeprecationWarningc              	     r  r}   )r   r   rh   ri   rT   r  rV  rG   rG   rH   'test_selected_npn_protocol_when_not_set  s   (r  c                 C  r  r}   )r   r   r   r   get_channel_bindingr  rG   rG   rH   )test_get_channel_binding_before_handshake  r  r  c              	     s   t | \}}t 4 I d H }||j ||j W d   I d H  n1 I d H s,w   Y  | d us9J | d usAJ | | ksKJ d S r}   )r   r   rh   ri   rT   r  rV  rG   rG   rH   (test_get_channel_binding_after_handshake  s   (r  c              	     s   t | \}}t 4 I d H }||j ||j W d   I d H  n1 I d H s,w   Y  | d u s9J t|  d| d v sIJ d S )N)DNSr/   subjectAltName)r   r   rh   ri   rT   getpeercertr^   rV  rG   rG   rH   test_getpeercert  s   (r  c                   s|  	dd fdd}| I d H \}}}|4 I d H l |  I d H }|4 I d H : |jr-J t 4 I d H }||j ||j W d   I d H  n1 I d H sRw   Y  W d   I d H  n1 I d H sgw   Y  | I d H  | dks{J W d   I d H  n1 I d H sw   Y  |d	d
I d H \}}}|  I d H }|jsJ t|I d H  t|I d H  t|I d H  d S )NFrJ  rN   r8   Mtuple[tsocket.SocketType, SSLListener[SocketStream], SSLStream[SocketStream]]c                   sd   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   rJ  r/   rs   )
rl   r   bindlistenr   r   rR   r   getsocknamer    )rJ  listen_socksocket_listenerssl_listenertransport_client
ssl_clientr4  rG   rH   setup*  s"   

ztest_SSLListener.<locals>.setupTr  F)rJ  rN   r8   r  )	accept_https_compatibler   rh   ri   rT   r   filenor   )rI   r  r  r  r  
ssl_serverrp   r{   rG   r4  rH   test_SSLListener)  s,   
*(	(
r  )r6   r7   r8   r9   )rL   rM   rK   rN   r8   rO   r  )rK   rN   r8   rd   )rI   r   rK   rN   r8   rr   r   r}   )rI   r   rw   rx   r8   r   )rI   r   r   r-   r   r-   r   r   r   r   r8   r   )NN)rI   r   r   r   r   r   r8   r   )rI   r   r   r   r   r   r8   r   )rI   r   r8   rO   )r  r,   rI   r   r8   rO   )rI   r   rJ  rN   r8   rO   )
__future__r   osr   re   r;   sysr   
contextlibr   r   r   	functoolsr   r   typingr   r	   r
   r   r   rg   r   trio._tests.pytest_pluginr   trio.abcr   r   trio.testingr   r   trustmeOpenSSLr   ImportErrorerror r   rl   _abcr   r   r   _core._tests.tutilr   _highlevel_genericr   _highlevel_open_tcp_streamr   _highlevel_socketr   r   _sslr   r   r    r!   _utilr"   testingr#   r$   r%   r&   r'   collections.abcr(   r)   r*   r+   
trio._corer,   	trio._sslr-   
_core._runr.   CAr?   issue_server_certr   r<   PurposeCLIENT_AUTHrR   r=   r>   r0   r   fixturerI   rc   rq   ru   rv   r   r   r   r   __annotations__r   r   r   r   r   r   r
  r  r*  r6  rD  markskipifnameversion_inforH  rI  parametrizerO  rW  r]  rg  rp  rr  rt  ru  ry  r|  r~  r  r  r  r  r  filterwarningsr  r  r  r  r  rG   rG   rG   rH   <module>   s    

	7 
 


!
E
%
z
#

!
6
>

















