o
    ׹i@                     @   s  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
 rEe jZneZG d
d deZe	 rVe 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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   Y/home/ubuntu/veenaModal/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   2      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   5      

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   A   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   M   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_writablesY   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_eintre      


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_ebadfn   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_exceptiony      

z.SelectPollerTests.test_poll_uncaught_exceptionN)r(   r)   r*   r   r   r   r   r   rB   rL   rO   rS   r   r   r   r   r+   0   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   /  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   6  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   E  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   N  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_fdV  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__e  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   k  s   zDummySelect.selectNN)r(   r)   r*   __doc__r   rR   r   r   r   r   r@   a  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   t  
   

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   p  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   )unittestrG   rR   supervisor.tests.baser   r   r   r   r   r   r   r   objectSkipTestCaseTestCaser	   r+   KQueuePollerTestsBaserU   PollerPollTestsBaser   r@   r   rW   r   r   r   r   r   <module>   s.    !Q ?'