
    kc5A                        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ej                        Z G d d	ej                        Z e       rej                  ZneZ G d
 de      Z e
       rej                  ZneZ G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zd Zedk(  r ej8                  d       yy)    N)Mock)SelectPoller
PollPollerKQueuePoller)implements_pollimplements_kqueue)DummyOptionsc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
BasePollerTestsc                     ddl m}  ||      S )Nr   )
BasePoller)supervisor.pollerr   )selfoptionsr   s      >/usr/lib/python3/dist-packages/supervisor/tests/test_poller.py_makeOnezBasePollerTests._makeOne   s    0'""    c                 h    | j                  d       }| j                  t        |j                  d        y N)r   assertRaisesNotImplementedErrorregister_readabler   insts     r   test_register_readablez&BasePollerTests.test_register_readable   )    }}T"-t/E/EtLr   c                 h    | j                  d       }| j                  t        |j                  d        y r   )r   r   r   register_writabler   s     r   test_register_writablez&BasePollerTests.test_register_writable   r   r   c                 h    | j                  d       }| j                  t        |j                  d        y r   )r   r   r   unregister_readabler   s     r   test_unregister_readablez(BasePollerTests.test_unregister_readable   )    }}T"-t/G/GNr   c                 h    | j                  d       }| j                  t        |j                  d        y r   )r   r   r   unregister_writabler   s     r   test_unregister_writablez(BasePollerTests.test_unregister_writable!   r#   r   c                 h    | j                  d       }| j                  t        |j                  d        y r   )r   r   r   pollr   s     r   	test_pollzBasePollerTests.test_poll%   s'    }}T"-tyy$?r   c                 f    | j                  d       }| j                  |j                         d        y r   )r   assertEqualbefore_daemonizer   s     r   test_before_daemonizez%BasePollerTests.test_before_daemonize)   s)    }}T"..0$7r   c                 f    | j                  d       }| j                  |j                         d        y r   )r   r+   after_daemonizer   s     r   test_after_daemonizez$BasePollerTests.test_after_daemonize-   s)    }}T"--/6r   N)__name__
__module____qualname__r   r   r   r"   r&   r)   r-   r0    r   r   r   r      s/    #MMOO@87r   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)SelectPollerTestsc                     t        |      S r   )r   r   r   s     r   r   zSelectPollerTests._makeOne3       G$$r   c                     | j                  t                     }|j                  d       |j                  d       | j                  t	        |j
                        ddg       y N      )r   r	   r   r+   sorted	readablesr   pollers     r   r   z(SelectPollerTests.test_register_readable6   M    |~.  #  # 0 01Aa59r   c                     | j                  t                     }|j                  d       |j                  d       | j                  t	        |j
                        ddg       y r;   )r   r	   r   r+   r>   	writablesr@   s     r   r   z(SelectPollerTests.test_register_writable<   rB   r   c                    | j                  t                     }|j                  d       |j                  d       |j                  d       |j                  d       |j	                  d       |j	                  d       |j	                  d       | j                  t        |j                        dg       | j                  t        |j                        ddg       y )Nr<   r=      	   d   )	r   r	   r   r   r!   r+   listr?   rD   r@   s     r   r"   z*SelectPollerTests.test_unregister_readableB   s    |~.  #  #  #  #""1%""1%""3'f../!5f../!Q8r   c                    | j                  t                     }|j                  d       |j                  d       |j                  d       |j                  d       |j	                  d       |j	                  d       |j	                  d       | j                  t        |j                        ddg       | j                  t        |j                        dg       y )Nr<   r=   rF   rH   )	r   r	   r   r   r%   r+   rI   r?   rD   r@   s     r   r&   z*SelectPollerTests.test_unregister_writableN   s    |~.  #  #  #  #""1%""1%""3'f../!Q8f../!5r   c                 @   t        dgdgd      }| j                  t                     }||_        |j	                  d       |j	                  d       |j                  d       |j                  d      \  }}| j                  |dg       | j                  |dg       y )Nr<   rF   )r?   rD   resultr=      )DummySelectr   r	   _selectr   r   r(   r+   )r   rP   rA   r?   rD   s        r   )test_poll_returns_readables_and_writablesz;SelectPollerTests.test_poll_returns_readables_and_writablesZ   s    A3453&8 9|~.   #  #  #%{{1~	9QC(QC(r   c                    t        t        j                        }t               }| j	                  |      }||_        |j                  d       |j                  d       | j                  |j                  j                  d   d       y )Nerrorr<   rN   r   EINTR encountered in poll)rO   errnoEINTRr	   r   rP   r   r(   r+   loggerdatar   rP   r   rA   s       r   test_poll_ignores_eintrz)SelectPollerTests.test_poll_ignores_eintrf   se    EKK0.w'   #A,,Q/1LMr   c                    t        t        j                        }t               }| j	                  |      }||_        |j                  d       |j                  d       | j                  |j                  j                  d   d       | j                  t        |j                        g        | j                  t        |j                        g        y )NrS   r<   rN   r   zEBADF encountered in poll)rO   rV   EBADFr	   r   rP   r   r(   r+   rX   rY   rI   r?   rD   rZ   s       r   test_poll_ignores_ebadfz)SelectPollerTests.test_poll_ignores_ebadfo   s    EKK0.w'   #A,,Q/1LMf../4f../4r   c                     t        t        j                        }t               }| j	                  |      }||_        |j                  d       | j                  t        j                  |j                  d       y )NrS   r<   rN   )rO   rV   EPERMr	   r   rP   r   r   selectrT   r(   rZ   s       r   test_poll_uncaught_exceptionz.SelectPollerTests.test_poll_uncaught_exceptionz   sT    EKK0.w'   #&,,Q7r   N)r1   r2   r3   r   r   r   r"   r&   rQ   r[   r^   rb   r4   r   r   r6   r6   1   s0    %::
9
6
)N	58r   r6   c                   x    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)KQueuePollerTestsc                     t        |      S r   )r   r8   s     r   r   zKQueuePollerTests._makeOne   r9   r   c                 N   t               }| j                  t                     }||_        |j	                  d       | j                  t        |j                        dg       | j                  t        |j                        d       | j                  |j                  d   d       y )Nr<   rN   r   )DummyKQueuer   r	   _kqueuer   r+   rI   r?   lenregistered_keventsassertReadEventAddedr   kqueuerA   s      r   r   z(KQueuePollerTests.test_register_readable   s    |~.  #f../!5V667;!!&";";A">Br   c                 N   t               }| j                  t                     }||_        |j	                  d       | j                  t        |j                        dg       | j                  t        |j                        d       | j                  |j                  d   d       y )Nr=   rN   r   )rg   r   r	   rh   r   r+   rI   rD   ri   rj   assertWriteEventAddedrl   s      r   r   z(KQueuePollerTests.test_register_writable   s    |~.  #f../!5V667;""6#<#<Q#?Cr   c                    t               }| j                  t                     }||_        |j	                  d       |j                  d       |j                  d       |j                  d       |j                  d       | j                  t        |j                        dg       | j                  t        |j                        g        | j                  |j                  d   d       | j                  |j                  d   d       | j                  |j                  d   d       | j                  |j                  d   d       y Nr=   rF   rH   r   rN         )rg   r   r	   rh   r   r   r!   r+   rI   rD   r?   ro   rj   rk   assertReadEventDeletedrl   s      r   r"   z*KQueuePollerTests.test_unregister_readable   s
   |~.  #  #""1%""1%""3'f../!5f../4""6#<#<Q#?C!!&";";A">B##F$=$=a$@!D##F$=$=a$@!Dr   c                    t               }| j                  t                     }||_        |j	                  d       |j                  d       |j                  d       |j                  d       |j                  d       | j                  t        |j                        g        | j                  t        |j                        dg       | j                  |j                  d   d       | j                  |j                  d   d       | j                  |j                  d   d       | j                  |j                  d   d       y rq   )rg   r   r	   rh   r   r   r%   r+   rI   rD   r?   ro   rj   rk   assertWriteEventDeletedrl   s      r   r&   z*KQueuePollerTests.test_unregister_writable   s
   |~.  #  #""1%""1%""3'f../4f../!5""6#<#<Q#?C!!&";";A">B$$V%>%>q%A1E$$V%>%>q%A1Er   c                    t        dt        j                  fdt        j                  fdt        j                  fg      }| j	                  t                     }||_        |j                  d       |j                  d       |j                  d       |j                  d      \  }}| j                  |ddg       | j                  |dg       y )Nr<   r=   rF   rL     )rg   ra   KQ_FILTER_READKQ_FILTER_WRITEr   r	   rh   r   r   r(   r+   )r   rm   rA   r?   rD   s        r   rQ   z;KQueuePollerTests.test_poll_returns_readables_and_writables   s    a)>)>%?&')>)>%?&')?)?%@%B C |~.  #  #  #%{{40	9QqE*QC(r   c                    t        t        j                        }t               }| j	                  |      }||_        |j                  d       |j                  d       | j                  |j                  j                  d   d       y )Nraise_errno_pollr<   rx   r   rU   )rg   rV   rW   r	   r   rh   r   r(   r+   rX   rY   r   rm   r   rA   s       r   r[   z)KQueuePollerTests.test_poll_ignores_eintr   sf    ekk:.w'  #D,,Q/1LMr   c                 d   t        t        j                        }t               }| j	                  |      }||_        |j                  d       |j                  d       | j                  |j                  j                  d   d       | j                  |j                  j                  d   d       y )Nraise_errno_registerr<   r=   r   z6EBADF encountered in kqueue. Invalid file descriptor 6rN   z6EBADF encountered in kqueue. Invalid file descriptor 7)rg   rV   r]   r	   r   rh   r   r   r+   rX   rY   r   rh   r   rA   s       r   1test_register_readable_and_writable_ignores_ebadfzCKQueuePollerTests.test_register_readable_and_writable_ignores_ebadf   s    5;;?.w'   #  #,,Q/Q	S,,Q/Q	Sr   c                     t        t        j                        }t               }| j	                  |      }||_        | j                  t        |j                  d       y )Nr      )	rg   rV   ENOMEMr	   r   rh   r   OSErrorr   r   s       r    test_register_uncaught_exceptionz2KQueuePollerTests.test_register_uncaught_exception   sD    5<<@.w' '6#;#;Q?r   c                     t        t        j                        }t               }| j	                  |      }||_        |j                  d       | j                  t        |j                  d       y )Nr|   r<   rx   )
rg   rV   EINVALr	   r   rh   r   r   r   r(   r~   s       r   rb   z.KQueuePollerTests.test_poll_uncaught_exception   sP    ell;.w'  #'6;;5r   c                     t               }t               }| j                  |      }||_        |j	                          |j
                  j                          | j                  |j                  d        y r   )r   r	   r   rh   r,   closeassert_called_once_withr+   r   mock_kqueuer   rA   s       r   #test_before_daemonize_closes_kqueuez5KQueuePollerTests.test_before_daemonize_closes_kqueue   sW    f.w'$!113.r   c                    t               }| j                  |      }dg|_        dg|_        t	               |_        t	               |_        |j                          | j                  t        |j                  t        j                               |j
                  j                  d       |j                  j                  d       y )NrN   rs   )r	   r   r?   rD   r   r   r   r/   
