
    daf                        d 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 ddlmZ 	 ddl	Z	ddlZddlmZmZmZmZ ddlmZ ej&                  Zd Z G d d	e      Zdd
Zd Z G d dej2                        Z G d dej2                        Z G d dej2                        Z G d dej2                        Z G d dej2                        Zedk(  r ej@                          yy# e
$ r dZ	Y w xY w)zTests for selector_events.py    N)selector_events)mock)BaseSelectorEventLoop_SelectorDatagramTransport_SelectorSocketTransport_SelectorTransport)utilsc                  .    t        j                  d        y N)asyncioset_event_loop_policy     A/root/Python-3.12.4/Lib/test/test_asyncio/test_selector_events.pytearDownModuler      s    !!$'r   c                       e Zd Zd Zd Zy)TestBaseSelectorEventLoopc                     t        j                         | _        t        j                         | _        | xj                  dz  c_        y N   r   Mock_ssock_csock_internal_fdsselfs    r   _make_self_pipez)TestBaseSelectorEventLoop._make_self_pipe    s-    iikiikar   c                      y r   r   r   s    r   _close_self_pipez*TestBaseSelectorEventLoop._close_self_pipe%   s    r   N)__name__
__module____qualname__r   r    r   r   r   r   r      s     
r   r   c                 ^    t        j                         }|j                  d | D               |S )Nc              3   2   K   | ]  }t        |        y wr   )
memoryview).0is     r   	<genexpr>z!list_to_buffer.<locals>.<genexpr>+   s     ,Q:a=,s   )collectionsdequeextend)lbuffers     r   list_to_bufferr/   )   s'     F
MM,!,-Mr   c                 `    | j                   y | j                   j                          d | _         y r   )_sockclose)	transports    r   close_transportr4   0   s(     OOIOr   c                   6    e Zd Z fdZd Z ej                  dd       ej                  dd      d               Zd Zd Z	d	 Z
d
 Zd Zd Z ej                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )BaseSelectorEventLoopTestsc                     t         |           t        j                         | _        g | j                  j
                  _        t        | j                        | _        | j                  | j                         y r   )
supersetUpr   r   selectorselectreturn_valuer   loopset_event_loopr   	__class__s    r   r9   z BaseSelectorEventLoopTests.setUp;   sM    		,.)-dmm<	DII&r   c                     t        j                         }t        j                         | j                  _        t        j                         | j                  _        | j                  j                  |t        j                               }| j                  |t               | j                  | j                  j                  j                  d       | j                  j                          t        |       t        |       y r   )r   r   r=   
add_reader_ensure_fd_no_transport_make_socket_transportr   ProtocolassertIsInstancer   assertEqual
call_countr2   reprr4   )r   mr3   s      r   test_make_socket_transportz5BaseSelectorEventLoopTests.test_make_socket_transportB   s    IIK#yy{		,0IIK		)II44Q8H8H8JK	i)AB::EEqI 			Y	"r   zasyncio.selector_events.sslNzasyncio.sslproto.sslc                 z   t        j                         }t        j                         | j                  _        t        j                         | j                  _        t        j                         | j                  _        t        j                         | j                  _        t        j                         | j                  _        | j                  t              5  | j                  j                  ||||       d d d        | j                  | j                  j                  j                  d       y # 1 sw Y   :xY wr   )r   r   r=   rB   
add_writerremove_readerremove_writerrC   assertRaisesRuntimeError_make_ssl_transportrG   rH   )r   rJ   s     r   )test_make_ssl_transport_without_ssl_errorzDBaseSelectorEventLoopTests.test_make_ssl_transport_without_ssl_errorP   s     IIK#yy{		#yy{		"&))+		"&))+		,0IIK		)|, 	6II))!Q15	6::EEqI	6 	6s   D11D:c                 r    G d dt               } || j                        | _        | j                  | j                         | j                  j                  }d|j
                  _        | j                  j                  }d|j
                  _        t        j                         x}| j                  _
        | j                  j                  j                          t        j                         x| j                  _        }| j                  | j                  j                                | j                  j                          | j                  | j                  j                                | j!                  | j                  j                         | j!                  | j                  j                         | j!                  | j                  j                         |j                  j#                          |j                  j#                          |j                  j#                          |j#                  d       | j                  j                          | j                  j                          | j                  j%                         }| j'                  t(        | j                  j*                         | j'                  t(        | j                  j,                  |       d}d }| j'                  t(        | j                  j.                  ||       | j'                  t(        | j                  j0                  ||       y )Nc                       e Zd Zd Zy)8BaseSelectorEventLoopTests.test_close.<locals>.EventLoopc                     t        j                         | _        t        j                         | _        | xj                  dz  c_        y r   r   r   s    r   r   zHBaseSelectorEventLoopTests.test_close.<locals>.EventLoop._make_self_pipe_   s-    "iik"iik""a'"r   N)r!   r"   r#   r   r   r   r   	EventLooprV   ^   s    (r   rX      r   r   c                       y r   r   r   r   r   callbackz7BaseSelectorEventLoopTests.test_close.<locals>.callback   s    r   )r   r:   r=   r>   r   filenor<   r   r   r   _remove_reader	_selectorr2   assertFalse	is_closed
assertTrueassertIsNoneassert_called_withcreate_futurerP   rQ   run_foreverrun_until_completerB   rM   )	r   rX   ssockcsockrN   r:   ffdr[   s	            r   
test_closez%BaseSelectorEventLoopTests.test_close]   s#   	(- 	( dmm,	DII&		  $%!		  $%!3799;>		0		!!#)-4		h,,./				++-.$))--.$))**+$))**+))+&&(&&(((+ 					 II##%,		(=(=>,		(D(DaH	,		(<(<b(K,		(<(<b(Kr   c                 2   t        j                         | j                  _        | j                  j                  j                          d | j                  _        | j                  j                          | j                  | j                  j                         y r   )r   r   r=   rN   r^   r2   rb   r   s    r   test_close_no_selectorz1BaseSelectorEventLoopTests.test_close_no_selector   s\    "&))+				!!#"				$))--.r   c                     t         | j                  j                  j                  _        | j                  | j                  j                                y r   )BlockingIOErrorr=   r   recvside_effectrb   _read_from_selfr   s    r   test_read_from_self_tryagainz7BaseSelectorEventLoopTests.test_read_from_self_tryagain   s5    ,;		)$))3356r   c                     t         | j                  j                  j                  _        | j                  t         | j                  j                         y r   )OSErrorr=   r   rp   rq   rP   rr   r   s    r   test_read_from_self_exceptionz8BaseSelectorEventLoopTests.test_read_from_self_exception   s4    ,3		)'499#<#<=r   c                     t         | j                  j                  j                  _        t        j                         5  | j                  | j                  j                                d d d        y # 1 sw Y   y xY wr   )	ro   r=   r   sendrq   
test_utilsdisable_loggerrb   _write_to_selfr   s    r   test_write_to_self_tryagainz6BaseSelectorEventLoopTests.test_write_to_self_tryagain   sV    ,;		)&&( 	:dii6689	: 	: 	:s   *A11A:c                     t               | j                  j                  j                  _        | j                  t         | j                  j                         y r   )rQ   r=   r   rx   rq   rP   r{   r   s    r   test_write_to_self_exceptionz7BaseSelectorEventLoopTests.test_write_to_self_exception   s6    ,8N		),		(@(@Ar   zsocket.getaddrinfoc           
      \   d}t         j                  t         j                  fD ]  }| j                  |      5  t	        j
                  |      }d |_        | j                  j                  | j                  j                  ||            }| j                  j                  |       |j                  |d   |d   |j                  |j                  |j                  d       | j                  j                  |       |j                  j                  d       d d d         y # 1 sw Y   xY w)N)zneed-resolution.comi  )typec                      dgS )N)NNNNz	127.0.0.1r   r   )argss    r   <lambda>zZBaseSelectorEventLoopTests.test_sock_connect_resolve_using_socket_params.<locals>.<lambda>   s
    #M"N r   r   r   r   )socketSOCK_STREAM
SOCK_DGRAMsubTestry   mock_nonblocking_socketrq   r=   create_tasksock_connectrf   rc   familyr   protoconnect)r   m_gaiaddr	sock_typesockcons         r   -test_sock_connect_resolve_using_socket_paramszHBaseSelectorEventLoopTests.test_sock_connect_resolve_using_socket_params   s   , ,,f.?.?@ 	BIi( B!99yI O ! ii++DII,B,B4,NO		,,S1((GT!Wdkk499djj!M 		,,S1//0@AB B	BB Bs   CD!!D+	c                 ,   t         | j                  j                  j                  _        d }| j                  j                  d|       | j                  | j                  j                  j                  j                         | j                  j                  j                  j                  d   \  }}\  }}| j                  d|       | j                  t        j                  |       | j                  ||j                         | j                  |       y )Nc                       yNTr   r   r   r   r   z<BaseSelectorEventLoopTests.test_add_reader.<locals>.<lambda>       r   r   r   )KeyErrorr=   r^   get_keyrq   rB   ra   registercalled	call_argsrG   	selectors
EVENT_READ	_callbackrb   r   cbrj   maskrws         r   test_add_readerz*BaseSelectorEventLoopTests.test_add_reader   s    2:		##/		Q#		++44;;<99..77AA!DD&1aB--t4Q[[)!r   c                    t        j                         }t        j                         }t        j                  ddt        j                  ||f      | j
                  j                  j                  _        d }| j
                  j                  d|       | j                  |j                  j                         | j                  | j
                  j                  j                  j                         | j                  | j
                  j                  j                  j                         | j
                  j                  j                  j                   d   \  }}\  }}| j#                  d|       | j#                  t        j                  t        j$                  z  |       | j#                  ||j&                         | j#                  ||       y )Nr   c                       yr   r   r   r   r   r   zEBaseSelectorEventLoopTests.test_add_reader_existing.<locals>.<lambda>   r   r   r   )r   r   r   SelectorKeyEVENT_WRITEr=   r^   r   r<   rB   ra   cancelr   r_   r   modifyr   rG   r   r   r   readerwriterr   rj   r   r   r   s           r   test_add_reader_existingz3BaseSelectorEventLoopTests.test_add_reader_existing   sD   3<3H3Hq)''&&)94;		##0		Q#,,-,,55<<=		++2299:99..55??BD&1aB..1E1EEtLQ[[)#r   c                 .   t        j                         }t        j                  ddt        j                  d |f      | j
                  j                  j                  _        d }| j
                  j                  d|       | j                  | j
                  j                  j                  j                         | j                  | j
                  j                  j                  j                         | j
                  j                  j                  j                  d   \  }}\  }}| j!                  d|       | j!                  t        j                  t        j"                  z  |       | j!                  ||j$                         | j!                  ||       y )Nr   c                       yr   r   r   r   r   r   zLBaseSelectorEventLoopTests.test_add_reader_existing_writer.<locals>.<lambda>   r   r   r   )r   r   r   r   r   r=   r^   r   r<   rB   r_   r   r   ra   r   r   rG   r   r   )r   r   r   rj   r   r   r   s          r   test_add_reader_existing_writerz:BaseSelectorEventLoopTests.test_add_reader_existing_writer   s"   3<3H3Hq)''$49		##0		Q#,,55<<=		++2299:99..55??BD&1aB..1E1EEtLQ[[)#r   c                 \   t        j                  ddt         j                  d      | j                  j                  j
                  _        | j                  | j                  j                  d             | j                  | j                  j                  j                  j                         y Nr   )NN)r   r   r   r=   r^   r   r<   r_   rN   ra   
unregisterr   r   s    r   test_remove_readerz-BaseSelectorEventLoopTests.test_remove_reader   ss    3<3H3Hq)&&46		##00034		++66==>r   c                 r   t        j                         }t        j                         }t        j                  ddt        j                  t        j
                  z  ||f      | j                  j                  j                  _	        | j                  | j                  j                  d             | j                  | j                  j                  j                  j                         | j                  dt        j
                  d |ff| j                  j                  j                   j"                  d          y Nr   r   )r   r   r   r   r   r   r=   r^   r   r<   ra   rN   r_   r   r   rG   r   r   r   r   r   s      r   test_remove_reader_read_writez8BaseSelectorEventLoopTests.test_remove_reader_read_write   s    3<3H3Hq)&&)>)>>V4		##0 	II##A&	( 	,,77>>?	%%f~6II&&003	5r   c                     t         | j                  j                  j                  _        | j                  | j                  j                  d             y r   )r   r=   r^   r   rq   r_   rN   r   s    r   test_remove_reader_unknownz5BaseSelectorEventLoopTests.test_remove_reader_unknown   :    2:		##/II##A&	(r   c                 ,   t         | j                  j                  j                  _        d }| j                  j                  d|       | j                  | j                  j                  j                  j                         | j                  j                  j                  j                  d   \  }}\  }}| j                  d|       | j                  t        j                  |       | j                  |       | j                  ||j                         y )Nc                       yr   r   r   r   r   r   z<BaseSelectorEventLoopTests.test_add_writer.<locals>.<lambda>   r   r   r   r   )r   r=   r^   r   rq   rM   ra   r   r   r   rG   r   r   rb   r   r   s         r   test_add_writerz*BaseSelectorEventLoopTests.test_add_writer   s    2:		##/		Q#		++44;;<99..77AA!DD&1aB..5!Q[[)r   c                    t        j                         }t        j                         }t        j                  ddt        j                  ||f      | j
                  j                  j                  _        d }| j
                  j                  d|       | j                  |j                  j                         | j                  | j
                  j                  j                  j                         | j                  | j
                  j                  j                  j                         | j
                  j                  j                  j                   d   \  }}\  }}| j#                  d|       | j#                  t        j$                  t        j                  z  |       | j#                  ||       | j#                  ||j&                         y )Nr   c                       yr   r   r   r   r   r   zEBaseSelectorEventLoopTests.test_add_writer_existing.<locals>.<lambda>  r   r   r   )r   r   r   r   r   r=   r^   r   r<   rM   ra   r   r   r_   r   r   r   rG   r   r   r   s           r   test_add_writer_existingz3BaseSelectorEventLoopTests.test_add_writer_existing  sD   3<3H3Hq)&&(84:		##0		Q#,,-,,55<<=		++2299:99..55??BD&1aB..1E1EEtL#Q[[)r   c                 \   t        j                  ddt         j                  d      | j                  j                  j
                  _        | j                  | j                  j                  d             | j                  | j                  j                  j                  j                         y r   )r   r   r   r=   r^   r   r<   r_   rO   ra   r   r   r   s    r   test_remove_writerz-BaseSelectorEventLoopTests.test_remove_writer  ss    3<3H3Hq)''47		##00034		++66==>r   c                 r   t        j                         }t        j                         }t        j                  ddt        j                  t        j
                  z  ||f      | j                  j                  j                  _	        | j                  | j                  j                  d             | j                  | j                  j                  j                  j                         | j                  dt        j                  |d ff| j                  j                  j                   j"                  d          y r   )r   r   r   r   r   r   r=   r^   r   r<   ra   rO   r_   r   r   rG   r   r   r   s      r   test_remove_writer_read_writez8BaseSelectorEventLoopTests.test_remove_writer_read_write  s    3<3H3Hq)&&)>)>>V4		##0 	II##A&	( 	,,77>>?	$$vtn5II&&003	5r   c                     t         | j                  j                  j                  _        | j                  | j                  j                  d             y r   )r   r=   r^   r   rq   r_   rO   r   s    r   test_remove_writer_unknownz5BaseSelectorEventLoopTests.test_remove_writer_unknown,  r   r   c           	         t        j                         }d|_        t        j                         | j                  _        | j                  j                  t        j                  ddt        j                  |d f      t        j                  fg       | j                  | j                  j                  j                         | j                  j                  j                  |       y NFr   )r   r   
_cancelledr=   _add_callback_process_eventsr   r   r   ra   r   rc   r   r   s     r   test_process_events_readz3BaseSelectorEventLoopTests.test_process_events_read1  s    !"&))+				!!##1i**VTN<""$ %	& 			//667		226:r   c           	      n   t        j                         }d|_        t        j                         | j                  _        | j                  j                  t        j                  ddt        j                  |d f      t        j                  fg       | j                  j                  j                  d       y NTr   )
r   r   	cancelledr=   r]   r   r   r   r   rc   r   s     r   "test_process_events_read_cancelledz=BaseSelectorEventLoopTests.test_process_events_read_cancelled=  s    #'99;		 		!!##1i**VTN<!!# $	% 			  33A6r   c           	      n   t        j                         }d|_        t        j                         | j                  _        | j                  j                  t        j                  ddt        j                  d |f      t        j                  fg       | j                  j                  j                  |       y r   )
r   r   r   r=   r   r   r   r   r   rc   r   r   s     r   test_process_events_writez4BaseSelectorEventLoopTests.test_process_events_writeH  s    !"&))+				!!##Aq)*?*?%)6N4##% &	' 			226:r   c           	      n   t        j                         }d|_        t        j                         | j                  _        | j                  j                  t        j                  ddt        j                  d |f      t        j                  fg       | j                  j                  j                  d       y r   )
r   r   r   r=   _remove_writerr   r   r   r   rc   r   s     r   #test_process_events_write_cancelledz>BaseSelectorEventLoopTests.test_process_events_write_cancelledS  s    #'99;		 		!!##Aq)*?*?%)6N4##% &	' 			  33A6r   c                 *   t        j                         }t        j                         t        j                         f|j                  _        d}t         j                  j
                  } || j                  d      5 }| j                  j                  t        j                         ||       d d d        | j                  j                  t        j                  d             | j                  |j                  j                  |       y # 1 sw Y   ^xY w)Nd   _accept_connection2)backlogr   )r   r   acceptr<   patchobjectr=   _accept_connectionrf   r   sleeprG   rH   )r   r   r   mock_objaccept2_mocks        r   test_accept_connection_multiplez:BaseSelectorEventLoopTests.test_accept_connection_multiple^  s    yy{$(IIK#=  ::$$dii!67 	4<II((		T7 ) 4	4 			$$W]]1%56//9		4 	4s   ;1D		D) r!   r"   r#   r9   rK   r   r   rS   rk   rm   rs   rv   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r@   s   @r   r6   r6   9   s    '# TZZ-t4TZZ&-	J . 5	J*LX/7>:
B
 TZZ$%B &B"
$"$?5(

**"?5(

;	7	;	7:r   r6   c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	 e
j                  d      d	        Z e
j                  d      d
        Zd Zd Z xZS )SelectorTransportTestsc                 "   t         |           | j                         | _        t	        j
                  t        j                        | _        t        j                  t        j                        | _        d| j                  j                  _        y NrY   )r8   r9   new_test_loopr=   ry   make_test_protocolr   rE   protocolr   r   r   r   r\   r<   r?   s    r   r9   zSelectorTransportTests.setUpr  sZ    &&(	"55g6F6FGIIfmm,	()		%r   c                     t        | j                  | j                  | j                  d       }| j	                  t
        |       |S r   )r   r=   r   r   
addCleanupr4   r   r3   s     r   create_transportz'SelectorTransportTests.create_transporty  s5    &tyy$))T]]'+-	3r   c                     | j                         }| j                  |j                  | j                         | j                  |j                  | j
                         | j                  |j                  d       y r   )r   assertIs_loopr=   r1   r   _sock_fdr   trs     r   	test_ctorz SelectorTransportTests.test_ctor  sN    ""$bhh		*bhh		*bkk1%r   c                     | j                         }t        j                         |_        |j	                          |j                  j                  d        y r   )r   r   r   _force_closeabortrc   r   s     r   
test_abortz!SelectorTransportTests.test_abort  s8    ""$))+


**40r   c                    | j                         }|j                          | j                  |j                                | j	                  d| j
                  j                  d          | j                  j                  d        | j	                  |j                  d       |j                          | j	                  |j                  d       | j	                  d| j
                  j                  d          y )Nr   rY   )
r   r2   ra   
is_closingrG   r=   remove_reader_countr   connection_lost
_conn_lostr   s     r   rk   z!SelectorTransportTests.test_close  s    ""$

(DII99!<=%%d+*

*DII99!<=r   c                 `   | j                         }|j                  j                  d       |j                          | j	                  | j
                  j                         t        j                  | j
                         | j	                  | j                  j                  j                         y N   data)r   _bufferr,   r2   r_   r=   readersry   run_brieflyr   r  r   r   s     r   test_close_write_bufferz.SelectorTransportTests.test_close_write_buffer  ss    ""$


