
    BdH                     D   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	Z	ddl
m
Z
 ddlmZ ddlmZmZ d	d
lmZmZmZmZmZmZmZmZmZ d	dlmZ  G d dej                  Zd Zd Z  G d dej                  Z! G d de          Z" G d dej                  Z#dS )zYaroslav Halchenkoz%Copyright (c) 2013 Yaroslav HalchenkoGPL    N)glob)StringIO   )LogCaptureTestCaselogSys   )	formatExceptionInfo	mbasename	TraceBackFormatterWithTraceBack	getLoggergetVerbosityFormat
splitwords
uni_decode
uni_string)MyTimec                        e Zd Zd Zd Zd ZdS )HelpersTestc                     	 t          d          #  t                      \  }}|                     |d           |                     |d           Y d S xY w)NzVery bad exception
ValueErrorr   r
   assertEqualselfnameargss      =/usr/lib/python3/dist-packages/fail2ban/tests/misctestcase.pytestFormatExceptionInfoBasicz(HelpersTest.testFormatExceptionInfoBasic+   sd    0	(	)	))0#%%:4D,'''D.//////s	    ?Ac                     	 t          dd           #  t                      \  }}|                     |d           |                     |d           Y d S xY w)NzVery badr   z('Very bad', None)r   r   s      r   testFormatExceptionConvertArgsz*HelpersTest.testFormatExceptionConvertArgs3   se    0	J	%	%%0#%%:4D,'''D.//////s	    ?Ac                    |                      t          d           g            |                      t          d          g            |                      t          d          g            |                      t          d          dg           |                      t          d          ddg           |                      t          d          ddg           |                      t          d          ddg           |                      t          d          g d	           |                      t          d          g d	           d S )
N z  1z 1 2 2z 1, 2 , z 1
  2z	 1
  2, 3)r$   r%   3)r   r   r   s    r   testsplitwordszHelpersTest.testsplitwords<   s(   :d##R(((:b>>2&&&:d##R(((:c??SE***:g&&c
333:j))C:666:i((3*555:l++___===:l++___=====    N)__name__
__module____qualname__r   r!   r(    r)   r   r   r   )   sA        0 0 00 0 0
> 
> 
> 
> 
>r)   r   c                 z    dd l }|                    | d          }t          |                                          S )Nr   T)shell)
subprocesscheck_outputr   rstrip)cmdr0   rets      r   _sh_callr5   I   s>    s$//3   r)   c                       t          d          S )Nz?fail2ban-python -c 'import sys; print(tuple(sys.version_info))')r5   r-   r)   r   _getSysPythonVersionr7   N   s    RSSSr)   c                   *     e Zd Z fdZd Zd Z xZS )	SetupTestc                    t          t          |                                            t          j                                         t          j                            t          j        	                    t                    ddd          }t          j                            |          r|pd | _        | j        st          j        d          t                      }|t          t!          t"          j                            k    r>t          j        dt          t!          t"          j                            d|          d S )Nz..zsetup.pyzLSeems to be running not out of source distribution -- cannot locate setup.pyz-Seems to be running with python distribution z8 -- install can be tested only with system distribution )superr9   setUpunittestF2B
SkipIfFastospathjoindirname__file__existssetupSkipTestr7   strtuplesysversion_info)r   rF   sysVer	__class__s      r   r<   zSetupTest.setUpT   s   	4   
,
',,rwx00$j
I
I%w~~e$$.6$$*	 "		!
" 
" "  !!&s5)**++++			DGcN^H_H_D`D`D`D`bhbhj
k 
k k ,+r)   c                    | j         sd S t          j                    }t          j        j        t          j        k    rdnd}	 t          j	        t          j        d| j         d||           |                     t          j        |                      t          j        |           d S # t          j        |           w xY w)Nz >/dev/null 2>&1r#    z --dry-run install --root=)rF   tempfilemkdtempr=   r>   	log_levelloggingDEBUGr@   systemrJ   
executable
assertTruelistdirshutilrmtree)r   tmp	supdbgouts      r   testSetupInstallDryRunz SetupTest.testSetupInstallDryRund   s    	 
	6#$,L$:gm$K$K  QS)9
