
    z%i*                        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 ej                  dk7  r ej                  d      d dl
Z
d dlZd dlZd dlmZ d dlmZ d Z G d d	ej$                        Z G d
 dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Zedk(  r ej4                          yy)    N)mockwin32zWindows only)windows_events)utilsc                  .    t        j                  d        y N)asyncioset_event_loop_policy     Y/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_asyncio/test_windows_events.pytearDownModuler      s    !!$'r   c                       e Zd Zd Zd Zd Zy)
UpperProtoc                     g | _         y r   )bufselfs    r   __init__zUpperProto.__init__   s	    r   c                     || _         y r   )trans)r   r   s     r   connection_madezUpperProto.connection_made   s	    
r   c                     | j                   j                  |       d|v r]| j                  j                  dj	                  | j                         j                                | j                  j                          y y )N   
r   )r   appendr   writejoinupperclose)r   datas     r   data_receivedzUpperProto.data_received    sV    D=JJSXXdhh/5578JJ r   N)__name__
__module____qualname__r   r   r!   r   r   r   r   r      s    r   r   c                       e Zd Zd Zy)ProactorLoopCtrlCc                 d   d }t        j                  |      }t        j                         }	 |j	                  |j
                         |j                          | j                  d       | j                  |       |j                          y # t        $ r Y -w xY w# | j                  |       w xY w)Nc                  t    t        j                  d       t        j                  t        j                         y )N皙?)timesleepsignalraise_signalSIGINTr   r   r   SIGINT_after_delayz9ProactorLoopCtrlC.test_ctrl_c.<locals>.SIGINT_after_delay+   s    JJsO.r   targetz%should not fall through 'run_forever')	threadingThreadr	   new_event_loop	call_soonstartrun_foreverfailKeyboardInterrupt
