
    dafT                         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ZddlZddlmZ ddlm	Z	 ddlm
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ 	 ddlZd
 Z G d dej,                        Z G d dej,                        Z G d d      Z G d de      Z G d de      Z G d dee      Zej:                  dk(  r- G d deej<                        Z G d deej<                        Z nwddl!Z! e"e!d      r G d deej<                        Z# e"e!d      r G d  d!eej<                        Z$ e"e!d"      r G d# d$eej<                        Z% G d% deej<                        Ze&d&k(  r ejN                          yy# e$ r dZY .w xY w)'z!Tests for sendfile functionality.    N)base_events)	constants)mock)support)	os_helper)socket_helper)utilsc                  .    t        j                  d        y N)asyncioset_event_loop_policy     :/root/Python-3.12.4/Lib/test/test_asyncio/test_sendfile.pytearDownModuler      s    !!$'r   c                   >     e Zd ZddZd Zd Zd Zd Z fdZ xZ	S )MySendfileProtoc                     d | _         d| _        d| _        |*|j                         | _        |j                         | _        t               | _        || _        y )NINITIALr   )		transportstatenbytescreate_future	connecteddone	bytearraydataclose_after)selfloopr   s      r   __init__zMySendfileProto.__init__   sN    
!//1DN**,DIK	&r   c                 V    | j                   |vrt        d| j                   d|      y )Nzstate: z, expected: )r   AssertionError)r   expecteds     r   _assert_statezMySendfileProto._assert_state(   s/    ::X% 74::.XL!QRR &r   c                     || _         | j                  d       d| _        | j                  r| j                  j	                  d        y y )Nr   	CONNECTED)r   r%   r   r   
set_resultr   r   s     r   connection_madezMySendfileProto.connection_made,   s<    "9% 
>>NN%%d+ r   c                 4    | j                  d       d| _        y )Nr'   EOF)r%   r   r   s    r   eof_receivedzMySendfileProto.eof_received3   s    ;'
r   c                     | j                  dd       d| _        | j                  r| j                  j                  d        y y )Nr'   r,   CLOSED)r%   r   r   r(   r   excs     r   connection_lostzMySendfileProto.connection_lost7   s7    ;.
99II  & r   c                 :   | j                  d       | xj                  t        |      z  c_        | j                  j	                  |       t
        |   |       | j                  r5| j                  | j                  k\  r| j                  j                          y y y )Nr'   )
r%   r   lenr   extendsuperdata_receivedr   r   close)r   r   	__class__s     r   r8   zMySendfileProto.data_received=   su    ;'s4y 		d#t/?/? ?NN  " !@r   Nr   )
__name__
__module____qualname__r!   r%   r*   r.   r3   r8   __classcell__r:   s   @r   r   r      s'    'S,'# #r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)MyProtoc                 v    d| _         d| _        t               | _        |j	                         | _        d | _        y NF)startedclosedr   r   r   futr   )r   r    s     r   r!   zMyProto.__init__H   s0    K	%%'r   c                      d| _         || _        y NT)rE   r   r)   s     r   r*   zMyProto.connection_madeO   s    "r   c                 :    | j                   j                  |       y r   )r   r6   )r   r   s     r   r8   zMyProto.data_receivedS   s    		r   c                 H    d| _         | j                  j                  d        y rI   )rF   rG   r(   r1   s     r   r3   zMyProto.connection_lostV   s    D!r   c                 8   K   | j                    d {    y 7 wr   )rG   r-   s    r   wait_closedzMyProto.wait_closedZ   s     hhs   N)r<   r=   r>   r!   r*   r8   r3   rM   r   r   r   rB   rB   F   s    #"r   rB   c                   j     e Zd Zddz  ZdZd Ze fd       Ze fd       Z fdZ	 fdZ
d	 Z xZS )
SendfileBase   xi     c                     t         r   )NotImplementedErrorr-   s    r   create_event_loopzSendfileBase.create_event_loopj   s    !!r   c                     t        t        j                  d      5 }|j                  | j                         d d d        t
        |           y # 1 sw Y   xY w)Nwb)openr   TESTFNwriteDATAr7   
