+
    Dfj                         R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
  ^ RIHt  ! R R	4      t]! ]'       * R
4       ! R R]
4      4       tR#   ] d    Rt L3i ; i)z-
Tests for L{twisted.internet.epollreactor}.
)skipIfConnectionDone)_ContinuousPolling)Clock)TestCase)epollreactorNc                   B   a  ] tR t^t o RtR tR tR tR tR t	Rt
V tR# )	
Descriptorz>
Records reads and writes, as if it were a C{FileDescriptor}.
c                    . V n         R # Neventsselfs   &I/usr/lib/python3/dist-packages/twisted/internet/test/test_epollreactor.py__init__Descriptor.__init__   s	        c                    ^# )    r   s   &r   filenoDescriptor.fileno   s    r   c                <    V P                   P                  R 4       R# )readNr   appendr   s   &r   doReadDescriptor.doRead    s    6"r   c                <    V P                   P                  R 4       R# )writeNr   r   s   &r   doWriteDescriptor.doWrite#   s    7#r   c                f    VP                  \        4       V P                  P                  R 4       R# )lostN)trapr   r   r   )r   reasons   &&r   connectionLostDescriptor.connectionLost&   s     N#6"r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r"   r(   __static_attributes____classdictcell____classdict__s   @r   r
   r
      s(     #$# #r   r
   z(epoll not supported in this environment.c                   r   a  ] tR t^+t o RtR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tRtV tR# )ContinuousPollingTestszU
L{_ContinuousPolling} can be used to read and write from C{FileDescriptor}
objects.
c                   \        \        4       4      pV P                  VP                  4       \	        4       pV P                  VP                  V4      4       VP                  V4       V P                  VP                  4       V P                  VP                  P                  4       V P                  VP                  P                  VP                  4       V P                  VP                  V4      4       R# )zQ
Adding a reader when there was previously no reader starts up a
C{LoopingCall}.
N)r   r   assertIsNone_loopobjectassertFalse	isReading	addReaderassertIsNotNone
assertTruerunningassertIsclock_reactorr   pollerreaders   &  r   test_addReader%ContinuousPollingTests.test_addReader2       
 $EG,&,,'))&12 V\\*,,-fll((&//:((01r   c                   \        \        4       4      pV P                  VP                  4       \	        4       pV P                  VP                  V4      4       VP                  V4       V P                  VP                  4       V P                  VP                  P                  4       V P                  VP                  P                  VP                  4       V P                  VP                  V4      4       R# )zQ
Adding a writer when there was previously no writer starts up a
C{LoopingCall}.
N)r   r   r6   r7   r8   r9   	isWriting	addWriterr<   r=   r>   r?   r@   rA   r   rC   writers   &  r   test_addWriter%ContinuousPollingTests.test_addWriterA   rG   r   c                N   \        \        4       4      p\        4       pVP                  V4       VP	                  V4       V P                  VP                  4       V P                  VP                  P                  4       . 4       V P                  VP                  V4      4       R# )z-
Removing a reader stops the C{LoopingCall}.
N)r   r   r8   r;   removeReaderr6   r7   assertEqualrA   getDelayedCallsr9   r:   rB   s   &  r   test_removeReader(ContinuousPollingTests.test_removeReaderP   {     $EG, F#&,,'88:B?))&12r   c                N   \        \        4       4      p\        4       pVP                  V4       VP	                  V4       V P                  VP                  4       V P                  VP                  P                  4       . 4       V P                  VP                  V4      4       R# )z-
Removing a writer stops the C{LoopingCall}.
N)r   r   r8   rJ   removeWriterr6   r7   rQ   rA   rR   r9   rI   rK   s   &  r   test_removeWriter(ContinuousPollingTests.test_removeWriter\   rU   r   c                    \        \        4       4      pVP                  \        4       4       VP	                  \        4       4       R# )z=
Removing unknown readers and writers silently does nothing.
N)r   r   rW   r8   rP   )r   rC   s   & r   test_removeUnknown)ContinuousPollingTests.test_removeUnknownh   s0     $EG,FH%FH%r   c                   \        \        4       4      p\        4       pVP                  V4       V P	                  VP
                  4       VP                  \        4       4       V P	                  VP
                  4       VP                  \        4       4       V P	                  VP
                  4       VP                  \        4       4       VP                  V4       V P	                  VP
                  4       V P                  VP
                  P                  4       V P                  \        VP                  P                  4       4      ^4       R# )zI
