
    Gkc                         d dl Z d dlZd dlZd dlZd dlZd dlZej                  dk\  rd dlZnd dlZddl	m
Z
 ddlmZmZmZmZ  G d dej                         Z G d d	ej$                        Zy)
    N   r      )	DummyJail)
CONFIG_DIRasyncserverUtils
uni_decodec                       e Zd Zd Zd Zy)TestSMTPServerc                 R    t        j                  j                  | g|  d| _        y )NF)smtpd
SMTPServer__init__ready)selfargss     C/usr/lib/python3/dist-packages/fail2ban/tests/action_d/test_smtp.pyr   zTestSMTPServer.__init__%   s"    D(4($*    c                     || _         || _        || _        || _        t	        j
                  ddt        |            | _        d| _        y )Nz\n[\t ] T)	peermailfromrcpttosorg_dataresubr
   datar   )r   r   r   r   r   kwargss         r   process_messagezTestSMTPServer.process_message)   s>    $)$-$,$-ffZj&67$)$*r   N)__name__
__module____qualname__r   r     r   r   r   r   #   s    r   r   c                   V     e Zd Z fdZ fdZd
dZd Zd ZddZd Z	d Z
d	 Z xZS )SMTPActionTestc                 ^    t         j                  j                  d       t        t                   t                _        t        j                  j                  t        dd      }t        j                  j                  |j                  d            }t        j                  dk\  r/t         j"                  j%                  ||      j'                         }nt)        j*                  ||      }t-        dd       _         j.                  j0                  j3                         d   }|j5                   j                  d	d
|z         _        d _        t;        j<                  t>        j@                  d fdi       _!        d jB                  _"         jB                  jG                          y)zCall before every test case.zsmtp.py)actionzaction.dz.pyr   )	localhostr   N   testzlocalhost:%i)hostTactivec                       j                   S N)_activer   s   r   <lambda>z&SMTPActionTest.setUp.<locals>.<lambda>L   s    dll r   )targetr   )$unittestF2BSkipIfCfgMissingsuperr&   setUpr   jailospathjoinr   basenamerstripsysversion_info	importlib	machinerySourceFileLoaderload_moduleimpload_sourcer   r   socketgetsocknameActionr(   r0   	threadingThreadr   loop_loop_threaddaemonstart)r   pythonModulepythonModuleNamecustomActionModuleport	__class__s   `    r   r8   zSMTPActionTest.setUp5   sP   
,,y1#%k$)j*i@,WW%%l&9&9%&@A!++<<l$$/KM  l$ .5$*				&	&	(	+$"))99f>D0 * 2$+ $,&&


H.B#CE$!$r   c                     | j                   j                          d| _        | j                  j	                          t
        t        |           y)zCall after every test case.FN)r   closer0   rM   r<   r7   r&   tearDown)r   rT   s    r   rW   zSMTPActionTest.tearDownP   s9    **$,&(r   c                 v     |r|dz  }d j                   _         |        t        j                   fd|       y )N   Fc                  0     j                   j                  S r/   )r   r   r1   s   r   r2   z/SMTPActionTest._exec_and_wait.<locals>.<lambda>[   s    )) r   )r   r   r	   wait_for)r   doactiontimeoutshorts   `   r   _exec_and_waitzSMTPActionTest._exec_and_waitW   s.    
GrMG$**
*..)73r   c                 d   | j                  | j                  j                         | j                  | j                  j
                  d       | j                  | j                  j                  dg       | j                  d| j                  j                  z  | j                  j                  v        y )Nfail2banrootzSubject: [Fail2Ban] %s: started)r_   r(   rO   assertEqualr   r   r   
assertTruer9   namer   r1   s    r   	testStartzSMTPActionTest.testStart]   s|    dkk''(4::&&
34::%%x0//$tyy~~5
jjoor   c                 d   | j                  | j                  j                         | j                  | j                  j
                  d       | j                  | j                  j                  dg       | j                  d| j                  j                  z  | j                  j                  v        y )Nra   rb   zSubject: [Fail2Ban] %s: stopped)r_   r(   stoprc   r   r   r   rd   r9   re   r   r1   s    r   testStopzSMTPActionTest.testStope   s    dkk&&'4::&&
34::%%x0//$IINNjjoo&'r   c                     dddddd|rdd<    j                   fd	|
       |r j                  t         fd       y  j                   j                  j
                  d        j                   j                  j                  dg       d j                  j                  dd   } j                  | j                  j                          j                  dd   z   j                  j                         d j                  _         j                   fd        j                  d    j                  j                         d j                  _         j                   fd        j                  d    j                  j                         d j                  _         j                   fd        j                  d    j                  j                         y )Nz	127.0.0.2r   zTest fail 1
zTest fail 1
Test Fail2
z"Test fail 1
Test Fail2
Test Fail3
)ipfailuresmatchesipjailmatches	ipmatchesr*   restoredc                  :    j                   j                         S r/   r(   banaInfor   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>x       dkkooe4 r   )r^   c                  0     j                   j                  S r/   )r   r   r1   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>z   s    TZZ-@-@ r   ra   rb   zSubject: [Fail2Ban] z	: banned rk   z%i attemptsrl   rm   c                  :    j                   j                         S r/   rr   rt   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>   rv   r   rn   c                  :    j                   j                         S r/   rr   rt   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>   rv   r   ro   c                  :    j                   j                         S r/   rr   rt   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>   rv   r   )r_   assertRaisesAttributeErrorrc   r   r   r   r9   re   assertInr   r(   rm   )r   rp   subjectru   s   `  @r   _testBanzSMTPActionTest._testBanm   s~   	/7% 54HE^%@A	4::&&
34::%%x099>>5; '--)--5$$djjoo7 "$++45--i $**//2'$++45--o&

8#$++45--k"DJJOO4r   c                 $    | j                          y r/   r   r1   s    r   testBanzSMTPActionTest.testBan   s    --/r   c                 (    | j                  d       y )NT)rp   r   r1   s    r   testNOPByRestoredz SMTPActionTest.testNOPByRestored   s    ---r   c                    | j                  | j                  j                         | j                  | j                  j
                  d       | j                  | j                  j                  dg       d| j                  _        d| j                  _        d| j                  _	        | j                  | j                  j                         | j                  | j                  j
                  d       | j                  d| j                  j                  d| j                  j                  d| j                  j                  v        | j                  t        | j                  j                        t        dd	g             y )
Nra   rb   Testztest@example.comz#test@example.com, test2@example.comzFrom: z <>ztest2@example.com)r_   r(   rO   rc   r   r   r   fromnamefromaddrtoaddrrd   r   setr1   s    r   testOptionszSMTPActionTest.testOptions   s   dkk''(4::&&
34::%%x0$+++$++<$++dkk''(4::&&(:;//KK$++..037::??C D3tzz))*C1CEX0Y,Z[r   )r   F)F)r!   r"   r#   r8   rW   r_   rf   ri   r   r   r   r   __classcell__)rT   s   @r   r&   r&   3   s2    6)4'!5F\r   r&   )r:   r   rJ   r4   r   r?   r@   rA   rE   	dummyjailr   utilsr   r   r	   r
   r   r   TestCaser&   r$   r   r   <module>r      s^   ( 
    	 
v ! > >U%%  o\X&& o\r   