setUpClass)clsfpr:   s     r   r[   zSendfileBase.setUpClassm   sE    )""D) 	RHHSXX		 	s   AAc                 h    t        j                  t         j                         t        |           y r   )r   unlinkrX   r7   tearDownClassr\   r:   s    r   r`   zSendfileBase.tearDownClasss   s"    ))*r   c                 
   t        t        j                  d      | _        | j	                  | j                  j
                         | j                         | _        | j                  | j                         t        | )          y )Nrb)rW   r   rX   file
addCleanupr9   rT   r    set_event_loopr7   setUpr   r:   s    r   rg   zSendfileBase.setUpx   sV    ))40			(**,	DII&r   c                     | j                   j                         st        j                  | j                          | j	                          t        j                          t        | !          y r   )	r    	is_closed
test_utilsrun_briefly
doCleanupsr   
gc_collectr7   tearDownrh   s    r   ro   zSendfileBase.tearDown   sF    yy""$""499-r   c                 8    | j                   j                  |      S r   )r    run_until_complete)r   coros     r   run_loopzSendfileBase.run_loop   s    yy++D11r   )r<   r=   r>   rZ   BUF_SIZErT   classmethodr[   r`   rg   ro   rs   r?   r@   s   @r   rO   rO   ^   sP     >"DH"  
    2r   rO   c                   p     e Zd Ze fd       Ze fd       ZddZd ZddZd Z	d Z
d Zd	 Zd
 Z xZS )SockSendfileMixinc                 b    t         j                  | _        dt         _        t        |           y )Ni @  )r   !SENDFILE_FALLBACK_READBUFFER_SIZE_SockSendfileMixin__old_bufsizer7   r[   ra   s    r   r[   zSockSendfileMixin.setUpClass   s$    %GG6?	3r   c                 L    | j                   t        _        t        |           y r   )rz   r   ry   r7   r`   ra   s    r   r`   zSockSendfileMixin.tearDownClass   s    696G6G	3r   c                     t        j                   t         j                  t         j                        }|j                  d       |r| j	                  |j
                         |S rD   )socketAF_INETSOCK_STREAMsetblockingre   r9   )r   cleanupsocks      r   make_socketzSockSendfileMixin.make_socket   sB    }}V^^V-?-?@OODJJ'r   c                 v    |j                  t        j                  t        j                  | j                         y r   )
setsockoptr}   
SOL_SOCKET	SO_RCVBUFrt   )r   r   s     r   reduce_receive_buffer_sizez,SockSendfileMixin.reduce_receive_buffer_size   s$     	))6+;+;T]]Kr   c                     |j                  t        j                  t        j                  | j                         ||j                  | j                         y y )N)high)r   r}   r   	SO_SNDBUFrt   set_write_buffer_limits)r   r   r   s      r   reduce_send_buffer_sizez)SockSendfileMixin.reduce_send_buffer_size   sD    
 	))6+;+;T]]K --4==-A !r   c                     t         j                        t        j                         } j	                  d      }|j                  t        j                  |f        j                   j                  j                  fd|             j                  |        j	                         } j                   j                  j                  |d|f              j                  |        fd} j                  |       |fS )NF)r   c                       S r   r   )protos   r   <lambda>z8SockSendfileMixin.prepare_socksendfile.<locals>.<lambda>   s    E r   )r   z	127.0.0.1c                       j                   9 j                   j                          j                   j                                j                          j                  j                                y r   )r   r9   rs   rM   )r   r   servers   r   r   z7SockSendfileMixin.prepare_socksendfile.<locals>.cleanup   sR    * %%'e//12LLNMM&,,./r   )rB   r    r   find_unused_portr   bindHOSTrs   create_serverr   sock_connectr   re   )r   portsrv_sockr   r   r   r   s   `    @@r   prepare_socksendfilez&SockSendfileMixin.prepare_socksendfile   s    		"--/##E#2}))401tyy66  7  * +''1!dii,,TK3FGH$$T*	0 	 U{r   c                    | j                         \  }}| j                  | j                  j                  || j                              }|j                          | j                  |j                                | j                  |t        | j                               | j                  |j                  | j                         | j                  | j                  j                         t        | j                               y r   )r   rs   r    sock_sendfilerd   r9   rM   assertEqualr5   rZ   r   tellr   r   r   rets       r   test_sock_sendfile_successz,SockSendfileMixin.test_sock_sendfile_success   s    //1emmDII33D$))DE

