
    Bd                         d Z dZdZddlZddlZ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 dd	lmZmZmZmZmZ dd
lmZ ddlmZ ddl	m
Z
 d Z G d de          Z G d de
          Z G d de
          ZdS )zSteven Hiscocksz"Copyright (c) 2013 Steven HiscocksGPL    N   )LogCaptureTestCase   )protocol)asyncoreRequestHandlerloopAsyncServerAsyncServerException)Utils)CSocketc                       t          d          )Ntest unpickle error	Exception)argss    ?/usr/lib/python3/dist-packages/fail2ban/tests/sockettestcase.pyTestMsgErrorr   ,   s    &'''    c                   "    e Zd ZedffdZd ZdS )TestMsg c                     || _         d S Nunpickle)selfr   s     r   __init__zTestMsg.__init__/   s    $---r   c                     | j         S r   r   r   s    r   
__reduce__zTestMsg.__reduce__1   s
    	r   N)__name__
__module____qualname__r   r   r"   r   r   r   r   r   .   s?        *B/        r   r   c                   r     e Zd Z fdZd Zed             ZddZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Z xZS )Socketc                 B   t          j        |            t          t          |                                            t	          |           | _        t          j        dd          \  }}t          j	        |           t          j
        |           || _        d| _        dS )zCall before every test case.zfail2ban.sockz
f2b-socketN)r   setUpsuperr'   r   servertempfilemkstemposcloseremove	sock_nameserverThread)r   sock_fdr1   	__class__s      r   r)   zSocket.setUp7   s    4   D!!$+'FF'9(7)I$.$r   c                     | j         r-| j                                         |                                  t	          j        |            dS )zCall after every test case.N)r2   r+   stop_stopServerThreadr   tearDownr!   s    r   r8   zSocket.tearDownB   sJ    	 ;d#####r   c                     | S )z<Test transmitter proceed method which just returns first argr   )messages    r   proceedzSocket.proceedI   s	     
.r   Fc                 6   t          j        | j        j        | j        |f          x| _        }d|_        |                                 |                     t          j	        | j        j
        t          j                            d                               |S )N)targetr   T
   )	threadingThreadr+   startr1   r2   daemon
assertTruer   wait_forisActiveunittestF2BmaxWaitTime)r   forcer2   s      r   _createServerThreadzSocket._createServerThreadN   s    %.%5
+
4>5"9&; &; &; ;$l,//%.!5x|7O7OPR7S7STTUUU	r   c                     | j         t          j        fdt          j                            d                     d | _         d S )Nc                  l                                       p                     t          j                  S r   )is_alivejoinr   DEFAULT_SLEEP_TIME)r2   s   r   <lambda>z*Socket._stopServerThread.<locals>.<lambda>Z   s2    \22444 2011 r   r>   )r2   r   rD   rF   rG   rH   r   r2   s    @r   r7   zSocket._stopServerThreadW   sW    ",. 2 2 2 23;<3K3KB3O3OQ Q Q$r   c                    |                                  }| j                                         |                                  |                     |                                           | j                                         |                     | j                                                   |                     t          j	        
                    | j                             d S r   )rJ   r+   r/   r7   assertFalserM   r6   rE   r.   pathexistsr1   rQ   s     r   testStopPerCloseUnexpectedz!Socket.testStopPerCloseUnexpected^   s    ))++,+<((**++++4;''))***27>>$.1122222r   c                 \    	 t          | j                  S # t          $ r}Y d }~d S d }~ww xY wr   )r   r1   r   )r   es     r   _serverSocketzSocket._serverSocketk   sC    
$.
!
!!	   
$$$$$s    
++c                 $   |                                  }t          j        | j        d          }g d}|                     |                    |          |           |                     |                    t                      gg          d           |                     ddd           |                     |                    |          |           |                                 |                                 | j	        
                                 t          j        | j        d          }|                     |                    |          dg           | j	                                         |                                  |                     |                                           |                     | j	                                                   |                     t           j                            | j                             d S )	Nr   Atestr:   ERROR: test unpickle errorz!PROTO-error: load message failed:r   TallSHUTDOWN)rJ   r   rD   rY   assertEqualsendr   assertLoggedr/   r+   stop_communicationr6   r7   rS   rM   rE   r.   rT   rU   r1   )r   r2   clienttestMessages       r   