...$***ssII7 8 8 8 ??rz#&''' 
=6=s   AB, ,Cc                 P   | j         sd S t          j                    t          j                            d           }t          j        j        t          j
        k    rdnd}	 |                     t          j        t          j        d| j         d|          d           fd} |t          t!          dz                                }g d	}t#          |                              |          rd
 }i }t#          |                              |          D ][}t          j                            |          }	t          j                            |	          r | ||	d                    pd ||<   \|                     ||d|d|dd|           dD ]W}
|                     t          j                            t          j                            |
                    d|
z             Xt+          dz   dz                                 d          }|                     t/          |          dk               |D ]\}|                     t          j                            |          t          j                            t          j                             ]	 t3          j                   t          j        t          j        d| j         d|r|dz   nd           |r5t          j                            d          rt3          j        d           d S d S d S # t3          j                   t          j        t          j        d| j         d|r|dz   nd           |r4t          j                            d          rt3          j        d           w w w xY w)Nbuildz >/dev/nullr#   rO   z install --root=r   c                      fd| D             S )Nc                 D    g | ]}|t                    d z   d         S )r   N)len).0xr[   s     r   
<listcomp>zESetupTest.testSetupInstallRoot.<locals>.strippath.<locals>.<listcomp>   s+    &&&qAc#hhqjkkN&&&r)   r-   )lr[   s    r   	strippathz1SetupTest.testSetupInstallRoot.<locals>.strippath   s    &&&&A&&&&r)   z%s/*)etcusrvarc                     g }t          j        |           D ]?\  }}t          j        ||z   |          }|                    fd|D                        @|S )Nc              3   X   K   | ]$}t           j                            |          V  %d S N)r@   rA   rB   )rc   fbases     r   	<genexpr>zISetupTest.testSetupInstallRoot.<locals>.recursive_glob.<locals>.<genexpr>   s3      >>qRW\\$**>>>>>>r)   )r@   walkfnmatchfilterextend)treerootpatternresultsdirsfiles	goodfilesro   s         @r   recursive_globz6SetupTest.testSetupInstallRoot.<locals>.recursive_glob   sl    W gh// ? ?	tU.w77inn>>>>I>>>>>>>^r)   *zGot: z	 Needed: z under z. Files under new paths: msg)zetc/fail2ban/fail2ban.confzetc/fail2ban/jail.confzCan't find %szfind z -name fail2ban-python
z clean --allz 2>&1)rF   rP   rQ   r@   rA   rE   r=   r>   rR   rS   rT   r   rU   rJ   rV   sortedr   set
differencerB   rW   r5   splitrb   realpathrY   rZ   )r   remove_buildr\   rg   gotneedr{   ry   missingmissing_fullrn   installedPathr[   s               @r   testSetupInstallRootzSetupTest.testSetupInstallRoott   s    	 
	6#W^^G,,,,'|5FFmmB)8BI
...$***cc996 7 789; ; ;' ' ' ' ' 
6$v|,,--	.	.3


4 
$ii3     Es88&&t,, ? ?GLLg..\gnn\22 7
)NN<55
6
6?:> 7^^ 	$$TTT333
       ! ! !qOOBGNN27<<Q#7#788a  ! ! ! ! GcM+CCDDJJ4PP=??3}%%)***% H H}Wm$$bg&6&6s~&F&FH H H HH 
=9
...$***y&Py7':':b&PR S S S rw~~g.. 
M'   	 
=9
...$***y&Py7':':b&PR S S S rw~~g.. 
M' s   "IL& &A?N%)r*   r+   r,   r<   r]   r   __classcell__)rM   s   @r   r9   r9   R   s[        k k k k k    ? ? ? ? ? ? ?r)   r9   c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestsUtilsTestc                 d   |                      t          d          d           |                      t          d          d           |                      t          d          d           |                      t          d          d           |                      t          d          d           d S )	Nz	sample.pysamplez/long/path/sample.pyz/long/path/__init__.pyzpath.__init__z/long/path/base.pyz	path.basez/long/path/base)r   r   r'   s    r   testmbasenamezTestsUtilsTest.testmbasename   s    9[))84449344h???9566HHH9122K@@@9.//=====r)   c                 N   |                      t          t          t          j        dk    rdndd           t          t          j        dk    rdnd           t          d           t          d           t          j        dk     rdt          j        vrt          d           d S d S d S )N)   s   testtestzf2b-test::non-existing-encodings   testu   testÏPyPy)assertRaises	Exceptionr   rJ   rK   r   versionr'   s    r   testUniConvertersz TestsUtilsTest.testUniConverters   s    Iz4''GGV6WY Y YS-55kk:GGG[Zs{!:!:j !:!:r)   c                    t           } G d d          } |            }|                    t          j        d|           |                     dd           |                                  |                    d|           |                     dd           |                     dt          j                    z              |d          }|                    t          j        d	||           |                     d
dd           |                    d||           |                     ddd           |                     d            G d dt          j	                  }|j
        }	 t          |j
                  |_
        |xj
         |            gz  c_
        |                    t          j        d           |                    d           ||_
        n# ||_
        w xY w|                     d           d S )Nc                       e Zd ZddZd ZdS ),TestsUtilsTest.testSafeLogging.<locals>.Testr   c                     || _         d S rm   )err)r   r   s     r   __init__z5TestsUtilsTest.testSafeLogging.<locals>.Test.__init__   s    DHHHr)   c                 2    | j         rt          d          dS )Nno represenation for test!u.   conv-error (òðåòèé), unterminated utf Ï)r   r   r'   s    r   __repr__z5TestsUtilsTest.testSafeLogging.<locals>.Test.__repr__   s"    x K1222JJr)   N)r   )r*   r+   r,   r   r   r-   r)   r   Testr      s<           K K K K Kr)   r   ztest 1a: %r	Tracebackr   ztest 1b: %rz.[phase 2] test error conversion by encoding %sr   ztest 2a: %r, %sztest 2azError by logging handlerFallztest 2b: %r, %sztest 2bz*[phase 3] test unexpected error in handlerc                       e Zd Zd ZdS )5TestsUtilsTest.testSafeLogging.<locals>._ErrorHandlerc                      t          d          )Nzerror in handler test!)r   )r   records     r   handlez<TestsUtilsTest.testSafeLogging.<locals>._ErrorHandler.handle   s    
