o
    tPf[                     @   s  d dl mZ d dl mZ d dlmZ e  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Zd dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ eZ G dd de!Z"G dd de"Z#e$dsG dd de"eZ%e%Zne#ZG dd dej&Z'G dd dej&Z(G dd dej&Z)G dd dej&Z*e+dkre,  dS dS )     )print_function)absolute_import)monkeyN)wraps)reraise)six)LARGE_TIMEOUT)support)paramstcp_listener)skipWithoutExternalNetwork)skipOnMacOnCI)Thread)Eventc                   @      e Zd ZdZdd ZdS )
BaseThreadNc                    s    t  fdd}| _d S )Nc                     s$   z| i |W S    t   _ N)sysexc_infoterminal_exc)argskwargsselftarget Z/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__socket.pyerrors_are_fatal+   s
   
z-BaseThread.__init__.<locals>.errors_are_fatal)r   r   )r   r   r   r   r   r   __init__*   s   
zBaseThread.__init__)__name__
__module____qualname__r   r   r   r   r   r   r   '       r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
GreenletThreadNr   c                 C   s&   t | | tj| jg|R  | _d S r   )r   r   geventspawnr   glet)r   r   r   r   r   r   r   6   s   zGreenletThread.__init__c                 O   s   | j j|i |S r   )r'   join)r   r   r   r   r   r   r(   :   s   zGreenletThread.joinc                 C   s   | j   S r   )r'   readyr   r   r   r   is_alive=   s   zGreenletThread.is_alive)Nr   )r    r!   r"   r   r(   r+   r   r   r   r   r$   4   s    
r$   	threadingc                   @      e Zd Zdd ZdS )ThreadThreadc                 K   s:   | d}t| | tj| fd| ji| |   d S )Nr   )popr   r   _Threadr   start)r   r   r   r   r   r   r   B   s   
zThreadThread.__init__N)r    r!   r"   r   r   r   r   r   r.   A       r.   c                       sH  e Zd ZdZejZddd edD Z	e
e	ese	dZ	 fddZd	d
 Z		d<ddZd=ddZdd Zejr@dd Zeddd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#Zd$d% Ze d&d'd( Z!d)d* Z"d+d, Z#d-d. Z$d/d0 Z%e&d1d2d3 Z'e&d1d4d5 Z(d6d7 Z)e*+e,ed8d9d:d; Z-  Z.S )>TestTCPNz, c                 C   s   g | ]}t |qS r   )str).0xr   r   r   
<listcomp>N   s    zTestTCP.<listcomp>i N  asciic                    s   t t|   dtjv r;g zddlm W n ty%   ddlm Y nw fdd | j fdd}|| _nd	d   | _	| | 
 | _| j d
 | _d S )Nz-vr   )perf_counter)timec                     s.   s
t   d t d   g| R   d S )N   z
	 -> %0.6f)printappend)r   )nowprintedr   r   logZ   s   
zTestTCP.setUp.<locals>.logc                    s&    d|  | f fdd	}| | S )NzRegistering for teardownc                    s    d|  |    d } d S )NzClosing on teardown)close)o)r@   r   r   cc   s   
z%TestTCP.setUp.<locals>.cot.<locals>.cr   )rB   rC   )r@   orig_cotr   r   cota   s   
zTestTCP.setUp.<locals>.cotc                  W   s   dS )zDoes nothingNr   )_argsr   r   r   r@   l   s    r;   )superr3   setUpr   argvr:   r9   ImportError_close_on_teardownr@   _setup_listenerlistenergetsocknameport)r   rE   	__class__)r@   r>   rD   r?   r   rH   R   s    
zTestTCP.setUpc                 C   s   t  S r   r   r*   r   r   r   rL         zTestTCP._setup_listenerc                 C   sP   |  t }||ptj|p| jf |d ur|| |d ur&|| |S r   )rK   socketconnectr
   DEFAULT_CONNECTrO   
settimeoutsetblocking)r   hostrO   timeoutblockingsockr   r   r   create_connection   s   

zTestTCP.create_connectionsendallc           	         s  j d| g t   fdd}t|d}zd jdi |}   d|dt| zCt|||}d| W d	 t|d
r^z| }W n t	t
fy]   Y nw z|tj W n	 t
yo   Y nw d |  n6d	 t|d
rz| }W n t	t
fy   Y nw z|tj W n	 t
y   Y nw d |  w W |d | rJ n|d | rJ w |jrt|j  |d u r׈j}d d|d}d |d  tt| | d S )Nztest_sendall using methodc                     s   dj  j  \} }z@| jdd)}d| d|    d |  d|dtd	  W d    n1 s@w   Y  ~W |   ~ d S |   ~ w )
Nz
	acceptingrbmodez#	accepted on server; client conn iszfile isz	readingz	done readingz	got bytesr   )rM   acceptmakefilesetr=   readlenrA   )conn_raccepted_eventr@   	read_datar   r   r   accept_and_read   s   z.TestTCP._test_sendall.<locals>.accept_and_readr   zcreating client connectionz%Client got accepted event from serverz; sending dataz$Client sent data: result from methodzClient will unwrap and shutdownunwrapzClient will close
   r      ,r   )r@   r   r   r\   waitre   getattrhasattrrn   