'"

**+tyy)66==>r   c                    | j                         }|j                  j                  d       | j                  j	                  dt
        j                         | j                  j                  dt
        j                         |j                  d        | j                  |j                                | j                  |j                  t                      | j                  | j                  j                         | j                  | j                  j                         |j                  d        | j                  | j                  j                         | j                  d| j                  j                   d          y )N   1rY   r   )r   r  r,   r=   _add_readerr   sentinel_add_writerr   ra   r  rG   r/   r_   r	  writersr  r   s     r   test_force_closez'SelectorTransportTests.test_force_close  s    ""$


$		a/		a/
(^%56**+**+ 	**+DII99!<=r   zasyncio.log.logger.errorc                     t               }| j                         }t        j                         |_        |j                  |       |j                          |j                  j                  |       y r   )ru   r   r   r   r   _fatal_errorassert_not_calledrc   )r   m_excexcr   s       r   test_fatal_errorz'SelectorTransportTests.test_fatal_error  sN    i""$))+
!
**3/r   c                 <    G d dt               } |       }| j                         }t        j                         |_        |j                  |       |j                  t        j                  d      |t        t        f       |j                  j                  |       y )Nc                       e Zd Zy)ISelectorTransportTests.test_fatal_error_custom_exception.<locals>.MyErrorNr!   r"   r#   r   r   r   MyErrorr        r   r  1Fatal error on transport
protocol:.*
transport:.*exc_info)
	Exceptionr   r   r   r   r  rc   ry   MockPatternMOCK_ANY)r   r  r  r  r   s        r   !test_fatal_error_custom_exceptionz8SelectorTransportTests.test_fatal_error_custom_exception  s    	i 	i""$))+
  ""EGx2 	! 	4
 	**3/r   c                    t               }| j                         }| j                  |j                         | j                  |j                         |j                  |       | j                  j                  j                  |       | j                  j                  j                          | j                  |j                         | j                  |j                         | j                  |j                         y r   )ru   r   assertIsNotNone	_protocolr   _call_connection_lostr   r  rc   r   r2   rb   r1   )r   r  r   s      r   test_connection_lostz+SelectorTransportTests.test_connection_lost  s    i""$R\\*RXX&
  %%%88=		**,"((#",,'"((#r   c                    | j                         }|j                  j                  d       |j                  dt        j
                         | j                  | j                  j                         |j                  d        | j                  |j                                | j                  | j                  j                         |j                  dt        j
                         | j                  | j                  j                         y )Nr  rY   )r   r  r,   r  r   r  ra   r=   r	  r   r  r_   r   s     r   test__add_readerz'SelectorTransportTests.test__add_reader  s    ""$


