
    ogfH                     H   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#y)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y)HelpersTestc                     	 t        d      #  t               \  }}| j                  |d       | j                  |d       Y y 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+   sG    0	(	))0#%:4D,'D./s	    3Ac                     	 t        dd       #  t               \  }}| j                  |d       | j                  |d       Y y xY w)NzVery badr   z('Very bad', None)r   r   s      r   testFormatExceptionConvertArgsz*HelpersTest.testFormatExceptionConvertArgs3   sH    0	J	%%0#%:4D,'D./s	    3Ac                     | j                  t        d       g        | j                  t        d      g        | j                  t        d      g        | j                  t        d      dg       | j                  t        d      ddg       | j                  t        d      ddg       | j                  t        d      ddg       | j                  t        d      g d	       | j                  t        d      g d	       y )
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:j)C:6:i(3*5:l+_=:l+_=    N)__name__
__module____qualname__r   r!   r(    r)   r   r   r   )   s    00
>r)   r   c                 b    dd l }|j                  | d      }t        |      j                         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Sr)   c                   *     e Zd Z fdZd Zd Z xZS )	SetupTestc                 Z   t         t        |           t        j                  j                          t        j                  j                  t        j                  j                  t              ddd      }t        j                  j                  |      xr |xs d | _        | j                  st        j                  d      t               }|t        t!        t"        j$                              k7  r;t        j                  dt        t!        t"        j$                              d|      y )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 
,,
'',,rwwx0$j
I%ww~~e$.6$$*				!
" "  !&s5))*++			DGcN^N^H_D`bhj
k k ,r)   c                    | j                   sy t        j                         }t        j                  j
                  t        j                  k\  rdnd}	 t        j                  t        j                  d| j                   d||       | j                  t        j                  |              t        j                  |       y # 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    		#$,LL$:$:gmm$K QS)99
..$**sI7 8 ??rzz#&' 
==6==s   AC Cc                 H   | j                   sy t        j                         t        j                  j                  d       }t        j                  j                  t        j                  k\  rdnd}	 | j                  t        j                  t        j                  d| j                   d|      d       fd} |t        t!        dz                    }g d	}t#        |      j%                  |      rd
 }i }t#        |      j%                  |      D ]Y  }t        j                  j'                  |      }	t        j                  j                  |	      xr  | ||	d            xs d ||<   [ | j                  ||d|d|dd|       dD ]S  }
| j)                  t        j                  j                  t        j                  j'                  |
            d|
z         U t+        dz   dz         j-                  d      }| j)                  t/        |      dkD         |D ]\  }| j                  t        j                  j1                  |      t        j                  j1                  t        j                               ^ 	 t3        j4                         t        j                  t        j                  d| j                   d|r|dz   nd       |r6t        j                  j                  d      rt3        j4                  d       y y y # t3        j4                         t        j                  t        j                  d| j                   d|r|dz   nd       |r6t        j                  j                  d      rt3        j4                  d       w w w xY w)Nbuildz >/dev/nullr#   rO   z install --root=r   c                 L    | D cg c]  }|t              dz   d   c}S c c}w Nr   )len)lxr[   s     r   	strippathz1SetupTest.testSetupInstallRoot.<locals>.strippath   s%    $%&qAc#hqjkN&&&s   !z%s/*)etcusrvarc                     g }t        j                  |       D ]9  \  }}t        j                  ||z   |      }|j	                  fd|D               ; |S )Nc              3   ^   K   | ]$  }t         j                  j                  |       & y wN)r@   rA   rB   ).0fbases     r   	<genexpr>zISetupTest.testSetupInstallRoot.<locals>.recursive_glob.<locals>.<genexpr>   s      >qRWW\\$*>s   *-)r@   walkfnmatchfilterextend)treerootpatternresultsdirsfiles	goodfilesrn   s         @r   recursive_globz6SetupTest.testSetupInstallRoot.<locals>.recursive_glob   sT    W ggh/ ?	tU..w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\   re   gotneedrz   rx   missingmissing_fullrm   installedPathr[   s               @r   testSetupInstallRootzSetupTest.testSetupInstallRoott   s   		#WW^^G,,,'||55FmB)8BII
..$**c96 789;' 
6$v|,-	.3
4 
$i3 Es8&&t, ?GGLLg.\ggnn\2 7
N<5
6?:> 7^?
 	$T3
   ! !qOOBGGNN277<<Q#78a  !! GcM+CCDJJ4P=??3}%)*% H}WWm$bgg&6&6s~~&FHH 
==99
..$**yy7':b&PR Srww~~g.
MM' /l	 
==99
..$**yy7':b&PR Srww~~g.
MM' /ls   3HL BN!)r*   r+   r,   r<   r]   r   __classcell__)rM   s   @r   r9   r9   R   s    k  ?r)   r9   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestsUtilsTestc                    | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       y )	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   so    9[)84934h?956H912K@9./=r)   c                 6   | j                  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       y y y )N)   s   testtestzf2b-test::non-existing-encodings   testu   testÏPyPy)assertRaises	Exceptionr   rJ   rK   r   versionr'   s    r   testUniConvertersz TestsUtilsTest.testUniConverters   sz    Iz4'GV6WYS--5k:G[Zs{{!:j ";r)   c                    t         } G d d      } |       }|j                  t        j                  d|       | j	                  dd       | j                          |j                  d|       | j	                  dd       | j                  dt        j                         z          |d      }|j                  t        j                  d	||       | j	                  d
dd       |j                  d||       | j	                  ddd       | j                  d        G d dt        j                        }|j                  }	 t        |j                        |_
        |xj                   |       gz  c_
        |j                  t        j                  d       |j                  d       ||_
        | j                  d       y # ||_
        w xY w)Nc                       e Zd ZddZd Zy),TestsUtilsTest.testSafeLogging.<locals>.Testc                     || _         y rk   )err)r   r   s     r   __init__z5TestsUtilsTest.testSafeLogging.<locals>.Test.__init__   s	    DHr)   c                 2    | j                   rt        d      y)Nno represenation for test!u.   conv-error (òðåòèé), unterminated utf Ï)r   r   r'   s    r   __repr__z5TestsUtilsTest.testSafeLogging.<locals>.Test.__repr__   s    xx122Jr)   N)r   )r*   r+   r,   r   r   r-   r)   r   Testr      s    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y)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   so   &K K 
$**W^^]D1K!=>--/--t$K!=>--@3CYCYC[[\	a$ 	**W^^.d;I9uE--!4.I9uE--<=.goo . ,"&//*6?	??}''?	::gnni(	==!6?-- "6?s   A&G   	G	c                    dD ]h  }t        |      }d fd	 t         d             dvr| j                  d|       nd|vr| j	                  d|       | j                  d	|       j y # t        $ r
  |       }Y Tw xY w)
N)TF)compressc                      t               rk   )r   r-   r)   r   
func_raisez0TestsUtilsTest.testTraceBack.<locals>.func_raise   s
    
,r)   c                 0    | r | dz
         y          y ra   r-   )ideep_functionr   s    r   r   z3TestsUtilsTest.testTraceBack.<locals>.deep_function   s    1Q3\r)   r   zfail2ban-testcases>coverage:)r   printr   assertInassertNotIn)r   r   tbsr   r   s       @@r   testTraceBackzTestsUtilsTest.testTraceBack   s      h8$2	-
  1$ 	MM#q1_S!==a7  
As   A11BBc                 <     | j                   t        ||g|i | y rk   )assertRaisesRegexAssertionError)r   regexpfunr   kwargss        r   _testAssertionErrorREz$TestsUtilsTest._testAssertionErrorRE  s     $FtFvFr)   c                 N    d } j                  t         j                  d|d        j                  t         j                  d j                  d        j                  d fd        j                  t         j                  dt
        d        j                  d	 fd
       y )Nc                     t        |       rk   )KeyErrorr|   s    r   _key_errz;TestsUtilsTest.testExtendedAssertRaisesRE.<locals>._key_err  s    	#r)   ^failed$failed
__failed__z$failed.* does not match .*__failed__c                  >     j                  d j                  d      S )Nr   r   )r   failr'   s   r   <lambda>z;TestsUtilsTest.testExtendedAssertRaisesRE.<locals>.<lambda>!  s    4%%kII| r)   r#   r   zJ0 AssertionError not raised X.* does not match .*AssertionError not raisedc                  .     j                  d fd      S )Nz^0 AssertionError not raised X$c                  2     j                  dt        d      S )Nr#   r   )r   intr'   s   r   r   zMTestsUtilsTest.testExtendedAssertRaisesRE.<locals>.<lambda>.<locals>.<lambda>)  s    D&&sC3 r)   )r   r'   s   r   r   z;TestsUtilsTest.testExtendedAssertRaisesRE.<locals>.<lambda>(  s    4%%&H35 r)   )r   r   r   r   r   r   )r   r   s   ` r   testExtendedAssertRaisesREz)TestsUtilsTest.testExtendedAssertRaisesRE  s    H{h N{II| D
 NsC,j5r)   c                 "     j                  dg d        j                  dd        j                  dd        j                  dd dD                j                  dg d        j                  dd        j                  dd        j                  dd dD                j                  d j                  dd        j                  d	 j                  d
t        d              j                  d j                  dd dD                j                  d j                   dd        j                  d j                   dt        d              j                  d j                   dd dD               t        } j                          |j                  d        j                  d        j                  ddd        j                  ddd        j                  ddd        j                  ddd        j                          |j                  d        j                  d        j                  ddd        j                  dddd       t        j                  j                  dc}t        j                  _         j                  t        t        j                  j                  d      t                      j!                  t        j                  j                  d              d        j!                  t        j                  j                  d      d        j!                  t        j                  j                  d       d        dt        j                  _        	  j!                  t        j                  j                  d!              d        j!                  t        j                  j                  d      d"        j!                  t        j                  j                  d       d        |t        j                  _         j                  t        j                  j                  d              j                          |j                  d        j                  d# j                  d        j                  d$ j                  dd        j                  d% j                  ddd        j                  d& j                  ddd        j                  d' j                  dddd()        j                  d* j                  ddd        j                  d+ j                  dddd()        j                  d$ j                  ddd        j#                  dd
d,gidd
d,gi        j%                  t&         j"                  dd
d,gidd,d
gi        j)                  dd-gd-dg        j)                  dd-ggd-dggd,.        j)                  dd-ggd-dggd/        j%                  t&         fd0        j)                  ddd-gidd-dgid/        j%                  t&         fd1        j)                  d2d-d3gd4d5gd6gd5d4gd3d-gd7d2gd/        j)                  d2d-d3gd4d5gd6gd5d4gd3d-gd7d2gd8.        j%                  t&         fd9        j)                  d:d;gd<d;gg gfd:d;gd;d<gg gf        j)                  t+        d=      t+        d>              j%                  t&         j(                  d=gd>g        j%                  t&         j(                  d=ggd>gg        j                  d? j(                  dgd3d-g        j                  d@ j(                  dd-gd3d-g       y # |t        j                  _        w xY w)ANa)r   bcdcbac              3   ,   K   | ]  }|d k7  s	|  ywr   Nr-   rl   r   s     r   ro   z;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr>1  s     3A!s(a3s   
)r   r   r   cbdc              3   H   K   | ]  }|d k7  s	|j                           ywr   upperr   s     r   ro   z;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr>5  s     >qQ#X>   
""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   H   K   | ]  }|d k7  s	|j                           ywr   r   r   s     r   ro   z;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr><  s     @qCx1779@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   H   K   | ]  }|d k7  s	|j                           yw)r   Nr   r   s     r   ro   z;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr>B  s     =aAH	=r   z
test "xyz"r   Tr   zyxFtest_zyxz
xxxx "xxx"c                       yN2   r-   r-   r)   r   r   z:TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>T      r)   r      g      9@c                       yr   r-   r-   r)   r   r   z:TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>Y  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                  :     j                  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  s-    D,B,B#J<3*Q4 -C -9 r)   c                  >     j                  dddgidddgidd      S r   r   r'   s   r   r   z:TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>}  s4    D,B,B#ssS#J'qT -C -C r)   ZCEFr   r   r   r   c                  P     j                  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>  sE    D,B,BSzc
	+,c3ZsCj/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43(3()33>E>??S%!CQa"FS@e@B:==#u>==!U1XA==#=5=? &--/,,|L!FEt,vu%0z5d3FEu---/,,||$vu%0vue6'||00%'8<<:hll66t<dCD8<<++J792>8<<++B/48<<++C0$7(,,HLL,,Z8:B?HLL,,R0#6HLL,,S1488<<8<<++E23--/,,|7'Kv/4D  28fe  /FfeD  :Bj%U  4Pj%U  ?KE  3 aV}sQFm4ND$8$8!Q=3A-! #sc3Z03*c
|1=3*c
|FN %9 :#Sz*S3*,=%PN %C D#c3ZsCjABCQT:]`be\fEgilDm  #c3ZsCjABCQT:]`be\fEgilDm	  N %  tb!"tb!" ed5k2ND$:$:UGeWMND$:$:eWIyQ7C53*.<C:Sz3e 8<<s   /B]7 7^c                     | j                  t        d      d       | j                  t        dd      d       | j                  t        ddd      d       y )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  sU    %a(FH%a7AC%aF57r)   c                    t               }t        }d}t        d      }t        j                  |      }|j                   ||             |j                  |       |j                  d       |j                         }| j                  |j                         j                  d             |j                  d      }| j                  |dkD         | j                  |d | ||dz   |dz  dz           y )	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%#9S>"C,,uoo!//!((*%%g./773<& //&2+1Wf:q&(Q,78r)   c                     t         }|j                  dt        j                  j                         |j                  dddd       | j                  d       y )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  sA    &,,!8<<#8#89--1a 12r)   N)r*   r+   r,   r   r   r   r   r   r   r  r  r/  r2  r-   r)   r   r   r      s9    >(T@G,d3L79(3r)   r   c                       e Zd Zd Zd Zy)
MyTimeTestc                    t         j                  }| j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d	       | j                   |d
      d	       | j                   |d      d       | j                  t         |d            dz  dz  dz  d       | j                  t         |d            dz  dz  dz  d       y )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  s    '712H=7;<hG7[\^fg7>?J7fgist7EF
S7>?J5+,r1B6;WE5*+b025:FCr)   c                 z   d }| j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d	       | j                   |d
      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       y )Nc                 >    t        t        j                  |             S rk   )rH   r   seconds2str)r   s    r   r   z(MyTimeTest.testSec2Str.<locals>.<lambda>  s    c&,,Q/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'79%*=79%':7<($778$':7;'$77/0+>7<(':79%(;78$$776?$777#)<72;%871:#6r)   N)r*   r+   r,   r<  rH  r-   r)   r   r4  r4    s    D7r)   r4  )$
__author____copyright____license__rS   r@   rJ   r=   rP   rY   rq   r   ior   utilsr   r   r   helpersr
   r   r   r   r   r   r   r   r   server.mytimer   TestCaser   r5   r7   r9   r   r4  r-   r)   r   <module>rQ     s   ( "
7  	 
       :8 8 8 ">(## >@!
Ta!! aH}3' }3@7"" 7r)   