
    iPL                        d dl mZ d dlZd dlmZ  ej                     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 ej                            ej                            e                    Zej                            ed          Z ej                    Zej        Zej        Ze Ze ZeZ ej!        Z!d dlm"Z" 	 d dl#Z#n# e$$ r dZ#Y nw xY w G d	 d
ej%                  Z& ej'        d           G d de&                      Z( ej'        d           G d de&                      Z) G d de*          Z+ G d de+          Z,e-dk    r ej.                     dS dS )    )print_functionN)monkey)DEFAULT_BIND_ADDR_TUPLE)DEFAULT_CONNECT)tcp_listenerz2_7_keycert.pem)get_open_filesc                   j     e Zd ZdZ fdZd Zes	erej	        rd Z
nd Z
d Zd Zd Zd	 Zd
 Z xZS )Test c                 d    d| _         t          t          |                                            d S Nr   )extra_allowed_open_statessuperr
   tearDown)self	__class__s    J/usr/local/lib/python3.11/dist-packages/gevent/tests/test__makefile_ref.pyr   zTest.tearDown)   s-    )+&dD""$$$$$    c                     	  |            }nR# t           $ rE}|j        d         t          j        k    rY d }~d S t          r|j        d         dk    rY d }~d S  d }~ww xY wt          d|d|          )Nr   i6'  zNOT RAISED EBADF: z() returned )OSErrorargserrnoEBADFWINAssertionError)r   funcresultexs       r   assert_raises_EBADFzTest.assert_raises_EBADF-   s    	TVVFF 	 	 	wqzU[(( rwqzU**	 nTTT66RSSSs   
 
AAAAAc                     d S Nr   )r   filenos     r   __assert_fd_openzTest.__assert_fd_open:   s	     Dr   c                     t          |t                    sJ t                      }||vrt          |d|d                   d S )N is not open:
data)
isinstancefd_typesr   r   r   r"   
open_filess      r   r#   zTest.__assert_fd_openD   sV    fh/////'))JZ''$fffjQWFXFX%YZZZ ('r   c                     t          |t                    sJ t          |                      |dk    s
J |            t          d          }||v rt	          |d|d                   d S )Nr   F)count_closing_as_openz is not closed:
r&   )r'   r(   reprr   r   r)   s      r   assert_fd_closedzTest.assert_fd_closedJ   s}    &(++99T&\\999zzz6zzz $%@@@
Z FFFJvDVDV!WXXX  r   c                 ,   t                      }|                                }|d         D ]P}t          |dd           |k    r9|j        t          j        t          j        f| j        z   v sJ |j                     d S Qt          |d|d                   )Nr&   laddrr%   )	r   getsocknamegetattrstatuspsutilCONN_LISTENCONN_ESTABLISHEDr   r   )r   sockr*   socknamexs        r   _assert_sock_openzTest._assert_sock_openS   s    #%%
##%%F# 	 	Aq'4((H44xF$68O#PSWSq#qqqqsts{qqq 5 dddJv<N<NOPPPr   c                    t          |t                    r|                     |           n|                                }t          |t                    s
J |            |                                }t          |t
                    s
J |            t          s|                     |           n|                     |           |r | j        |d         g|dd          R   d S d S )Nr      )	r'   r(   _Test__assert_fd_openr"   r1   tupler   r:   assert_open)r   r7   restr"   r8   s        r   r?   zTest.assert_open]   s    dH%% 
	-!!$''''[[]]Ffh//77777''))Hh..88888 -%%f----&&t,,, 	1DT!W0tABBx000000	1 	1r   c                    t          |t                    r|                     |           n~t          r)|                     |                                d           n|                     |j                   |                     |j                   |                     |j                   |r | j	        |d         g|dd          R   d S d S )Nr   r<   )
r'   r(   r.   PY3assertEqualr"   r   r1   acceptassert_closed)r   r7   r@   s      r   rF   zTest.assert_closedl   s    dH%% 
	2!!$''''  6  3333((555$$T%5666$$T[111 	3DtAw2abb222222	3 	3r   c                 <   t          j                     }	 |                    t                     t          st          j        r|                    d           |                     ||                                           n#  |	                                 d } xY w|S )Nr<   )