$
q$--(		))*
(**+ 	q$--(**+r   )r!   r"   r#   r9   r   r   r   rk   r  r  r   r   r  r%  r*  r,  r   r   s   @r   r   r   p  sp    *&1>?>" TZZ*+0 ,0 TZZ*+0 ,0$,r   r   c                   
    e Zd Z fdZd6dZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej@                  e!jD                  d      d        Z# ej@                  e!jD                  d      d        Z$d Z%d  Z& ej@                  e!jD                  d      d!        Z' ej@                  e!jD                  d      d"        Z( ej@                  e!jD                  d      d#        Z) ej@                  e!jD                  d      d$        Z* ej                  d%      d&        Z+d' Z,d( Z-d) Z.d* Z/ ej`                  e1jd                  jf                  d+      d,        Z4d- Z5d. Z6d/ Z7d0 Z8d1 Z9d2 Z:d3 Z; ej                  d4      d5        Z< xZ=S )7SelectorSocketTransportTestsc                 0   t         |           | j                         | _        t	        j
                  t        j                        | _        t        j                  t        j                        | _        dx| _        | j                  j                  _        y r   )r8   r9   r   r=   ry   r   r   rE   r   r   r   r   r   sock_fdr\   r<   r?   s    r   r9   z"SelectorSocketTransportTests.setUp  sa    &&(	"55g6F6FGIIfmm,	788tyy''4r   c                     t        | j                  | j                  | j                  |      }|r|j                  |_        n|j                  |_        | j                  t        |       |S Nwaiter)	r   r=   r   r   _write_sendmsg_write_ready_write_sendr   r4   )r   r4  sendmsgr3   s       r   socket_transportz-SelectorSocketTransportTests.socket_transport  sU    ,TYY		-1]]6K	%.%=%=I"%.%:%:I"3r   c                 f   | j                   j                         }| j                  |      }| j                   j                  |       | j                   j	                  d|j
                         t        j                  | j                          | j                  j                  j                  |       y Nr3  rY   r=   rd   r9  rf   assert_reader_read_readyry   r
  r   connection_maderc   r   r4  r   s      r   r   z&SelectorSocketTransportTests.test_ctor  {    ((*""&"1		$$V,		2>>2tyy)%%88<r   c                     | j                   j                         }| j                  |       | j                   j                  |       | j	                  |j                                y r2  )r=   rd   r9  rf   rb   result)r   r4  s     r   test_ctor_with_waiterz2SelectorSocketTransportTests.test_ctor_with_waiter  sK    ((*V,		$$V,&--/*r   c                    | j                         }t        j                  | j                         | j	                  |j
                         | j                  |j                                | j                  j                  d|j                         |j                          |j                          | j                  |j
                         | j	                  |j                                | j                  j                  d       |j                          |j                          | j	                  |j
                         | j                  |j                                | j                  j                  d|j                         |j                          | j	                  |j                                | j                  j                  d       y r   )r9  ry   r
  r=   r_   _pausedra   
is_readingr=  r>  pause_readingassert_no_readerresume_readingr2   r   s     r   test_pause_resume_readingz6SelectorSocketTransportTests.test_pause_resume_reading  s/   ""$tyy)$(		2>>2



#)		""1%

$(		2>>2

)		""1%r   c                 R   | j                         fd| j                  j                  _        t	        j
                  | j                         | j                  j                                | j                  j                  d       j                          | j                  j                                | j                  j                  dj                         j                          | j                  j                                | j                  j                  d       y )Nc                 $    j                         S r   )rH  )_r   s    r   r   zQSelectorSocketTransportTests.test_pause_reading_connection_made.<locals>.<lambda>(  s    b>N>N>P r   rY   )r9  r   r?  rq   ry   r
  r=   r_   rG  rI  rJ  ra   r=  r>  r2   r   s    @r   "test_pause_reading_connection_madez?SelectorSocketTransportTests.test_pause_reading_connection_made&  s    ""$4P%%1tyy))		""1%