,
-
--r)   N)r*   r+   r,   r   r-   r)   r   _ErrorHandlerr      s#        . . . . .r)   r   ztest 3aztest 3bOK)	DefLogSyslogrS   NOTICEassertLoggedpruneLognoticerJ   getdefaultencodingHandlerhandlerslist)r   r   r   r   r   _org_handlers         r   testSafeLoggingzTestsUtilsTest.testSafeLogging   s   &K K K K K K K K 
$**W^]D111K!=>>>--///--t$$$K!=>>>--@3CYC[C[[\\\	a$ 	**W^.d;;;I9uEEE--!4...I9uEEE--<===. . . . .go . . . ,"&/**6?	??}}''??	::gni(((	==!6??\6?!!!!--s   (A'G 	G c                 D   dD ]}t          |          }d fd	 t           d                     n# t          $ r  |            }Y nw xY wd|vr|                     d|           nd|vr|                     d|           |                     d	|           d S )
N)TF)compressc                      t                      rm   )r   r-   r)   r   
func_raisez0TestsUtilsTest.testTraceBack.<locals>.func_raise   s    
,,r)   c                 @    | r | dz
             d S               d S )Nr   r-   )ideep_functionr   s    r   r   z3TestsUtilsTest.testTraceBack.<locals>.deep_function   s4     ]1Q3Z\\\\\r)   r   zfail2ban-testcases>coverage:)r   printr   assertInassertNotIn)r   r   tbsr   r   s       @@r   testTraceBackzTestsUtilsTest.testTraceBack   s      h8$$$2       	--


   