ValueErrorOSErrorshutdownrS   	SHUT_RDWRrA   r(   r+   r   r   	long_datasplitassertEqual)	r   data
match_dataclient_methodclient_argsrl   serverclientr6   r   ri   r   _test_sendall   sn   










zTestTCP._test_sendallc                 C   s   |  | j d S r   )r   rx   r*   r   r   r   test_sendall_str   s   zTestTCP.test_sendall_strc                 C   s   |  t| j d S r   )r   r   	text_typerx   r*   r   r   r   test_sendall_unicode   s   zTestTCP.test_sendall_unicodez3Sometimes fails for no apparent reason (buffering?)c                 C   s   t  d| j}| | d S )NB)arrayrx   r   r   r{   r   r   r   test_sendall_array   s   zTestTCP.test_sendall_arrayc                 C   s   d}|  || d S )N    r   r   r   r   r   test_sendall_empty   s   zTestTCP.test_sendall_emptyc                 C      d}| j ||dd d S )Nr   ro   rY   r   r   r   r   r   test_sendall_empty_with_timeout      z'TestTCP.test_sendall_empty_with_timeoutc                 C   r   )Ns   hi
F)rZ   r   r   r   r   r   test_sendall_nonblocking  s   z TestTCP.test_sendall_nonblockingc                 C   r   )Nr   send)r}   r   r   r   r   r   test_empty_send
  r   zTestTCP.test_empty_sendc                    s   d  fdd}t |d} }| }t |j fd}td |d td |  |  |	  |	  d S )Ni c                     s\   j  \} }|  t| jd  fd}z| d}|d W |  d S |  w )N   tr   r   i     hello world)rM   ra   rK   r   r]   recvrz   r(   )remote_clientrg   senderresultNr   r   r   r     s   

z'TestTCP.test_fullduplex.<locals>.serverrm   r   皙?r   )
r   r\   rK   rb   rd   r:   sleepr]   rA   r(   )r   r   server_threadr   client_fileclient_readerr   r   r   test_fullduplex  s   



zTestTCP.test_fullduplexc                    s    fdd}t |d}  }z8|d t }  j |d W d    n1 s/w   Y  t | } |dd W |  d S |  w )Nc                     s    j  \} } |  d S r   )rM   ra   rK   rf   rg   r*   r   r   ra   1  s   z)TestTCP.test_recv_timeout.<locals>.acceptrm   r;   i   g?g?)	r   r\   rV   r:   assertRaisesTIMEOUT_ERRORr   assertTimeWithinRanger(   )r   ra   acceptorr   r1   tookr   r*   r   test_recv_timeout0  s   

zTestTCP.test_recv_timeoutTs   helloi z2On Windows send() accepts whatever is thrown at itc                    s  g  t  fddd} }td  sJ |d t }zRj |j W d    n1 s:w   Y  j	rbt | }
|dd W |  |   d d   d S W |  |   d d   d S |  |   d d   w )Nc                      s     j S r   )r=   rM   ra   r   client_sockr   r   r   <lambda>R  s    z.TestTCP.test_sendall_timeout.<locals>.<lambda>rm   r   g
ףp=
?gzG?r   )r   r\   r:   r   rV   r   r   r]   _test_sendall_data _test_sendall_timeout_check_timer   r(   rA   )r   r   r   r1   r   r   r   r   test_sendall_timeoutO  s0   

zTestTCP.test_sendall_timeoutc                    sx    fdd}t |d}z+  }|jdd}|  | } |d  | d |  W |  d S |  w )Nc                     s@    j  \} }| jdd}|d |  |  |   d S Nwbr_      hello
)rM   ra   rb   writeflushrA   rf   rg   fdr*   r   r   accept_onced  s   
z*TestTCP.test_makefile.<locals>.accept_oncerm   r^   r_   r   r   )r   r\   rb   rA   readlinerz   rd   r(   )r   r   r   r   r   liner   r*   r   test_makefilec  s   

zTestTCP.test_makefilec                    sn    fdd}t |d}z&  }|d |jdd}  j|j |  |  W |  d S |  w )Nc                     s2    j  \} }ztd W |   d S |   w )Ng333333?)rM   ra   r:   r   rA   r   r*   r   r   r   {  s   z2TestTCP.test_makefile_timeout.<locals>.accept_oncerm   r   r^   r_   )	r   r\   rV   rb   r   r   r   rA   r(   )r   r   r   r   r   r   r*   r   test_makefile_timeouty  s   


