
    2hhS                         S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SK Jr  S SK Jr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJr   S SKrS	 r " S
 S\ R*                  5      r " S S\ R*                  5      r " S S5      r " S S\5      r " S S\5      r " S S\\5      r\R8                  S:X  a-   " S S\\R:                  5      r " S S\\R:                  5      rOS SK r \!" \ S5      (       a   " S S\\R:                  5      r"\!" \ S5      (       a   " S S \\R:                  5      r#\!" \ S!5      (       a   " S" S#\\R:                  5      r$ " S$ S\\R:                  5      r\%S%:X  a  \RL                  " 5         gg! \ a    Sr GN@f = f)&    N)base_events)	constants)mock)support)	os_helper)socket_helper)utilsc                  0    [         R                  " S 5        g N)asyncioset_event_loop_policy     H/opt/python-3.13.8/usr/lib/python3.13/test/test_asyncio/test_sendfile.pytearDownModuler      s    !!$'r   c                   J   ^  \ rS rSrS	S jrS rS rS rS rU 4S jr	Sr
U =r$ )
MySendfileProto   c                     S U l         SU l        SU l        Ub*  UR                  5       U l        UR                  5       U l        [        5       U l        X l        g )NINITIALr   )		transportstatenbytescreate_future	connecteddone	bytearraydataclose_after)selfloopr   s      r   __init__MySendfileProto.__init__   sL    
!//1DN**,DIK	&r   c                 ^    U R                   U;  a  [        SU R                   < SU< 35      eg )Nzstate: z, expected: )r   AssertionError)r    expecteds     r   _assert_stateMySendfileProto._assert_state(   s/    ::X% 74::.XL!QRR &r   c                     Xl         U R                  S5        SU l        U R                  (       a  U R                  R	                  S 5        g g )Nr   	CONNECTED)r   r'   r   r   
set_resultr    r   s     r   connection_madeMySendfileProto.connection_made,   s:    "9% 
>>NN%%d+ r   c                 4    U R                  S5        SU l        g )Nr*   EOF)r'   r   r    s    r   eof_receivedMySendfileProto.eof_received3   s    ;'
r   c                     U R                  SS5        SU l        U R                  (       a  U R                  R                  S 5        g g )Nr*   r0   CLOSED)r'   r   r   r+   r    excs     r   connection_lostMySendfileProto.connection_lost7   s7    ;.
99II  & r   c                 F  > U R                  S5        U =R                  [        U5      -  sl        U R                  R	                  U5        [
        TU ]  U5        U R                  (       a6  U R                  U R                  :  a  U R                  R                  5         g g g )Nr*   )
r'   r   lenr   extendsuperdata_receivedr   r   close)r    r   	__class__s     r   r>   MySendfileProto.data_received=   su    ;'s4y 		d#t/?/? ?NN  " !@r   )r   r   r   r   r   r   r   Nr   )__name__
__module____qualname____firstlineno__r"   r'   r-   r2   r8   r>   __static_attributes____classcell__r@   s   @r   r   r      s'    'S,'# #r   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	MyProtoF   c                 v    SU l         SU l        [        5       U l        UR	                  5       U l        S U l        g NF)startedclosedr   r   r   futr   )r    r!   s     r   r"   MyProto.__init__H   s0    K	%%'r   c                     SU l         Xl        g NT)rO   r   r,   s     r   r-   MyProto.connection_madeO   s    "r   c                 :    U R                   R                  U5        g r   )r   r<   )r    r   s     r   r>   MyProto.data_receivedS   s    		r   c                 H    SU l         U R                  R                  S 5        g rT   )rP   rQ   r+   r6   s     r   r8   MyProto.connection_lostV   s    D!r   c                 8   #    U R                   I S h  vN   g  N7fr   )rQ   r1   s    r   wait_closedMyProto.wait_closedZ   s     hhs   )rP   r   rQ   rO   r   N)
rC   rD   rE   rF   r"   r-   r>   r8   r[   rG   r   r   r   rK   rK   F   s    #"r   rK   c                   z   ^  \ rS rSrSS-  rSrS r\U 4S j5       r\U 4S j5       r	U 4S jr
U 4S	 jrS
 rSrU =r$ )SendfileBase^      xi     c                     [         er   )NotImplementedErrorr1   s    r   create_event_loopSendfileBase.create_event_loopg   s    !!r   c                    > [        [        R                  S5       nUR                  U R                  5        S S S 5        [
        TU ]  5         g ! , (       d  f       N= f)Nwb)openr   TESTFNwriteDATAr=   
setUpClass)clsfpr@   s     r   rl   SendfileBase.setUpClassj   s>    )""D)RHHSXX * *)s   A
Ac                 j   > [         R                  " [         R                  5        [        TU ]  5         g r   )r   unlinkri   r=   tearDownClassrm   r@   s    r   rr   SendfileBase.tearDownClassp   s"    ))*r   c                 
  > [        [        R                  S5      U l        U R	                  U R                  R
                  5        U R                  5       U l        U R                  U R                  5        [        TU ])  5         g )Nrb)rh   r   ri   file
