
    =*fG                     H   S r SrSrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
J
r
  SSKJr  SSKJrJr  S	S
KJrJrJrJrJrJrJrJrJr  S	SKJr   " S S\R:                  5      rS rS r  " S S\R:                  5      r! " S S\5      r" " S S\R:                  5      r#g)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                   &    \ rS rSrS rS rS rSrg)HelpersTest)   c                      [        S5      e!   [        5       u  pU R                  US5        U R                  US5         g = f)NzVery bad exception
ValueErrorr   r
   assertEqualselfnameargss      =/usr/lib/python3/dist-packages/fail2ban/tests/misctestcase.pytestFormatExceptionInfoBasic(HelpersTest.testFormatExceptionInfoBasic+   sE    0	(	))0#%:4D,'D./s	    2Ac                      [        SS 5      e!   [        5       u  pU R                  US5        U R                  US5         g = f)NzVery badr   z('Very bad', None)r   r   s      r   testFormatExceptionConvertArgs*HelpersTest.testFormatExceptionConvertArgs3   sF    0	J	%%0#%:4D,'D./s	    2Ac                     U R                  [        S 5      / 5        U R                  [        S5      / 5        U R                  [        S5      / 5        U R                  [        S5      S/5        U R                  [        S5      SS/5        U R                  [        S5      SS/5        U R                  [        S5      SS/5        U R                  [        S5      / S	Q5        U R                  [        S