e'')*c$))n-TYY/)3tyy>:r   c                    | j                         \  }}| j                  | j                  j                  || j                  dd            }|j                          | j                  |j                                | j                  |j                  | j                  dd        | j                  | j                  j                         d       | j                  |d       y )N  i  i  )r   rs   r    r   rd   r9   rM   r   r   rZ   r   r   s       r   (test_sock_sendfile_with_offset_and_countz:SockSendfileMixin.test_sock_sendfile_with_offset_and_count   s    //1emmDII33D$))48$@ A

e'')*TYYtD%9:)40d#r   c           	         | j                         \  }}t        j                         5 }| j                  | j                  j                  ||dd             }d d d        |j                          | j                  |j                                | j                  d       | j                  | j                  j                         d       y # 1 sw Y   uxY wr;   )r   tempfileTemporaryFilers   r    r   r9   rM   r   rd   r   )r   r   r   fr   s        r   test_sock_sendfile_zero_sizez.SockSendfileMixin.test_sock_sendfile_zero_size   s    //1e##% 	B--		 7 7a894!A BC	B 	

e'')*a )1-	B 	Bs   .C

Cc                    ddz  }| j                         \  }}| j                  | j                  j                  ||             | j                  | j                  j	                  || j
                              }| j                  | j                  j                  ||             |j                          | j                  |j                                | j                  |t        | j                               || j                  z   |z   }| j                  |j                  |       | j                  | j
                  j                         t        | j                               y )Ns   mix_regular_sendrQ   )r   rs   r    sock_sendallr   rd   r9   rM   r   r5   rZ   r   r   )r   bufr   r   r   r$   s         r   (test_sock_sendfile_mix_with_regular_sendz:SockSendfileMixin.test_sock_sendfile_mix_with_regular_send   s    !X.//1edii,,T378mmDII33D$))DEdii,,T378

e'')*c$))n-?S(X.)3tyy>:r   )Tr   )r<   r=   r>   ru   r[   r`   r   r   r   r   r   r   r   r   r?   r@   s   @r   rw   rw      sS     
    L
B6;	$	.;r   rw   c                   Z   e Zd ZddddZ ej
                  ej                  dk(  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j                  j)                  d      d      d        Zd Z ej
                   eed       d      d        Zd Zy)SendfileMixinFr   is_sslr   c                    t        j                         }t         j                  |      |r@t        s j                  d       t        j                         }t        j                         }nd }d }t        j                  t        j                  t        j                        }|j                  t         j                  |f        j                   j                  j                  fd||             j!                  |       |rt         j                  }nd }t        j                  t        j                  t        j                        }|j#                  t         j                  |f       t         j                         j                   j                  j%                  fd|||            \  }	}
 j'                  ||	        fd	} j)                  |       fS )
N)r    r   zNo ssl modulec                       S r   r   )	srv_protos   r   r   z0SendfileMixin.prepare_sendfile.<locals>.<lambda>      I r   )r   ssl)r    c                       S r   r   )	cli_protos   r   r   z0SendfileMixin.prepare_sendfile.<locals>.<lambda>  r   r   )r   r   server_hostname)r   c                  8   j                   j                           j                   j                          j                  j                         j                   j                         j                          j                  j	                                y r   )r   r9   rs   r   rM   )r   r   r   r   s   r   r   z/SendfileMixin.prepare_sendfile.<locals>.cleanup  se    %%'%%'MM)..)MM)..)LLNMM&,,./r   )r   r   r   r    r   skipTestrk   simple_server_sslcontextsimple_client_sslcontextr}   r~   r   r   r   rs   r   r   connectcreate_connectionr   re   )r   r   r   r   srv_ctxcli_ctxr   r   cli_socktrprr   r   r   r   s   `           @@@r   prepare_sendfilezSendfileMixin.prepare_sendfile   s   --/#0;=	o. 99;G 99;GGG==1C1CD}))401tyy66H'  7  ; <''1+00O"O==1C1CD-,,d34#3	tyy::H  ;  : ;B 	$$X$<	0 	 )##r   win32zUDP sockets are not supportedc                    | j                  | j                  j                  t        j                  t
        j                              \  }}	 | j                  t        d      5  | j                  | j                  j                  || j                               d d d        | j                  d| j                  j                                |j                          y # 1 sw Y   DxY w# |j                          w xY w)N)familynot supportedr   )rs   r    create_datagram_endpointr   DatagramProtocolr}   r~   assertRaisesRegexRuntimeErrorsendfilerd   r   r   r9   )r   r   r   s      r   test_sendfile_not_supportedz)SendfileMixin.test_sendfile_not_supported(  s    II..((~~ / '(B	''oF 7II&&r499577 Q		 01 HHJ7 7 HHJs$   C( #6C2C( C%!C( (C:c                    | j                         \  }}| j                  | j                  j                  |j                  | j
                              }|j                  j                          | j                  |j                         | j                  |t        | j                               | j                  |j                  t        | j                               | j                  |j                  | j                         | j                  | j
                  j                         t        | j                               y r   r   rs   r    r   r   rd   r9   r   r   r5   rZ   r   r   r   r   r   r   r   s       r   test_sendfilezSendfileMixin.test_sendfile7  s    #446	9mmIIy22DII>@!!#inn%c$))n-))3tyy>:3)3tyy>:r   c                      j                         \  }} fd}| j                  _         j                   j                  j	                  |j
                   j                              }|j
                  j                           j                  |j                          j                  |t         j                                j                  |j                  t         j                                j                  |j                   j                          j                   j                  j                         t         j                               y )Nc                 ^    t         j                  j                  j                  | |||      S r   r   BaseEventLoop_sendfile_nativer    transprd   offsetcountr   s       r   sendfile_nativezCSendfileMixin.test_sendfile_force_fallback.<locals>.sendfile_nativeE  +    ,,==		648 8r   )r   r    r   rs   r   r   rd   r9   r   r   r5   rZ   r   r   r   )r   r   r   r   r   s   `    r   test_sendfile_force_fallbackz*SendfileMixin.test_sendfile_force_fallbackB  s    #446	9	8
 &5		"mmIIy22DII>@!!#inn%c$))n-))3tyy>:3)3tyy>:r   c                     t         j                  dk(  r5t         j                  t        j
                        r j                  d        j                         \  }} fd}| j                  _         j                  t        j                  d      5   j                   j                  j                  |j                   j                  d             d d d        |j                  j                           j                  |j                           j#                  |j$                  d        j#                   j                  j'                         d       y # 1 sw Y   xY w)Nr   zFails on proactor event loopc                 ^    t         j                  j                  j                  | |||      S r   r   r   s       r   r   zMSendfileMixin.test_sendfile_force_unsupported_native.<locals>.sendfile_native[  r   r   r   Ffallbackr   )sysplatform
isinstancer    r   ProactorEventLoopr   r   r   r   SendfileNotAvailableErrorrs   r   r   rd   r9   r   r   r   r   )r   r   r   r   s   `   r   &test_sendfile_force_unsupported_nativez4SendfileMixin.test_sendfile_force_unsupported_nativeU  s   <<7"$))W%>%>?<=#446	9	8
 &5		"##G$E$E$35 	4MM		""9#6#6		,1 # 34	4 	!!#inn%))1-)1-	4 	4s   AEE"c                    | j                  d      \  }}| j                  | j                  j                  |j                  | j
                              }|j                  j                          | j                  |j                         | j                  |t        | j                               | j                  |j                  t        | j                               | j                  |j                  | j                         | j                  | j
                  j                         t        | j                               y )NTr   r   r   s       r   test_sendfile_sslzSendfileMixin.test_sendfile_sslm  s    #44D4A	9mmIIy22DII>@!!#inn%c$))n-))3tyy>:3)3tyy>:r   c                    | j                         \  }}|j                  j                          | j                  t        d      5  | j                  | j                  j                  |j                  | j                               d d d        | j                  |j                         | j                  |j                  d       | j                  | j                  j                         d       y # 1 sw Y   kxY w)Nz