addCleanupr?   rd   r!   set_event_loopr=   setUpr    r@   s    r   rz   SendfileBase.setUpu   sV    ))40			(**,	DII&r   c                    > U R                   R                  5       (       d   [        R                  " U R                   5        U R	                  5         [
        R                  " 5         [        TU ]!  5         g r   )	r!   	is_closed
test_utilsrun_briefly
doCleanupsr   
gc_collectr=   tearDownr{   s    r   r   SendfileBase.tearDown|   sI    yy""$$""499-r   c                 8    U R                   R                  U5      $ r   )r!   run_until_complete)r    coros     r   run_loopSendfileBase.run_loop   s    yy++D11r   )rw   r!   )rC   rD   rE   rF   rk   BUF_SIZErd   classmethodrl   rr   rz   r   r   rG   rH   rI   s   @r   r^   r^   ^   sV    
 %&DH"  
    2 2r   r^   c                      ^  \ rS rSr\U 4S j5       r\U 4S j5       rSS jrS rSS jr	S r
S rS	 rS
 rS rSrU =r$ )SockSendfileMixin   c                 b   > [         R                  U l        S[         l        [        TU ]  5         g )Ni @  )r   !SENDFILE_FALLBACK_READBUFFER_SIZE_SockSendfileMixin__old_bufsizer=   rl   rs   s    r   rl   SockSendfileMixin.setUpClass   s$    %GG6?	3r   c                 L   > U R                   [        l        [        TU ]  5         g r   )r   r   r   r=   rr   rs   s    r   rr   SockSendfileMixin.tearDownClass   s    696G6G	3r   c                     [         R                   " [         R                  [         R                  5      nUR                  S5        U(       a  U R	                  UR
                  5        U$ rN   )socketAF_INETSOCK_STREAMsetblockingrx   r?   )r    cleanupsocks      r   make_socketSockSendfileMixin.make_socket   sB    }}V^^V-?-?@OODJJ'r   c                 v    UR                  [        R                  [        R                  U R                  5        g r   )