assertTrue
isinstancerh   ra   rm   assert_called_with)r   r   rA   s      r   $test_after_daemonize_restores_kqueuez6KQueuePollerTests.test_after_daemonize_restores_kqueue   s    .w'33#'6 #'6  
6>>6==AB  33A6  33A6r   c                     t               }t               }| j                  |      }||_        |j	                          |j                  j                          | j                  |j                  d        y r   )r   r	   r   rh   r   r   r+   r   s       r   test_close_closes_kqueuez*KQueuePollerTests.test_close_closes_kqueue  sT    f.w'$113.r   c                 d    | j                  ||t        j                  t        j                         y r   )assertKeventra   ry   	KQ_EV_ADDr   keventfds      r   rk   z&KQueuePollerTests.assertReadEventAdded  s"    &"f&;&;V=M=MNr   c                 d    | j                  ||t        j                  t        j                         y r   )r   ra   rz   r   r   s      r   ro   z'KQueuePollerTests.assertWriteEventAdded  s"    &"f&<&<f>N>NOr   c                 d    | j                  ||t        j                  t        j                         y r   )r   ra   ry   KQ_EV_DELETEr   s      r   rt   z(KQueuePollerTests.assertReadEventDeleted  s"    &"f&;&;V=P=PQr   c                 d    | j                  ||t        j                  t        j                         y r   )r   ra   rz   r   r   s      r   rv   z)KQueuePollerTests.assertWriteEventDeleted  s"    &"f&<&<f>Q>QRr   c                     | j                  |j                  |       | j                  |j                  |       | j                  |j                  |       y r   )r+   identfilterflags)r   r   r   r   r   s        r   r   zKQueuePollerTests.assertKevent  s>    u-/u-r   N)r1   r2   r3   r   r   r   r"   r&   rQ   r[   r   r   rb   r   r   r   rk   ro   rt   rv   r   r4   r   r   rd   rd      sg    %CDE F )N
S@6/
7/OPRS.r   rd   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	PollerPollTestsc                     t        |      S r   )r   r8   s     r   r   zPollerPollTests._makeOne%  s    '""r   c                     t               }| j                  t                     }||_        |j	                  d       |j	                  d       | j                  |j                  ddg       y r;   )DummySelectPollr   r	   _pollerr   r+   registered_as_readabler   select_pollrA   s      r   r   z&PollerPollTests.test_register_readable(  sW    %'|~.$  #  #;;aUCr   c                     t               }| j                  t                     }||_        |j	                  d       | j                  |j                  dg       y )Nr<   )r   r   r	   r   r   r+   registered_as_writabler   s      r   r   z&PollerPollTests.test_register_writable0  sG    %'|~.$  #;;aSAr   c                    t        dt        j                  fdt        j                  fdt        j                  fdt        j
                  fg      }| j                  t                     }||_        |j                  d       |j                  d       |j                  d       |j                  d       |j                  d      \  }}| j                  |g d       | j                  |dg       y )Nr<   r=   rF   rG   rL   rx   )r<   r=   rG   )r   ra   POLLINPOLLPRIPOLLOUTPOLLHUPr   r	   r   r   r   r(   r+   r   r   rA   r?   rD   s        r   rQ   z9PollerPollTests.test_poll_returns_readables_and_writables7  s    %q&--.@/0&...A/0&...A/0&...A.C D |~.$  #  #  #  #%{{40	9G,QC(r   c                    t        t        j                        }t               }| j	                  |      }||_        |j                  d       |j                  d       | j                  |j                  j                  d   d       y )NrS   rG   rx   r   rU   )r   rV   rW   r	   r   r   r   r(   r+   rX   rY   r   r   r   rA   s       r   r[   z'PollerPollTests.test_poll_ignores_eintrF  sf    %EKK8.w'$  #D,,Q/1LMr   c                     t        t        j                        }t               }| j	                  |      }||_        |j                  d       | j                  t        j                  |j                  d       y )NrS   rG   rx   )r   rV   r]   r	   r   r   r   r   ra   rT   r(   r   s       r   rb   z,PollerPollTests.test_poll_uncaught_exceptionO  sT    %EKK8.w'$  #&,,T:r   c                 l   t        dt        j                  fdt        j                  fg      }| j	                  t                     }||_        |j                  d       |j                  d       |j                  d      \  }}| j                  |dg       | j                  |j                  dg       y )Nr<   r=   rL   rx   )r   ra   POLLNVALr   r   r	   r   r   r(   r+   unregisteredr   s        r   +test_poll_ignores_and_unregisters_closed_fdz;PollerPollTests.test_poll_ignores_and_unregisters_closed_fdW  s    %q&//.B/0&...A.C D|~.$  #  #%{{40	9QC(11A37r   N)
r1   r2   r3   r   r   r   rQ   r[   rb   r   r4   r   r   r   r   #  s(    #DB)N;	8r   r   c                       e Zd ZdZddZd Zy)rO   z0
    Fake implementation of select.select()
    Nc                 z    |xs i }|j                  dg       | _        |j                  dg       | _        || _        y )Nr?   rD   )getr?   rD   rT   r   rM   rT   s      r   __init__zDummySelect.__init__f  s6    2K4K4
