
    <|hJ                        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&                  j)                  ej&                  j+                  e            Zej&                  j/                  ed      Z ej2                         Zej6                  Zej8                  Ze Ze ZeZ ejB                  Z!d dlm"Z" 	 d dl#Z# G d	 d
ejJ                        Z& ejN                  d       G d de&             Z( ejN                  d       G d de&             Z) G d de*      Z+ G d de+      Z,e-dk(  r ej\                          yy# e$$ r dZ#Y w xY w)    )print_functionN)monkey)DEFAULT_BIND_ADDR_TUPLE)DEFAULT_CONNECT)tcp_listenerz2_7_keycert.pem)get_open_filesc                   t     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                 8    d| _         t        t        |           y Nr   )extra_allowed_open_statessuperr
   tearDown)self	__class__s    ^/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/test__makefile_ref.pyr   zTest.tearDown)   s    )+&dD"$    c                     	  |       }t        d|d|      # t         $ rH}|j                  d   t        j                  k(  rY d }~y t        r|j                  d   dk(  rY d }~y  d }~ww xY w)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-   sa    	VF T6RSS  	wwqzU[[(rwwqzU*	s     	A+ A&A&%A&&A+c                      y Nr   )r   filenos     r   __assert_fd_openzTest.__assert_fd_open:   s     r   c                 j    t        |t              sJ t               }||vrt        |d|d         y )N is not open:
data)
isinstancefd_typesr   r   r   r"   
open_filess      r   r#   zTest.__assert_fd_openD   s=    fh///')JZ'$fjQWFX%YZZ (r   c                     t        |t              sJ t        |             |dkD  sJ |       t        d      }||v rt	        |d|d         y )Nr   F)count_closing_as_openz is not closed:
r&   )r'   r(   reprr   r   r)   s      r   assert_fd_closedzTest.assert_fd_closedJ   sZ    &(+9T&\9+z!6!z $%@
Z FJvDV!WXX  r   c                 (   t               }|j                         }|d   D ]^  }t        |dd       |k(  s|j                  t        j
                  t        j                  f| j                  z   v sJ |j                          y  t        |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xxF$6$68O8O#PSWSqSq#qq{sts{s{{q	 dJv<NOPPr   c                 n   t        |t              r| j                  |       nw|j                         }t        |t              sJ |       |j	                         }t        |t
              sJ |       t        s| j                  |       n| j                  |       |r | j                  |d   g|dd    y y )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/'')Hh.88.%%f-&&t,DT!W0tABx0 r   c                 p   t        |t              r| j                  |       nxt        r!| j	                  |j                         d       n| j                  |j
                         | j                  |j                         | j                  |j                         |r | j                  |d   g|dd    y y )Nr   r<   )
r'   r(   r.   PY3assertEqualr"   r   r1   acceptassert_closed)r   r7   r@   s      r   rF   zTest.assert_closedl   s    dH%!!$'   3((5$$T%5%56$$T[[1DtAw2ab2 r   c                    t        j                          }	 |j                  t               t        st        j
                  r|j                  d       | j                  ||j                                |S #  |j                          d } xY w)Nr<   )
socketbindr   r   	greentestLINUXlistenr?   r"   close)r   ss     r   make_open_socketzTest.make_open_socket{   sj    MMO
	FF*+ioo Q
+
 		GGIAs   AA4 4B	)__name__
__module____qualname__r   r   r   r   PYPYrJ   rK   r=   r.   r:   r?   rF   rO   __classcell__r   s   @r   r
   r
   %   sG     "%
T t			[YQ13r   r
   z0This sometimes times out for no apparent reason.c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)
TestSocketc                     t               5 } || j                               }|j                         }|j                          d d d        | j	                         y # 1 sw Y   xY wr!   )ClosingrO   r"   rM   rF   r   closerrN   r"   s       r   test_simple_closezTestSocket.test_simple_close   sW    Y 	&t,,./AXXZFGGI	 	1f%		 	s   7AA&c                    t               5 } || j                               }|j                         } ||j                               }| j	                  ||       |j                          t        r| j	                  ||       n"| j                  |       | j	                  |       |j                          | j                  |       | j                  |       d d d        y # 1 sw Y   y xY wr!   )rY   rO   r"   makefiler?   rM   rC   rF   r   r[   rN   r"   fs        r   test_makefile1zTestSocket.test_makefile1   s    Y 	'&t,,./AXXZFqzz|$AQ' GGI  F+""1%  (GGIq!v&!	' 	' 	's   CC  C)c                    t               5 } || j                               }|j                         }| j                  ||        ||j	                               }| j                  |       | j                  ||       |j                          | j                  ||       |j                          | j                  ||       d d d        y # 1 sw Y   y xY wr!   )rY   rO   r"   r?   r^   rM   rF   r_   s        r   test_makefile2zTestSocket.test_makefile2   s    Y 	*&t,,./AXXZFQ'qzz|$AQQ'GGIQ'GGIq&)	* 	* 	*s   B6C