is closingr   )r   r   r9   r   r   rs   r    r   rd   r   r   r   r   r   r   r   s      r    test_sendfile_for_closing_transpz.SendfileMixin.test_sendfile_for_closing_transpx  s    #446	9!!###L,? 	NMM$)),,Y-@-@$))LM	Ninn%))1-)1-		N 	Ns   A C..C7c                    | j                         \  }}ddz  }ddz  }|j                  j                  |       | j                  | j                  j                  |j                  | j                              }|j                  j                  |       |j                  j                          | j                  |j                         | j                  |t        | j                               | j                  |j                  || j                  z   |z          | j                  | j                  j                         t        | j                               y )Ns   PREFIX__   s   --SUFFIXr   r   rY   rs   r    r   rd   r9   r   r   r5   rZ   r   r   r   r   r   PREFIXSUFFIXr   s         r   test_sendfile_pre_and_post_dataz-SendfileMixin.test_sendfile_pre_and_post_data  s    #446	9t#t#!!&)mmIIy22DII>@!!&)!!#inn%c$))n-$)));f)DE)3tyy>:r   c                    | j                  d      \  }}ddz  }ddz  }|j                  j                  |       | j                  | j                  j                  |j                  | j                              }|j                  j                  |       |j                  j                          | j                  |j                         | j                  |t        | j                               | j                  |j                  || j                  z   |z          | j                  | j                  j                         t        | j                               y )NTr   s   zxcvbnmr   s
   0987654321r   r   s         r   #test_sendfile_ssl_pre_and_post_dataz1SendfileMixin.test_sendfile_ssl_pre_and_post_data  s   #44D4A	9d"%!!&)mmIIy22DII>@!!&)!!#inn%c$))n-$)));f)DE)3tyy>:r   c                    | j                         \  }}| j                  | j                  j                  |j                  | j
                  dd            }|j                  j                          | j                  |j                         | j                  |d       | j                  |j                  d       | j                  |j                  | j                  dd        | j                  | j
                  j                         d       y )Nr   d   L  r   rs   r    r   r   rd   r9   r   r   r   r   rZ   r   r   s       r   test_sendfile_partialz#SendfileMixin.test_sendfile_partial  s    #446	9mmIIy22DIItSIK!!#inn%c"))3/4)=>)40r   c                    | j                  d      \  }}| j                  | j                  j                  |j                  | j
                  dd            }|j                  j                          | j                  |j                         | j                  |d       | j                  |j                  d       | j                  |j                  | j                  dd        | j                  | j
                  j                         d       y )NTr   r   r   r   r   r   s       r   test_sendfile_ssl_partialz'SendfileMixin.test_sendfile_ssl_partial  s    #44D4A	9mmIIy22DIItSIK!!#inn%c"))3/4)=>)40r   c                    | j                  t        | j                              \  }}| j                  | j                  j                  |j                  | j                              }|j                  j                          | j                  |j                         | j                  |t        | j                               | j                  |j                  t        | j                               | j                  |j                  | j                         | j                  | j                  j                         t        | j                               y )Nr   )r   r5   rZ   rs   r    r   r   rd   r9   r   r   r   r   r   r   s       r   (test_sendfile_close_peer_after_receivingz6SendfileMixin.test_sendfile_close_peer_after_receiving  s    #44DII  5  (	9mmIIy22DII>@!!#inn%c$))n-))3tyy>:3)3tyy>:r   c                 x   | j                  dt        | j                              \  }}| j                  | j                  j                  |j                  | j                              }| j                  |j                         | j                  |t        | j                               | j                  |j                  t        | j                               | j                  |j                  | j                         | j                  | j                  j                         t        | j                               y )NTr   )r   r5   rZ   rs   r    r   r   rd   r   r   r   r   r   r   s       r   ,test_sendfile_ssl_close_peer_after_receivingz:SendfileMixin.test_sendfile_ssl_close_peer_after_receiving  s    #44S^  5  5	9mmIIy22DII>@inn%c$))n-))3tyy>:3)3tyy>:r   sunoszDoesn't work on Solarisc                 L   | j                  d      \  }}| j                  t              5  | j                  | j                  j                  |j                  | j                               d d d        | j                  |j                         | j                  d|j                  cxk  xr t        | j                        k  nc |j                         t        j                  dk(  r$t        | j                  t         j"                        sc| j                  d| j                  j%                         cxk  xr t        | j                        k  nc | j                  j%                                | j                  |j                  j'                                y # 1 sw Y   0xY w)Nr   r  r   )r   assertRaisesConnectionErrorrs   r    r   r   rd   r   
assertTruer   r5   rZ   r   r   r   r   r   r   
is_closingr   s      r   3test_sendfile_close_peer_in_the_middle_of_receivingzASendfileMixin.test_sendfile_close_peer_in_the_middle_of_receiving  s#     $444F	9/ 	DMM		""9#6#6		BD	D 	inn%	 0 0A3tyy>A!((	*'tyy'*C*CDOODDIINN$4Es499~E IINN,.	++6689	D 	Ds   A FF#c                 N     fd}| j                   _         j                  d      \  }} j                  t              5  	  j                   j                   j                  |j                   j                               	 d d d         j                  |j                          j                  d|j                   cxk  xr t#         j$                        k  nc |j                           j                  d j                  j'                         cxk  xr t#         j$                        k  nc  j                  j'                                y # t        $ r<}|j                  t        j                  k(  rt        j                  dk(  rt         d }~ww xY w# 1 sw Y   xY w)Nc                 ^    t         j                  j                  j                  | |||      S r   r   r   s       r   r   zcSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receiving.<locals>.sendfile_native  r   r   r   r  darwin)r    r   r   r  r	  rs   r   r   rd   OSErrorerrno
EPROTOTYPEr   r   r   r
  r   r5   rZ   r   )r   r   r   r   es   `    r   <test_sendfile_fallback_close_peer_in_the_middle_of_receivingzJSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receiving  s5   	8
 &5		"#444F	9/ 
		II&&y':':DIIFH
	 	inn%	 0 0A3tyy>A!((	*		 0A3tyy>A		(	*   77e...3<<83K))	
	 
	s*   F?E	F7FFFF$r   z"Don't have native sendfile supportc                      j                         \  } j                  j                          fd} j                  j                   |             } j	                          j                  t        d      5  j                  j                  d       d d d         j	                  |      } j                  |t         j                               y # 1 sw Y   @xY w)Nc                     K   j                  d        j                  j                   j                  j                         d {   S 7 wr   )r(   r    r   r   rd   )r   rG   r   s   r   rr   z=SendfileMixin.test_sendfile_prevents_bare_write.<locals>.coro  s:     NN4 ++I,?,?KKKKs   AAA	Azsendfile is in progresss   data)r   r    r   create_taskrs   r   r   r   rY   r   r5   rZ   )r   r   rr   tr   r   rG   s   `    @@r   !test_sendfile_prevents_bare_writez/SendfileMixin.test_sendfile_prevents_bare_write  s      $446	9ii%%'	L II!!$&)c##L$=? 	/%%g.	/ mmAc$))n-		/ 	/s   ?CC#c                 R   t        j                         }d |j                  _        t        j
                  j                  |_        | j                  t        d      5  | j                  j                  | j                  j                  |d d             d d d        y # 1 sw Y   y xY w)Nc                       yrD   r   r   r   r   r   zPSendfileMixin.test_sendfile_no_fallback_for_fallback_transport.<locals>.<lambda>  s    r   zfallback is disabledFr   )r   Mockr  side_effectr   _SendfileModeFALLBACK_sendfile_compatibler   r   r    rq   r   r)   s     r   0test_sendfile_no_fallback_for_fallback_transportz>SendfileMixin.test_sendfile_no_fallback_for_fallback_transport  s    IIK	+8	()2)@)@)I)I	&##L2HI 	EII((		""9dU"CE	E 	E 	Es   8BB&N)r<   r=   r>   r   unittestskipIfr   r   r   r   r   r   r   r   r   r   r   r   r  r  