setsockoptr   
SOL_SOCKET	SO_RCVBUFr   )r    r   s     r   reduce_receive_buffer_size,SockSendfileMixin.reduce_receive_buffer_size   s$     	))6+;+;T]]Kr   c                     UR                  [        R                  [        R                  U R                  5        Ub  UR                  U R                  S9  g g )N)high)r   r   r   	SO_SNDBUFr   set_write_buffer_limits)r    r   r   s      r   reduce_send_buffer_size)SockSendfileMixin.reduce_send_buffer_size   sD    
 	))6+;+;T]]K --4==-A !r   c                   ^ ^^ [        T R                  5      m[        R                  " 5       nT R	                  SS9nUR                  [        R                  U45        T R                  T R                  R                  U4S jUS95      mT R                  U5        T R	                  5       nT R                  T R                  R                  USU45      5        T R                  U5        UU U4S jnT R                  U5        UT4$ )NF)r   c                     > T $ r   r   )protos   r   <lambda>8SockSendfileMixin.prepare_socksendfile.<locals>.<lambda>   s    Er   )r   z	127.0.0.1c                     > T R                   b9  T R                   R                  5         TR                  T R                  5       5        TR                  5         TR                  TR                  5       5        g r   )r   r?   r   r[   )r   r    servers   r   r   7SockSendfileMixin.prepare_socksendfile.<locals>.cleanup   sR    * %%'e//12LLNMM&,,./r   )rK   r!   r   find_unused_portr   bindHOSTr   create_serverr   sock_connectr   rx   )r    portsrv_sockr   r   r   r   s   `    @@r   prepare_socksendfile&SockSendfileMixin.prepare_socksendfile   s    		"--/##E#2}))401tyy66  7  * +''1!dii,,TK3FGH$$T*	0 	 U{r   c                    U R                  5       u  pU R                  U R                  R                  XR                  5      5      nUR                  5         U R                  UR                  5       5        U R                  U[        U R                  5      5        U R                  UR                  U R                  5        U R                  U R                  R                  5       [        U R                  5      5        g r   )r   r   r!   sock_sendfilerw   r?   r[   assertEqualr;   rk   r   tellr    r   r   rets       r   test_sock_sendfile_success,SockSendfileMixin.test_sock_sendfile_success   s    //1mmDII33D))DE

e'')*c$))n-TYY/)3tyy>:r   c                    U R                  5       u  pU R                  U R                  R                  XR                  SS5      5      nUR                  5         U R                  UR                  5       5        U R                  UR                  U R                  SS 5        U R                  U R                  R                  5       S5        U R                  US5        g )N  i  i  )r   r   r!   r   rw   r?   r[   r   r   rk   r   r   s       r   (test_sock_sendfile_with_offset_and_count:SockSendfileMixin.test_sock_sendfile_with_offset_and_count   s    //1mmDII33D))48$@ A

e'')*TYYtD%9:)40d#r   c           	         U R                  5       u  p[        R                  " 5        nU R                  U R                  R                  XSS 5      5      nS S S 5        UR                  5         U R                  UR                  5       5        U R                  WS5        U R                  U R                  R                  5       S5        g ! , (       d  f       Nz= frB   )r   tempfileTemporaryFiler   r!   r   r?   r[   r   rw   r   )r    r   r   fr   s        r   test_sock_sendfile_zero_size.SockSendfileMixin.test_sock_sendfile_zero_size   s    //1##%--		 7 7894!A BC & 	

e'')*a )1- &%s   -C		
Cc                    SS-  nU R                  5       u  p#U R                  U R                  R                  X!5      5        U R                  U R                  R	                  X R
                  5      5      nU R                  U R                  R                  X!5      5        UR                  5         U R                  UR                  5       5        U R                  U[        U R                  5      5        XR                  -   U-   nU R                  UR                  U5        U R                  U R
                  R                  5       [        U R                  5      5        g )Ns   mix_regular_sendra   )r   r   r!   sock_sendallr   rw   r?   r[   r   r;   rk   r   r   )r    bufr   r   r   r&   s         r   (test_sock_sendfile_mix_with_regular_send:SockSendfileMixin.test_sock_sendfile_mix_with_regular_send   s    !X.//1dii,,T78mmDII33D))DEdii,,T78

e'')*c$))n-?S(X.)3tyy>:r   r   )Tr   )rC   rD   rE   rF   r   rl   rr   r   r   r   r   r   r   r   r   rG   rH   rI   s   @r   r   r      sX     
    L
