
    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dS )
    N   r      )	DummyJail)
CONFIG_DIRasyncserverUtils
uni_decodec                       e Zd Zd Zd ZdS )TestSMTPServerc                 B    t          j        j        | g|R   d| _        d S )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| _        d S )Nz\n[\t ] T)	peermailfromrcpttosorg_dataresubr
   datar   )r   r   r   r   r   kwargss         r   process_messagezTestSMTPServer.process_message)   sF    $)$-$,$-fZj&6&677$)$***r   N)__name__
__module____qualname__r   r     r   r   r   r   #   s2              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                            d           t          t                                                      t                       _        t          j	        
                    t          dd          }t          j	                            |                    d                    }t          j        dk    r3t           j                            ||                                          }nt)          j        ||          }t-          dd           _         j        j                                        d         }|                     j        d	d
|z             _        d _        t;          j        t>          j         d fdi           _!        d j!        _"         j!        #                                 dS )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	    dl 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   s   
,y111##%%%kk$)j*i@@,W%%l&9&9%&@&@AA!+<<l$ $$/KMM  l$ $ .55$*			&	&	(	(	+$"))9f>D0 * 2 2$+ $,&

H.B.B.B.B#CE E E$!$r   c                     | j                                          d| _        | j                                         t          t          |                                            dS )zCall after every test case.FN)r   closer0   rM   r<   r7   r&   tearDown)r   rT   s    r   rW   zSMTPActionTest.tearDownP   sU    *$,&&(((((r   r   Fc                 r     |r|dz  }d j         _         |             t          j         fd|           d S )N   Fc                       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   sH    
GrMG$*
(***.))))733333r   c                 "   |                      | j        j                   |                     | j        j        d           |                     | j        j        dg           |                     d| j        j	        z  | j        j
        v            d S )Nfail2banrootzSubject: [Fail2Ban] %s: started)r_   r(   rO   assertEqualr   r   r   
assertTruer9   namer   r1   s    r   	testStartzSMTPActionTest.testStart]   s    dk'(((4:&
3334:%x000//$ty~5
jo    r   c                 "   |                      | j        j                   |                     | j        j        d           |                     | j        j        dg           |                     d| j        j	        z  | j        j
        v            d S )Nra   rb   zSubject: [Fail2Ban] %s: stopped)r_   r(   stoprc   r   r   r   rd   r9   re   r   r1   s    r   testStopzSMTPActionTest.testStope   s    dk&'''4:&
3334:%x000//$INjo&' ' ' ' 'r   c                     dddddd|rdd<                          fd	|
           |r                      t           fd           d S                       j        j        d                                 j        j        dg           d j        j        dd         } 	                    | j        j
                    	                    dd         z   j        j
                   d j        _                               fd            	                    d          j        j
                   d j        _                               fd            	                    d          j        j
                   d j        _                               fd            	                    d          j        j
                   d S )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                  8    j                                        S r/   r(   banaInfor   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>x       dkooe44 r   )r^   c                       j         j        S r/   )r   r   r1   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>z   s    TZ-@ r   ra   rb   zSubject: [Fail2Ban] z	: banned rk   z%i attemptsrl   rm   c                  8    j                                        S r/   rr   rt   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>   rv   r   rn   c                  8    j                                        S r/   rr   rt   s   r   r2   z)SMTPActionTest._testBan.<locals>.<lambda>   rv   r   ro   c                  8    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44444HEEE 
^%@%@%@%@AAA	64:&
3334:%x00009>>>5;; '--)))--5$$djo7 7 7 "$+44444555--i $*/222'$+44444555--o&
888#$+44444555--k"DJO44444r   c                 .    |                                   d S r/   r   r1   s    r   testBanzSMTPActionTest.testBan   s    --/////r   c                 2    |                      d           d S )NT)rp   r   r1   s    r   testNOPByRestoredz SMTPActionTest.testNOPByRestored   s    ---r   c                 |   |                      | j        j                   |                     | j        j        d           |                     | j        j        dg           d| j        _        d| j        _        d| j        _	        |                      | j        j                   |                     | j        j        d           | 
                    d| j        j        d| j        j        d| j        j        v            |                     t          | j        j                  t          dd	g                     d S )
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&   dk'(((4:&
3334:%x000$++$+<$+dk'(((4:&(:;;;///K$+...037:?C D D D3tz)**C1CEX0Y,Z,Z[[[[[r   )r   F)F)r!   r"   r#   r8   rW   r_   rf   ri   r   r   r   r   __classcell__)rT   s   @r   r&   r&   3   s            6) ) ) ) )4 4 4 4  ' ' '!5 !5 !5 !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\ o\ o\ o\ o\X& o\ o\ o\ o\ o\r   