startswithr  r  hasattrosr  r!  r   r   r   r   r      s     */A )$V X__S\\W,.MN O	;;&.0	;.;;	1	1
;	; X__S\\,,W5.0:0: *: X__Z009;.;. Er   r   c                       e Zd Zy)SendfileTestsBaseN)r<   r=   r>   r   r   r   r(  r(    s    r   r(  r   c                       e Zd Zd Zy)SelectEventLoopTestsc                 *    t        j                         S r   )r   SelectorEventLoopr-   s    r   rT   z&SelectEventLoopTests.create_event_loop!      ,,..r   Nr<   r=   r>   rT   r   r   r   r*  r*        	/r   r*  c                       e Zd Zd Zy)ProactorEventLoopTestsc                 *    t        j                         S r   )r   r   r-   s    r   rT   z(ProactorEventLoopTests.create_event_loop'  r-  r   Nr.  r   r   r   r1  r1  $  r/  r   r1  KqueueSelectorc                       e Zd Zd Zy)KqueueEventLoopTestsc                 P    t        j                  t        j                               S r   )r   r,  	selectorsr3  r-   s    r   rT   z&KqueueEventLoopTests.create_event_loop1  s!    00,,.0 0r   Nr.  r   r   r   r5  r5  .  s    0r   r5  EpollSelectorc                       e Zd Zd Zy)EPollEventLoopTestsc                 P    t        j                  t        j                               S r   )r   r,  r7  r8  r-   s    r   rT   z%EPollEventLoopTests.create_event_loop9  s    001H1H1JKKr   Nr.  r   r   r   r:  r:  6  s    Lr   r:  PollSelectorc                       e Zd Zd Zy)PollEventLoopTestsc                 P    t        j                  t        j                               S r   )r   r,  r7  r<  r-   s    r   rT   z$PollEventLoopTests.create_event_loop@  s    001G1G1IJJr   Nr.  r   r   r   r>  r>  =  s    Kr   r>  c                       e Zd Zd Zy)r*  c                 P    t        j                  t        j                               S r   )r   r,  r7  SelectSelectorr-   s    r   rT   z&SelectEventLoopTests.create_event_loopG  s    ,,Y-E-E-GHHr   Nr.  r   r   r   r*  r*  D  s    	Ir   __main__)(__doc__r   r  r&  r}   r   r   r"  r   r   r   testr   test.supportr   r   test.test_asyncior	   rk   r   ImportErrorr   Protocolr   rB   rO   rw   r   r(  r   TestCaser*  r1  r7  r%  r5  r:  r>  r<   mainr   r   r   <module>rL     s   '   	  
       " & 1
('#g&& '#Tg 0+2 +2\j; j;Z\EL \E~	'8 	 <<7/0)22//!2!+!4!4/ y*+	0#4#-#6#6	0 y/*	L"3","5"5	L y.)	K!2!+!4!4	KI0)22I zHMMO o  
Cs   
E2 2E=<E=