Adding multiple readers and writers results in a single
C{LoopingCall}.
N)r   r   r8   rJ   r<   r7   r;   rW   r=   r>   rQ   lenrA   rR   rK   s   &  r   test_multipleReadersAndWriters5ContinuousPollingTests.test_multipleReadersAndWritersp   s    
 $EG, V\\*"V\\*"V\\*"F#V\\*,,-V__<<>?Cr   c                   \        4       p\        V4      p\        4       pVP                  V4       V P	                  VP
                  . 4       VP                  R4       V P	                  VP
                  R.4       VP                  R4       V P	                  VP
                  RR.4       VP                  R4       V P	                  VP
                  . RO4       R# )zI
Adding a reader causes its C{doRead} to be called every 1
milliseconds.
gh㈵>r   N)r   r   r   )r   r   r
   r;   rQ   r   advancer   reactorrC   descs   &   r   test_readerPolling)ContinuousPollingTests.test_readerPolling   s    
 '#G,|b) vh/ vv&67 &>?r   c                   \        4       p\        V4      p\        4       pVP                  V4       V P	                  VP
                  . 4       VP                  R4       V P	                  VP
                  R.4       VP                  R4       V P	                  VP
                  RR.4       VP                  R4       V P	                  VP
                  . RO4       R# )zJ
Adding a writer causes its C{doWrite} to be called every 1
milliseconds.
MbP?r!   N)r!   r!   r!   )r   r   r
   rJ   rQ   r   rb   rc   s   &   r   test_writerPolling)ContinuousPollingTests.test_writerPolling   s    
 '#G,|b)wi0w&89&ABr   c                
   \        4       p\        V4      p\        4       pR Vn        VP	                  V4       V P                  VP                  . 4       VP                  R4       V P                  VP                  R.4       R# )z]
If a C{doRead} returns a value indicating disconnection,
C{connectionLost} is called on it.
c                      \        4       # r   r   r   r   r   <lambda>BContinuousPollingTests.test_connectionLostOnRead.<locals>.<lambda>   s    n.r   ri   r%   N)r   r   r
   r   r;   rQ   r   rb   rc   s   &   r   test_connectionLostOnRead0ContinuousPollingTests.test_connectionLostOnRead   sg    
 '#G,|.b)vh/r   c                
   \        4       p\        V4      p\        4       pR Vn        VP	                  V4       V P                  VP                  . 4       VP                  R4       V P                  VP                  R.4       R# )z^
If a C{doWrite} returns a value indicating disconnection,
C{connectionLost} is called on it.
c                      \        4       # r   r   r   r   r   rn   CContinuousPollingTests.test_connectionLostOnWrite.<locals>.<lambda>   s    ~/r   ri   r%   N)r   r   r
   r"   rJ   rQ   r   rb   rc   s   &   r   test_connectionLostOnWrite1ContinuousPollingTests.test_connectionLostOnWrite   sg    
 '#G,|/b)vh/r   c                    \        \        4       4      p\        4       p\        4       p\        4       pVP                  V4       VP                  V4       VP	                  V4       VP	                  V4       VP                  4       pV P                  VP                  4       . 4       V P                  VP                  4       . 4       V P                  \        V4      ^4       V P                  \        V4      W#V04       R# )z^
L{_ContinuousPolling.removeAll} removes all descriptors and returns
the readers and writers.
N)r   r   r8   r;   rJ   	removeAllrQ   
getReaders
getWritersr^   set)r   rC   rD   rL   bothremoveds   &     r   test_removeAll%ContinuousPollingTests.test_removeAll   s    
 $EG,x  ""$**,b1**,b1Wq)W'=>r   c                    \        \        4       4      p\        4       pVP                  V4       V P	                  W!P                  4       4       R# )zJ
L{_ContinuousPolling.getReaders} returns a list of the read
descriptors.
N)r   r   r8   r;   assertInry   rB   s   &  r   test_getReaders&ContinuousPollingTests.test_getReaders   :    
 $EG, f//12r   c                    \        \        4       4      p\        4       pVP                  V4       V P	                  W!P                  4       4       R# )zK
L{_ContinuousPolling.getWriters} returns a list of the write
descriptors.
N)r   r   r8   rJ   r   rz   rK   s   &  r   test_getWriters&ContinuousPollingTests.test_getWriters   r   r   r   N)r*   r+   r,   r-   r.   rE   rM   rS   rX   r[   r_   rf   rj   rp   ru   r~   r   r   r/   r0   r1   s   @r   r4   r4   +   sS     
22
3
3&D&@"C"00?&33 3r   r4   )r.   unittestr   twisted.internet.errorr   twisted.internet.posixbaser   twisted.internet.taskr   twisted.trial.unittestr   twisted.internetr   ImportErrorr
   r4   r   r   r   <module>r      sm     1 9 ' +-
# #, LDEz3X z3 Fz37  Ls   A 	AA