(		2>>2

)		""1%r   c                    | j                         }t        j                         |_        t        j                         |_        t        j                         | j
                  _        t               | j                  j                  _
        d| j                  j                  _        |j                          | j                  j                  j                          | j!                  |j                  j"                         y Nr   )r9  r   r   r2   r  r=   call_exception_handlerLookupErrorr   eof_receivedrq   r   rp   r<   r>  rc   ra   r   r   s     r   test_read_eof_received_errorz9SelectorSocketTransportTests.test_read_eof_received_error6  s    ))+	))+	!%	+/99;		(1<"".&)		#""557	..556r   c                    | j                         }t        j                         |_        t        j                         | j                  _        t               | j                  j                  _	        d| j                  j                  _        |j                          | j                  |j                  j                         | j                  | j                  j                  j                         y r  )r9  r   r   r  r=   rR  rS  r   data_receivedrq   r   rp   r<   r>  ra   r   r   s     r   test_data_received_errorz5SelectorSocketTransportTests.test_data_received_errorE  s    ))+	!%	+/99;		(2=-##/&-		#	..55633::;r   c                     | j                         }d| j                  j                  _        |j	                          | j
                  j                  j                  d       y r  )r9  r   rp   r<   r>  r   rW  rc   r   s     r   test_read_readyz,SelectorSocketTransportTests.test_read_readyR  sD    ))+	&-		###66w?r   c                 (   | j                         }t        j                         |_        d| j                  j
                  _        |j                          | j                  j                  j                          |j                  j                          y rQ  )r9  r   r   r2   r   rp   r<   r>  r   rT  rc   r   s     r   test_read_ready_eofz0SelectorSocketTransportTests.test_read_ready_eofZ  s_    ))+	))+	&)		#""557**,r   c                 t   | j                         }t        j                         |_        d| j                  j
                  _        d| j                  j                  _        |j                          | j                  j                  j                          | j                  |j                  j                         y )Nr   T)r9  r   r   r2   r   rp   r<   r   rT  r>  rc   r_   r   r   s     r   test_read_ready_eof_keep_openz:SelectorSocketTransportTests.test_read_ready_eof_keep_opend  sy    ))+	))+	&)		#26""/""557//0r   logging.exceptionc                     t         | j                  j                  _        | j	                         }t        j                         |_        |j                          | j                  |j                  j                         y r   )ro   r   rp   rq   r9  r   r   r  r>  r_   r   r   r  r3   s      r   test_read_ready_tryagainz5SelectorSocketTransportTests.test_read_ready_tryagaino  sT    %4		"))+	!%	//667r   c                     t         | j                  j                  _        | j	                         }t        j                         |_        |j                          | j                  |j                  j                         y r   )InterruptedErrorr   rp   rq   r9  r   r   r  r>  r_   r   ra  s      r   $test_read_ready_tryagain_interruptedzASelectorSocketTransportTests.test_read_ready_tryagain_interruptedy  sT    %5		"))+	!%	//667r   c                 H   t               x}| j                  j                  _        | j	                         }t        j                         |_        t        j                         5  |j                          d d d        |j                  j                  |       y # 1 sw Y   %xY wr   )ConnectionResetErrorr   rp   rq   r9  r   r   r   ry   rz   r>  rc   r   r  errr3   s       r   test_read_ready_conn_resetz7SelectorSocketTransportTests.test_read_ready_conn_reset  sw    +?+AAdiinn())+	!%	&&( 	$!!#	$11#6	$ 	$   #BB!c                     t               x}| j                  j                  _        | j	                         }t        j                         |_        |j                          |j                  j                  |d       y Nz$Fatal read error on socket transport)
ru   r   rp   rq   r9  r   r   r  r>  rc   rh  s       r   test_read_ready_errz0SelectorSocketTransportTests.test_read_ready_err  s\    +294diinn())+	!%	11#&#I	Kr   c                     d}t        |      | j                  j                  _        | j	                         }|j                  |       | j                  j                  j                  |       y r  )lenr   rx   r<   r9  writerc   r   datar3   s      r   
test_writez'SelectorSocketTransportTests.test_write  sK    &)$i		#))+			))$/r   c                 $   t        d      }t        |      | j                  j                  _        | j                         }|j                  |       | j                  j                  j                  |       | j                  |t        d             y r  )		bytearrayrp  r   rx   r<   r9  rq  rc   rG   rr  s      r   test_write_bytearrayz1SelectorSocketTransportTests.test_write_bytearray  se    !&)$i		#))+			))$/y12r   c                     t        d      }t        |      | j                  j                  _        | j                         }|j                  |       | j                  j                  j                  |       y r  )r&   rp  r   rx   r<   r9  rq  rc   rr  s      r   test_write_memoryviewz2SelectorSocketTransportTests.test_write_memoryview  sP    '"&)$i		#))+			))$/r   c                 8   | j                         }|j                  j                  t        d             |j	                  d       | j                  | j                  j                  j                         | j                  t        dg      |j                         y )Nr  r   )r9  r  appendr&   rq  r_   r   rx   r   rG   r/   r   s     r   test_write_no_dataz/SelectorSocketTransportTests.test_write_no_data  sn    ))+	  G!45../	2I4E4EFr   c                 (   | j                         }|j                  j                  d       |j                  d       | j	                  | j
                  j                  j                         | j                  t        ddg      |j                         y )N   data1   data2)
r9  r  r{  rq  r_   r   rx   r   rG   r/   r   s     r   test_write_bufferz.SelectorSocketTransportTests.test_write_buffer  so    ))+	  *!../8(<="**	,r   c                    d}d| j                   j                  _        | j                         }|j	                  |       | j
                  j                  d|j                         | j                  t        dg      |j                         y Nr     rY      ta)r   rx   r<   r9  rq  r=   assert_writerr6  rG   r/   r  rr  s      r   test_write_partialz/SelectorSocketTransportTests.test_write_partial  sh    &'		#))+			9#9#9:0)2C2CDr   c                 `   t        d      }d| j                  j                  _        | j	                         }|j                  |       | j                  j                  d|j                         | j                  t        dg      |j                         | j                  |t        d             y r  )rv  r   rx   r<   r9  rq  r=   r  r6  rG   r/   r  rr  s      r   test_write_partial_bytearrayz9SelectorSocketTransportTests.test_write_partial_bytearray  s    !&'		#))+			9#9#9:0)2C2CDy12r   c                 *   t        d      }d| j                  j                  _        | j	                         }|j                  |       | j                  j                  d|j                         | j                  t        dg      |j                         y r  )r&   r   rx   r<   r9  rq  r=   r  r6  rG   r/   r  rr  s      r   test_write_partial_memoryviewz:SelectorSocketTransportTests.test_write_partial_memoryview  sm    '"&'		#))+			9#9#9:0)2C2CDr   c                 N   d}d| j                   j                  _        d| j                   j                  _        | j	                         }|j                  |       | j                  j                  d|j                         | j                  t        dg      |j                         y Nr  r   rY   )r   rx   r<   r\   r9  rq  r=   r  r6  rG   r/   r  rr  s      r   test_write_partial_nonez4SelectorSocketTransportTests.test_write_partial_none  sz    &'		#()		%))+			9#9#9:	2I4E4EFr   c                     t         | j                  j                  _        d}| j	                         }|j                  |       | j                  j                  d|j                         | j                  t        dg      |j                         y Nr  rY   )ro   r   rx   rq   r9  rq  r=   r  r6  rG   r/   r  rr  s      r   test_write_tryagainz0SelectorSocketTransportTests.test_write_tryagain  sh    %4		"))+			9#9#9:	2I4E4EFr   c                    t        j                         | j                  _        d| j                  j                  _        | j                  d      }|j                  j                  t        d             |j                  d       | j                  | j                  j                  j                         | j                  t        dg      |j                         y )Nr   Tr8  r  r   )r   r   r   r8  r<   r9  r  r{  r&   rq  r_   r   rG   r/   r   s     r   test_write_sendmsg_no_dataz7SelectorSocketTransportTests.test_write_sendmsg_no_data  s     IIK		)*		&))$)7	  G!45**112	2I4E4EFr   z