Cc                    t               5 } |t        d            }|j                         d    |t        j                               fd}|j	                  t        j                  |             |j                  |      }|j                         }| j                  ||       |j                          | j                  |       d d d        y # 1 sw Y   y xY w)Nr<   backlogc                  4     j                  t        f       y 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   s    Y 	.&l156H'')!,Dv}}/I; 	 0 0 @A"MM(3M"))+F]F3!}-	. 	. 	.s   B?CCc                    t               5 } |t        d            }|j                         d    |t        j                               fd}|j	                  t        j                  |             |j                  |      }|j                         } ||j                               }| j                  ||       |j                          t        r| j                  ||       n"| j                  |       | j                  |       |j                          | j                  ||       d d d        y # 1 sw Y   y xY w)Nr<   re   c                  4     j                  t        f       y 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   Y 	6&l156H'')!,Dv}}/I; 	 0 0 @A #MM(3M"))+F}--/0A]F3!   7""=1  (GGI}f53	6 	6 	6s   D!D77E c                 4   t               5 } |t        d            }|j                         d    |t        j                               fd}|j	                  t        j                  |             |j                  |      }|j                         } ||j                               }| j                  ||       |j                          | j                  ||       |j                          | j                  ||       d d d        y # 1 sw Y   y xY w)Nr<   re   c                  4     j                  t        f       y 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    Y 	6&l156H'')!,Dv}}/I; 	 0 0 @A"MM(3M"))+F}--/0A]F3GGI]F3!}f5'	6 	6 	6s   C8DDN)	rP   rQ   rR   r\   ra   rc   ru   ry   r|   r   r   r   rW   rW      s     &'&*.$686r   rW   c                   T    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y)TestSSLc                     |j                  t        |f       	 t        j                         j	                  |      }|j                          |j                          y # t        j                  $ r Y y 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   sf    ?D12	  ,,Y7A ! GGI || 	
 	s   3A A32A3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  sE    "*D$:$:#,dN"CE)r   c                 h   t               5 } || j                               }|j                         } |t        j                         j                  |            }|j                         }| j                  ||       |j                          | j                  ||       d d d        y # 1 sw Y   y xY wr!   )	rY   rO   r"   r   r   r   r?   rM   rF   rZ   s       r   r\   zTestSSL.test_simple_close  s    Y 	*&t,,./AXXZFs~~'33A67AXXZFQ'GGIq&)	* 	* 	*s   BB((B1c                    t               5 } || j                               } |t        j                         j	                  |            }|j                         }| j                  ||        ||j                               }| j                  ||       |j                          | j                  ||       |j                          |j                          | j                  ||       d d d        y # 1 sw Y   y xY wr!   )