B6;	$	.; ;r   r   c                   l   \ rS rSrSSS.S jr\R                  " \R                  S:H  S5      S 5       r	S	 r
S
 rS rS rS rS rS rS rS rS rS r\R                  " \R                  R+                  S5      S5      S 5       rS r\R                  " \" \S5      (       + S5      S 5       rS rSrg)SendfileMixin   Fr   is_sslr   c          	        ^ ^^^ [         R                  " 5       n[        T R                  US9mU(       aG  [        (       d  T R                  S5        [        R                  " 5       n[        R                  " 5       nOS nS n[        R                  " [        R                  [        R                  5      nUR                  [         R                  U45        T R                  T R                  R                  U4S jXdS95      mT R!                  U5        U(       a  [         R                  nOS n[        R                  " [        R                  [        R                  5      nUR#                  [         R                  U45        [        T R                  S9mT R                  T R                  R%                  U4S jUXWS95      u  pT R'                  XS9  UU UU4S	 jnT R)                  U5        TT4$ )
N)r!   r   zNo ssl modulec                     > T $ r   r   )	srv_protos   r   r   0SendfileMixin.prepare_sendfile.<locals>.<lambda>	      Ir   )r   ssl)r!   c                     > T $ r   r   )	cli_protos   r   r   r     r   r   )r   r   server_hostname)r   c                  8  > TR                   R                  5         T R                   R                  5         TR                  TR                  5        TR                  T R                  5        TR                  5         TR                  TR	                  5       5        g r   )r   r?   r   r   r[   )r   r    r   r   s   r   r   /SendfileMixin.prepare_sendfile.<locals>.cleanup  se    %%'%%'MM)..)MM)..)LLNMM&,,./r   )r   r   r   r!   r   skipTestr   simple_server_sslcontextsimple_client_sslcontextr   r   r   r   r   r   r   r   connectcreate_connectionr   rx   )r    r   r   r   srv_ctxcli_ctxr   r   cli_socktrprr   r   r   r   s   `           @@@r   prepare_sendfileSendfileMixin.prepare_sendfile   s~   --/#0;=	3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  ;  : ; 	$$X$<	0 	0 	 )##r   win32zUDP sockets are not supportedc                    U R                  U R                  R                  [        R                  [
        R                  S95      u  p U R                  [        S5         U R                  U R                  R                  XR                  5      5        S S S 5        U R                  SU R                  R                  5       5        UR                  5         g ! , (       d  f       NI= f! UR                  5         f = f)N)familynot supportedr   )r   r!   create_datagram_endpointr   DatagramProtocolr   r   assertRaisesRegexRuntimeErrorsendfilerw   r   r   r?   )r    r   r   s      r   test_sendfile_not_supported)SendfileMixin.test_sendfile_not_supported%  s    II..((~~ / '(	''oFII&&r9957 G Q		 01 HHJ GF HHJs$   	C( 5C2C( 
C%!C( (C:c                 ~   U R                  5       u  pU R                  U R                  R                  UR                  U R
                  5      5      nUR                  R                  5         U R                  UR                  5        U R                  U[        U R                  5      5        U R                  UR                  [        U R                  5      5        U R                  UR                  U R                  5        U R                  U R
                  R                  5       [        U R                  5      5        g r   r   r   r!   r   r   rw   r?   r   r   r;   rk   r   r   r   r    r   r   r   s       r   test_sendfileSendfileMixin.test_sendfile4  s    #446	mmIIy22DII>@!!#inn%c$))n-))3tyy>:3)3tyy>:r   c                   ^  T R                  5       u  pU 4S jnUT R                  l        T R                  T R                  R	                  UR
                  T R                  5      5      nUR
                  R                  5         T R                  UR                  5        T R                  U[        T R                  5      5        T R                  UR                  [        T R                  5      5        T R                  UR                  T R                  5        T R                  T R                  R                  5       [        T R                  5      5        g )Nc                 Z   > [         R                  R                  TR                  XX#5      $ r   r   BaseEventLoop_sendfile_nativer!   transprw   offsetcountr    s       r   sendfile_nativeCSendfileMixin.test_sendfile_force_fallback.<locals>.sendfile_nativeB  '    ,,==		68 8r   )r   r!   r  r   r   r   rw   r?   r   r   r;   rk   r   r   r   )r    r   r   r  r   s   `    r   test_sendfile_force_fallback*SendfileMixin.test_sendfile_force_fallback?  s    #446		8
 &5		"mmIIy22DII>@!!#inn%c$))n-))3tyy>:3)3tyy>:r   c           	        ^  [         R                  S:X  a:  [        T R                  [        R
                  5      (       a  T R                  S5        T R                  5       u  pU 4S jnUT R                  l        T R                  [        R                  S5         T R                  T R                  R                  UR                  T R                  SS95        S S S 5        UR                  R                  5         T R                  UR                   5        T R#                  UR$                  S5        T R#                  T R                  R'                  5       S5        g ! , (       d  f       N= f)Nr   zFails on proactor event loopc                 Z   > [         R                  R                  TR                  XX#5      $ r   r   r  s       r   r  MSendfileMixin.test_sendfile_force_unsupported_native.<locals>.sendfile_nativeX  r	  r   r   Ffallbackr   )sysplatform
isinstancer!   r   ProactorEventLoopr   r   r  r   SendfileNotAvailableErrorr   r   r   rw   r?   r   r   r   r   )r    r   r   r  s   `   r   &test_sendfile_force_unsupported_native4SendfileMixin.test_sendfile_force_unsupported_nativeR  s	   <<7"$))W%>%>??<=#446		8
 &5		"##G$E$E$35MM		""9#6#6		,1 # 345 	!!#inn%))1-)1-5 5s   ?E
E*c                 |   U R                  SS9u  pU R                  U R                  R                  UR                  U R
                  5      5      nUR                  R                  5         U R                  UR                  5        U R                  U[        U R                  5      5        U R                  UR                  [        U R                  5      5        U R                  UR                  U R                  5        U R                  U R
                  R                  5       [        U R                  5      5        g )NTr   r   r   s       r   test_sendfile_sslSendfileMixin.test_sendfile_sslj  s    #44D4A	mmIIy22DII>@!!#inn%c$))n-))3tyy>:3)3tyy>:r   c                    U R                  5       u  pUR                  R                  5         U R                  [        S5         U R                  U R                  R                  UR                  U R                  5      5        S S S 5        U R                  UR                  5        U R                  UR                  S5        U R                  U R                  R                  5       S5        g ! , (       d  f       Np= f)Nz
is closingr   )r   r   r?   r   r   r   r!   r   rw   r   r   r   r   r    r   r   s      r    test_sendfile_for_closing_transp.SendfileMixin.test_sendfile_for_closing_transpu  s    #446	!!###L,?MM$)),,Y-@-@$))LM @inn%))1-)1-	 @?s   A C--
C;c                    U R                  5       u  pSS-  nSS-  nUR                  R                  U5        U R                  U R                  R                  UR                  U R                  5      5      nUR                  R                  U5        UR                  R                  5         U R                  UR                  5        U R                  U[        U R                  5      5        U R                  UR                  X0R                  -   U-   5        U R                  U R                  R                  5       [        U R                  5      5        g )Ns   PREFIX__   s   --SUFFIXr   r   rj   r   r!   r   rw   r?   r   r   r;   rk   r   r   r    r   r   PREFIXSUFFIXr   s         r   test_sendfile_pre_and_post_data-SendfileMixin.test_sendfile_pre_and_post_data~  s    #446	t#t#!!&)mmIIy22DII>@!!&)!!#inn%c$))n-)));f)DE)3tyy>:r   c                    U R                  SS9u  pSS-  nSS-  nUR                  R                  U5        U R                  U R                  R                  UR                  U R                  5      5      nUR                  R                  U5        UR                  R                  5         U R                  UR                  5        U R                  U[        U R                  5      5        U R                  UR                  X0R                  -   U-   5        U R                  U R                  R                  5       [        U R                  5      5        g )NTr  s   zxcvbnmr!  s
   0987654321r"  r#  s         r   #test_sendfile_ssl_pre_and_post_data1SendfileMixin.test_sendfile_ssl_pre_and_post_data  s    #44D4A	d"%!!&)mmIIy22DII>@!!&)!!#inn%c$))n-)));f)DE)3tyy>:r   c                    U R                  5       u  pU R                  U R                  R                  UR                  U R
                  SS5      5      nUR                  R                  5         U R                  UR                  5        U R                  US5        U R                  UR                  S5        U R                  UR                  U R                  SS 5        U R                  U R
                  R                  5       S5        g )Nr   d   L  r   r   r!   r   r   rw   r?   r   r   r   r   rk   r   r   s       r   test_sendfile_partial#SendfileMixin.test_sendfile_partial  s    #446	mmIIy22DIItSIK!!#inn%c"))3/4)=>)40r   c                    U R                  SS9u  pU R                  U R                  R                  UR                  U R
                  SS5      5      nUR                  R                  5         U R                  UR                  5        U R                  US5        U R                  UR                  S5        U R                  UR                  U R                  SS 5        U R                  U R
                  R                  5       S5        g )NTr  r   r,  r-  r.  r   s       r   test_sendfile_ssl_partial'SendfileMixin.test_sendfile_ssl_partial  s    #44D4A	mmIIy22DIItSIK!!#inn%c"))3/4)=>)40r   c                    U R                  [        U R                  5      S9u  pU R                  U R                  R                  UR                  U R                  5      5      nUR                  R                  5         U R                  UR                  5        U R                  U[        U R                  5      5        U R                  UR                  [        U R                  5      5        U R                  UR                  U R                  5        U R                  U R                  R                  5       [        U R                  5      5        g )Nr   )r   r;   rk   r   r!   r   r   rw   r?   r   r   r   r   r   r   s       r   (test_sendfile_close_peer_after_receiving6SendfileMixin.test_sendfile_close_peer_after_receiving  s    #44DII  5  (	mmIIy22DII>@!!#inn%c$))n-))3tyy>:3)3tyy>:r   c                 p   U R                  S[        U R                  5      S9u  pU R                  U R                  R                  UR                  U R                  5      5      nU R                  UR                  5        U R                  U[        U R                  5      5        U R                  UR                  [        U R                  5      5        U R                  UR                  U R                  5        U R                  U R                  R                  5       [        U R                  5      5        g )NTr   )r   r;   rk   r   r!   r   r   rw   r   r   r   r   r   r   s       r   ,test_sendfile_ssl_close_peer_after_receiving:SendfileMixin.test_sendfile_ssl_close_peer_after_receiving  s    #44S^  5  5	mmIIy22DII>@inn%c$))n-))3tyy>:3)3tyy>:r   sunoszDoesn't work on Solarisc                 n   U R                  SS9u  pU R                  [        5         U R                  U R                  R                  UR                  U R                  5      5        S S S 5        U R                  UR                  5        U R                  SUR                  s=:*  =(       a    [        U R                  5      :  Os  UR                  5        [        R                  S:X  a)  [        U R                  [         R"                  5      (       dh  U R                  SU R                  R%                  5       s=:*  =(       a    [        U R                  5      :  Os  U R                  R%                  5       5        U R                  UR                  R'                  5       5        g ! , (       d  f       GNE= f)Nr!  r5  r   )r   assertRaisesConnectionErrorr   r!   r   r   rw   r   
assertTruer   r;   rk   r  r  r  r   r  r   
is_closingr  s      r   3test_sendfile_close_peer_in_the_middle_of_receivingASendfileMixin.test_sendfile_close_peer_in_the_middle_of_receiving  s     $444F	/MM		""9#6#6		BD 0 	inn%	 0 0AA3tyy>A!((	*'tyy'*C*CDDOODDIINN$4EEs499~E IINN,.	++6689 0/s   A F%%
F4c                 l  ^  U 4S jnUT R                   l        T R                  SS9u  p#T R                  [        5          T R                  T R                   R                  UR                  T R                  5      5         S S S 5        T R                  UR                  5        T R                  SUR                   s=:*  =(       a    [#        T R$                  5      :  Os  UR                   5        T R                  ST R                  R'                  5       s=:*  =(       a    [#        T R$                  5      :  Os  T R                  R'                  5       5        g ! [         a>  nUR                  [        R                  :X  a  [        R                  S:X  a  [        ee S nAff = f! , (       d  f       GN*= f)Nc                 Z   > [         R                  R                  TR                  XX#5      $ r   r   r  s       r   r  cSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receiving.<locals>.sendfile_native  r	  r   r!  r5  darwin)r!   r  r   r=  r>  r   r   r   rw   OSErrorerrno
EPROTOTYPEr  r  r   r?  r   r;   rk   r   )r    r  r   r   es   `    r   <test_sendfile_fallback_close_peer_in_the_middle_of_receivingJSendfileMixin.test_sendfile_fallback_close_peer_in_the_middle_of_receiving  s2   	8
 &5		"#444F	/	II&&y':':DIIFH 0 	inn%	 0 0AA3tyy>A!((	*		 0AA3tyy>A		(	*   77e...3<<83K))	 0/s)   F$?E
F!#9FF!!F$$
F3r   z"Don't have native sendfile supportc                   ^ ^^ T R                  5       u  nmT R                  R                  5       mUUU 4S jnT R                  R                  U" 5       5      nT R	                  T5        T R                  [        S5         TR                  R                  S5        S S S 5        T R	                  U5      nT R                  U[        T R                  5      5        g ! , (       d  f       NE= f)Nc                     >#    TR                  S 5        TR                  R                  T R                  TR                  5      I S h  vN $  N7fr   )r+   r!   r   r   rw   )r   rQ   r    s   r   r   =SendfileMixin.test_sendfile_prevents_bare_write.<locals>.coro   s9     NN4 ++I,?,?KKKKs   AAA	Azsendfile is in progresss   data)r   r!   r   create_taskr   r   r   r   rj   r   r;   rk   )r    r   r   tr   r   rQ   s   `    @@r   !test_sendfile_prevents_bare_write/SendfileMixin.test_sendfile_prevents_bare_write  s      $446	9ii%%'	L II!!$&)c##L$=?%%g.? mmAc$))n-	? ?s    C
C)c           	      X   [         R                  " 5       nS UR                  l        [        R
                  R                  Ul        U R                  [        S5         U R                  R                  U R                  R                  US SS95        S S S 5        g ! , (       d  f       g = f)Nc                      grN   r   r   r   r   r   PSendfileMixin.test_sendfile_no_fallback_for_fallback_transport.<locals>.<lambda>  s    5r   zfallback is disabledFr  )r   Mockr@  side_effectr   _SendfileModeFALLBACK_sendfile_compatibler   r   r!   r   r   r,   s     r   0test_sendfile_no_fallback_for_fallback_transport>SendfileMixin.test_sendfile_no_fallback_for_fallback_transport  sy    IIK	+8	()2)@)@)I)I	&##L2HIII((		""9dU"CE JIIs   5B