no sendmsgc                    t        d      }t        j                         | j                  _        t        |      | j                  j                  _        | j                  d      }|j                  |g       | j                  | j                  j                  j                         | j                  | j                  j                         y )Nr  Tr  )r&   r   r   r   r8  rp  r<   r9  
writelinesra   r   r_   r=   r  rr  s      r   test_writelines_sendmsg_fullz9SelectorSocketTransportTests.test_writelines_sendmsg_full  s    '" IIK		),T		&))$)7	dV$		))001**+r   c                    t        d      }t        j                         | j                  _        d| j                  j                  _        | j                  d      }|j                  |g       | j                  | j                  j                  j                         | j                  | j                  j                         y )Nr  r  Tr  )r&   r   r   r   r8  r<   r9  r  ra   r   r=   r  rr  s      r   test_writelines_sendmsg_partialz<SelectorSocketTransportTests.test_writelines_sendmsg_partial	  s    '" IIK		)*		&))$)7	dV$		))001		))*r   c                    t        d      }t        |      | j                  j                  _        d| j                  j                  j
                  _        | j                         }|j                  |g       | j                  | j                  j                  j                         | j                  | j                  j                         y r  )r&   rp  r   rx   r<   r\   r9  r  ra   r   r_   r=   r  rr  s      r   test_writelines_send_fullz6SelectorSocketTransportTests.test_writelines_send_full  s    '"&)$i		#-.		*))+	dV$		--.**+r   c                    t        d      }d| j                  j                  _        d| j                  j                  j                  _        | j                         }|j                  |g       | j                  | j                  j                  j                         | j                  | j                  j                         y )Nr  r  rY   )r&   r   rx   r<   r\   r9  r  ra   r   r=   r  rr  s      r   test_writelines_send_partialz9SelectorSocketTransportTests.test_writelines_send_partial  s    '"&'		#-.		*))+	dV$		--.		))*r   c                    t        d      }t        j                         | j                  _        t        |      | j                  j                  _        | j                  d      }|j                  j                  |       | j                  j                  d|j                         |j                          | j                  | j                  j                  j                         | j                  | j                  j                          y )Nr  Tr  rY   )r&   r   r   r   r8  rp  r<   r9  r  r{  r=   r  r6  ra   r   r_   r  rr  s      r   test_write_sendmsg_fullz4SelectorSocketTransportTests.test_write_sendmsg_full(  s    '" IIK		),T		&))$)7	  &		a!7!78 		))001**+r   c                 P   t        d      }t        j                         | j                  _        d| j                  j                  _        | j                  d      }|j                  j                  |       | j                  j                  d|j                         |j                          | j                  | j                  j                  j                         | j                  | j                  j                         | j                  t!        dg      |j                         y )Nr  r  Tr  rY   r  )r&   r   r   r   r8  r<   r9  r  r{  r=   r  r6  ra   r   r  rG   r/   rr  s      r   test_write_sendmsg_partialz7SelectorSocketTransportTests.test_write_sendmsg_partial5  s     '" IIK		)*		&))$)7	  &		a!7!78 		))001		))*0)2C2CDr   c                 h   t        d      t        d      g}t        j                         | j                  _        d| j                  j                  _        | j                  d      }|j                  j                  |       | j                  j                  d|j                         |j                          | j                  | j                  j                  j                         | j                  | j                  j                         | j                  t!        ddg      |j                         y )Nr~  r  r  Tr  rY   s   ta1)r&   r   r   r   r8  r<   r9  r  r,   r=   r  r6  ra   r   r  rG   r/   rr  s      r   test_write_sendmsg_half_bufferz;SelectorSocketTransportTests.test_write_sendmsg_half_bufferE  s    8$j&:; IIK		)*		&))$)7	  &		a!7!78 		))001		))*(:;Y=N=NOr   c                    t        d      }t        j                         | j                  _        t               x}| j                  j                  _        | j                  d      }t        j                         |_        |j                  j                  |       |j                          | j                  | j                  j                  j                         | j                  | j                  j                          | j#                  t%        g       |j                         |j                  j'                  |d       y )Nr  Tr  %Fatal write error on socket transport)r&   r   r   r   r8  ru   rq   r9  r  r  r,   r6  ra   r   r_   r=   r  rG   r/   rc   )r   rs  ri  r3   s       r   test_write_sendmsg_OSErrorz7SelectorSocketTransportTests.test_write_sendmsg_OSErrorT  s    '" IIK		.5i7dii+))$)7	!%	  & 		))001**++Y->->?11#&#J	Lr   asyncio.selector_events.loggerc                    t               x}| j                  j                  _        d}| j	                         }t        j                         |_        |j                  |       |j                  j                  |d       d|_
        | j                  j                          |j                  |       | j                  | j                  j                  j                         | j                  |j                  d       |j                  |       |j                  |       |j                  |       |j                  |       |j                  j                  d       y )Nr  r  r   r  socket.send() raised exception.)ru   r   rx   rq   r9  r   r   r  rq  rc   r  