AAA
  1$$ 	MM#q1__S!==a7 s   :AAc                 6     | j         t          ||g|R i | d S rm   )assertRaisesRegexAssertionError)r   regexpfunr   kwargss        r   _testAssertionErrorREz$TestsUtilsTest._testAssertionErrorRE  s/    $FtFFFvFFFFFr)   c                 X    d }                      t           j        d|d                                 t           j        d j        d                                d fd                                 t           j        dt
          d                                d	 fd
           d S )Nc                      t          |           rm   )KeyErrorr}   s    r   _key_errz;TestsUtilsTest.testExtendedAssertRaisesRE.<locals>._key_err  s    	#r)   ^failed$failed
__failed__z$failed.* does not match .*__failed__c                  <                          d j        d          S )Nr   r   )r   failr'   s   r   <lambda>z;TestsUtilsTest.testExtendedAssertRaisesRE.<locals>.<lambda>!  s     4%%kI|  r)   r#   r   zJ0 AssertionError not raised X.* does not match .*AssertionError not raisedc                  6                          d fd          S )Nz^0 AssertionError not raised X$c                  <                          dt          d          S )Nr#   r   )r   intr'   s   r   r   zMTestsUtilsTest.testExtendedAssertRaisesRE.<locals>.<lambda>.<locals>.<lambda>)  s    D&&sC33 r)   )r   r'   s   r   r   z;TestsUtilsTest.testExtendedAssertRaisesRE.<locals>.<lambda>(  s&    4%%&H33335 5 r)   )r   r   r   r   r   r   )r   r   s   ` r   testExtendedAssertRaisesREz)TestsUtilsTest.testExtendedAssertRaisesRE  s      H{h   N{I|   D     
 NsC, , ,j5 5 5 5    r)   c                 z                          dg d                                 dd                                 dd                                 dd dD                                             dg d                                dd                                dd                                dd dD                                             d j        dd                                d	 j        d
t          d                                          d j        dd dD                                             d j         dd                                d j         dt          d                                          d j         dd dD                        t          }                                  |                    d                                d                                ddd                                ddd                                ddd                                ddd                                             |                    d                                d                                ddd                                dddd           t          j
        j        dc}t          j
        _                             t          t          j
                            d          t                                                    t          j
                            d                       d                                t          j
                            d          d                                t          j
                            d           d            dt          j
        _        	                      t          j
                            d!                       d                                t          j
                            d          d"                                t          j
                            d           d            |t          j
        _        n# |t          j
        _        w xY w                     t          j
                            d                                                       |                    d                                d# j        d                                d$ j        dd                                d% j        ddd                                d& j        ddd                                d' j        dddd()                                d* j        ddd                                d+ j        dddd()                                d$ j        ddd                                dd
