o
    þâf5A  ã                   @   s,  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	 d dlm
Z
mZ d dlmZ eZG dd„ dejƒZG dd	„ d	ejƒZeƒ rIejZneZG d
d„ deƒZe
ƒ rZejZneZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zedkr”ejdd dS dS )é    N)ÚMock)ÚSelectPollerÚ
PollPollerÚKQueuePoller)Úimplements_pollÚimplements_kqueue)ÚDummyOptionsc                   @   sL   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S )ÚBasePollerTestsc                 C   s   ddl m} ||ƒS )Nr   )Ú
BasePoller)Úsupervisor.pollerr
   )ÚselfÚoptionsr
   © r   úO/var/www/html/venv/lib/python3.10/site-packages/supervisor/tests/test_poller.pyÚ_makeOne   s   zBasePollerTests._makeOnec                 C   ó   |   d ¡}|  t|jd ¡ d S ©N)r   ÚassertRaisesÚNotImplementedErrorÚregister_readable©r   Úinstr   r   r   Útest_register_readable   ó   
z&BasePollerTests.test_register_readablec                 C   r   r   )r   r   r   Úregister_writabler   r   r   r   Útest_register_writable   r   z&BasePollerTests.test_register_writablec                 C   r   r   )r   r   r   Úunregister_readabler   r   r   r   Útest_unregister_readable   r   z(BasePollerTests.test_unregister_readablec                 C   r   r   )r   r   r   Úunregister_writabler   r   r   r   Útest_unregister_writable!   r   z(BasePollerTests.test_unregister_writablec                 C   r   r   )r   r   r   Úpollr   r   r   r   Ú	test_poll%   r   zBasePollerTests.test_pollc                 C   ó   |   d ¡}|  | ¡ d ¡ d S r   )r   ÚassertEqualÚbefore_daemonizer   r   r   r   Útest_before_daemonize)   r   z%BasePollerTests.test_before_daemonizec                 C   r"   r   )r   r#   Úafter_daemonizer   r   r   r   Útest_after_daemonize-   r   z$BasePollerTests.test_after_daemonizeN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r!   r%   r'   r   r   r   r   r	      s    r	   c                   @   sT   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S )ÚSelectPollerTestsc                 C   ó   t |ƒS r   )r   ©r   r   r   r   r   r   3   ó   zSelectPollerTests._makeOnec                 C   ó:   |   tƒ ¡}| d¡ | d¡ |  t|jƒddg¡ d S ©Né   é   )r   r   r   r#   ÚsortedÚ	readables©r   Úpollerr   r   r   r   6   ó   

z(SelectPollerTests.test_register_readablec                 C   r/   r0   )r   r   r   r#   r3   Ú	writablesr5   r   r   r   r   <   r7   z(SelectPollerTests.test_register_writablec                 C   s€   |   tƒ ¡}| d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | d¡ |  t|jƒdg¡ |  t|jƒddg¡ d S )Nr1   r2   é   é	   éd   )	r   r   r   r   r   r#   Úlistr4   r8   r5   r   r   r   r   B   s   






z*SelectPollerTests.test_unregister_readablec                 C   s€   |   tƒ ¡}| d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | d¡ |  t|jƒddg¡ |  t|jƒdg¡ d S )Nr1   r2   r9   r;   )	r   r   r   r   r   r#   r<   r4   r8   r5   r   r   r   r   N   s   






z*SelectPollerTests.test_unregister_writablec                 C   sr   t dgdgdœd}|  tƒ ¡}||_| d¡ | d¡ | d¡ | d¡\}}|  |dg¡ |  |dg¡ d S )Nr1   r9   )r4   r8   ©Úresultr2   é   )ÚDummySelectr   r   Ú_selectr   r   r    r#   )r   rA   r6   r4   r8   r   r   r   Ú)test_poll_returns_readables_and_writablesZ   s   
ÿ


z;SelectPollerTests.test_poll_returns_readables_and_writablesc                 C   óN   t tjd}tƒ }|  |¡}||_| d¡ | d¡ |  |j	j
d d¡ d S )N©Úerrorr1   r?   r   úEINTR encountered in poll)r@   ÚerrnoÚEINTRr   r   rA   r   r    r#   ÚloggerÚdata©r   rA   r   r6   r   r   r   Útest_poll_ignores_eintrf   ó   


z)SelectPollerTests.test_poll_ignores_eintrc                 C   sr   t tjd}tƒ }|  |¡}||_| d¡ | d¡ |  |j	j
d d¡ |  t|jƒg ¡ |  t|jƒg ¡ d S )NrD   r1   r?   r   zEBADF encountered in poll)r@   rG   ÚEBADFr   r   rA   r   r    r#   rI   rJ   r<   r4   r8   rK   r   r   r   Útest_poll_ignores_ebadfo   s   