close_loopr   )r   r/   threadloops       r   test_ctrl_czProactorLoopCtrlC.test_ctrl_c)   s    	/ !!);<%%'	"NN6<<(II=> OOD!	 ! 		 OOD!s#   <B 	BB BB B/N)r"   r#   r$   r=   r   r   r   r&   r&   '   s    r   r&   c                       e Zd Zd Zy)ProactorMultithreadingc                     dd fd}t        j                  |      }|j                          |j                          | j	                         y )NFc                  J   K   t        j                  d       d {    y 7 w)Nr   )r	   r+   r   r   r   corozAProactorMultithreading.test_run_from_nonmain_thread.<locals>.coroA   s     --"""s   #!#c                  ~    t        j                         } | j                                 | j                          dy )NT)r	   r4   run_until_completer   )r<   rB   finisheds    r   funczAProactorMultithreading.test_run_from_nonmain_thread.<locals>.funcD   s/    ))+D##DF+JJLHr   r0   )r2   r3   r6   r   
assertTrue)r   rF   r;   rB   rE   s      @@r   test_run_from_nonmain_threadz3ProactorMultithreading.test_run_from_nonmain_thread>   sB    	#	 !!.!r   N)r"   r#   r$   rH   r   r   r   r?   r?   =   s    "r   r?   c                   `     e Zd Z f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 )ProactorTestsc                     t         |           t        j                         | _        | j                  | j                         y r   )supersetUpr	   ProactorEventLoopr<   set_event_loop)r   	__class__s    r   rM   zProactorTests.setUpT   s.    --/	DII&r   c                    t        j                         \  }}| j                  j                  |t	        j
                               }t	        j                  | j                  j                  |d      | j                        }|j                          | j                  j                  |       | j                  |j                         d       |j                          y )Nd   r<   r   )socket
socketpairr<   _make_socket_transportr	   Protocolensure_future	sock_recvr   rD   assertEqualresult)r   abr   fs        r   
test_closezProactorTests.test_closeY   s      "1		00G4D4D4FG!!$))"5"5a"=DIIN		$$Q'S)		r   c                     dt        j                         z  }t        j                  |      }| j	                  t
              5  t        j                  |       d d d        |j                          y # 1 sw Y   xY w)Nz\\.\pipe\test_double_bind-%s)osgetpidr   
PipeServerassertRaisesPermissionErrorr   )r   ADDRESSserver1s      r   test_double_bindzProactorTests.test_double_bindb   s\    1BIIK? ++G4/ 	/%%g.	/	/ 	/s   A11A:c                 z    | j                   j                  | j                               }| j                  |d       y Ndone)r<   rD   
_test_piperZ   r   ress     r   	test_pipezProactorTests.test_pipei   s-    ii**4??+<=f%r   c                 b  K   dt        j                         z  }| j                  t              5  | j                  j                  t        j                  |       d {    d d d        | j                  j                  t        |       d {   \  }| j                  |t        j                         g }t        d      D ]  }t        j                  | j                        }t        j                  || j                        | j                  j                  fd|       d {   \  }}| j                  |t        j                          | j#                  |       |j%                  ||f        t'        |      D ]6  \  }\  }}	|	j)                  dj+                  |      j-                                8 t'        |      D ]_  \  }\  }}	|j/                          d {   }
| j#                  |
dj+                  |      j-                                |	j1                          a |j1                          | j                  t              5  | j                  j                  t        j                  |       d {    d d d        y7 +# 1 sw Y   +xY w7 7 t7 7 %# 1 sw Y   yxY ww)Nz\\.\pipe\_test_pipe-%s   rS   c                       S r   r   )protocols   r   <lambda>z*ProactorTests._test_pipe.<locals>.<lambda>~   s     r   z	lower-{}
z	LOWER-{}
rk   )ra   rb   rd   FileNotFoundErrorr<   create_pipe_connectionr	   rW   start_serving_piper   assertIsInstancer   rc   rangeStreamReaderStreamReaderProtocol	TransportrZ   r   	enumerater   formatencodereadliner   )r   rf   serverclientsistream_readerr   protorwresponsers   s              @r   rl   zProactorTests._test_pipem   sI    +biik901 	+))22  '+ + +	+ 55! !fn&?&?@q 	3A#00dii@M33M9=DH!%!A!A '"+ +LE5!!%):):;Xu-NNM512	3 #7+ 	5IAv1GGL''*1134	5 #7+ 	IAv1ZZ\)HX|':':1'='D'D'FGGGI	
 	01 	+))22  '+ + +	+ A+	+ 	+!+ *+	+ s   -J/.JJ	J#+J/JBJ/(J)B9J/"J#A*J/.J#;J!<J# 	J/	JJ	J/J/J/!J##J,(J/c                    t               }t        j                  |_        t        j
                  j                  t        d|      5 }| j                  j                  j                  d      }| j                  j                  |      }|j                          | j                  t        j                        5  | j                  j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NConnectPipe)side_effectpipe_address)OSError_overlappedERROR_PIPE_BUSYwinerrorr   patchobjectr<   	_proactorconnect_pipecreate_taskcancelrd   r	   CancelledErrorrD   )r   excconnectrB   tasks        r   test_connect_pipe_cancelz&ProactorTests.test_connect_pipe_cancel   s    i"22ZZ{M+.  0 	33:99&&33NCD99((.D KKM""7#9#9: 3		,,T23	3 	33 3	3 	3s%   A0C/6C#C/#C,	(C//C8c                    t        j                  d ddd       }| j                  t        j                  |       | j
                  j                  j                  |d      }| j
                  j                         }| j
                  j                  |      }| j
                  j                         |z
  }| j                  |d       | j                  |j                                | j                  d|cxk  xr dk  nc |       t        j                  |       | j
                  j                  j                  |d      }| j
                  j                         }| j
                  j                  |      }| j
                  j                         |z
  }| j                  |d       | j                  |j                                | j                  d|cxk  xr dk  nc |       |j                          y )	NTFg      ?g?g?
   r   g333333?)r   CreateEvent
addCleanup_winapiCloseHandler<   r   wait_for_handler*   rD   rZ   assertFalser[   rG   SetEventr   )r   eventfutr6   rk   elapseds         r   test_wait_for_handlez"ProactorTests.test_wait_for_handle   sk   ''dE4@++U3 ii!!11%=		 yy++C0)).."U*u%& 	.3.8U# ii!!11%<		 yy++C0)).."U*t$

%W*s*G4 	

r   c                    t        j                  d ddd       }| j                  t        j                  |       | j
                  j                  j                  |d      }|j                          | j
                  j                         }| j                  t        j                        5  | j
                  j                  |       d d d        | j
                  j                         |z
  }| j                  d|cxk  xr dk  nc |       | j
                  j                  j                  |      }|j                          |j                          y # 1 sw Y   xY w)NTFr   r   r)   )r   r   r   r   r   r<   r   r   r   r*   rd   r	   r   rD   rG   )r   r   r   r6   r   s        r   test_wait_for_handle_cancelz)ProactorTests.test_wait_for_handle_cancel   s    ''dE4@++U3 ii!!11%<

		 w556 	.II((-	.)).."U*W*s*G4 ii!!11%8



	. 	.s   (EEc                    t        j                         | j                  _        | j                  j	                  d d       }| j                  j                          | j                  j                          | j                  j                          | j                  j                          | j                  j                  |       | j                  | j                         | j                  | j                  j                  j                         y )Nc                       y r   r   r   r   r   rt   z;ProactorTests.test_read_self_pipe_restart.<locals>.<lambda>   s    r   )r   Mockr<   call_exception_handlerrun_in_executorstopr7   rD   r:   r   called)r   r^   s     r   test_read_self_pipe_restartz)ProactorTests.test_read_self_pipe_restart   s     ,099;		(
 II%%dL9								 			$$Q' 			"99@@Ar   c                    | j                   j                  }t        j                  t        j                        }d }| j	                  t
              5  |j                  ||       d d d        | j	                  t
              5  |j                  |d|       d d d        |j                          y # 1 sw Y   LxY w# 1 sw Y   &xY w)N)types   abc)addr)	r<   r   rT   
SOCK_DGRAMrd   	TypeErrorr   sendtor   )r   proactorsockbad_addresss       r    test_address_argument_type_errorz.ProactorTests.test_address_argument_type_error   s    99&&}}&"3"34y) 	0T;/	0y) 	<OOD&{O;	<

		0 	0	< 	<s   B0B<0B9<Cc                 z    | j                   j                  | j                               }| j                  |d       y rj   )r<   rD   _test_client_pipe_statrZ   rm   s     r   test_client_pipe_statz#ProactorTests.test_client_pipe_stat   s/    ii**4+F+F+HIf%r   c                   K   dt        j                         z  fd}| j                  t              5   |        d {    d d d        | j                  j                  t        j                         d {   \  }| j                  |t        j                         g | j                  j                  fd       t        d      D ]*  }| j                  j                   |              d {    , | j                  t              d       |j!                          | j                  t              5   |        d {    d d d        y7 # 1 sw Y   xY w7 7 r7 !# 1 sw Y   yxY ww)Nz!\\.\pipe\test_client_pipe_stat-%sc                  P  K   t        j                        } 	 t        j                  t        j                               t        j                  |        y # t        $ r(}|j
                  t         j                  k7  r Y d }~Bd }~ww xY w# t        j                  |        w xY wwr   )r   r   r   r   r   r   r   )herf   s     r   probez3ProactorTests._test_client_pipe_stat.<locals>.probe  s     ''0A'##K$;$;G$DE
 ##A&	  ::!<!<< = ##A&s:   B&(A B&	B	!B?B B		B B##B&c                 &    j                  |      S r   )r   )_r    errorss     r   rt   z6ProactorTests._test_client_pipe_stat.<locals>.<lambda>  s    d8K r   rq   r   rk   )ra   rb   rd   ru   r<   rw   r	   rW   rx   r   rc   set_exception_handlerry   r   rZ   lenr   )r   r   r   r   rf   r   s       @@r   r   z$ProactorTests._test_client_pipe_stat  s4    6D		' 01 	'MM	 55g6F6FPPfn&?&?@		''(KLq 	1A))''000	1 	Va001 	'MM	 % 	 	 Q 1 	 sx   2E6EEE5E6;E$<A7E63E&4AE6;E*E(E*	E6EE!	E6&E6(E**E3/E6)r"   r#   r$   rM   r_   rh   ro   rl   r   r   r   r   r   r   r   __classcell__)rP   s   @r   rJ   rJ   R   sB    '
&$L3 D(B8	&"r   rJ   c                       e Zd Zd Zd Zy)WinPolicyTestsc                      fd}t        j                         }	 t        j                  t        j                                t        j                   |              t        j                  |       y # t        j                  |       w xY w)Nc                  r   K    j                  t        j                         t        j                         y wr   )rx   r	   get_running_loopSelectorEventLoopr   s   r   mainz5WinPolicyTests.test_selector_win_policy.<locals>.main)  *     !!((*))+   47)r	   get_event_loop_policyr
   WindowsSelectorEventLoopPolicyrunr   r   
old_policys   `  r   test_selector_win_policyz'WinPolicyTests.test_selector_win_policy(  b    	+
 224
	6))668:KK))*5G))*5   AA3 3B
c                      fd}t        j                         }	 t        j                  t        j                                t        j                   |              t        j                  |       y # t        j                  |       w xY w)Nc                  r   K    j                  t        j                         t        j                         y wr   )rx   r	   r   rN   r   s   r   r   z5WinPolicyTests.test_proactor_win_policy.<locals>.main7  r   r   )r	   r   r
   WindowsProactorEventLoopPolicyr   r   s   `  r   test_proactor_win_policyz'WinPolicyTests.test_proactor_win_policy6  r   r   N)r"   r#   r$   r   r   r   r   r   r   r   &  s    66r   r   __main__)ra   r,   rT   sysr*   r2   unittestr   platformSkipTestr   r   r	   r   test.test_asyncior   
test_utilsr   rW   r   TestCaser&   r?   rJ   r   r"   r   r   r   r   <module>r      s    	   
    <<7
(

N
++    " 1(!! 
++ ,"Z00 "*QJ'' Qh6Z(( 6> zHMMO r   