reset_mockr_   r   rG   warning)r   m_logri  rs  r3   s        r   test_write_exceptionz1SelectorSocketTransportTests.test_write_exceptionf  s    +294diinn())+	!%	11#&#J	L  !			../--q1(()JKr   c                 f    | j                         }| j                  t        |j                  d       y )Nstr)r9  rP   	TypeErrorrq  r   s     r   test_write_strz+SelectorSocketTransportTests.test_write_str}  s&    ))+	)Y__e<r   c                     | j                         }|j                          | j                  |j                  d       |j	                  d       | j                  |j                  d       y )Nr   r  r  )r9  r2   rG   r  rq  r   s     r   test_write_closingz/SelectorSocketTransportTests.test_write_closing  sR    ))+	--q1 --q1r   c                    d}t        |      | j                  j                  _        | j	                         }|j
                  j                  |       | j                  j                  d|j                         |j                          | j                  | j                  j                  j                         | j                  | j                  j                         y r  )rp  r   rx   r<   r9  r  r{  r=   r  r6  ra   r   r_   r  rr  s      r   test_write_readyz-SelectorSocketTransportTests.test_write_ready  s    &)$i		#))+	  &		a!7!78 		--.**+r   c                 l   t        d      }t        |      | j                  j                  _        | j                         }d|_        |j                  j                  |       | j                  j                  d|j                         |j                          | j                  | j                  j                  j                         | j                  | j                  j                         | j                  j                   j#                          | j$                  j&                  j#                  d        y )Nr  TrY   )r&   rp  r   rx   r<   r9  _closingr  r{  r=   r  r6  ra   r   r_   r  r2   rc   r   r  rr  s      r   test_write_ready_closingz5SelectorSocketTransportTests.test_write_ready_closing  s    '"&)$i		#))+	!	  &		a!7!78 		--.**+		**,%%88>r   z)Assertions are disabled in optimized modec                 d    | j                         }| j                  t        |j                         y r   )r9  rP   AssertionErrorr6  r   s     r   test_write_ready_no_dataz5SelectorSocketTransportTests.test_write_ready_no_data  s&    ))+	.)*@*@Ar   c                    t        d      }d| j                  j                  _        | j	                         }|j
                  j                  |       | j                  j                  d|j                         |j                          | j                  j                  d|j                         | j                  t        dg      |j
                         y r  )r&   r   rx   r<   r9  r  r{  r=   r  r6  r  rG   r/   rr  s      r   test_write_ready_partialz5SelectorSocketTransportTests.test_write_ready_partial  s    '"&'		#))+	  &		a!7!78 		9#9#9:0)2C2CDr   c                    d}d| j                   j                  _        | j                         }|j                  j                  |       | j                  j                  d|j                         |j                          | j                  j                  d|j                         | j                  t        dg      |j                         y r  )r   rx   r<   r9  r  r{  r=   r  r6  r  rG   r/   rr  s      r   test_write_ready_partial_nonez:SelectorSocketTransportTests.test_write_ready_partial_none  s    &'		#))+	  &		a!7!78 		9#9#9:	2I4E4EFr   c                 z   t         | j                  j                  _        | j	                         }t        ddg      }||_        | j                  j                  d|j                         |j                          | j                  j                  d|j                         | j                  ||j                         y )Nr~  r  rY   )ro   r   rx   rq   r9  r/   r  r=   r  r6  r  rG   )r   r3   r.   s      r   test_write_ready_tryagainz6SelectorSocketTransportTests.test_write_ready_tryagain  s    %4		"))+	8 45"			a!7!78 		9#9#9:!2!23r   c                 .   t               x}| j                  j                  _        | j	                         }t        j                         |_        |j                  j                  d       |j                          |j                  j                  |d       y )Nr  r  )ru   r   rx   rq   r9  r   r   r  r  r,   r6  rc   r   ri  r3   s      r   test_write_ready_exceptionz7SelectorSocketTransportTests.test_write_ready_exception  sp    +294diinn())+	!%	  ) 11#&#J	Lr   c                    | j                         }| j                  |j                                |j                          | j                  j
                  j                  t        j                         |j                          | j                  | j                  j
                  j                  d       |j                          y r   )r9  ra   can_write_eof	write_eofr   shutdownrc   r   SHUT_WRrG   rH   r2   r   s     r   test_write_eofz+SelectorSocketTransportTests.test_write_eof  s|    ""$((*+
		--fnn=
++66:

r   c                    | j                         }t        | j                  j                  _        |j                  d       |j                          | j                  |j                  t        dg             | j                  |j                         | j                  | j                  j                  j                         d | j                  j                  _        |j                          | j                  | j                  j                  j                         | j                  j                  j!                  t"        j$                         |j'                          y )Nr  c                      y)N   r   )rN  s    r   r   zDSelectorSocketTransportTests.test_write_eof_buffer.<locals>.<lambda>  r   r   )r9  ro   r   rx   rq   rq  r  rG   r  r/   ra   _eofr_   r  r   r6  rc   r   r  r2   r   s     r   test_write_eof_bufferz2SelectorSocketTransportTests.test_write_eof_buffer  s    ""$%4		"

^WI%>? ++223%0		"
		--.		--fnn=

r   c                     | j                         }|j                          | j                  j                  t	        j
                  d             |j                          y Nr   )r9  r2   r=   rf   r   r   r  r   s     r   test_write_eof_after_closez7SelectorSocketTransportTests.test_write_eof_after_close  s=    ""$

		$$W]]1%56
r   zasyncio.base_events.loggerc                     t        j                         x}| j                  _        | j	                         }|j                          |j                  | j                         y r   )r   r   r=   r   r9  r2   rc   r0  )r   r  rO   r3   s       r   "test_transport_close_remove_writerz?SelectorSocketTransportTests.test_transport_close_remove_writer  sC    3799;>		0))+	((6r   )NF)>r!   r"   r#   r9   r9  r   rD  rK  rO  rU  rX  rZ  r\  r^  r   r   rb  re  rj  rn  rt  rw  ry  r|  r  r  r  r  r  r  r  unittest
skipUnlessr   _HAS_SENDMSGr  r  r  r  r  r  r  r  r  r  r  r  r  skipIfsysflagsoptimizer  r  r  r  r  r  r  r  r  r   r   s   @r   r.  r.    s   9=+&.& 7<@-	1 TZZ#$8 %8 TZZ#$8 %8 TZZ#$7 %7 TZZ#$	K %	K030G,E	3E	GGG X55|D, E, X55|D+ E+,+ X55|D
, E
, X55|DE EE X55|DP EP X55|DL EL" TZZ01L 2L,=2	,? X__SYY'')TUB VB
	E	G
4	L TZZ,-7 .7r   r.  c                       e Zd Z fdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z xZS ),SelectorSocketTransportBufferedProtocolTestsc                     t                     j                          _        t	        j
                  t        j                         _        t        d       _
         fd j                  j                  _        t        j                  t        j                         _        dx _         j                   j$                  _        y )Nr   c                     j                   S r   )buf)hintr   s    r   r   zDSelectorSocketTransportBufferedProtocolTests.setUp.<locals>.<lambda>  s    DHH r   rY   )r8   r9   r   r=   ry   r   r   BufferedProtocolr   rv  r  