z)SelectPollerTests.test_poll_ignores_ebadfc                 C   óB   t tjd}tƒ }|  |¡}||_| d¡ |  tj	|j
d¡ d S )NrD   r1   r?   )r@   rG   ÚEPERMr   r   rA   r   r   ÚselectrE   r    rK   r   r   r   Útest_poll_uncaught_exceptionz   ó   

z.SelectPollerTests.test_poll_uncaught_exceptionN)r(   r)   r*   r   r   r   r   r   rB   rL   rO   rS   r   r   r   r   r+   1   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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 )&ÚKQueuePollerTestsc                 C   r,   r   )r   r-   r   r   r   r   ‰   r.   zKQueuePollerTests._makeOnec                 C   ó^   t ƒ }|  tƒ ¡}||_| d¡ |  t|jƒdg¡ |  t|j	ƒd¡ |  
|j	d d¡ d S )Nr1   r?   r   )ÚDummyKQueuer   r   Ú_kqueuer   r#   r<   r4   ÚlenÚregistered_keventsÚassertReadEventAdded©r   Úkqueuer6   r   r   r   r   Œ   ó   
z(KQueuePollerTests.test_register_readablec                 C   rV   )Nr2   r?   r   )rW   r   r   rX   r   r#   r<   r8   rY   rZ   ÚassertWriteEventAddedr\   r   r   r   r   •   r^   z(KQueuePollerTests.test_register_writablec                 C   s¼   t ƒ }|  tƒ ¡}||_| d¡ | d¡ | d¡ | d¡ | d¡ |  t|j	ƒdg¡ |  t|j
ƒg ¡ |  |jd d¡ |  |jd d¡ |  |jd d¡ |  |jd d¡ d S ©Nr2   r9   r;   r   r?   é   é   )rW   r   r   rX   r   r   r   r#   r<   r8   r4   r_   rZ   r[   ÚassertReadEventDeletedr\   r   r   r   r   ž   s   