socketbindr   r   	greentestLINUXlistenr?   r"   close)r   ss     r   make_open_socketzTest.make_open_socket{   s    MOO
	FF*+++ io  Q

++++	GGIIIAs   A*B   B)__name__
__module____qualname__r   r   r   r   PYPYrJ   rK   r=   r.   r:   r?   rF   rO   __classcell__r   s   @r   r
   r
   %   s         "% % % % %
T 
T 
T  [t [	 [	 	 	 		[ 	[ 	[Y Y YQ Q Q1 1 13 3 3      r   r
   z0This sometimes times out for no apparent reason.c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )
TestSocketc                    t                      5 } ||                                           }|                                }|                                 d d d            n# 1 swxY w Y   |                     ||           d S r!   )ClosingrO   r"   rM   rF   r   closerrN   r"   s       r   test_simple_closezTestSocket.test_simple_close   s    YY 	&t,,..//AXXZZFGGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	1f%%%%%s   AA!!A%(A%c                 P   t                      5 } ||                                           }|                                } ||                                          }|                     ||           |                                 t          r|                     ||           n*|                     |           |                     |           |                                 |                     |           |                     |           d d d            d S # 1 swxY w Y   d S r!   )rY   rO   r"   makefiler?   rM   rC   rF   r   r[   rN   r"   fs        r   test_makefile1zTestSocket.test_makefile1   sO   YY 	'&t,,..//AXXZZFqzz||$$AQ''' GGIII )  F++++""1%%%  (((GGIIIq!!!v&&&!	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   C?DD"Dc                    t                      5 } ||                                           }|                                }|                     ||            ||                                          }|                     |           |                     ||           |                                 |                     ||           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S r!   )rY   rO   r"   r?   r^   rM   rF   r_   s        r   test_makefile2zTestSocket.test_makefile2   s2   YY 	*&t,,..//AXXZZFQ'''qzz||$$AQQ'''GGIIIQ'''GGIIIq&)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   C$D  DDc                 "   t                      5 } |t          d                    }|                                d          |t          j                              fd}|                    t          j        |                     |                    |          }|                                }| 	                    ||           |
                                 |                     |           d d d            d S # 1 swxY w Y   d S )Nr<   backlogc                  @                          t          f           d S r!   connectr   	connectorports   r   ri   z.TestSocket.test_server_simple.<locals>.connect   "    !!?D"9:::::r   target)rY   r   r1   rH   running_task	threadingThreadrE   r"   r?   rM   rF   )r   r[   listenerri   client_socketr"   rk   rl   s         @@r   test_server_simplezTestSocket.test_server_simple   sT   YY 	.&vl155566H''))!,Dv}//I; ; ; ; ; ; 	 0 @ @ @AAA"MM(33M"))++F]F333!!!}---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   C&DDDc                    t                      5 } |t          d                    }|                                d          |t          j                              fd}|                    t          j        |                     |                    |          }|                                } ||	                                          }| 
                    ||           |                                 t          r| 
                    ||           n*|                     |           | 
                    |           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S )Nr<   re   c                  @                          t          f           d S r!   rh   rj   s   r   ri   z1TestSocket.test_server_makefile1.<locals>.connect   rm   r   rn   )rY   r   r1   rH   rp   rq   rr   rE   r"   r^   r?   rM   rC   rF   	r   r[   rs   ri   rt   r"   r`   rk   rl   s	          @@r   test_server_makefile1z TestSocket.test_server_makefile1   s   YY 	6&vl155566H''))!,Dv}//I; ; ; ; ; ; 	 0 @ @ @AAA #MM(33M"))++F}--//00A]F333!!!  )  7777""=111  (((GGIII}f5553	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   E E>>FFc                    t                      5 } |t          d                    }|                                d          |t          j                              fd}|                    t          j        |                     |                    |          }|                                } ||	                                          }| 
                    ||           |                                 | 
                    ||           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S )Nr<   re   c                  @                          t          f           d S r!   rh   rj   s   r   ri   z1TestSocket.test_server_makefile2.<locals>.connect   rm   r   rn   )rY   r   r1   rH   rp   rq   rr   rE   r"   r^   r?   rM   rF   rx   s	          @@r   test_server_makefile2z TestSocket.test_server_makefile2   s   YY 	6&vl155566H''))!,Dv}//I; ; ; ; ; ; 	 0 @ @ @AAA"MM(33M"))++F}--//00A]F333GGIII]F333!!!}f555'	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   D.EEEN)	rP   rQ   rR   r\   ra   rc   ru   ry   r|   r   r   r   rW   rW      sn        & & &' ' '&* * *. . .$6 6 686 6 6 6 6r   rW   c                   V    e Zd Zd Zd Zd Zd Zd ZdddZd	 Z	d
 Z
d Zd Zd ZdS )TestSSLc                    |                     t          |f           	 t          j                                        |          }|                                 |                                 d S # t          j        $ r Y d S w xY wr!   )	ri   r   ssl
SSLContextwrap_socketwaitrM   rH   error)r   rk   rl   accepted_eventr9   s        r   _ssl_connect_taskzTestSSL._ssl_connect_task   s    ?D1222	   ,,Y77A !!! GGIIIII | 	 	 	
 DD	s   :A. .B Bc                     t          j                    }t          j        | j        |||f          }d|_        ||_        |S )N)ro   r   T)rq   Eventrr   r   daemonr   )r   rk   rl   r   ts        r   _make_ssl_connect_taskzTestSSL._make_ssl_connect_task  sL    "**D$:#,dN"CE E E)r   c                    t                      5 } ||                                           }|                                } |t          j                                        |                    }|                                }|                     ||           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S r!   )	rY   rO   r"   r   r   r   r?   rM   rF   rZ   s       r   r\   zTestSSL.test_simple_close  s    YY 	*&t,,..//AXXZZFs~''33A6677AXXZZFQ'''GGIIIq&)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   B5CCCc                 v   t                      5 } ||                                           } |t          j                                        |                    }|                                }|                     ||            ||                                          }|                     ||           |                                 |                     ||           |                                 |                                 | 	                    ||           d d d            d S # 1 swxY w Y   d S r!   )
rY   rO   r   r   r   r"   r?   r^   rM   rF   )r   r[   raw_srN   r"   r`   s         r   ra   zTestSSL.test_makefile1$  sP   YY 	*&F4002233Es~''33E::;;AXXZZFQ'''qzz||$$AQ'''GGIIIQ'''GGIIIKKMMMq&)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*   DD..D25D2c                 v   t                      5 } ||                                           }|                                } |t          j                                        |                    }|                                }|                     ||            ||                                          }|                     ||           |                                 |                     ||           |                                 | 	                    ||           d d d            d S # 1 swxY w Y   d S r!   )
rY   rO   r"   r   r   r   r?   r^   rM   rF   r_   s        r   rc   zTestSSL.test_makefile23  sP   YY 	*&t,,..//AXXZZFs~''33A6677AXXZZFQ'''qzz||$$AQ'''GGIIIQ'''GGIIIq&)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*r   Fserver_sidec                    t          j                    }|                    ||           |                    ||          S )N)certfilekeyfiler   )r   r   load_cert_chainr   )r   r7   r   r   r   contexts         r   _wrap_socketzTestSSL._wrap_socketC  sA    .""7CCC""4["AAAr   c           	         t                      5 } |t          d                    }|                                d         } |t          j                              }|                     ||          }|                    |           |                    |          }|j                                          || 	                    |t          t          d                    }|                                }|                     ||           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S Nr<   re   T)r   r   r   )rY   r   r1   rH   r   rp   rE   r   setr   CERTFILEr"   r?   rM   rF   )r   r[   rs   rl   rk   r   rt   r"   s           r   ru   zTestSSL.test_server_simpleH  s   YY 	6&vl155566H''))!,Dv}//I++It<<A""""MM(33M  """"F!!-H.2 " 4 45 5M #))++F]F333!!!}f555#	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   D)EE	E	c           	      L   t                      5 } |t          d                    }|                                d         } |t          j                              }|                     ||          }|                    |           |                    |          }|j                                          || 	                    |t          t          d                    }|                                }|                     ||           |                                }|                     ||           |                                 |                     ||           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S r   )rY   r   r1   rH   r   rp   rE   r   r   r   r   r"   r?   r^   rM   rF   	r   r[   rs   rl   rk   r   rt   r"   r`   s	            r   ry   zTestSSL.test_server_makefile1\  s   YY 	6&vl155566H''))!,Dv}//I++It<<A""""MM(33M  """"F!!-H.2 " 4 45 5M #))++F]F333&&((A]F333!!!]F333GGIII}f555+	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6   E=FF Fc           	      L   t                      5 } |t          d                    }|                                d         } |t          j                              }|                     ||          }|                    |           |j                                         |                    |          } || 	                    |t          t          d                    }|                                }|                     ||           |                                }|                     ||           |                                 |                     ||           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S r   )rY   r   r1   rH   r   rp   r   r   rE   r   r   r"   r?   r^   rM   rF   r   s	            r   r|   zTestSSL.test_server_makefile2t  s   YY 	6&vl155566H''))!,Dv}//I++It<<A"""  """"MM(33M"F!!-H.2 " 4 45 5M #))++F]F333&&((A]F333GGIII]F333!!!}f555-	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6r   c                    t          d          }|                                }|                                d         }|                     |t          t                    }t          j                    }|                     ||          }|                                 t          ||||          5 }|j	        
                                 |                                }|                     ||           |                                }|                     ||           |                                 |                     ||           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S )Nr<   re   r   r   )r   r"   r1   r   r   rH   r   start
