
    ogf                         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y)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y)TestMsg c                     || _         y 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                   l     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                    t        j                  |        t        t        |           t	        |       | _        t        j                  dd      \  }}t        j                  |       t        j                  |       || _        d| _        y)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   sh    4 D!$+''F'9((7))I$.$r   c                     | j                   r*| j                  j                          | j                          t	        j
                  |        y)zCall after every test case.N)r2   r+   stop_stopServerThreadr   tearDownr!   s    r   r8   zSocket.tearDownB   s5    	;;d#r   c                     | S )z<Test transmitter proceed method which just returns first argr   )messages    r   proceedzSocket.proceedI   s	     
.r   c                 \   t        j                  | j                  j                  | j                  |f      x| _        }d|_        |j                          | j                  t        j                  | j                  j                  t        j                  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%5
++

4>>5"9&; ;$l,//%..!5!5x||7O7OPR7STU	r   c                     | j                   t        j                  fdt        j                  j                  d             d | _         y )Nc                  h     j                          xs  j                  t        j                        S r   )is_alivejoinr   DEFAULT_SLEEP_TIME)r2   s   r   <lambda>z*Socket._stopServerThread.<locals>.<lambda>Z   s/    \2244 2001 r   r>   )r2   r   rD   rF   rG   rH   r   r2   s    @r   r7   zSocket._stopServerThreadW   s:    "",.. 23;<<3K3KB3OQ$r   c                    | j                         }| j                  j                          | j                          | j	                  |j                                | j                  j                          | j	                  | j                  j                                | j	                  t        j                  j                  | j                               y r   )rJ   r+   r/   r7   assertFalserM   r6   rE   r.   pathexistsr1   rQ   s     r   testStopPerCloseUnexpectedz!Socket.testStopPerCloseUnexpected^   s    ))+,++<((*+++4;;'')*277>>$..12r   c                 Z    	 t        | j                        S # t        $ r
}Y d }~y d }~ww xY wr   )r   r1   r   )r   es     r   _serverSocketzSocket._serverSocketk   s)    
$..
!!	 
s    	**c                    | j                         }t        j                  | j                  d      }g d}| j	                  |j                  |      |       | j	                  |j                  t               gg      d       | j                  ddd       | j	                  |j                  |      |       |j                          |j                          | j                  j                          t        j                  | j                  d      }| j	                  |j                  |      dg       | j                  j                          | j                          | j                  |j                                | j                  | j                  j                                | j                  t         j"                  j%                  | j&                               y )	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&(+6;;{+[9 6;;}-/KL79NTXY 6;;{+[9 	,,.,,. ++  ">>$,,a0&6;;{+j\:++<((*+4;;'')*277>>$..12r   c                 L   | j                         }t        j                  | j                  d      dddt        j
                  j                  ggt        j                  }	 d t        _        | j                  t        dfd       |t        _        y # |t        _        w xY w)Nr   r\   r]   r:   c                 "    | j                         S r   )r/   r!   s    r   rP   z0Socket.testSocketConnectBroken.<locals>.<lambda>   s    $**, r   zreset by peer|Broken pipec                  d     j                  t        j                  j                  d            S )Nr>   )timeout)rc   rF   rG   rH   )rf   rg   s   r   rP   z0Socket.testSocketConnectBroken.<locals>.<lambda>   s#    FKKX\\-E-Eb-IK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&fi(*:*:*>*>)?@+//+1%>>")%AJL &1>"[>"s   #'B B#c                    | j                         }t        j                  | j                  d      }g d}| j	                  |j                  |      |       t        j                  }	 d t        _        | j	                  |j                  |      d       |t        _        | j                  ddd       | j                  j                          | j                          | j                  |j                                y # |t        _        w xY w)	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&(+6;;{+[9//+1%@>"FKK,.JK%0>" 46KQUV++<((*+ &1>"s   '-C= =D
c                 \   t         j                  ddifd}	 |t         _        | j                         }| j                  t	        j
                  fdt        j                  j                  d                   t         _        | j                  ddd	       y # t         _        w xY w)
Ncntrr   c                  N    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   s3    v;!;	&kB
,
--
D/r   c                       d   dkD  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>>":HLL<T<TUW<XYZ 8=G54  A 8=s   A B B+c                 .   t        | j                  d      j                          | j                  t        | j
                  j                  | j                  d       | j                  d      }| j
                  j                          | j                          | j                  |j                                | j                  | j
                  j                                | j                  t        j                  j                  | j                               y )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!!#**DNNEC ))$/,++<((*+4;;'')*277>>$..12r   )F)r#   r$   r%   r)   r8   staticmethodr;   rJ   r7   rV   rY   rh   rr   ru   r   r   __classcell__)r4   s   @r   r'   r'   5   sP    	$  33B1,0A,3r   r'   c                       e Zd Zd Zd Zy)
ClientMiscc                     ddifd}fd}t        ||       | j                  dddd	
       | j                  d       | j                  dddd	
       y )Nrw   r   c                       d   dk  S )Nrw   (   r   )phases   r   _activez,ClientMisc.testErrorsInLoop.<locals>._active   s    
-"
r   c                  @    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   s%    =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 wJ[dCFG{K$Gr   c                     t         j                  }t        t        j                  d      t         _        	 t        j                          t        j                          |t         _        y # |t         _        w xY w)Nr   )sysstdoutr   r.   devnullr   printFormatted	printWiki)r   saved_stdouts     r   testPrintFormattedAndWikiz$ClientMisc.testPrintFormattedAndWiki   sK    ,BJJ$#* 3:3:s   (A) )A6N)r#   r$   r%   r   r   r   r   r   r   r      s    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      sk   . 
4 	 
     %  b b   $ %(f h3 h3V# r   