
    =*fc                         S r SrSrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
  SSKJr  SS	KJrJrJrJrJr  SS
KJr  SSKJr  SSK	J
r
  S r " S S\5      r " S S\
5      r " S S\
5      rg)zSteven Hiscocksz"Copyright (c) 2013 Steven HiscocksGPL    N   )LogCaptureTestCase   )protocol)asyncoreRequestHandlerloopAsyncServerAsyncServerException)Utils)CSocketc                      [        S5      e)Ntest unpickle error	Exception)argss    ?/usr/lib/python3/dist-packages/fail2ban/tests/sockettestcase.pyTestMsgErrorr   ,   s    &''    c                   *    \ rS rSr\S44S jrS rSrg)TestMsg.    c                     Xl         g Nunpickle)selfr   s     r   __init__TestMsg.__init__/   s    -r   c                     U R                   $ r   r   r   s    r   
__reduce__TestMsg.__reduce__1   s    	r   r   N)__name__
__module____qualname____firstlineno__r   r    r$   __static_attributes__r   r   r   r   r   .   s    *B/ r   r   c                   ~   ^  \ rS rSrU 4S jrU 4S jr\S 5       rSS jrS r	S r
S rS	 rS
 rS rS rS rSrU =r$ )Socket5   c                    > [         [        U ]  5         [        U 5      U l        [
        R                  " SS5      u  p[        R                  " U5        [        R                  " U5        X l
        SU l        g)zCall before every test case.zfail2ban.sockz
f2b-socketN)superr,   setUpr   servertempfilemkstemposcloseremove	sock_nameserverThread)r   sock_fdr7   	__class__s      r   r0   Socket.setUp7   sV    D!$+''F'((7))I.$r   c                    > U R                   (       a*  U R                  R                  5         U R                  5         [        [
        U ]  5         g)zCall after every test case.N)r8   r1   stop_stopServerThreadr/   r,   tearDown)r   r:   s    r   r?   Socket.tearDownA   s5    	;; r   c                     U $ )z<Test transmitter proceed method which just returns first argr   )messages    r   proceedSocket.proceedH   s	     
.r   c                 Z   [         R                  " U R                  R                  U R                  U4S9=U l        nSUl        UR                  5         U R                  [        R                  " U R                  R                  [        R                  R                  S5      5      5        U$ )N)targetr   T
   )	threadingThreadr1   startr7   r8   daemon
assertTruer   wait_forisActiveunittestF2BmaxWaitTime)r   forcer8   s      r   _createServerThreadSocket._createServerThreadM   s    %.%5%5
++

4>>5"9&; ;$l,//%..!5!5x||7O7OPR7STU	r   c                    ^ U R                   m[        R                  " U4S j[        R                  R                  S5      5        S U l         g )Nc                  z   > T R                  5       (       + =(       d    T R                  [        R                  5      $ r   )is_alivejoinr   DEFAULT_SLEEP_TIME)r8   s   r   <lambda>*Socket._stopServerThread.<locals>.<lambda>Y   s/    \2244 20012r   rG   )r8   r   rM   rO   rP   rQ   r   r8   s    @r   r>   Socket._stopServerThreadV   s:    "",.. 23;<<3K3KB3OQ$r   c                    U R                  5       nU R                  R                  5         U R                  5         U R	                  UR                  5       5        U R                  R                  5         U R	                  U R                  R                  5       5        U R	                  [        R                  R                  U R                  5      5        g r   )rS   r1   r5   r>   assertFalserW   r=   rN   r4   pathexistsr7   r\   s     r   testStopPerCloseUnexpected!Socket.testStopPerCloseUnexpected]   s    ))+,++<((*+++4;;'')*277>>$..12r   c                 \     [        U R                  5      $ ! [         a
  n S nAg S nAff = fr   )r   r7   r   )r   es     r   _serverSocketSocket._serverSocketj   s)    