5      / S	Q5        g )N z  1z 1 2 2z 1, 2 , z 1
  2z	 1
  2, 3)r'   r(   3z	1	  2,
 3
)r   r   r   s    r   testsplitwordsHelpersTest.testsplitwords<   s    :d#R(:b>2&:d#R(:c?SE*:g&c
3:j)C:6:i(3*5:l+_=:12OD     N)__name__
__module____qualname____firstlineno__r    r#   r+   __static_attributes__r.   r-   r   r   r   )   s    00	Fr-   r   c                 \    SS K nUR                  U SS9n[        U5      R                  5       $ )Nr   T)shell)
subprocesscheck_outputr   rstrip)cmdr6   rets      r   _sh_callr;   H   s-    s$/3  r-   c                      [        S5      $ )Nz?fail2ban-python -c 'import sys; print(tuple(sys.version_info))')r;   r.   r-   r   _getSysPythonVersionr=   M   s    RSSr-   c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )	SetupTestQ   c                   > [         [        U ]  5         [        R                  R                  5         [        R                  R                  [        R                  R                  [        5      SSS5      n[        R                  R                  U5      =(       a    U=(       d    S U l        U R                  (       d  [        R                  " S5      e[        5       nU[        [!        ["        R$                  5      5      :w  a>  [        R                  " S[        [!        ["        R$                  5      5      < SU< 35      eg )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 )superr?   setUpunittestF2B
SkipIfFastospathjoindirname__file__existssetupSkipTestr=   strtuplesysversion_info)r   rM   sysVer	__class__s      r   rC   SetupTest.setUpS   s    	4 
,,
'',,rwwx0$j
I%ww~~e$.6$$*				!
" "  !&s5))*++			DGcN^N^H_D`bhj
k k ,r-   c                    U R                   (       d  g [        R                  " 5       n[        R                  R
                  [        R                  :  a  SOSn [        R                  " [        R                  < SU R                   < SU< U< 35        U R                  [        R                  " U5      (       + 5        [        R                  " U5        g ! [        R                  " U5        f = f)Nz >/dev/null 2>&1r&    z --dry-run install --root=)rM   tempfilemkdtemprD   rE   	log_levelloggingDEBUGrG   systemrQ   
executable
assertTruelistdirshutilrmtree)r   tmp	supdbgouts      r   testSetupInstallDryRun SetupTest.testSetupInstallDryRunc   s    		#$,LL$:$:gmm$K QS)99
..$**sI7 8 ??rzz#&' 
==6==s   A&C C.c                   ^ U R                   (       d  g [        R                  " 5       m[        R                  R                  S5      (       + n[        R                  R                  [        R                  :  a  SOSn U R                  [        R                  " [        R                  < SU R                   < ST< U< 35      S5        U4S jnU" [        [!        ST-  5      5      5      n/ S	Qn[#        U5      R%                  U5      (       a  S
 n0 n[#        U5      R%                  U5       Hc  n[        R                  R'                  TU5      n	[        R                  R                  U	5      =(       a    U" U" U	S5      5      =(       d    S Xx'   Me     U R                  XESU< SU< ST< SU< 3S9  S HQ  n
U R)                  [        R                  R                  [        R                  R'                  TU
5      5      SU
-  S9  MS     [+        ST-   S-   5      R-                  S5      nU R)                  [/        U5      S:  5        U H]  nU R                  [        R                  R1                  U5      [        R                  R1                  [        R                  5      5        M_     [2        R4                  " T5        [        R                  " [        R                  < SU R                   < SU(       a  US-   OS< 35        U(       a<  [        R                  R                  S5      (       a  [2        R4                  " S5        g g g ! [2        R4                  " T5        [        R                  " [        R                  < SU R                   < SU(       a  US-   OS< 35        U(       a<  [        R                  R                  S5      (       a  [2        R4                  " S5        f f f = f)Nbuildz >/dev/nullr&   rW   z install --root=r   c                 P   > U  Vs/ s H  o[        T5      S-   S  PM     sn$ s  snf Nr   )len)lxrc   s     r   	strippath1SetupTest.testSetupInstallRoot.<locals>.strippath~   s'    $%&Aqc#hqjkNA&&&s   #z%s/*)etcusrvarc                    ^ / n[         R                  " U 5       H:  u  mp4[        R                  " X4-   U5      nUR	                  U4S jU 5       5        M<     U$ )Nc              3   d   >#    U  H%  n[         R                  R                  TU5      v   M'     g 7fN)rG   rH   rI   ).0fbases     r   	<genexpr>ISetupTest.testSetupInstallRoot.<locals>.recursive_glob.<locals>.<genexpr>   s#     >IqRWW\\$**Is   -0)rG   walkfnmatchfilterextend)treerootpatternresultsdirsfiles	goodfilesrx   s         @r   recursive_glob6SetupTest.testSetupInstallRoot.<locals>.recursive_glob   sK    W ggh/	t..w7inn>I>> 0 ^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)rM   rX   rY   rG   rH   rL   rD   rE   rZ   r[   r\   r   r]   rQ   r^   sortedr   set
differencerI   r_   r;   splitrk   realpathra   rb   )r   remove_buildrd   rn   gotneedr   r   missingmissing_fullrw   installedPathrc   s               @r   testSetupInstallRootSetupTest.testSetupInstallRoots   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?:> ^ -
 	$T3
   !qOOBGGNN277<<Q#78a  !! GcM+CCDJJ4P=??3}%)*%}WWm$bgg&6&6s~~&FH & 
==99
..$**yy7':b&PR Srww~~g..
MM' /l	 
==99
..$**yy7':b&PR Srww~~g..
MM' /ls   >H/M B O,)rM   )	r/   r0   r1   r2   rC   re   r   r3   __classcell__)rT   s   @r   r?   r?   Q   s    k  ? ?r-   r?   c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)TestsUtilsTest   c                    U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        g )	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   testmbasenameTestsUtilsTest.testmbasename   so    9[)84934h?956H912K@9./=r-   c                 ~    U R                  [        [        SS5        [        S5        [        S5        [        S5        g )Ns   testzf2b-test::non-existing-encodings   testu   testÏ)assertRaises	Exceptionr   r   r*   s    r   testUniConverters TestsUtilsTest.testUniConverters   s2    Iz
-/[[Zr-   c                    [         n " S S5      nU" 5       nUR                  [        R                  SU5        U R	                  SS5        U R                  5         UR                  SU5        U R	                  SS5        U R                  S[        R                  " 5       -  5        U" S5      nUR                  [        R                  S	X35        U R	                  S
SSS9  UR                  SX35        U R	                  SSSS9  U R                  S5         " S S[        R                  5      nUR                  n [        UR                  5      Ul
        U=R                  U" 5       /-  sl
        UR                  [        R                  S5        UR                  S5        XQl
        U R                  S5        g ! XQl
        f = f)Nc                   $    \ rS rSrSS jrS rSrg),TestsUtilsTest.testSafeLogging.<locals>.Test   c                     Xl         g ru   err)r   r   s     r   __init__5TestsUtilsTest.testSafeLogging.<locals>.Test.__init__   s    Hr-   c                 <    U R                   (       a  [        S5      eg)Nno representation for test!u.   conv-error (òðåòèé), unterminated utf Ï)r   r   r*   s    r   __repr__5TestsUtilsTest.testSafeLogging.<locals>.Test.__repr__   s    xx233Jr-   r   N)r   )r/   r0   r1   r2   r   r   r3   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                       \ rS rSrS rSrg)5TestsUtilsTest.testSafeLogging.<locals>._ErrorHandler   c                     [        S5      e)Nzerror in handler test!)r   )r   records     r   handle<TestsUtilsTest.testSafeLogging.<locals>._ErrorHandler.handle   s    
,
--r-   r.   N)r/   r0   r1   r2   r   r3   r.   r-   r   _ErrorHandlerr      s    .r-   r   ztest 3aztest 3bOK)	DefLogSyslogr[   NOTICEassertLoggedpruneLognoticerQ   getdefaultencodingHandlerhandlerslist)r   r   r   testr   _org_handlers         r   testSafeLoggingTestsUtilsTest.testSafeLogging   sg   &K K 
$**W^^]D1K!>?--/--t$K!>?--@3CYCYC[[\	a$ 	**W^^.;I9uE--!4.I9uE--<=.goo . ,"&//*6?	??}''?	::gnni(	==!?-- "?s   :A&F8 8G c                   ^^ S Hk  n[        US9nS mUU4S jm [        T" S5      5        SW;  a  U R                  SU5        OSU;  a  U R	                  SU5        U R                  S	U5        Mm     g ! [         a
    U" 5       n N[f = f)
N)TF)compressc                      [        5       eru   )r   r.   r-   r   
func_raise0TestsUtilsTest.testTraceBack.<locals>.func_raise   s
    
,r-   c                 :   > U (       a  T" U S-
  5        g T" 5         g rj   r.   )ideep_functionr   s    r   r   3TestsUtilsTest.testTraceBack.<locals>.deep_function   s    1Q3\r-      zfail2ban-testcases>coverage:)r   printr   assertInassertNotIn)r   r   tbsr   r   s       @@r   testTraceBackTestsUtilsTest.testTraceBack   s     h8$2	-
  1$ 	MM#q1_S!==a7   
As   A55B	B	c                 :    U R                   " [        X/UQ70 UD6  g ru   )assertRaisesRegexAssertionError)r   regexpfunr   kwargss        r   _testAssertionErrorRE$TestsUtilsTest._testAssertionErrorRE  s    FtFvFr-   c                 R  ^  S nT R                  [        T R                  SUS5        T R                  [        T R                  ST R                  S5        T R                  SU 4S j5        T R                  [        T R                  S[
        S5        T R                  S	U 4S
 j5        g )Nc                     [        U 5      eru   )KeyErrorr   s    r   _key_err;TestsUtilsTest.testExtendedAssertRaisesRE.<locals>._key_err  s    	#r-   ^failed$failed
__failed__z$failed.* does not match .*__failed__c                  >   > T R                  ST R                  S5      $ )Nr   r   )r   failr*   s   r   <lambda>;TestsUtilsTest.testExtendedAssertRaisesRE.<locals>.<lambda>  s    4%%kII|r-   r&   r   zJ0 AssertionError not raised X.* does not match .*AssertionError not raisedc                  0   > T R                  SU 4S j5      $ )Nz^0 AssertionError not raised X$c                  2   > T R                  S[        S5      $ )Nr&   r   )r   intr*   s   r   r   MTestsUtilsTest.testExtendedAssertRaisesRE.<locals>.<lambda>.<locals>.<lambda>&  s    D&&sC3r-   )r   r*   s   r   r   r   %  s    4%%&H35r-   )r   r   r   r   r   r   )r   r   s   ` r   testExtendedAssertRaisesRE)TestsUtilsTest.testExtendedAssertRaisesRE  s    H{h N{II| D
 NsC,j5r-   c           	        ^  T R                  S/ SQ5        T R                  SS5        T R                  SS5        T R                  SS S 5       5        T R                  S/ SQ5        T R                  SS5        T R                  SS5        T R                  SS S 5       5        T R                  ST R                  SS5        T R                  S	T R                  S
[        S5      5        T R                  ST R                  SS S 5       5        T R                  ST R                   SS5        T R                  ST R                   S[        S5      5        T R                  ST R                   SS S 5       5        [        nT R                  5         UR                  S5        T R                  S5        T R                  SSSS9  T R                  SSSS9  T R                  SSSS9  T R                  SSSS9  T R                  5         UR                  S5        T R                  S5        T R                  SSSS9  T R                  SSSSS9  [        R                  R                  Ssn[        R                  l        T R                  [        [        R                  R                  S5      [        5      5        T R!                  [        R                  R                  S 5      " 5       S5        T R!                  [        R                  R                  S5      S5        T R!                  [        R                  R                  S 5      S 5        S[        R                  l         T R!                  [        R                  R                  S! 5      " 5       S5        T R!                  [        R                  R                  S5      S"5        T R!                  [        R                  R                  S 5      S 5        U[        R                  l        T R                  [        R                  R                  S5      5        T R                  5         UR                  S5        T R                  S#T R                  S5        T R                  S$T R                  SS5        T R                  S%T R                  SSSS9  T R                  S&T R                  SSSS9  T R                  S'T R                  SSSS(S)9  T R                  S*T R                  SSSS9  T R                  S+T R                  SSSS(S)9  T R                  S$T R                  SSSS9  T R#                  SS
S,/0SS
S,/05        T R%                  [&        T R"                  SS
S,/0SS,S
/05        T R)                  SS-/S-S/5        T R)                  SS-//S-S//S,S.9  T R)                  SS-//S-S//SS/9  T R%                  [&        U 4S0 j5        T R)                  SSS-/0SS-S/0SS/9  T R%                  [&        U 4S1 j5        T R)                  S2S-S3/S4S5/S6./S5S4/S3S-/S7.S2/SS/9  T R)                  S2S-S3/S4S5/S6./S5S4/S3S-/S7.S2/S8S.9  T R%                  [&        U 4S9 j5        T R)                  S:S;/S<S;// /4S:S;/S;S<// /45        T R)                  [+        S=5      [+        S>5      5        T R%                  [&        T R(                  S=/S>/5        T R%                  [&        T R(                  S=//S>//5        T R                  S?T R(                  S/S3S-/5        T R                  S@T R(                  SS-/S3S-/5        g ! U[        R                  l        f = f)ANa)r   bcdcbac              3   4   #    U  H  oS :w  d  M
  Uv   M     g7fr   Nr.   rv   r   s     r   ry   ;TestsUtilsTest.testExtendedAssertMethods.<locals>.<genexpr>.  s     3As(aas   		)r   r   r   cbdc              3   P   #    U  H  oS :w  d  M
  UR                  5       v   M     g7fr  upperr  s     r   ry   r  2  s     >Eq#XE   	&&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   P   #    U  H  oS :w  d  M
  UR                  5       v   M     g7fr  r  r  s     r   ry   r  9  s     @eCx917799er	  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   P   #    U  H  oS :w  d  M
  UR                  5       v   M     g7f)r   Nr  r  s     r   ry   r  ?  s     =5aH			5r	  z
test "xyz"r   Tr   zyxFtest_zyxz
xxxx "xxx"c                      gN2   r.   r.   r-   r   r   :TestsUtilsTest.testExtendedAssertMethods.<locals>.<lambda>Q  s    Br-   r     g      9@c                      gr  r.   r.   r-   r   r   r  V  s    Rr-   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                  4   > T R                  SS//SS//SSS9$ Nr
  r  r   T)r  r  assertSortedEqualr*   s   r   r   r  w  s+    D,B,B#J<3*Q4 -C -9r-   c                  8   > T R                  SSS/0SSS/0SSS9$ r  r  r*   s   r   r   r  z  s2    D,B,B#ssS#J'qT -C -Cr-   ZCEFr
  r  r  r
  c                  J   > T R                  SSS/SS/S./SS/SS/S.S/SS	9$ )
Nr!  r  r"  r#  r$  r%  r&  Tr  r  r*   s   r   r   r    sC    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   assertNotLoggedrD   rE   fastassertFalse
isinstancemaxWaitTimeboolr   assertDictEqualr   r   r  r   )r   r   orgfasts   `  r   testExtendedAssertMethods(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]	 	] c                     U R                  [        S5      S5        U R                  [        SSS9S5        U R                  [        SSSS9S5        g )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   testVerbosityFormat"TestsUtilsTest.testVerbosityFormat  sU    %a(FH%a7AC%aF57r-   c                    [        5       n[        nSn[        S5      n[        R                  " U5      nUR                  U" U5      5        UR                  U5        UR                  S5        UR                  5       nU R                  UR                  5       R                  S5      5        UR                  S5      nU R                  US:  5        U R                  US U XgS-   US-  S-    5        g )	Nz %(tb)s | %(tbc)s : %(message)sfail2ban_testsXXXz: XXX|
   r   r	   )r   r   r   r[   StreamHandlersetFormatter
addHandlererrorgetvaluer_   r8   endswithindexr   )r   strout	Formatterfmtr   outr   pindexs           r   testFormatterWithTraceBack)TestsUtilsTest.testFormatterWithTraceBack  s    :&$) 	*#%&&f%#9S>"C,,uoo!//!((*%%g./773<& //&2+1Wf:q&(Q,78r-   c                     [         nUR                  S[        R                  R                  5        UR                  SSSS5        U R                  S5        g )Nzlazy logging: %rr   r   r	   r   znot all arguments converted)r   r.  rD   rE   log_lazyr   r   )r   r   s     r   testLazyLoggingTestsUtilsTest.testLazyLogging  sA    &,,!8<<#8#89--1a 12r-   r.   N)r/   r0   r1   r2   r   r   r   r   r   r   r7  r<  rO  rS  r3   r.   r-   r   r   r      s9    >(T@G,d3L79(3r-   r   c                        \ rS rSrS rS rSrg)
MyTimeTesti  c                    [         R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S	5        U R                  U" S
5      S	5        U R                  U" S5      S5        U R                  [        U" S5      5      S-  S-  S-  S5        U R                  [        U" S5      5      S-  S-  S-  S5        g )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   testStr2Seconds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   S nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S	5        U R                  U" S
5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g )Nc                 @    [        [        R                  " U 5      5      $ ru   )rO   r   seconds2str)r   s    r   r   (MyTimeTest.testSec2Str.<locals>.<lambda>  s    c&,,Q/0r-   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   testSec2StrMyTimeTest.testSec2Str  s   0'79%*=79%':7<($778$':7;'$77/0+>7<(':79%(;78$$776?$777#)<72;%871:#6r-   r.   N)r/   r0   r1   r2   r^  rl  r3   r.   r-   r   rV  rV    s    D7r-   rV  )$
__author____copyright____license__r[   rG   rQ   rD   rX   ra   r|   r   ior   utilsr   r   r   helpersr
   r   r   r   r   r   r   r   r   server.mytimer   TestCaser   r;   r=   r?   r   rV  r.   r-   r   <module>rv     s   ( "
7  	 
       :8 8 8 "F(## F>!
Ta!! aH{3' {3|7"" 7r-   