zTestTCP.test_makefile_timeoutc                 C   s   t  t jt jd}| |jt j | |jt j | d|j tt dr\|	d | |jt j |
d tddt jt jd}z|
d | |j|j W |  n|  w |  d S )Nr   SOCK_NONBLOCKr;   rS   )rS   AF_INET
SOCK_DGRAMassertIsfamilyrz   typeprotors   rV   rW   r   get_originalrA   )r   s
std_socketr   r   r   test_attributes  s   



zTestTCP.test_attributesc                 C   sT   t  t jt j}z|d |tjt f}| 	|t
 W |  d S |  w )NF)rS   r   SOCK_STREAMrW   
connect_ex	greentestDEFAULT_LOCAL_HOST_ADDRr	   find_unused_portassertIsInstanceerrno_typesrA   )r   r   retr   r   r   *test_connect_ex_nonblocking_bad_connection  s   
z2TestTCP.test_connect_ex_nonblocking_bad_connectionTries to resolve hostnamec                 C   sv   t  t jt j}z-| t j |dt f W d    n1 s#w   Y  W |  d S W |  d S |  w Nzfoo.bar.fizzbuzz)	rS   r   r   r   gaierrorr   r	   r   rA   r   r   r   r   r   test_connect_ex_gaierror  s   z TestTCP.test_connect_ex_gaierrorc                    s    fdd}t  t jt j} t d |_W d    n1 s!w   Y  |  G dd dt j }|t jt j}|| d S )Nc                    sf   z-  tj | dt f W d    n1 sw   Y  W |   d S W |   d S |   w r   )r   rS   r   r   r	   r   rA   )r[   r*   r   r   do_it  s   z7TestTCP.test_connect_ex_not_call_connect.<locals>.do_itc                   @   r-   )z3TestTCP.test_connect_ex_not_call_connect.<locals>.Sc                 W   s   t d)NzShould not be called)AssertionError)r   r   r   r   r   rT        z;TestTCP.test_connect_ex_not_call_connect.<locals>.S.connectN)r    r!   r"   rT   r   r   r   r   S  r2   r   )rS   r   r   r   AttributeErrorrT   rA   )r   r   r   r   r   r*   r    test_connect_ex_not_call_connect  s   z(TestTCP.test_connect_ex_not_call_connectc                 C   s|   t  t jt j}z0|d | t |tjdf W d    n1 s&w   Y  W |	  d S W |	  d S |	  w )NFi  )
rS   r   r   rW   r   OverflowErrorr   r   r   rA   r   r   r   r   $test_connect_ex_nonblocking_overflow  s   
z,TestTCP.test_connect_ex_nonblocking_overflowSOCK_CLOEXECzRequires SOCK_CLOEXECc                    s   t j}t  t jt j|B } fdd}t|d}z&|tj jf |j	dd} 
| d |  |  W |  d S |  w )Nc                     s8    j  \} }| jdd}|d |  |   d S r   )rM   ra   rb   r   rA   r   r*   r   r   r     s
   
zATestTCP.test_connect_with_type_flags_ignored.<locals>.accept_oncerm   r^   r_   r   )rS   r   r   r   r   rT   r
   rU   rO   rb   rz   r   rA   r(   )r   r   r   r   r   r   r   r*   r   $test_connect_with_type_flags_ignored  s   

z,TestTCP.test_connect_with_type_flags_ignored)NNNN)Nr]   )/r    r!   r"   __timeout__rS   rY   r   r(   rangerx   
isinstancebytesencoderH   rL   r\   r   r   r   PY2r   r   r   r   r   r   r   r   r   r   r   r   skipOnWindowsr   r   r   r   r   r   r   r   r   unittest
skipUnlessrs   r   __classcell__r   r   rP   r   r3   K   sP    

/


_
!


	

r3   c                   @   s6   e Zd ZeZdd Zdd Zeje	ddd Z
dS )	TestCreateConnectionc                 K   sX   t  }| tjd tjtj|ffddi| W d    d S 1 s%w   Y  d S )Nz5refused|not known|already in use|assign|not availablerY      )r	   r   assertRaisesRegexrS   errorr\   r   DEFAULT_BIND_ADDR)r   	conn_argsconnect_portr   r   r   test_refuses  s   "z!TestCreateConnection.test_refusesc                 C   s   t  }| jd|fd d S )N )source_address)r	   r   r   )r   source_portr   r   r   test_refuses_from_port  s   z+TestCreateConnection.test_refuses_from_portr   c                    s   G dd dt  G  fdddtdd }dd lm} | |jtj |j}|j}z>|_||_|   td W d    n1 sGw   Y  | d	tj	 | 
j	d j W d
_	||_||_d S d
_	||_||_w )Nc                   @   s   e Zd ZdS )z3TestCreateConnection.test_base_exception.<locals>.EN)r    r!   r"   r   r   r   r   E  s    r   c                       s4   e Zd ZdZdZfddZ fddZdd Zd	S )
z<TestCreateConnection.test_base_exception.<locals>.MockSocketr   Fc                    s     j | f7  _ d S r   )createdr   rg   )
MockSocketr   r   r   $  s   zETestCreateConnection.test_base_exception.<locals>.MockSocket.__init__c                    s    |r   r   r   )r   r   r   rT   '  r   zDTestCreateConnection.test_base_exception.<locals>.MockSocket.connectc                 S   s
   d| _ d S )NT)closedr*   r   r   r   rA   *  s   