$..
!!	 
s    
++c                    U R                  5       n[        R                  " U R                  S5      n/ SQnU R	                  UR                  U5      U5        U R	                  UR                  [        5       //5      S5        U R                  SSSS9  U R	                  UR                  U5      U5        UR                  5         UR                  5         U R                  R                  5         [        R                  " U R                  S5      nU R	                  UR                  U5      S/5        U R                  R                  5         U R                  5         U R                  UR                  5       5        U R                  U R                  R                  5       5        U R                  [         R"                  R%                  U R&                  5      5        g )	Nr   AtestrB   ERROR: test unpickle errorz!PROTO-error: load message failed:r   TallSHUTDOWN)rS   r   rM   rf   assertEqualsendr   assertLoggedr5   r1   stop_communicationr=   r>   r_   rW   rN   r4   r`   ra   r7   )r   r8   clienttestMessages       r   
testSocketSocket.testSocketp   s]   ))+,>>$,,a0&(+6;;{+[9 6;;}-/KL79NTXY 6;;{+[9 	,,.,,. ++  ">>$,,a0&6;;{+j\:++<((*+4;;'')*277>>$..12r   c                 P  ^^ U R                  5       n[        R                  " U R                  S5      mSSS[        R
                  R                  //m[        R                  n S [        l        U R                  [        SUU4S j5        U[        l        g ! U[        l        f = f)Nr   rj   rk   rB   c                 "    U R                  5       $ r   )r5   r#   s    r   rZ   0Socket.testSocketConnectBroken.<locals>.<lambda>   s
    $**,r   zreset by peer|Broken pipec                  ^   > T R                  T[        R                  R                  S5      S9$ )NrG   )timeout)rq   rO   rP   rQ   )rt   ru   s   r   rZ   rz      s!    FKKX\\-E-Eb-IKJr   )rS   r   rM   rf   r   CSPROTOENDr	   found_terminatorassertRaisesRegexr   )r   r8   org_handlerrt   ru   s      @@r   testSocketConnectBrokenSocket.testSocketConnectBroken   s    ))+,>>$,,a0&fi(*:*:*>*>)?@+//+1%>>")%AJL &1>"[>"s   $(B B%c                    U R                  5       n[        R                  " U R                  S5      n/ SQnU R	                  UR                  U5      U5        [        R                  n S [        l        U R	                  UR                  U5      S5        U[        l        U R                  SSSS9  U R                  R                  5         U R                  5         U R                  UR                  5       5        g ! U[        l        f = f)	Nr   ri   c                     [        5       $ r   )r   r#   s    r   rZ   .Socket.testStopByCommunicate.<locals>.<lambda>   s    ,.r   rl   zUnexpected communication errorr   Trm   )rS   r   rM   rf   rp   rq   r	   r   rr   r1   r=   r>   r_   rW   )r   r8   rt   ru   r   s        r   testStopByCommunicateSocket.testStopByCommunicate   s    ))+,>>$,,a0&(+6;;{+[9//+1%@>"FKK,.JK%0>" 46KQUV++<((*+ &1>"s   (-C; ;Dc                 \  ^^ [         R                  mSS0mUU4S jn U[         l        U R                  5       nU R                  [        R
                  " U4S j[        R                  R                  S5      5      5        T[         l        U R                  SSSS	9  g ! T[         l        f = f)
Ncntrr   c                  P   > TS==   S-  ss'   TS   S:  a  [        S5      eT" U 6 $ )Nr   r   2   ztest errors in poll)RuntimeError)r   errorg_polls    r   _produce_error-Socket.testLoopErrors.<locals>._produce_error   s3    v;!;	&kB
,
--
D/r   c                     > T S   S:  $ )Nr   r   r   )r   s   r   rZ   'Socket.testLoopErrors.<locals>.<lambda>   s    #f+*:r   rG   z1Server connection was closed: test errors in poll0Too many errors - stop logging connection errorsTrm   )
r   pollrS   rL   r   rM   rO   rP   rQ   rr   )r   r   r8   r   r   s      @@r   testLoopErrorsSocket.testLoopErrors   s    ]](	#!8=**,<??5>>":HLL<T<TUW<XYZ 8=G54  A 8=s   A"B B+c                 .   [        U R                  S5      R                  5         U R                  [        U R
                  R                  U R                  S5        U R                  S5      nU R
                  R                  5         U R                  5         U R                  UR                  5       5        U R                  U R
                  R                  5       5        U R                  [        R                  R                  U R                  5      5        g )NwFT)openr7   r5   assertRaisesr   r1   rJ   rS   r=   r>   r_   rW   rN   r4   r`   ra   r\   s     r   testSocketForceSocket.testSocketForce   s    t~~s!!#**DNNEC ))$/,++<((*+4;;'')*277>>$..12r   )r1   r8   r7   )F)r&   r'   r(   r)   r0   r?   staticmethodrC   rS   r>   rb   rf   rv   r   r   r   r   r*   __classcell__)r:   s   @r   r,   r,   5   sU    !  33B1,0A,3 3r   r,   c                        \ rS rSrS rS rSrg)
ClientMisc   c                    ^ SS0mU4S jnU4S jn[        XS9  U R                  SSSS	S
9  U R                  S5        U R                  SSSS	S
9  g )Nr   r   c                     > T S   S:  $ )Nr   (   r   )phases   r   _active,ClientMisc.testErrorsInLoop.<locals>._active   s    
-"
r   c                  @   > TS==   S-  ss'   [        STS   -  5      e)Nr   r   z	test *%d*r   )r   r   s    r   _poll*ClientMisc.testErrorsInLoop.<locals>._poll   s%    =A=	;v.	//r   )use_pollztest *1*z	test *10*z	test *20*Trm   r   z	test *21*z	test *22*z	test *23*)r
   rr   assertNotLogged)r   r   r   r   s      @r   testErrorsInLoopClientMisc.testErrorsInLoop   s]    1+%0 wJ[dCFG{K$Gr   c                     [         R                  n[        [        R                  S5      [         l         [
        R                  " 5         [
        R                  " 5         U[         l        g ! U[         l        f = f)Nr   )sysstdoutr   r4   devnullr   printFormatted	printWiki)r   saved_stdouts     r   testPrintFormattedAndWiki$ClientMisc.testPrintFormattedAndWiki   sK    ,BJJ$#* 3:3:s   *A+ +A8r   N)r&   r'   r(   r)   r   r   r*   r   r   r   r   r      s    H	r   r   )
__author____copyright____license__r4   r   r2   rH   timerO   utilsr    r   server.asyncserverr   r	   r
   r   r   server.utilsr   client.csocketr   r   objectr   r,   r   r   r   r   <module>r      sk   . 
4 	 
     %  b b   $ %(f g3 g3T# r   