testSocketzSocket.testSocketq   s   ))++,>$,a00&(((+6;;{++[999 6;;}--/KLLL79NTXYYY 6;;{++[999 	,,...,,... +  """>$,a00&6;;{++j\:::+<((**+++4;''))***27>>$.1122222r   c                 @   |                                  }t          j        | j        d          dddt          j        j        ggt          j        }	 d t          _        | 	                    t          dfd           |t          _        d S # |t          _        w xY w)Nr   r\   r]   r:   c                 *    |                                  S r   )r/   r!   s    r   rP   z0Socket.testSocketConnectBroken.<locals>.<lambda>   s    $**,, r   zreset by peer|Broken pipec                  l                          t          j                            d                    S )Nr>   )timeout)rc   rF   rG   rH   )rf   rg   s   r   rP   z0Socket.testSocketConnectBroken.<locals>.<lambda>   s'    FKKX\-E-Eb-I-IKJJ r   )rJ   r   rD   rY   r   CSPROTOENDr	   found_terminatorassertRaisesRegexr   )r   r2   org_handlerrf   rg   s      @@r   testSocketConnectBrokenzSocket.testSocketConnectBroken   s    ))++,>$,a00&fi(*:*>)?@+/+1%>%>>")%AJJJJJL L L &1>"""[>"0000s   -B Bc                 V   |                                  }t          j        | j        d          }g d}|                     |                    |          |           t          j        }	 d t          _        |                     |                    |          d           |t          _        n# |t          _        w xY w|                     ddd           | j	        
                                 |                                  |                     |                                           d S )	Nr   r[   c                     t                      S r   )r   r!   s    r   rP   z.Socket.testStopByCommunicate.<locals>.<lambda>   s
    ,.. r   r^   zUnexpected communication errorr   Tr_   )rJ   r   rD   rY   rb   rc   r	   ro   rd   r+   r6   r7   rS   rM   )r   r2   rf   rg   rq   s        r   testStopByCommunicatezSocket.testStopByCommunicate   s   ))++,>$,a00&(((+6;;{++[999/+1%@%@>"FKK,,.JKKK%0>""[>"0000 46KQUVVV+<((**+++++s   )6B, ,B:c                 t   t           j        ddifd}	 |t           _        |                                 }|                     t	          j        fdt          j                            d                               t           _        n# t           _        w xY w| 	                    ddd	           d S )
Ncntrr   c                  d    dxx         dz  cc<   d         dk     rt          d           |  S )Nrw   r   2   ztest errors in poll)RuntimeError)r   errorg_polls    r   _produce_errorz-Socket.testLoopErrors.<locals>._produce_error   sC    v;;;!;;;	&kB
,
-
--
(D/r   c                       d         dk    S )Nrw   ry   r   )r{   s   r   rP   z'Socket.testLoopErrors.<locals>.<lambda>   s    #f+*: r   r>   z1Server connection was closed: test errors in poll0Too many errors - stop logging connection errorsTr_   )
r   pollrJ   rC   r   rD   rF   rG   rH   rd   )r   r}   r2   r{   r|   s      @@r   testLoopErrorszSocket.testLoopErrors   s    ](	#     !8=**,,<??5>":":":":HL<T<TUW<X<XYYZZZ 8==88=G54  A A A A As   A(B Bc                 D   t          | j        d                                           |                     t          | j        j        | j        d           |                     d          }| j                                         | 	                                 | 
                    |                                           | 
                    | j                                                   | 
                    t          j                            | j                             d S )NwFT)openr1   r/   assertRaisesr   r+   rA   rJ   r6   r7   rS   rM   rE   r.   rT   rU   rQ   s     r   testSocketForcezSocket.testSocketForce   s    t~s!!###*DNEC C C ))$//,+<((**+++4;''))***27>>$.1122222r   )F)r#   r$   r%   r)   r8   staticmethodr;   rJ   r7   rV   rY   rh   rr   ru   r   r   __classcell__)r4   s   @r   r'   r'   5   s        	 	 	 	 	$ $ $   ,     3 3 3  3 3 3B1 1 1, , ,0A A A,3 3 3 3 3 3 3r   r'   c                       e Zd Zd Zd ZdS )
ClientMiscc                     ddifd}fd}t          ||           |                     dddd	
           |                     d           |                     dddd	
           d S )Nrw   r   c                       d         dk     S )Nrw   (   r   )phases   r   _activez,ClientMisc.testErrorsInLoop.<locals>._active   s    
-"
r   c                  T    dxx         dz  cc<   t          dd         z            )Nrw   r   z	test *%d*r   )r   r   s    r   _pollz*ClientMisc.testErrorsInLoop.<locals>._poll   s0    ===A===	;v.	/	//r   )use_pollztest *1*z	test *10*z	test *20*Tr_   r   z	test *21*z	test *22*z	test *23*)r
   rd   assertNotLogged)r   r   r   r   s      @r   testErrorsInLoopzClientMisc.testErrorsInLoop   s    1+%    0 0 0 0 0 wJ[dCCCFGGG{K$GGGGGr   c                     t           j        }t          t          j        d          t           _        	 t          j                     t          j                     |t           _        d S # |t           _        w xY w)Nr   )sysstdoutr   r.   devnullr   printFormatted	printWiki)r   saved_stdouts     r   testPrintFormattedAndWikiz$ClientMisc.testPrintFormattedAndWiki   s_    ,BJ$$#* 3:::3:s   &A& &A4N)r#   r$   r%   r   r   r   r   r   r   r      s5        H H H	 	 	 	 	r   r   )
__author____copyright____license__r.   r   r,   r?   timerF   utilsr    r   server.asyncserverr   r	   r
   r   r   server.utilsr   client.csocketr   r   objectr   r'   r   r   r   r   <module>r      su  . 
4 				 



        % % % % % %       b b b b b b b b b b b b b b             $ $ $ $ $ $ % % % % % %( ( (    f   h3 h3 h3 h3 h3 h3 h3 h3V    #     r   