rY   rO   r   r   r   r"   r?   r^   rM   rF   )r   r[   raw_srN   r"   r`   s         r   ra   zTestSSL.test_makefile1#  s    Y 	*&40023Es~~'33E:;AXXZFQ'qzz|$AQ'GGIQ'GGIKKMq&)	* 	* 	*   CC22C;c                    t               5 } || j                               }|j                         } |t        j                         j                  |            }|j                         }| j                  ||        ||j                               }| j                  ||       |j                          | j                  ||       |j                          | j                  ||       d d d        y # 1 sw Y   y xY wr!   )
rY   rO   r"   r   r   r   r?   r^   rM   rF   r_   s        r   rc   zTestSSL.test_makefile22  s    Y 	*&t,,./AXXZFs~~'33A67AXXZFQ'qzz|$AQ'GGIQ'GGIq&)	* 	* 	*r   Fserver_sidec                v    t        j                         }|j                  ||       |j                  ||      S )N)certfilekeyfiler   )r   r   load_cert_chainr   )r   r7   r   r   r   contexts         r   _wrap_socketzTestSSL._wrap_socketB  s7    .."7C""4["AAr   c           	      *   t               5 } |t        d            }|j                         d   } |t        j                               }| j	                  ||      }|j                  |       |j                  |      }|j                  j                           || j                  |t        t        d            }|j                         }| j                  ||       |j                          | j                  ||       d d d        y # 1 sw Y   y xY w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_simpleG  s    Y 	6&l156H'')!,Dv}}/I++It<A""MM(3M  ""!!-H.2 " 45M #))+F]F3!}f5#	6 	6 	6s   C5D		Dc           	         t               5 } |t        d            }|j                         d   } |t        j                               }| j	                  ||      }|j                  |       |j                  |      }|j                  j                           || j                  |t        t        d            }|j                         }| j                  ||       |j                         }| j                  ||       |j                          | j                  ||       |j                          | j                  ||       d d d        y # 1 sw Y   y xY w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)   Y 	6&l156H'')!,Dv}}/I++It<A""MM(3M  ""!!-H.2 " 45M #))+F]F3&&(A]F3!]F3GGI}f5+	6 	6 	6   D9EEc           	         t               5 } |t        d            }|j                         d   } |t        j                               }| j	                  ||      }|j                  |       |j                  j                          |j                  |      } || j                  |t        t        d            }|j                         }| j                  ||       |j                         }| j                  ||       |j                          | j                  ||       |j                          | j                  ||       d d d        y # 1 sw Y   y xY w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_makefile2s  s)   Y 	6&l156H'')!,Dv}}/I++It<A"  ""MM(3M"!!-H.2 " 45M #))+F]F3&&(A]F3GGI]F3!}f5-	6 	6 	6r   c                    t        d      }|j                         }|j                         d   }| j                  |t        t              }t        j
                         }| j                  ||      }|j                          t        ||||      5 }|j                  j                          |j                         }| j                  ||       |j                         }| j                  ||       |j                          | j                  ||       |j                          | j                  ||       d d d        y # 1 sw Y   y xY w)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MMO	''	48		8\9= 		6  ""))+F]F3&&(A]F3!]F3GGI}f5		6 		6 		6s   B#D<<Ec                 p  	 t        d      }|j                         d   	| j                  |t        t              }t	        j
                         t        j                         f	fd	}t	        j                  |      }d|_        |j                          d }t        |||      5 }j                          |j                         }| j                  ||       |j                         }| j                  ||       | j                  |j!                         d       | j                  |j!                         d       |j#                          t$        rt&        rt&        j(                  f| _        | j                  ||       |j#                          | j-                  ||       d d d        y # 1 sw Y   y xY w)	Nr<   re   r   c                 f   	 | j                  t        f       t        j                         j	                  |       }j                          |j                  d       |j                  t        j                         |j                          | j                          y # | j                          w xY w)Ns   test_serverssl_makefile2)ri   r   r   r   r   r   sendallshutdownrH   	SHUT_RDWRrM   )rk   rN   r   rl   s     r   ri   z1TestSSL.test_serverssl_makefile2.<locals>.connect  s{    "!!?D"9:NN$00;##%		56

6++,	!	!s   B
B B0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   s
           @@r   r   z TestSSL.test_serverssl_makefile2  s[   #A.'')!,$$\8h$W"*$mmo 		" G,		8\2 	6m "))+F]F3&&(A]F3QVVX'ABQVVXr*GGIv282H2H1J.]F3!}f5!	6 	6 	6s   (C;F,,F5N)rP   rQ   rR   r   r   r\   ra   rc   r   ru   ry   r|   r   r   r   r   r   r~   r~      sA    &***  DI B
6(60626*%6r   r~   c                   P    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y
)rY   c                 P    g | _         |D ]  }| j                  |        d | _        y r!   )_objectsclosingtask)r   initis      r   __init__zClosing.__init__  s*     	ALLO		r   c                 J    |j                         \  }}| j                  |      S r!   )rE   r   )r   rs   rt   _addrs       r   rE   zClosing.accept  s"    '0u||M**r   c                 L    | j                         }t        |      dk(  r|d   S | S )Nr<   r   )objectslenr   os     r   	__enter__zClosing.__enter__  s&    LLNq6Q;Q4Kr   c                 b    | j                   j                  t        j                  |             |S r!   )r   appendweakrefrefr   s     r   r   zClosing.closing  s!    MM  Q0Hr   c                 Z    | j                   D cg c]  } |        |        c}S c c}w r!   )r   )r   rs     r   r   zClosing.objects  s"    !%BA!#/ACBBBs   (	(c                 >    t        t        | j                              S r!   )listreversedr   r   s    r   r   zClosing.objects  s    /00r   c                 <    | j                   j                  |       |S r!   )r   r   r   s     r   r   zClosing.closing  s    MM  #Hr   c                 x    | j                   J || _         | j                   j                          | j                   S r!   )r   r   )r   threads     r   rp   zClosing.running_task  s1    yy   			yyr   c                 Z   	 | j                   | j                   j                          d | _         | j                         D ]  }	 |j                           d| _        y # t        $ r Y )w xY w# d | _         | j                         D ]"  }	 |j                          # t        $ r Y  w xY w w xY wr   )r   joinr   rM   	Exceptionr   )r   r   vtbr   s        r   __exit__zClosing.__exit__  s     		yy$		 DI\\^ GGI  ! 	 DI\\^ GGI  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	1	 Hr   rY   c                   *     e Zd Z fdZd Zd Z xZS )r   c                 J    t        t        | 
  |g|  || _        || _        y r!   )r   r   r   r   rs   )r   r   rs   other_socketsr   s       r   r   zCleaningUp.__init__  s%    j$(BMB	 r   c                 8    | j                  | j                        S r!   )rE   rs   r   s    r   r   zCleaningUp.__enter__  s    {{4==))r   c                 \    	 t         j                  | |||       d | _        y # d | _        w xY wr!   )rY   r   rs   )r   r   r   r   s       r   r   zCleaningUp.__exit__  s*    	!T1a, DMDDMs   " 	+)rP   rQ   rR   r   r   r   rT   rU   s   @r   r   r     s    !
*!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      sq   % 	 +6++-  
    # 9 1 /
''//"''//(3
477<<!23biikmm~~(
gmm )c9 cL LMl6 l6 Nl6^ LMJ6d J6 NJ6ZGf GR! !$ zINN K  Fs   "E) )E32E3