z*KQueuePollerTests.test_unregister_readablec                 C   s¼   t ƒ }|  tƒ ¡}||_| d¡ | d¡ | d¡ | d¡ | d¡ |  t|j	ƒg ¡ |  t|j
ƒdg¡ |  |jd d¡ |  |jd d¡ |  |jd d¡ |  |jd d¡ d S r`   )rW   r   r   rX   r   r   r   r#   r<   r8   r4   r_   rZ   r[   ÚassertWriteEventDeletedr\   r   r   r   r   ®   s   




z*KQueuePollerTests.test_unregister_writablec                 C   s‚   t dtjfdtjfdtjfgd}|  tƒ ¡}||_| d¡ | d¡ | d¡ | 	d¡\}}|  
|ddg¡ |  
|dg¡ d S )Nr1   r2   r9   r=   éè  )rW   rR   ÚKQ_FILTER_READÚKQ_FILTER_WRITEr   r   rX   r   r   r    r#   )r   r]   r6   r4   r8   r   r   r   rB   ¾   s   
þ


z;KQueuePollerTests.test_poll_returns_readables_and_writablesc                 C   rC   )N©Úraise_errno_pollr1   re   r   rF   )rW   rG   rH   r   r   rX   r   r    r#   rI   rJ   ©r   r]   r   r6   r   r   r   rL   Ë   rM   z)KQueuePollerTests.test_poll_ignores_eintrc                 C   sb   t tjd}tƒ }|  |¡}||_| d¡ | d¡ |  |j	j
d d¡ |  |j	j
d d¡ d S )N©Úraise_errno_registerr1   r2   r   z6EBADF encountered in kqueue. Invalid file descriptor 6r?   z6EBADF encountered in kqueue. Invalid file descriptor 7)rW   rG   rN   r   r   rX   r   r   r#   rI   rJ   ©r   rX   r   r6   r   r   r   Ú1test_register_readable_and_writable_ignores_ebadfÔ   s   


ÿÿzCKQueuePollerTests.test_register_readable_and_writable_ignores_ebadfc                 C   s6   t tjd}tƒ }|  |¡}||_|  t|jd¡ d S )Nrk   é   )	rW   rG   ÚENOMEMr   r   rX   r   ÚOSErrorr   rm   r   r   r   Ú test_register_uncaught_exceptionà   s
   
z2KQueuePollerTests.test_register_uncaught_exceptionc                 C   s@   t tjd}tƒ }|  |¡}||_| d¡ |  t|j	d¡ d S )Nrh   r1   re   )
rW   rG   ÚEINVALr   r   rX   r   r   rq   r    rj   r   r   r   rS   ç   s   

z.KQueuePollerTests.test_poll_uncaught_exceptionc                 C   s@   t ƒ }tƒ }|  |¡}||_| ¡  |j ¡  |  |jd ¡ d S r   )r   r   r   rX   r$   ÚcloseÚassert_called_once_withr#   ©r   Úmock_kqueuer   r6   r   r   r   Ú#test_before_daemonize_closes_kqueueï   ó   

z5KQueuePollerTests.test_before_daemonize_closes_kqueuec                 C   sh   t ƒ }|  |¡}dg|_dg|_tƒ |_tƒ |_| ¡  |  t	|j
tjƒ¡ |j d¡ |j d¡ d S )Nr?   rb   )r   r   r4   r8   r   r   r   r&   Ú
assertTrueÚ
isinstancerX   rR   r]   Úassert_called_with)r   r   r6   r   r   r   Ú$test_after_daemonize_restores_kqueueø   s   
z6KQueuePollerTests.test_after_daemonize_restores_kqueuec                 C   s@   t ƒ }tƒ }|  |¡}||_| ¡  |j ¡  |  |jd ¡ d S r   )r   r   r   rX   rt   ru   r#   rv   r   r   r   Útest_close_closes_kqueue  ry   z*KQueuePollerTests.test_close_closes_kqueuec                 C   ó   |   ||tjtj¡ d S r   )ÚassertKeventrR   rf   Ú	KQ_EV_ADD©r   ÚkeventÚfdr   r   r   r[     ó   z&KQueuePollerTests.assertReadEventAddedc                 C   r   r   )r€   rR   rg   r   r‚   r   r   r   r_     r…   z'KQueuePollerTests.assertWriteEventAddedc                 C   r   r   )r€   rR   rf   ÚKQ_EV_DELETEr‚   r   r   r   rc     r…   z(KQueuePollerTests.assertReadEventDeletedc                 C   r   r   )r€   rR   rg   r†   r‚   r   r   r   rd     r…   z)KQueuePollerTests.assertWriteEventDeletedc                 C   s.   |   |j|¡ |   |j|¡ |   |j|¡ d S r   )r#   ÚidentÚfilterÚflags)r   rƒ   r‡   rˆ   r‰   r   r   r   r€     s   zKQueuePollerTests.assertKeventN)r(   r)   r*   r   r   r   r   r   rB   rL   rn   rr   rS   rx   r}   r~   r[   r_   rc   rd   r€   r   r   r   r   rU   ‡   s&    					rU   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 )ÚPollerPollTestsc                 C   r,   r   )r   r-   r   r   r   r   %  r.   zPollerPollTests._makeOnec                 C   sB   t ƒ }|  tƒ ¡}||_| d¡ | d¡ |  |jddg¡ d S r0   )ÚDummySelectPollr   r   Ú_pollerr   r#   Úregistered_as_readable©r   Úselect_pollr6   r   r   r   r   (  s   

z&PollerPollTests.test_register_readablec                 C   s6   t ƒ }|  tƒ ¡}||_| d¡ |  |jdg¡ d S )Nr1   )r‹   r   r   rŒ   r   r#   Úregistered_as_writablerŽ   r   r   r   r   0  s
   
z&PollerPollTests.test_register_writablec                 C   s”   t dtjfdtjfdtjfdtjfgd}|  tƒ ¡}||_| 	d¡ | 	d¡ | 
d¡ | 	d¡ | d¡\}}|  |g d¢¡ |  |dg¡ d S )Nr1   r2   r9   r:   r=   re   )r1   r2   r:   )r‹   rR   ÚPOLLINÚPOLLPRIÚPOLLOUTÚPOLLHUPr   r   rŒ   r   r   r    r#   ©r   r   r6   r4   r8   r   r   r   rB   7  s   
ý



z9PollerPollTests.test_poll_returns_readables_and_writablesc                 C   rC   )NrD   r:   re   r   rF   )r‹   rG   rH   r   r   rŒ   r   r    r#   rI   rJ   ©r   r   r   r6   r   r   r   rL   F  rM   z'PollerPollTests.test_poll_ignores_eintrc                 C   rP   )NrD   r:   re   )r‹   rG   rN   r   r   rŒ   r   r   rR   rE   r    r–   r   r   r   rS   O  rT   z,PollerPollTests.test_poll_uncaught_exceptionc                 C   sp   t dtjfdtjfgd}|  tƒ ¡}||_| d¡ | d¡ | d¡\}}|  	|dg¡ |  	|j
dg¡ d S )Nr1   r2   r=   re   )r‹   rR   ÚPOLLNVALr’   r   r   rŒ   r   r    r#   Úunregisteredr•   r   r   r   Ú+test_poll_ignores_and_unregisters_closed_fdW  s   
ÿ

z;PollerPollTests.test_poll_ignores_and_unregisters_closed_fdN)
r(   r)   r*   r   r   r   rB   rL   rS   r™   r   r   r   r   rŠ   #  s    	rŠ   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )r@   z0
    Fake implementation of select.select()
    Nc                 C   s.   |pi }|  dg ¡| _|  dg ¡| _|| _d S )Nr4   r8   )Úgetr4   r8   rE   ©r   r>   rE   r   r   r   Ú__init__f  s   
zDummySelect.__init__c                 C   s    | j r	t  | j ¡‚| j| jg fS r   )rE   rR   r4   r8   )r   ÚrÚwÚxÚtimeoutr   r   r   rR   l  s   zDummySelect.select©NN)r(   r)   r*   Ú__doc__rœ   rR   r   r   r   r   r@   b  s    
r@   c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )r‹   z.
    Fake implementation of select.poll()
    Nc                 C   s&   |pg | _ || _g | _g | _g | _d S r   )r>   rE   r   r   r˜   r›   r   r   r   rœ   u  ó
   

zDummySelectPoll.__init__c                 C   sN   |t jt jB t jB kr| j |¡ d S |t jkr | j |¡ d S td 	|¡ƒ‚)Nz+Registered a fd on unknown eventmask: '{0}')
rR   r‘   r’   r”   r   Úappendr“   r   Ú
ValueErrorÚformat)r   r„   Ú	eventmaskr   r   r   Úregister|  s
   
zDummySelectPoll.registerc                 C   s   | j  |¡ d S r   )r˜   r¤   )r   r„   r   r   r   Ú
unregister„  ó   zDummySelectPoll.unregisterc                 C   s   | j r	t  | j ¡‚| jS r   )rE   rR   r>   )r   r    r   r   r   r    ‡  s   zDummySelectPoll.pollr¡   )r(   r)   r*   r¢   rœ   r¨   r©   r    r   r   r   r   r‹   q  s    
r‹   c                   @   sD   e Zd ZdZddd„Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )rW   z0
    Fake implementation of select.kqueue()
    Nc                 C   s&   |pg | _ || _|| _g | _g | _d S r   )r>   Ú
errno_pollÚerrno_registerrZ   Úregistered_flags)r   r>   ri   rl   r   r   r   rœ   ‘  r£   zDummyKQueue.__init__c                 C   sL   |d u r|   |¡ |  | j¡ |  ¡ S |  |¡ |  | j¡ | j |¡ d S r   )Úassert_max_events_on_pollÚraise_errorr«   Úbuild_resultÚassert_max_events_on_registerr¬   rZ   Úextend)r   ÚkeventsÚ
max_eventsr    r   r   r   Úcontrol˜  s   

zDummyKQueue.controlc                 C   s   |sd S t ƒ }||_|‚r   )rq   rG   )r   ÚerrÚexr   r   r   r¯   ¢  s   zDummyKQueue.raise_errorc                 C   s   dd„ | j D ƒS )Nc                 S   s   g | ]	\}}t ||ƒ‘qS r   )Ú
FakeKEvent)Ú.0r‡   rˆ   r   r   r   Ú
<listcomp>©  s    z,DummyKQueue.build_result.<locals>.<listcomp>r=   )r   r   r   r   r°   ¨  rª   zDummyKQueue.build_resultc                 C   s   |t jksJ dt j ƒ‚d S )Nz8`max_events` parameter of `kqueue.control() should be %d)r   r´   ©r   r´   r   r   r   r®   «  s
   ÿÿz%DummyKQueue.assert_max_events_on_pollc                 C   s   |dksJ dƒ‚d S )Nr   zD`max_events` parameter of `kqueue.control()` should be 0 on registerr   r»   r   r   r   r±   °  s   
ÿz)DummyKQueue.assert_max_events_on_register)NNNr   )
r(   r)   r*   r¢   rœ   rµ   r¯   r°   r®   r±   r   r   r   r   rW     s    


rW   c                   @   s   e Zd Zdd„ ZdS )r¸   c                 C   s   || _ || _d S r   )r‡   rˆ   )r   r‡   rˆ   r   r   r   rœ   µ  s   
zFakeKEvent.__init__N)r(   r)   r*   rœ   r   r   r   r   r¸   ´  s    r¸   c                   C   s   t  tjt ¡S r   )ÚunittestÚfindTestCasesÚsysÚmodulesr(   r   r   r   r   Ú
test_suiteº  rª   rÀ   Ú__main__)ÚdefaultTest)r¾   r¼   rG   rR   Úsupervisor.tests.baser   r   r   r   r   r   r   r   ÚobjectÚSkipTestCaseÚTestCaser	   r+   ÚKQueuePollerTestsBaserU   ÚPollerPollTestsBaserŠ   r@   r‹   rW   r¸   rÀ   r(   Úmainr   r   r   r   Ú<module>   s8    !Q ?'ÿ