o
    Ͱi                      @   s   d Z ddlZddlZddlZddlZddlZzddlZW n ey'   dZY nw ddlm	Z	 ddlm
Z
 ddlmZ ddlmZ G dd dZG d	d
 d
ejZG dd dejZG dd dejZdd ZdS )z(Test suite for supervisor.socket_manager    N)DummySocketConfig)DummyLogger)UnixStreamSocketConfig)InetStreamSocketConfigc                   @   s$   e Zd Zdd Zdd Zdd ZdS )Subjectc                 C   
   d| _ d S N   valueself r   X/home/ubuntu/.local/lib/python3.10/site-packages/supervisor/tests/test_socket_manager.py__init__      
zSubject.__init__c                 C   s   | j S Nr
   r   r   r   r   getValue   s   zSubject.getValuec                 C   s
   || _ d S r   r
   )r   valr   r   r   setValue   r   zSubject.setValueN)__name__
__module____qualname__r   r   r   r   r   r   r   r      s    r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )	ProxyTestc                 C   r   NFon_deleteCalledr   r   r   r   setUp    r   zProxyTest.setUpc                 C      ddl m} |S )Nr   )Proxy)supervisor.socket_managerr   )r   r   r   r   r   _getTargetClass#      zProxyTest._getTargetClassc                 O      |   |i |S r   r!   r   argskwr   r   r   _makeOne'      zProxyTest._makeOnec                 C   r   NTr   r   r   r   r   setOnDeleteCalled*   r   zProxyTest.setOnDeleteCalledc                 C   s    |  t }| d|  d S r   )r(   r   assertEqualr   r   proxyr   r   r   test_proxy_getattr-   s   zProxyTest.test_proxy_getattrc                 C   s<   | j t | jd}| d|  d }t  | | j d S )N)	on_deleter	   )r(   r   r+   r,   r   
gc_collect
assertTruer   r-   r   r   r   test_on_delete1   s
   zProxyTest.test_on_deleteN)	r   r   r   r   r!   r(   r+   r/   r3   r   r   r   r   r      s    r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )ReferenceCounterTestc                 C   r   r   runningr   r   r   r   r   :   r   zReferenceCounterTest.setUpc                 C   r   r*   r5   r   r   r   r   start=   r   zReferenceCounterTest.startc                 C   r   r   r5   r   r   r   r   stop@   r   zReferenceCounterTest.stopc                 C   r   )Nr   )ReferenceCounter)r    r9   )r   r9   r   r   r   r!   C   r"   z$ReferenceCounterTest._getTargetClassc                 O   r#   r   r$   r%   r   r   r   r(   G   r)   zReferenceCounterTest._makeOnec                 C   s   | j | j| jd}| | j |  | | j | d|  |  | | j | d|  |	  | | j | d|  |	  | | j | d|  d S )Non_zeroon_non_zero      r   )