get_bufferrq   r   r   r   r   r0  r\   r<   r?   s   `r   r9   z2SelectorSocketTransportBufferedProtocolTests.setUp  s~    &&(	"55g6N6NOQ</D  ,IIfmm,	788tyy''4r   c                     t        | j                  | j                  | j                  |      }| j	                  t
        |       |S r2  )r   r=   r   r   r   r4   )r   r4  r3   s      r   r9  z=SelectorSocketTransportBufferedProtocolTests.socket_transport  s6    ,TYY		-1]]6K	3r   c                 f   | j                   j                         }| j                  |      }| j                   j                  |       | j                   j	                  d|j
                         t        j                  | j                          | j                  j                  j                  |       y r;  r<  r@  s      r   r   z6SelectorSocketTransportBufferedProtocolTests.test_ctor  rA  r   c                    | j                         }t        j                         |_        t        j                         | j                  _        t               | j                  j                  _	        |j                          | j                  |j                  j                         | j                  | j                  j                  j                         | j                  | j                  j                  j                         y r   )r9  r   r   r  r=   rR  rS  r   r  rq   r>  ra   r   r_   buffer_updatedr   s     r   test_get_buffer_errorzBSelectorSocketTransportBufferedProtocolTests.test_get_buffer_error  s    ))+	!%	+/99;		(/:}  ,	..5560077855<<=r   c                    | j                         }t        j                         |_        t        j                         | j                  _        d | j                  j                  _        |j                          | j                  |j                  j                         | j                  | j                  j                  j                         | j                  | j                  j                  j                         y )Nc                     t        d      S r  )rv  )r  s    r   r   zXSelectorSocketTransportBufferedProtocolTests.test_get_buffer_zerosized.<locals>.<lambda>(  s
    IaL r   )r9  r   r   r  r=   rR  r   r  rq   r>  ra   r   r_   r  r   s     r   test_get_buffer_zerosizedzFSelectorSocketTransportBufferedProtocolTests.test_get_buffer_zerosized#  s    ))+	!%	+/99;		(/H  ,	..5560077855<<=r   c                 ~   t        j                  t        j                        | _        | j                         }d| j                  j                  _        |j                          | j                  j                  j                  d       t        j                  t        j                        }t        d      fd|j                  _        |j!                  |       d| j                  j"                  _        |j                          |j                  j                  d       |j$                  j                  d       y )Nr  r  c                     S r   r   )r  r  s    r   r   zUSelectorSocketTransportBufferedProtocolTests.test_proto_type_switch.<locals>.<lambda>=  s     r   
   )ry   r   r   rE   r   r9  r   rp   r<   r>  rW  rc   r  rv  r  rq   set_protocol	recv_intor  )r   r3   	buf_protor  s      @r   test_proto_type_switchzCSelectorSocketTransportBufferedProtocolTests.test_proto_type_switch0  s    "55g6F6FG))+	&-		###66w? 11'2J2JK	l+;	(y)+-		(//3  33B7r   c                 >   | j                         }t        j                         |_        t        j                         | j                  _        t               | j                  j                  _	        d| j                  j                  _        |j                          | j                  |j                  j                         | j                  | j                  j                   j                         | j                  | j                  j                  j                         y )Nr  )r9  r   r   r  r=   rR  rS  r   r  rq   r   r  r<   r>  ra   r   r  r   s     r   test_buffer_updated_errorzFSelectorSocketTransportBufferedProtocolTests.test_buffer_updated_errorG  s    ))+	!%	+/99;		(3>=$$0+-		(	..5560077844;;<r   c                    | j                         }t        j                         |_        t        j                         |_        t        j                         | j
                  _        t               | j                  j                  _
        d| j                  j                  _        |j                          | j                  j                  j                          | j!                  |j                  j"                         y r  )r9  r   r   r2   r  r=   rR  rS  r   rT  rq   r   r  r<   r>  rc   ra   r   r   s     r   rU  zISelectorSocketTransportBufferedProtocolTests.test_read_eof_received_errorU  s    ))+	))+	!%	+/99;		(1<"".+,		(""557	..556r   c                    | j                         }d| j                  j                  _        |j	                          | j
                  j                  j                  d       | j
                  j                  j                  d       y )Nr  r  )	r9  r   r  r<   r>  r   r  rc   r  r   s     r   rZ  z<SelectorSocketTransportBufferedProtocolTests.test_read_readyd  s^    ))+	+-		(  33B7$$77;r   c                 (   | j                         }t        j                         |_        d| j                  j
                  _        |j                          | j                  j                  j                          |j                  j                          y r  )r9  r   r   r2   r   r  r<   r>  r   rT  rc   r   s     r   r\  z@SelectorSocketTransportBufferedProtocolTests.test_read_ready_eofm  sa    ))+	))+	+,		(""557**,r   c                 t   | j                         }t        j                         |_        d| j                  j
                  _        d| j                  j                  _        |j                          | j                  j                  j                          | j                  |j                  j                         y )Nr   T)r9  r   r   r2   r   r  r<   r   rT  r>  rc   r_   r   r   s     r   r^  zJSelectorSocketTransportBufferedProtocolTests.test_read_ready_eof_keep_openw  s{    ))+	))+	+,		(26""/""557//0r   r_  c                     t         | j                  j                  _        | j	                         }t        j                         |_        |j                          | j                  |j                  j                         y r   )ro   r   r  rq   r9  r   r   r  r>  r_   r   ra  s      r   rb  zESelectorSocketTransportBufferedProtocolTests.test_read_ready_tryagain  sV    *9		'))+	!%	//667r   c                     t         | j                  j                  _        | j	                         }t        j                         |_        |j                          | j                  |j                  j                         y r   )rd  r   r  rq   r9  r   r   r  r>  r_   r   ra  s      r   re  zQSelectorSocketTransportBufferedProtocolTests.test_read_ready_tryagain_interrupted  sV    *:		'))+	!%	//667r   c                 H   t               x}| j                  j                  _        | j	                         }t        j                         |_        t        j                         5  |j                          d d d        |j                  j                  |       y # 1 sw Y   %xY wr   )rg  r   r  rq   r9  r   r   r   ry   rz   r>  rc   rh  s       r   rj  zGSelectorSocketTransportBufferedProtocolTests.test_read_ready_conn_reset  sy    0D0FFdii!!-))+	!%	&&( 	$!!#	$11#6	$ 	$rk  c                     t               x}| j                  j                  _        | j	                         }t        j                         |_        |j                          |j                  j                  |d       y rm  )
ru   r   r  rq   r9  r   r   r  r>  rc   rh  s       r   rn  z@SelectorSocketTransportBufferedProtocolTests.test_read_ready_err  s^    07	9dii!!-))+	!%	11#&#I	Kr   r   )r!   r"   r#   r9   r9  r   r  r  r  r  rU  rZ  r\  r^  r   r   rb  re  rj  rn  r   r   s   @r   r  r    s    	9=>>8.=7<-	1 TZZ#$8 %8 TZZ#$8 %8 TZZ#$7 %7 TZZ#$	K %	Kr   r  c                   L    e Zd Z fdZd!dZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Z ej&                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z  ej&                  d      d        Z! ej&                  d      d         Z" xZ#S )"SelectorDatagramTransportTestsc                 $   t         |           | j                         | _        t	        j
                  t        j                        | _        t        j                  t        j                        | _        d| j                  j                  _        y )N)spec_setrY   )r8   r9   r   r=   ry   r   r   DatagramProtocolr   r   r   r   r   r\   r<   r?   s    r   r9   z$SelectorDatagramTransportTests.setUp  sZ    &&(	"55g6N6NOIIv}}5	()		%r   c                     |rd nt         | j                  j                  _        t	        | j
                  | j                  | j                  |      }| j                  t        |       |S )Naddress)	ru   r   getpeernamerq   r   r=   r   r   r4   )r   r  r3   s      r   datagram_transportz1SelectorDatagramTransportTests.datagram_transport  sO    4;D		).tyy$))/3}}7>@	 	3r   c                     | j                         }d| j                  j                  _        |j	                          | j
                  j                  j                  dd       y )N)r  0.0.0.0i  r  r  )r  r   recvfromr<   r>  r   datagram_receivedrc   r   s     r   rZ  z.SelectorDatagramTransportTests.test_read_ready  sL    ++-	*F		'''::&	(r   c                 d    | j                         }| j                  |t        j                         y r   )r  rF   r   DatagramTransportr   s     r   test_transport_inheritancez9SelectorDatagramTransportTests.test_transport_inheritance  s&    ++-	i)B)BCr   c                     | j                         }t        | j                  j                  _        t        j                         |_        |j                          | j                  |j                  j                         y r   )r  ro   r   r
  rq   r   r   r  r>  r_   r   r   s     r   rb  z7SelectorDatagramTransportTests.test_read_ready_tryagain  sV    ++-	)8		&!%	//667r   c                     | j                         }t               x}| j                  j                  _        t        j                         |_        |j                          |j                  j                  |d       y )Nz&Fatal read error on datagram transport)
r  rQ   r   r
  rq   r   r   r  r>  rc   r   r3   ri  s      r   rn  z2SelectorDatagramTransportTests.test_read_ready_err  s^    ++-	/;~=dii  ,!%	11#&#K	Mr   c                 T   | j                         }t               x}| j                  j                  _        t        j                         |_        |j                          | j                  |j                  j                         | j                  j                  j                  |       y r   )r  ru   r   r
  rq   r   r   r  r>  r_   r   r   error_receivedrc   r  s      r   test_read_ready_oserrz4SelectorDatagramTransportTests.test_read_ready_oserr  su    ++-	/6y8dii  ,!%	//667$$77<r   c                    d}| j                         }|j                  |d       | j                  | j                  j                  j                         | j                  | j                  j                  j                  d   |df       y Nr  r  r   )r  sendtora   r   r   rG   r   rr  s      r   test_sendtoz*SelectorDatagramTransportTests.test_sendto  sq    ++-	01		((//0II&&q)D2C+D	Fr   c                 &   t        d      }| j                         }|j                  |d       | j                  | j                  j                  j
                         | j                  | j                  j                  j                  d   |df       y r  )rv  r  r  ra   r   r   rG   r   rr  s      r   test_sendto_bytearrayz4SelectorDatagramTransportTests.test_sendto_bytearray  sv    !++-	01		((//0II&&q)D2C+D	Fr   c                 &   t        d      }| j                         }|j                  |d       | j                  | j                  j                  j
                         | j                  | j                  j                  j                  d   |df       y r  )r&   r  r  ra   r   r   rG   r   rr  s      r   test_sendto_memoryviewz5SelectorDatagramTransportTests.test_sendto_memoryview  sv    '"++-	01		((//0II&&q)D2C+D	Fr   c                 (   | j                         }|j                  j                  d       |j                  dd       | j	                  | j
                  j                  j                         | j                  dgt        |j                               y )Nr  r	  i90  r   r   	r  r  r{  r  r_   r   r   rG   listr   s     r   test_sendto_no_dataz2SelectorDatagramTransportTests.test_sendto_no_data  su    ++-	  !>?b!))001*+T)2C2C-D	Fr   c                 *   | j                         }|j                  j                  d       |j                  dd       | j	                  | j
                  j                  j                         | j                  ddgt        |j                               y )Nr~  r  r  r  r  r  r   r   s     r   test_sendto_bufferz1SelectorDatagramTransportTests.test_sendto_buffer	  s{    ++-	  !?@#56))001++-""#	%r   c                    t        d      }| j                         }|j                  j                  d       |j	                  |d       | j                  | j                  j                  j                         | j                  ddgt        |j                               | j                  |j                  d   d   t               y Nr  r$  r  r%  r   r   )rv  r  r  r{  r  r_   r   r   rG   r!  rF   bytesr   data2r3   s      r   test_sendto_buffer_bytearrayz;SelectorDatagramTransportTests.test_sendto_buffer_bytearray  s    (#++-	  !?@ 23))001++-""#	% 	i//215u=r   c                    t        d      }| j                         }|j                  j                  d       |j	                  |d       | j                  | j                  j                  j                         | j                  ddgt        |j                               | j                  |j                  d   d   t               y r(  )r&   r  r  r{  r  r_   r   r   rG   r!  rF   r)  r*  s      r   test_sendto_buffer_memoryviewz<SelectorDatagramTransportTests.test_sendto_buffer_memoryview  s    8$++-	  !?@ 23))001++-""#	% 	i//215u=r   c                 "   d}t         | j                  j                  _        | j	                         }|j                  |d       | j
                  j                  d|j                         | j                  dgt        |j                               y )Nr  r  rY   r  )ro   r   r  rq   r  r=   r  _sendto_readyrG   r!  r  rr  s      r   test_sendto_tryagainz3SelectorDatagramTransportTests.test_sendto_tryagain+  st    '6		$++-	12		9#:#:;*+T)2C2C-D	Fr   r  c                 F   d}t               x}| j                  j                  _        | j	                         }t        j                         |_        |j                  |d       | j                  |j                  j                         |j                  j                  |d       d|_        d|_        |j                  |       |j                  |       |j                  |       |j                  |       |j                  |       |j                  j                  d       y )Nr  r   'Fatal write error on datagram transportr   )123r  )rQ   r   r  rq   r  r   r   r  ra   r   rc   r  _addressr  )r   r  rs  ri  r3   s        r   test_sendto_exceptionz4SelectorDatagramTransportTests.test_sendto_exception7  s    -9^;dii*++-	!%	r"	..55611#&#L	N  !	%	(()JKr   c                 >   d}t         | j                  j                  _        | j	                         }t        j                         |_        |j                  |d       | j                  |j                  d       | j                  |j                  j                         y )Nr  r   r   )ConnectionRefusedErrorr   r  rq   r  r   r   r  rG   r  r_   r   rr  s      r   test_sendto_error_receivedz9SelectorDatagramTransportTests.test_sendto_error_receivedN  su    '=		$++-	!%	r"--q1//667r   c                 f   d}t         | j                  j                  _        | j	                  d      }t        j                         |_        |j                  |       | j                  |j                  j                         | j                  | j                  j                  j                         y )Nr  r	  r   r  )r8  r   rx   rq   r  r   r   r  r  r_   r   ra   r   r  rr  s      r   $test_sendto_error_received_connectedzCSelectorDatagramTransportTests.test_sendto_error_received_connectedZ  s|    %;		"++N+C	!%	//66744;;<r   c                 h    | j                         }| j                  t        |j                  dd       y )Nr  r   )r  rP   r  r  r   s     r   test_sendto_strz.SelectorDatagramTransportTests.test_sendto_strf  s*    ++-	)Y%5%5ubAr   c                 l    | j                  d      }| j                  t        |j                  dd       y )Nr;  r  s   str)r	  r  )r  rP   
ValueErrorr  r   s     r   test_sendto_connected_addrz9SelectorDatagramTransportTests.test_sendto_connected_addrj  s3    ++N+C		((&.	Br   c                     | j                  d      }|j                          | j                  |j                  d       |j	                  dd       | j                  |j                  d       y )N)r   r  r   r  r  )r  r2   rG   r  r  r   s     r   test_sendto_closingz2SelectorDatagramTransportTests.test_sendto_closingo  s[    ++D+9	--q1$'--q1r   c                 (   d}t        |      | j                  j                  _        | j	                         }|j
                  j                  |df       | j                  j                  d|j                         |j                          | j                  | j                  j                  j                         | j                  | j                  j                  j                  d   |df       | j                  | j                  j                         y )Nr  r  rY   r   )rp  r   r  r<   r  r  r{  r=   r  r0  ra   r   rG   r   r_   r  rr  s      r   test_sendto_readyz0SelectorDatagramTransportTests.test_sendto_readyv  s    (+D			%++-	  $(:!;<		a!8!89!		((//0II&&q)D2D+E	G**+r   c                 L   d}t        |      | j                  j                  _        | j	                         }d|_        |j                  j                  |df       | j                  j                  d|j                         |j                          | j                  j                  j                  |d       | j                  | j                  j                         | j                  j                  j                          | j                   j"                  j                  d        y )Nr  Tr   rY   )rp  r   rx   r<   r  r  r  r{  r=   r  r0  r  rc   r_   r  r2   r   r  rr  s      r   test_sendto_ready_closingz8SelectorDatagramTransportTests.test_sendto_ready_closing  s    &)$i		#++-	!	  $,		a!8!89!		++D"5**+		**,%%88>r   c                 8   | j                         }| j                  j                  d|j                         |j                          | j	                  | j
                  j                  j                         | j	                  | j                  j                         y r   )	r  r=   r  r0  r_   r   r  r   r  r   s     r   test_sendto_ready_no_dataz8SelectorDatagramTransportTests.test_sendto_ready_no_data  sl    ++-			a!8!89!))001**+r   c                    t         | j                  j                  _        | j	                         }|j
                  j                  ddg       | j                  j                  d|j                         |j                          | j                  j                  d|j                         | j                  ddgt        |j
                               y )N)r~  r   )r  r   rY   )ro   r   r  rq   r  r  r,   r=   r  r0  r  rG   r!  r   s     r   test_sendto_ready_tryagainz9SelectorDatagramTransportTests.test_sendto_ready_tryagain  s    '6		$++-	  ..!AB		a!8!89!		9#:#:;^,""#	%r   c                 .   t               x}| j                  j                  _        | j	                         }t        j                         |_        |j                  j                  d       |j                          |j                  j                  |d       y )Nr  r   r3  )rQ   r   r  rq   r  r   r   r  r  r{  r0  rc   r  s      r   test_sendto_ready_exceptionz:SelectorDatagramTransportTests.test_sendto_ready_exception  sr    -9^;dii*++-	!%	  /!11#&#L	Nr   c                 4   t         | j                  j                  _        | j	                         }t        j                         |_        |j                  j                  d       |j                          | j                  |j                  j                         y )NrM  )r8  r   r  rq   r  r   r   r  r  r{  r0  r_   r   r   s     r    test_sendto_ready_error_receivedz?SelectorDatagramTransportTests.test_sendto_ready_error_received  sj    '=		$++-	!%	  /!//667r   c                    t         | j                  j                  _        | j	                  d      }t        j                         |_        |j                  j                  d       |j                          | j                  |j                  j                         | j                  | j                  j                  j                         y )Nr;  r  rM  )r8  r   rx   rq   r  r   r   r  r  r{  r0  r_   r   ra   r   r  r   s     r   +test_sendto_ready_error_received_connectionzJSelectorDatagramTransportTests.test_sendto_ready_error_received_connection  s    %;		"++N+C	!%	  /!//66744;;<r   z asyncio.base_events.logger.errorc                     | j                  d      }t               }|j                  |       | j                  | j                  j
                  j                         |j                          y )Nr;  r  )r  r8  r  r_   r   r  r   r  )r   r  r3   ri  s       r   test_fatal_error_connectedz9SelectorDatagramTransportTests.test_fatal_error_connected  sU    ++N+C	$&s#55<<=!r   c                 6    G d dt               }| j                  d      } |       }|j                  |       | j                  | j                  j
                  j                         |j                  t        j                  d      |t        t        f       y )Nc                       e Zd Zy)[SelectorDatagramTransportTests.test_fatal_error_connected_custom_error.<locals>.MyExceptionNr  r   r   r   MyExceptionrW    r  r   rX  r;  r  r  r   )r"  r  r  r_   r   r  r   rc   ry   r#  r$  )r   r  rX  r3   ri  s        r   'test_fatal_error_connected_custom_errorzFSelectorDatagramTransportTests.test_fatal_error_connected_custom_error  s    	) 	++N+C	ms#55<<=  ""EG!8X6 	! 	8r   r   )$r!   r"   r#   r9   r  rZ  r  rb  rn  r  r  r  r  r"  r&  r,  r.  r1  r   r   r6  r9  r<  r>  rA  rC  rE  rG  rI  rK  rN  rP  rR  rT  rY  r   r   s   @r   r  r    s    *(D8	M=FFFF%
>
>
F TZZ01L 2L,
8
=BB
2,?,%
N8	= TZZ23" 4" TZZ23
8 4
8r   r  __main__)r   )!__doc__r*   r   r   r  r  r   r   r   sslImportErrorasyncio.selector_eventsr   r   r   r   test.test_asyncior	   ry   ANYr$  r   r   r/   r4   TestCaser6   r   r.  r  r  r!   mainr   r   r   <module>rc     s    "    
  #  9 9 288( 5 t:!4!4 t:n	y,Z00 y,xK7:#6#6 K7\pK:3F3F pKfl8Z%8%8 l8^	 zHMMO _.  
Cs   C   C*)C*