o
    ÑtPfê  ã                   @   sZ  d Z ddlmZ ddlmZ ddlZejd dkr edƒ eZ	nG dd„ deƒZ	ddlZe	e_dd	l
mZ e ¡  ddlmZ dd
lmZ ddlmZ zddlmZ W n eyb   ddlmZ Y nw ddlmZ ddlZddlZddlZe	e_dZejred9 Zejrˆed9 ZG dd„ deƒZG dd„ deƒZ G dd„ dej!ƒZ"e#dkr«e $¡  dS dS )zjThis test checks that underlying socket instances (gevent.socket.socket._sock)
are not leaked by the hub.
é    )Úprint_function)ÚsocketNé   r   c                   @   s   e Zd ZdZdS )ÚSocketz"Something we can have a weakref toN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r
   r
   ú\/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__refcount.pyr   &   s    r   )Úmonkey)Úsupport)Úparams)Ústart_new_thread)Úsleepgš™™™™™¹?é   c                   @   s0   e Zd ZdZdZdZdd„ Zdd„ Zdd„ ZdS )	ÚServerFNc                 C   sB   || _ t tjtj¡| _zt | jtj¡| _W d S    |  	¡  ‚ ©N)
Úraise_on_timeoutr   ÚAF_INETÚSOCK_STREAMr   Ú	bind_portr   ÚDEFAULT_BIND_ADDRÚserver_portÚclose)Úselfr   r
   r
   r   Ú__init__O   s   zServer.__init__c                 C   ó   | j  ¡  d | _ d S r   ©r   r   ©r   r
   r
   r   r   X   ó   

zServer.closec                 C   s¢   zK| j  t¡ | j  d¡ d| _z	| j  ¡ \}}W n t jy-   | jr%‚ Y W |  ¡  d S w z| 	d¡| _
| d¡ W | ¡  n| ¡  w W |  ¡  d S |  ¡  w )Né   Téd   ó   bye)r   Ú
settimeoutÚSOCKET_TIMEOUTÚlistenÚ	listeningÚacceptÚtimeoutr   r   ÚrecvÚclient_dataÚsend)r   ÚconnÚ_r
   r
   r   Úhandle_request\   s"   õzServer.handle_request)	r   r   r   r'   r+   r   r   r   r/   r
   r
   r
   r   r   I   s    	r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )ÚClientNc                 C   s   t   t jt j¡| _ || _d S r   )r   r   r   r   )r   r   r
   r
   r   r   x   s   
zClient.__init__c                 C   r   r   r   r   r
   r
   r   r   }   r    zClient.closec                 C   sH   z| j  tj| jf¡ | j  d¡ | j  d¡| _W |  ¡  d S |  ¡  w )Nó   hellor"   )	r   Úconnectr   ÚDEFAULT_CONNECTr   r,   r*   Úserver_datar   r   r
   r
   r   Úmake_request   s
   zClient.make_request)r   r   r   r4   r   r   r5   r
   r
   r
   r   r0   t   s
    r0   c                   @   s2   e Zd ZejZdd„ Zdd„ Zdd„ Zdd„ Z	d	S )
ÚTestc                 C   s–   t |d}t |jj¡}d }t|jƒ |rt|jƒ}t|j	ƒ ||fD ]}|d u r*q#|jd ur8t
dƒ |jd us/q#|rI|  |jd¡ |  |jd¡ |S )N)r   g{®Gáz„?r1   r#   )r   ÚweakrefÚrefr   Ú_sockr   r/   r0   r   r5   r   ÚassertEqualr+   r4   )r   Ú
run_clientÚserverÚwref_to_hidden_server_socketÚclientÚobjr
   r
   r   Úrun_interaction   s$   





ÿ€zTest.run_interactionc                 C   sˆ   | j |d}t ¡  |ƒ rBddlm} t|t |ƒ ¡ƒƒ t |ƒ ¡D ]}t||ƒƒ t |¡D ]	}td||ƒƒ q0q#|  d¡ d S d S )N)r;   r   )Úpformatú-z#server socket should be dead by now)	r@   Ú	greentestÚgc_collect_if_neededÚpprintrA   ÚprintÚgcÚget_referrersÚfail)r   r;   r=   rA   ÚxÚyr
   r
   r   Úrun_and_check§   s   ÿùzTest.run_and_checkc                 C   ó   |   d¡ |   d¡ d S )NT©rL   r   r
   r
   r   Útest_clean_exit³   ó   
zTest.test_clean_exitc                 C   rM   )NFrN   r   r
   r
   r   Útest_timeout_exit·   rP   zTest.test_timeout_exitN)
r   r   r   rC   ÚLARGE_TIMEOUTÚ__timeout__r@   rL   rO   rQ   r
   r
   r
   r   r6   Š   s    r6   Ú__main__)%r	   Ú
__future__r   Ú_socketr   Úc_socketÚsysÚversion_infoÚ
__import__r   Úgeventr   Ú	patch_allÚgevent.testingÚtestingrC   r   r   Úthreadr   ÚImportErrorÚ_threadÚtimer   r7   rG   Ú_realsocketr%   ÚRESOLVER_DNSPYTHONÚRUNNING_ON_CIÚobjectr   r0   ÚTestCaser6   r   Úmainr
   r
   r
   r   Ú<module>   sF   ÿ+2ÿ