d,gidd
d,gi                                t&           j        dd
d,gidd,d
gi                                dd-gd-dg                                dd-ggd-dggd,.                                dd-ggd-dggd/                                t&           fd0                                ddd-gidd-dgid/                                t&           fd1                                d2d-d3gd4d5gd6gd5d4gd3d-gd7d2gd/                                d2d-d3gd4d5gd6gd5d4gd3d-gd7d2gd8.                                t&           fd9                                d:d;gd<d;gg gfd:d;gd;d<gg gf                                t+          d=          t+          d>                                          t&           j        d=gd>g                                t&           j        d=ggd>gg                                d? j        dgd3d-g                                d@ j        dd-gd3d-g           d S )ANa)r   bcdcbac              3   &   K   | ]}|d k    |V  dS r   Nr-   rc   r   s     r   rp   z;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr>1  s&      33A!s((a((((33r)   )r   r   r   cbdc              3   J   K   | ]}|d k    |                                 V  dS r   upperr   s     r   rp   z;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr>5  s.      >>qQ#XXXXXX>>r)   z'a' unexpectedly found in 'cba'z#1 unexpectedly found in \[0, 1, 2\]r   r   z&'A' unexpectedly found in \['C', 'A'\]Ac              3   J   K   | ]}|d k    |                                 V  dS r   r   r   s     r   rp   z;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr><  s.      @@qCxx17799xxxx@@r)   z'a' was not found in 'xyz'xyzz5 was not found in \[0, 1, 2\]   z!'A' was not found in \['C', 'B'\]c              3   J   K   | ]}|d k    |                                 V  dS )r   Nr   r   s     r   rp   z;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr>B  s.      ==aAHH		HHHH==r)   z
test "xyz"r   Tr   zyxFtest_zyxz
xxxx "xxx"c                      dS N2   r-   r-   r)   r   r   z:TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>T  s    B r)   r      g      9@c                      dS r   r-   r-   r)   r   r   z:TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>Y  s    R r)   g      @z.* was found in the logz+All of the .* were found present in the logzwas found in the logzwas not found in the logz&was not found in the log, waited 1e-06gư>)r   waitz"None among .* was found in the logz0None among .* was found in the log, waited 1e-06r	   B)level
nestedOnlyc                  B                          ddggddggdd          S Nr   r   r   T)r   r   assertSortedEqualr'   s   r   r   z:TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>z  s2    D,B,B#J<3*Q4 -C -9 -9 r)   c                  F                          dddgidddgidd          S r   r   r'   s   r   r   z:TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>}  s:    D,B,B#ssS#J'qT -C -C -C r)   ZCEFr   r   r   r   c                  X                          dddgddgdgddgddgddgd	          S )
Nr  r   r  r  r  r  r  Tr   r   r'   s   r   r   z:TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>  sP    D,B,BSzc
	+	+,c3ZsCj/Q/QSV.W -C - - r)   r   A1A2ABCCBAz\['A'\] != \['C', 'B'\]z\['A', 'B'\] != \['B', 'C'\])r   r   r   ranger   r   debugr   assertNotLoggedr=   r>   fastassertFalse
isinstancemaxWaitTimeboolr   assertDictEqualr   r   r   r   )r   r   orgfasts   `  r   testExtendedAssertMethodsz(TestsUtilsTest.testExtendedAssertMethods,  s.	   --)))***--*+++--U--333334443(((3()))33>>E>>>????S%! ! !CQa" " "FS@@e@@@B B B:=#u  >=!U1XX  A=#==5===? ? ? &--///,,|L!!!FEt,,,vu%000z5d333FEu-----///,,||$$$vu%000vue666'|0%'8<:hl66t<<dCCDDD8<++JJ77992>>>8<++B//4448<++C00$777(,HL,,ZZ88::B???HL,,R00#666HL,,S1148888<w8<8<++E22333--///,,|7' ' 'Kv/ / /4D  2 2 28fe  / / /FfeD  : : :Bj%U  4 4 4Pj%U  ? ? ?KE  3 3 3 aV}sQFm444ND$8!Q=3A-! ! ! #sc3Z0003*c
|1===3*c
|FFFN %9 %9 %9 %9 : : :#Sz*S3*,=%PPPN %C %C %C %C D D D#c3ZsCjAABCQT:]`be\fEgEgilDm    #c3ZsCjAABCQT:]`be\fEgEgilDm	    N % % % %    tb!"tb!"   ed5kk222ND$:UGeWMMMND$:eWIyQQQ7C53*. . .<C:Sz3 3 3 3 3s   B!R Rc                     |                      t          d          d           |                      t          dd          d           |                      t          ddd          d           d S )Nr   zA%(asctime)s %(name)-24s[%(process)d]: %(levelname)-7s %(message)sF)paddingz<%(asctime)s %(name)s[%(process)d]: %(levelname)s %(message)s)addtimer  z0%(name)s[%(process)d]: %(levelname)s %(message)s)r   r   r'   s    r   testVerbosityFormatz"TestsUtilsTest.testVerbosityFormat  s    %a((FH H H%a777AC C C%aFFF57 7 7 7 7r)   c                 `   t                      }t          }d}t          d          }t          j        |          }|                     ||                     |                    |           |                    d           |                                }| 	                    |
                                                    d                     |                    d          }| 	                    |dk               |                     |d |         ||dz   |dz  dz                       d S )	Nz %(tb)s | %(tbc)s : %(message)sfail2ban_testsXXXz: XXX|
   r   r	   )r   r   r   rS   StreamHandlersetFormatter