CleaningUpr   r   r?   r^   rM   rF   )	r   raw_listenerr"   rl   rs   rk   r   rt   r`   s	            r   test_serverssl_makefile1z TestSSL.test_serverssl_makefile1  s   #A...$$&&''))!,$$\8h$WWMOO	''	488				8\9== 		6  """"))++F]F333&&((A]F333!!!]F333GGIII}f555		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6 		6s   0CE??FFc                 \  	
 t          d          }|                                d         	|                     |t          t                    }t	          j                    t	          j                    
t          j                    f	
fd	}t	          j        |          }d|_        |	                                 d }t          |||          5 }                                 |                                }|                     ||           |                                }|                     ||           |                     |                                d           
                                 |                     |                                d           |                                 t$          rt&          rt&          j        f| _        |                     ||           |                                 |                     ||           d d d            d S # 1 swxY w Y   d S )	Nr<   re   r   c                    	 |                      t          f           t          j                                        |           }                                 |                    d           |                    t          j	                                                    |
                                 | 
                                 d S # | 
                                 w xY w)Ns   test_serverssl_makefile2)ri   r   r   r   r   r   sendallshutdownrH   	SHUT_RDWRrM   )rk   rN   r   rl   
read_events     r   ri   z1TestSSL.test_serverssl_makefile2.<locals>.connect  s    	"!!?D"9:::N$$00;;##%%%		5666

6+,,,!!!			!!!!!	!!!!s   B2C C!rn   Ttest_serverssl_makefile2 )r   r1   r   r   rq   r   rH   rr   r   r   r   r   r"   r?   r^   rD   readrM   r   r4   CONN_CLOSE_WAITr   rF   )r   r   rs   ri   r   rt   r"   r`   r   rl   r   s           @@@r   r   z TestSSL.test_serverssl_makefile2  sJ   #A...''))!,$$\8h$WW"**_&&
$moo 
	" 
	" 
	" 
	" 
	" 
	" 
	" 
	" G,,,				8\22 	6m   "))++F]F333&&((A]F333QVVXX'ABBB NNQVVXXr***GGIII Kv K282H1J.]F333!!!}f555-	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   EH!!H%(H%N)rP   rQ   rR   r   r   r\   ra   rc   r   ru   ry   r|   r   r   r   r   r   r~   r~      s          &  * * ** * ** * *  DI B B B B B
6 6 6(6 6 606 6 626 6 6*-6 -6 -6 -6 -6r   r~   c                   R    e Zd Zd Zd Zd Zer	erd Zd Z	nd Z	d ZeZ
d Zd	 Zd
S )rY   c                 V    g | _         |D ]}|                     |           d | _        d S r!   )_objectsclosingtask)r   initis      r   __init__zClosing.__init__  s4     	 	ALLOOOO			r   c                 Z    |                                 \  }}|                     |          S r!   )rE   r   )r   rs   rt   _addrs       r   rE   zClosing.accept  s(    '00u||M***r   c                 d    |                                  }t          |          dk    r|d         S | S )Nr<   r   )objectslenr   os     r   	__enter__zClosing.__enter__  s,    LLNNq66Q;;Q4Kr   c                 ^    | j                             t          j        |                     |S r!   )r   appendweakrefrefr   s     r   r   zClosing.closing  s%    M  Q000Hr   c                 $    d | j         D             S )Nc                 6    g | ]} |             |            S r!   r   ).0rs     r   
<listcomp>z#Closing.objects.<locals>.<listcomp>  s%    BBBA!!##/AACC///r   )r   r   s    r   r   zClosing.objects  s    BBBBBBr   c                 D    t          t          | j                            S r!   )listreversedr   r   s    r   r   zClosing.objects  s    //000r   c                 :    | j                             |           |S r!   )r   r   r   s     r   r   zClosing.closing  s    M  ###Hr   c                 b    | j         J || _         | j                                          | j         S r!   )r   r   )r   threads     r   rp   zClosing.running_task  s1    y   		yr   c                 n   	 | j         | j                                          d | _         |                                 D ]'}	 |                                 # t          $ r Y $w xY wnH# d | _         |                                 D ]'}	 |                                 # t          $ r Y $w xY ww xY wd| _        d S r   )r   joinr   rM   	Exceptionr   )r   r   vtbr   s        r   __exit__zClosing.__exit__  s     		y$	   DI\\^^  GGIIII    D DI\\^^  GGIIII    D sA    A&  A
A"!A"&B+BB+
B'	$B+&B'	'B+N)rP   rQ   rR   r   rE   r   PY2CPYTHONr   r   __call__rp   r   r   r   r   rY   rY     s          + + +    w 	 	 		C 	C 	C 	C	1 	1 	1	 	 	 H      r   rY   c                   *     e Zd Z fdZd Zd Z xZS )r   c                 f     t          t          |           j        |g|R   || _        || _        d S r!   )r   r   r   r   rs   )r   r   rs   other_socketsr   s       r   r   zCleaningUp.__init__  s:    (j$(BMBBBB	 r   c                 6    |                      | j                  S r!   )rE   rs   r   s    r   r   zCleaningUp.__enter__"  s    {{4=)))r   c                 h    	 t                               | |||           d | _        d S # d | _        w xY wr!   )rY   r   rs   )r   r   r   r   s       r   r   zCleaningUp.__exit__%  s?    	!T1a,,, DMMMDDM    s   ( 	1)rP   rQ   rR   r   r   r   rT   rU   s   @r   r   r     sV        ! ! ! ! !
* * *! ! ! ! ! ! !r   r   __main__)/
__future__r   osgeventr   	patch_allrH   r   rq   r   r   gevent.testingtestingrJ   gevent.testing.paramsr   r   gevent.testing.socketsr   pathdirnameabspath__file__r   r   getpidpidrC   rS   r   r   intr(   r   r   r4   ImportErrorTestCaser
   skipOnAppVeyorrW   r~   objectrY   r   rP   mainr   r   r   <module>r      s   % % % % % % 				      +6+---  



       # " " " " " 9 9 9 9 9 9 1 1 1 1 1 1 / / / / / /
'//"'//(33
4
47<<!233bikkm~(
gm ) ) ) ) ) )MMMM   FFFc c c c c9 c c cL LMMl6 l6 l6 l6 l6 l6 l6 NMl6^ LMMS6 S6 S6 S6 S6d S6 S6 NMS6lG G G G Gf G G GR! ! ! ! ! ! ! !$ zIN s   C CC