o
    þâf‘!  ã                   @   sø   d Z ddl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d„ Zedkrzejdd dS 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   úW/var/www/html/venv/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_delete2   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   ÚstopA   r   zReferenceCounterTest.stopc                 C   r   )Nr   )ÚReferenceCounter)r    r9   )r   r9   r   r   r   r!   D   r"   z$ReferenceCounterTest._getTargetClassc                 O   r#   r   r$   r%   r   r   r   r(   H   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_decrK   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_error[   s   z3ReferenceCounterTest.test_decr_at_zero_raises_errorN)
r   r   r   r   r7   r8   r!   r(   rE   rH   r   r   r   r   r4   9   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   ÚtearDowna   r   zSocketManagerTest.tearDownc                 C   r   )Nr   )ÚSocketManager)r    rK   )r   rK   r   r   r   r!   d   r"   z!SocketManagerTest._getTargetClassc                 O   r#   r   r$   r%   r   r   r   r(   h   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_reprk   s   
ÿzSocketManagerTest.test_reprc                 C   s&   t dƒ}|  |¡}|  || ¡ ¡ d S ©Nr>   )r   r(   r,   Úconfig©r   rP   rQ   r   r   r   Útest_get_configr   ó   
z!SocketManagerTest.test_get_configc                 C   ó>   t ddƒ}|  |¡}|  |j|¡ | ¡ }|  | ¡ d¡ d S )NÚ	localhostéaÇ  ©ú	127.0.0.1r[   ©r   r(   r,   Úsocket_configÚ
get_socketÚgetsockname©r   rP   rQ   Úsockr   r   r   Útest_tcp_w_hostnamew   ó
   

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   c                   C   s   t  tjt ¡S r   )ÚunittestÚfindTestCasesÚsysÚmodulesr   r   r   r   r   Ú
test_suiteü   s   r˜   Ú__main__)ÚdefaultTest)Ú__doc__r’   r–   ri   r”   rr   rg   r‘   ÚImportErrorÚsupervisor.tests.baser   r   Úsupervisor.datatypesr   r   r   ÚTestCaser   r4   rI   r1   r˜   r   Úmainr   r   r   r   Ú<module>   s4    ÿ& ÿ