r(   r8   r7   assertFalser6   	incrementr2   r,   	get_count	decrementr   ctrr   r   r   test_incr_and_decrJ   s   z'ReferenceCounterTest.test_incr_and_decrc                 C   s$   | j | j| jd}| t|j d S )Nr:   )r(   r8   r7   assertRaises	ExceptionrB   rC   r   r   r   test_decr_at_zero_raises_errorZ   s   z3ReferenceCounterTest.test_decr_at_zero_raises_errorN)
r   r   r   r   r7   r8   r!   r(   rE   rH   r   r   r   r   r4   8   s    r4   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"SocketManagerTestc                 C   s
   t   d S r   )r1   r   r   r   r   tearDown`   r   zSocketManagerTest.tearDownc                 C   r   )Nr   )SocketManager)r    rK   )r   rK   r   r   r   r!   c   r"   z!SocketManagerTest._getTargetClassc                 O   r#   r   r$   r%   r   r   r   r(   g   r)   zSocketManagerTest._makeOnec                 C   s<   t d}| |}d|jt||jf }| t|| d S )Nr>   z<%s at %s for %s>)r   r(   	__class__idurlr,   repr)r   confsock_managerexpectedr   r   r   	test_reprj   s   
zSocketManagerTest.test_reprc                 C   s&   t d}| |}| ||  d S Nr>   )r   r(   r,   configr   rP   rQ   r   r   r   test_get_configq      
z!SocketManagerTest.test_get_configc                 C   >   t dd}| |}| |j| | }| | d d S )N	localhosta  	127.0.0.1r[   r   r(   r,   socket_config
get_socketgetsocknamer   rP   rQ   sockr   r   r   test_tcp_w_hostnamev   
   

z%SocketManagerTest.test_tcp_w_hostnamec                 C   rY   )Nr]   r[   r\   r^   rb   r   r   r   test_tcp_w_ip}   re   zSocketManagerTest.test_tcp_w_ipc                 C   sV   t  \}}t|}| |}| |j| | }| | | d }t	| d S r   )
tempfilemkstempr   r(   r,   r_   r`   ra   osclose)r   tf_fdtf_namerP   rQ   rc   r   r   r   	test_unix   s   
zSocketManagerTest.test_unixc           	      C   s<  t d}| |}| |  | }| |  t| }| }t| }| || | 	|| | 	d|
  | |  | |jj d }t  | |  | |jj d }t  | |  | |jj | }| |  t| }| || ~t  | |  | |jj d S rT   )r   r(   r?   is_preparedr`   r2   rM   _getassertNotEqualr,   get_socket_ref_countsocketclose_calledr1   )	r   rP   rQ   rc   sock_idsock2sock2_idsock3sock3_idr   r   r   test_socket_lifecycle   s:   
z'SocketManagerTest.test_socket_lifecyclec                 C   s   t d}t }| j||d}| }| t|jd | dt| |jd  ~t  | t|jd | dt| |jd  d S )Nr=   )loggerzCreating socket %sr   r>   zClosing socket %s)	r   r   r(   r`   r,   lendatarO   r1   )r   rP   rz   rQ   rc   r   r   r   test_logging   s   zSocketManagerTest.test_loggingc                 C   sP   t d}| |}| }| |  | |j | |j | |j d S )Nr=   )	r   r(   r`   r2   rn   r?   bind_calledlisten_calledrs   rb   r   r   r   test_prepare_socket   s   
z%SocketManagerTest.test_prepare_socketc                 C   sB   t ddd}| |}| }| |  | |j|  d S )Nr=   *   backlog)r   r(   r`   r2   rn   r,   listen_backlogget_backlogrb   r   r   r   +test_prepare_socket_uses_configured_backlog   s
   
z=SocketManagerTest.test_prepare_socket_uses_configured_backlogc                 C   s@   t dd d}| |}| }| |  | |jtj d S )Nr=   r   )	r   r(   r`   r2   rn   r,   r   rr   	SOMAXCONNrb   r   r   r   ;test_prepare_socket_uses_somaxconn_if_no_backlog_configured   s
   
zMSocketManagerTest.test_prepare_socket_uses_somaxconn_if_no_backlog_configuredc                 C   s<   t dd}| |}| }| |}| tj|j ~d S )Nr]   r[   )r   r(   r`   rF   rr   error)r   rP   rQ   rc   sock_manager2r   r   r   test_tcp_socket_already_taken   s   


z/SocketManagerTest.test_tcp_socket_already_takenc                 C   s&   t d}| |}| tj|j d S )Nz/notthere/foo.sock)r   r(   rF   rr   r   r`   rV   r   r   r   test_unix_bad_sock   rX   z$SocketManagerTest.test_unix_bad_sockc              
   C   sr   t dd}| |}| |  z|  |   W d S  ty8 } z| |jd d W Y d }~d S d }~ww )Nr]   r[   r   zSocket has not been prepared)	r   r(   r?   rn   _closefailrG   r,   r&   )r   rP   rQ   er   r   r   #test_close_requires_prepared_socket   s   

 z5SocketManagerTest.test_close_requires_prepared_socketN)r   r   r   rJ   r!   r(   rS   rW   rd   rf   rm   ry   r}   r   r   r   r   r   r   r   r   r   r   rI   ^   s"    
+	rI   c                   C   s(   t d urt  t  t  d S d S r   )__pypy__gccollectr   r   r   r   r1      s
   r1   )__doc__r   ri   unittestrr   rg   r   ImportErrorsupervisor.tests.baser   r   supervisor.datatypesr   r   r   TestCaser   r4   rI   r1   r   r   r   r   <module>   s*    & 