B)r   N)rC   rD   rE   rF   r   unittestskipIfr  r  r   r   r
  r  r  r  r&  r)  r/  r2  r6  r9  
startswithrA  rK  hasattrosrR  r\  rG   r   r   r   r   r      s     */A )$V __S\\W,.MN O	;;&.0	;.;;	1	1
;	; __S\\,,W5.0:0: *: __Z009;.;. Er   r   c                       \ rS rSrSrg)SendfileTestsBasei  r   N)rC   rD   rE   rF   rG   r   r   r   rd  rd    s    r   rd  r   c                       \ rS rSrS rSrg)SelectEventLoopTestsi  c                 ,    [         R                  " 5       $ r   )r   SelectorEventLoopr1   s    r   rd   &SelectEventLoopTests.create_event_loop      ,,..r   r   NrC   rD   rE   rF   rd   rG   r   r   r   rf  rf        	/r   rf  c                       \ rS rSrS rSrg)ProactorEventLoopTestsi!  c                 ,    [         R                  " 5       $ r   )r   r  r1   s    r   rd   (ProactorEventLoopTests.create_event_loop$  rj  r   r   Nrk  r   r   r   rn  rn  !  rl  r   rn  KqueueSelectorc                       \ rS rSrS rSrg)KqueueEventLoopTestsi+  c                 T    [         R                  " [        R                  " 5       5      $ r   )r   rh  	selectorsrq  r1   s    r   rd   &KqueueEventLoopTests.create_event_loop.  s!    00,,.0 0r   r   Nrk  r   r   r   rs  rs  +  s    0r   rs  EpollSelectorc                       \ rS rSrS rSrg)EPollEventLoopTestsi3  c                 T    [         R                  " [        R                  " 5       5      $ r   )r   rh  ru  rw  r1   s    r   rd   %EPollEventLoopTests.create_event_loop6  s    001H1H1JKKr   r   Nrk  r   r   r   ry  ry  3  s    Lr   ry  PollSelectorc                       \ rS rSrS rSrg)PollEventLoopTestsi:  c                 T    [         R                  " [        R                  " 5       5      $ r   )r   rh  ru  r|  r1   s    r   rd   $PollEventLoopTests.create_event_loop=  s    001G1G1IJJr   r   Nrk  r   r   r   r~  r~  :  s    Kr   r~  c                       \ rS rSrS rSrg)rf  iA  c                 T    [         R                  " [        R                  " 5       5      $ r   )r   rh  ru  SelectSelectorr1   s    r   rd   ri  D  s    ,,Y-E-E-GHHr   r   Nrk  r   r   r   rf  rf  A  s    	Ir   __main__)'r   rH  rb  r   r  r   r^  r   r   r   testr   test.supportr   r   test.test_asyncior	   r   r   ImportErrorr   Protocolr   rK   r^   r   r   rd  r  TestCaserf  rn  ru  ra  rs  ry  r~  rC   mainr   r   r   <module>r     s     	  
       " & 1
('#g&& '#Tg 0(2 (2V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MMO i  
Cs   F FF