zBTestCreateConnection.test_base_exception.<locals>.MockSocket.closeN)r    r!   r"   r   r   r   rT   rA   r   r   r   r   r   r     s    r   c                  W   s   dgS )N)r;         r      r   )rg   r   r   r   mockgetaddrinfo-  rR   zATestCreateConnection.test_base_exception.<locals>.mockgetaddrinfor   )rX   rO   r;   r   )BaseExceptionobjectgevent.socketrS   rz   r\   getaddrinfor   re   r   
assertTruer   )r   r   gsocketorig_socketorig_getaddrinfor   r   r   test_base_exception  s*   
z(TestCreateConnection.test_base_exceptionN)r    r!   r"   r   r   r   r   r   ignores_leakcheckr   r  r   r   r   r   r     s    r   c                   @   s*   e Zd Zejdd Zdd Zdd ZdS )TestFunctionsc                 C   s^   ddl m} G dd dt}| |j |j| dd W d    d S 1 s(w   Y  d S )Nr   )rS   c                   @   r   )z+TestFunctions.test_wait_timeout.<locals>.ioNc                 W   s   t d d S )Nro   )r%   r   )r   rF   r   r   r   r1   O  s   z1TestFunctions.test_wait_timeout.<locals>.io.start)r    r!   r"   callbackr1   r   r   r   r   ioL  r#   r
  g{Gz?r   )r%   rS   r   r   rY   rq   )r   r  r
  r   r   r   test_wait_timeoutG  s
   "zTestFunctions.test_wait_timeoutc                 C   sV   g }t jr|d |d |d tjd d dk r"|d | jd|d d S )	Ngethostbynamegethostbyname_exgethostbyaddrr   )r      r\   rS   )exclude)r   PYPYr=   r   version_info!assertMonkeyPatchedFuncSignatures)r   r  r   r   r   test_signaturesV  s   



zTestFunctions.test_signaturesc                    sd   ddl m   jjs| d t jds| d d}G  fdddt}| | || d S )	Nr   )_socketcommonz
Needs IPv6	inet_ptonzNeeds inet_pton)z2607:f8b0:4000:80e::200eP   r   	   c                       s   e Zd Z jZdS )z6TestFunctions.test_resolve_ipv6_scope_id.<locals>.sockN)r    r!   r"   AF_INET6r   r   SCr   r   r[   r  s    
r[   )	r%   r  
__socket__has_ipv6skipTestrs   r   r   _resolve_addr)r   addrr[   r   r  r   test_resolve_ipv6_scope_idh  s   

z(TestFunctions.test_resolve_ipv6_scope_idN)r    r!   r"   r   r  r  r  r!  r   r   r   r   r  E  s
    
r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
TestSocketc                 C   sN   t   }|  | t j |t j W d    d S 1 s w   Y  d S r   )rS   rA   r   r   rv   rw   r   r   r   r   test_shutdown_when_closedx  s
   "z$TestSocket.test_shutdown_when_closedc                 C   s>   dd l }t }z||}| | W |  d S |  w )Nr   )weakrefrS   refassertIsNotNonerA   )r   r$  r   wr   r   r   test_can_be_weak_ref  s   
zTestSocket.test_can_be_weak_refc                 C   sd   t   }z(| t t|d W d    n1 sw   Y  W |  d S W |  d S |  w )N__dict__)rS   r   r   rr   rA   r   r   r   r   test_has_no_dict  s   zTestSocket.test_has_no_dictN)r    r!   r"   r#  r(  r*  r   r   r   r   r"  v  s    
r"  __main__)-
__future__r   r   r%   r   	patch_allr   r   rS   r:   r   	functoolsr   gevent._compatr   gevent.testingtestingr   r   r   r	   r
   gevent.testing.socketsr   gevent.testing.skippingr   r   r,   r   r0   r   intr   r   r   r$   is_module_patchedr.   TestCaser3   r   r  r"  r    mainr   r   r   r   <module>   sN    
   ,Q1