r   c                     | j                   rt        j                   | j                         | j                  | j                  g fS r   )rT   ra   r?   rD   )r   rwxtimeouts        r   ra   zDummySelect.selectl  s1    ::,,tzz**~~t~~r11r   NN)r1   r2   r3   __doc__r   ra   r4   r   r   rO   rO   b  s    2r   rO   c                   *    e Zd ZdZddZd Zd Zd Zy)r   z.
    Fake implementation of select.poll()
    Nc                 R    |xs g | _         || _        g | _        g | _        g | _        y r   )rM   rT   r   r   r   r   s      r   r   zDummySelectPoll.__init__u  s,    l
&(#&(#r   c                 6   |t         j                  t         j                  z  t         j                  z  k(  r| j                  j                  |       y |t         j                  k(  r| j                  j                  |       y t        dj                  |            )Nz+Registered a fd on unknown eventmask: '{0}')
ra   r   r   r   r   appendr   r   
ValueErrorformat)r   r   	eventmasks      r   registerzDummySelectPoll.register|  sl    6GG''..r2&..(''..r2JQQR[\]]r   c                 :    | j                   j                  |       y r   )r   r   )r   r   s     r   
unregisterzDummySelectPoll.unregister  s      $r   c                 p    | j                   rt        j                   | j                         | j                  S r   )rT   ra   rM   )r   r   s     r   r(   zDummySelectPoll.poll  s&    ::,,tzz**{{r   r   )r1   r2   r3   r   r   r   r   r(   r4   r   r   r   r   q  s    ^%r   r   c                   8    e Zd ZdZd	dZd
dZd Zd Zd Zd Z	y)rg   z0
    Fake implementation of select.kqueue()
    Nc                 R    |xs g | _         || _        || _        g | _        g | _        y r   )rM   
errno_pollerrno_registerrj   registered_flags)r   rM   r}   r   s       r   r   zDummyKQueue.__init__  s,    l*2"$ "r   c                    |<| j                  |       | j                  | j                         | j                         S | j	                  |       | j                  | j
                         | j                  j                  |       y r   )assert_max_events_on_pollraise_errorr   build_resultassert_max_events_on_registerr   rj   extend)r   kevents