addHandlererrorgetvaluerW   r2   endswithindexr   )r   strout	Formatterfmtr   outr   pindexs           r   testFormatterWithTraceBackz)TestsUtilsTest.testFormatterWithTraceBack  s   ::&$) 	*#%&&&f%%#99S>>"""C,,uoo!//!((**%%g..///773<<& //&2+1WfW:q&(Q,!6788888r)   c                     t           }|                    dt          j        j                   |                    dddd           |                     d           d S )Nzlazy logging: %rr   r   r	   r   znot all arguments converted)r   r  r=   r>   log_lazyr   r   )r   r   s     r   testLazyLoggingzTestsUtilsTest.testLazyLogging  sT    &,,!8<#8999--1a   122222r)   N)r*   r+   r,   r   r   r   r   r   r   r  r  r.  r1  r-   r)   r   r   r      s        > > >  ( ( (T  @G G G  ,d3 d3 d3L7 7 79 9 9(3 3 3 3 3r)   r   c                       e Zd Zd Zd ZdS )
MyTimeTestc                    t           j        }|                      |d          d           |                      |d          d           |                      |d          d           |                      |d          d           |                      |d          d	           |                      |d
          d	           |                      |d          d           |                     t           |d                    dz  dz  dz  d           |                     t           |d                    dz  dz  dz  d           d S )N1y6mo30w15d12h35m25si]z2yy 3mo 4ww 10dd 5hh 30mm 20ssi$mz>2 years 3 months 4 weeks 10 days 5 hours 30 minutes 20 secondsz!1 year + 1 month - 1 week + 1 dayizI2 * 0.5 yea + 1*1 mon - 3*1/3 wee + 2/2 day - (2*12 hou 3*20 min 80 sec) g   @Az(2*.5y+1*1mo-3*1/3w+2/2d-(2*12h3*20m80s) z!1ye -2mo -3we -4da -5ho -6mi -7seiQ	pz1 month<      g     p>@z1 yearg     v@)r   str2secondsr   float)r   str2secs     r   testStr2SecondszMyTimeTest.testStr2Seconds  sg   '77122H===77;<<hGGG77[\\^fggg77>??JJJ77fggisttt77EFF
SSS77>??JJJ5++,,r1B6;WEEE5**++b025:FCCCCCr)   c                 2   d }|                       |d          d           |                       |d          d           |                       |d          d           |                       |d          d	           |                       |d
          d           |                       |d          d           |                       |d          d           |                       |d          d           |                       |d          d           |                       |d          d           |                       |d          d           |                       |d          d           |                       |d          d           d S )Nc                 D    t          t          j        |                     S rm   )rH   r   seconds2str)r   s    r   r   z(MyTimeTest.testSec2Str.<locals>.<lambda>  s    c&,Q//00 r)   i )z1y 3w 4di (z1y 3dg    ~A1yi z2w 1dit 2wi z	2d 7h 15mi z2d 1hg     @z3h 31mi  2hi  1hi  z59m 50s;   59sr   0)r   )r   sec2strs     r   testSec2StrzMyTimeTest.testSec2Str  s   00'779%%*===779%%':::77<(($777778$$':::77;''$77777/00+>>>77<((':::779%%(;;;778$$$777776??$777777##)<<<772;;%888771::#66666r)   N)r*   r+   r,   r;  rG  r-   r)   r   r3  r3    s5        D D D7 7 7 7 7r)   r3  )$
__author____copyright____license__rS   r@   rJ   r=   rP   rY   rr   r   ior   utilsr   r   r   helpersr
   r   r   r   r   r   r   r   r   server.mytimer   TestCaser   r5   r7   r9   r   r3  r-   r)   r   <module>rP     s  ( "
7  				 



                 : : : : : : : :8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 " " " " " "> > > > >(# > > >@! ! !
T T Ta a a a a! a a aH}3 }3 }3 }3 }3' }3 }3 }3@7 7 7 7 7" 7 7 7 7 7r)   