o
    U˟i                     @   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re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re$  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
   c/var/www/apps/myagent/mysuperagent/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   Td      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{Gz?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