max_eventsr   s       r   controlzDummyKQueue.control  sl    ?**:6T__-$$&&**:6,,-&&w/r   c                 .    |sy t               }||_        |r   )r   rV   )r   errexs      r   r   zDummyKQueue.raise_error  s    FYr   c                 `    | j                   D cg c]  \  }}t        ||       c}}S c c}}w r   )rM   
FakeKEventr   r   r   s      r   r   zDummyKQueue.build_result  s%    >BkkJleF
5&)JJJs   *c                 Z    |t         j                  k(  sJ dt         j                  z         y )Nz8`max_events` parameter of `kqueue.control() should be %d)r   r   r   r   s     r   r   z%DummyKQueue.assert_max_events_on_poll  s.    \444 	'F%%&	'4r   c                     |dk(  sJ d       y )Nr   zD`max_events` parameter of `kqueue.control()` should be 0 on registerr4   r   s     r   r   z)DummyKQueue.assert_max_events_on_register  s    Q 	TR	Tr   )NNNr   )
r1   r2   r3   r   r   r   r   r   r   r   r4   r   r   rg   rg     s'    #0K'
Tr   rg   c                       e Zd Zd Zy)r   c                      || _         || _        y r   )r   r   r   s      r   r   zFakeKEvent.__init__  s    
r   N)r1   r2   r3   r   r4   r   r   r   r     s    r   r   c                  V    t        j                  t        j                  t                 S r   )unittestfindTestCasessysmodulesr1   r4   r   r   
test_suiter     s    !!#++h"788r   __main__r   )defaultTest)r   r   rV   ra   supervisor.tests.baser   r   r   r   r   r   r   r	   objectSkipTestCaseTestCaser   r6   KQueuePollerTestsBaserd   PollerPollTestsBaser   rO   r   rg   r   r   r1   mainr4   r   r   <module>r      s    
    & D D @ .
 7h'' 7BO8)) O8b $--(U.- U.n "++&=8) =8~2& 2f 8%T& %TN 9 zHMMl+ r   