
    =*fZ                         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J	r	  SSK
JrJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJr  SSKJrJr   " S S\5      r " S S\5      r " S S\5      rg)zSerg G. Brester (sebres)z"Copyright (c) 2014 Serg G. BresterGPL    N   )MyTime)
FailTicket	BanTicket)FailManager)	ObserversObserverThread)Utils   )LogCaptureTestCase)	DummyJail)getFail2BanDb
Fail2BanDbc                   P   ^  \ rS rSrU 4S jrU 4S jrS rS	S jrS rS r	Sr
U =r$ )
BanTimeIncr,   c                    > [         [        U ]  5         [        5       U l        U R
                  U R                  l        [        5       U l        gCall before every test case.N)superr   setUpr   _BanTimeIncr__jailcalcBanTimer
   Observerself	__class__s    A/usr/lib/python3/dist-packages/fail2ban/tests/observertestcase.pyr   BanTimeIncr.setUp.   s5    T "$+ ,,$++ "$-    c                 *   > [         [        U ]  5         g N)r   r   tearDownr   s    r   r$   BanTimeIncr.tearDown5   s    T#%r!   c                 N    U R                   R                  U R                  X5      $ r#   )r   r   r   )r   banTimebanCounts      r   r   BanTimeIncr.calcBanTime8   s    		"	"4;;	BBr!   c                    U R                   nUR                  SS5        U R                  UR                  S5      S5        UR                  SS5        U R                  UR                  S5      S5        UR                  SS 5        UR                  SS 5        UR                  S	U5        U R                  [	        S
S5       Vs/ s H  o2R                  SU5      PM     sn/ SQ5        UR                  SS5        / SQnUb7  [        UR                  S5      5      nUS:  a  USUS
-
   XES-
     /SU-
  -  -   nU R                  [	        S
S5       Vs/ s H  o2R                  SU5      PM     snU5        UR                  SS5        UR                  SS5        U R                  [	        S
S5       Vs/ s H  o2R                  SU5      PM     sn/ SQ5        UR                  SS5        U R                  [	        S
S5       Vs/ s H  n[        UR                  SU5      5      PM      sn/ SQ5        UR                  SS 5        UR                  SS5        U R                  [	        S
S5       Vs/ s H  o2R                  SU5      PM     sn/ SQ5        UR                  SS5        UR                  SS5        U R                  S[	        S5       VVs/ s H1  nS[	        S5       Vs/ s H  o2R                  SS
5      PM     sn;   PM3     snn;   5        UR                  SS 5        U R                  S[	        S5       VVs/ s H1  nS[	        S5       Vs/ s H  o2R                  SS
5      PM     sn;   PM3     snn;   5        UR                  S	S 5        UR                  SS 5        UR                  SS5        UR                  SS 5        g s  snf s  snf s  snf s  snf s  snf s  snf s  snnf s  snf s  snnf )N	incrementtrueTmaxtime1dQ rndtimefactormultipliersr      X  
  `	    %   K      , r/   r/   r/   30d)
r6   r7   r8   r9   r:   r;   r<   i X i  i `	  r   r   2)
r7   r8   r9   r:   r;   r<   r/   r/   r/   r/   z1.33)
i<  ix  i  i1  ic  i  r/   r/   r/   r/   12h
r6   r7   r8   r9   r:   r;     rB   rB   rB   24h5mF
   r6   )r   setBanTimeExtraassertEqualgetBanTimeExtraranger   lensplitint
assertTrueassertFalse)r   r2   aiarrmultcntcs          r   testDefaultBanTimeIncr.testDefault;   s|   
kk!K(1$$[148It$1$$Y/:It$Hd#M;/#(B<0<aMM#q<0E
 Iu%M#""3'(7l
a	
s19~."W*=
>C#(B<0<aMM#q<0 It$Hc"#(B<0<aMM#q<0F
 Hf%(-a51Cc15F Hd#Iu%#(B<0<aMM#q<0E Iu%It$//rSATU2Y?YmmC+Y??SS It$rSATU2Y?YmmC+Y??SS M4(Hd#Iu%It$c 1 1 1 6 1 @S @SsN   OO0O %O,OO&#O!>	O&=O1O,,	O1!O&,O1c                     U R                  S5        U R                  SR                  [        S5       Vs/ s H  n[        SU-  5      PM     sn5      5        g s  snf )Nz1 2 4 8 16 32 64 128 256r>      r   )rT   joinrI   str)r   rP   s     r   testMultipliersBanTimeIncr.testMultipliersz   sF    -.388b	:	1SAY	:;<:s   Ac                    U R                   nUR                  SS5        UR                  SS 5        UR                  SS5        UR                  SS5        UR                  SS 5        U R                  [        S	S
5       Vs/ s H  n[	        UR                  SU5      5      PM      sn/ SQ5        UR                  SS5        U R                  [        S	S
5       Vs/ s H  n[	        UR                  SU5      5      PM      sn/ SQ5        UR                  SS5        UR                  SS5        U R                  [        S	S
5       Vs/ s H  n[	        UR                  SU5      5      PM      sn/ SQ5        UR                  SS5        UR                  SS5        U R                  [        S	S
5       Vs/ s H  n[	        UR                  SU5      5      PM      sn/ SQ5        UR                  SS5        UR                  SS5        U R                  S[        S5       VVs/ s H;  nS[        S5       Vs/ s H  n[	        UR                  SS	5      5      PM      sn;   PM=     snn;   5        UR                  SS 5        U R                  S[        S5       VVs/ s H;  nS[        S5       Vs/ s H  n[	        UR                  SS	5      5      PM      sn;   PM=     snn;   5        UR                  SS 5        UR                  SS 5        UR                  SS 5        UR                  SS5        UR                  SS 5        g s  snf s  snf s  snf s  snf s  snf s  snnf s  snf s  snnf )Nr-   rC   r0   formulazGban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)r1   z2.0 / 2.885385r2   r   r3   r4   r5   r=   )
r6   r7   r8   r9   r:   r;   r<   iX i i`	 1)
i^  iQ  i/  i  r/   r/   r/   r/   r/   r/   r@   rA   rD   FrE   r6   )r   rF   rG   rI   rL   r   rM   rN   )r   rO   rP   rS   s       r   testFormulaBanTimeIncr.testFormula   s   
kk!Iu%It$IhiH./M4((-a51Cc15E
 Iu%(-a51Cc15H Iu%Hc"(-a51Cc15G H./Iu%(-a51Cc15E Iu%It$//eTViXiT%)D)Qc!--Q/0)DDiXX It$eTViXiT%)D)Qc!--Q/0)DDiXX Hd#M4(Hd#Iu%It$M 6 6 6 6 EX EXsH    %L>%M%M2%MM3%M	MM"+%M	M"MM")r   __jailr#   )__name__
__module____qualname____firstlineno__r   r$   r   rT   rZ   r_   __static_attributes____classcell__r   s   @r   r   r   ,   s(    #&C=%~=0% 0%r!   r   c                   J   ^  \ rS rSrU 4S jrU 4S jrSS jrS rS rSr	U =r
$ )	BanTimeIncrDB   c                   > [         [        U ]  5         [        c  [        R
                  " S5      e[        c  g[        R                  " SS5      u  ol        [        U R                  5      U l
        [        5       U l        U R                  U R                  l        [        5       U l        U R                  [         l        g)r   NzEUnable to import fail2ban database module as sqlite is not available.z.db	fail2ban_)r   rj   r   r   unittestSkipTesttempfilemkstemp
dbFilenamer   dbr   jaildatabaser
   r   r	   Main)r   _r   s     r   r   BanTimeIncrDB.setUp   s    t"$			
  	''{;!_$//*$'k$)ww$)) "$-==).r!   c                    > [         c  gU R                  R                  5         S[        l        [
        R                  " U R                  5        [        [        U ]+  5         gzCall after every test case.N)r   r   stopr	   rv   osremoverr   r   rj   r$   r   s    r   r$   BanTimeIncrDB.tearDown   s@    	--).))DOOt%'r!   c                     U R                   nUc)  UR                  UR                  R                  5       5      nUR                  S 5        U R                  R                  X2U5      nU$ r#   )rt   
getBanTimeactions
setBanTimer   incrBanTime)r   ticketr'   rt   incrTimes        r   r   BanTimeIncrDB.incrBanTime   sV    	$_t||66897D]]&&tf=(	/r!   c           
         [         c  g U R                  nU R                  R                  U5        UR                  R                  S5        UR                  SS5        UR                  SS5        Sn[        [        R                  " 5       5      n[        X#/ 5      nU R                  [        S5       Vs/ s H  oPR                  US5      PM     sn/ SQ5        UR                  5         U R                  R                  X5        U R                  U R                  R!                  X!S S	5       VVVs/ s H	  u  pgoXx4PM     snnnS
US4/5        UR#                  US-   5        U R                  U R                  US5      S5        U R                  R                  X5        U R                  U R                  R!                  X!S S	5       VVVs/ s H	  u  pgoXx4PM     snnnSUS-   S4/5        U R                  U R                  R!                  USS S5       VVVs/ s H	  u  pgoXx4PM     snnnSUS-   S4/5        U R                  U R                  R!                  X#US9 VVVs/ s H	  u  pgoXx4PM     snnnSUS-   S4/5        U R                  U R                  R%                  SUS	S9/ 5        U R                  R%                  US	S9n	U R                  ['        U	5      SU< SUS-   < S35        U R                  R%                  US	S9n	U R                  ['        U	5      SU< SUS-   < S35        U R                  R%                  XS	S9n	U R                  ['        U	5      SU< SUS-   < S35        Sn[        S5       H\  nUR#                  X8-   S-   5        U R                  US5      n
U R                  XS-  5        U R                  R                  X5        U
nM^     UR#                  X8-   S-   5        U R                  US5      n
U R)                  XS-  5        U R                  X5        U R                  R                  X5        U
n[        US-   US-
  / 5      nUR                  S5        UR                  5         U R                  R                  X5        [        US-   US-
  / 5      nUR                  S 5        UR                  5         U R                  R                  X5        U R                  R%                  US	S9n	U R                  [+        U	5      S5        U R                  ['        U	S!   5      SU< SX8-   S-   < S"U< S#35        U R                  ['        U	S
   5      SUS-   < SUS-
  < S"S < S$35        U R                  R%                  US%-
  S	S9n	U R                  [+        U	5      S5        U R                  ['        U	S   5      SUS-   < SUS-
  < S"S< S$35        U R-                  U	S
   R/                  U5      5        U R-                  U	S
   R/                  U5      5        U R1                  U	S   R/                  U5      5        U R-                  U	S   R/                  US%-
  5      5        [        US&-   US -
  / 5      nU R1                  UR/                  US'5      5        U R-                  UR/                  US(5      5        UR                  S(5        U R-                  UR/                  US'5      5        U R-                  UR/                  US(5      5        UR                  S'5        U R1                  UR/                  US(5      5        UR                  S(5        UR                  5         U R                  R                  X5        U R                  R%                  US	S9n	U R                  [+        U	5      S5        U R                  ['        U	S   5      SUS&-   < SUS -
  < S"S(< S$35        U R                  R3                  5         U R                  R%                  US	S9n	U R                  [+        U	5      S5        UR                  S'5        UR                  5         U R                  R                  X5        U R                  R3                  5         U R                  R%                  US	S9n	U R                  [+        U	5      S5        U R                  U	S!   R5                  5       U5        S)U R                  l        U R                  R3                  5         U R                  R%                  US	S9n	U R                  [+        U	5      S
5        U R                  U	S!   R5                  5       US-   5        S*U R                  l        U R                  R3                  5         U R                  R%                  US	S9n	U R                  U	/ 5        [9        S+S,9nS	UR:                  l        UR                  SS5        U R                  Ul        U R                  R                  U5        [9        S-S+S.9nS	UR:                  l        U R                  Ul        U R                  R                  U5        [        X#/ 5      nUR                  S/5        UR                  5         U R                  R                  X5        [        X#S/-
  / 5      nUR                  S05        URA                  S
5        UR                  5         U R                  R                  X5        U R                  R%                  XS	S9n	U R                  [+        U	5      S
5        U R                  ['        U	S!   5      SU< SU< S"S/< S$35        U R                  R%                  XS	S9n	U R                  [+        U	5      S
5        U R                  ['        U	S!   5      SU< SUS/-
  < S"S0< S135        U R                  R!                  X,5       H  nU R                  US
US/45          O   U R                  R!                  X-5       H  nU R                  USUS/-
  S045          O   U R                  R!                  USS29 H  nU R                  USUS345          O   URC                  S	S49  URE                  5       nU R1                  URF                  5        U R                  ['        U5      SU< SU< S"S/< S$35        URC                  S	S49  U R                  URE                  5       S	5        UR                  S5S65        URC                  5         URE                  5       nU R1                  URF                  5        U R                  ['        U5      SU< SU< S"S'< S$35        URC                  5         U R                  URE                  5       S	5        g s  snf s  snnnf s  snnnf s  snnnf s  snnnf )7NrE   r+   r,   r2   z&1 2 4 8 16 32 64 128 256 512 1024 2048	192.0.2.1   )rE   rE   rE   Fr         r    T)
forbantimefromtimei)r   r   correctBanTime)ipr   zFailTicket: ip=z time=z- bantime=20 bancount=2 #attempts=0 matches=[])r   r   z[FailTicket: ip=z. bantime=20 bancount=2 #attempts=0 matches=[]]rt   r   r      r?   r/   rB   r^   i@ r   z	 bantime=z# bancount=13 #attempts=0 matches=[]z" bancount=1 #attempts=0 matches=[]i   3r4   i ] pollingbackendzDummyJail-2)namer   ip  i.  z" bancount=2 #attempts=0 matches=[])overalljailsiPF  )r   r-   10m)$r   rt   rs   addJailr   r   rF   rL   r   timer   rG   rI   r   incrBanCountaddBangetBansetTimegetCurrentBansrY   assertNotEqualrJ   rN   
isTimedOutrM   purgegetID	_purgeAger   filter
ignoreSelfru   setBanCountrestoreCurrentBansgetFailTicketrestored)r   rt   r   stimer   rP   r(   	timeOfBanlastBanTimerestored_ticketsr'   ticket2jail1jail2ticket1rows                   r   testBanTimeIncrBanTimeIncrDB.testBanTimeIncr   s6   		$''//$,,"{F+}&NO"
fkkm
%b$&*/(3(QVR (3
 	''..OSww~~^`hlnsOtuOt+K8y&OturN
 	..4##FB/4''..OSww~~^`hlnsOtuOt+K8y&Otu
B
 OSww~~^`bdfjlpOqrOq+K8y&Oqr
B
 OSww~~^`  ~C~  PD  E  PD+K8y&  PD  E
B
 77YuU
 WW++r%+HPRTY\^T^_
 WW++U5+QRTV[^`V`a
 WW++V[+\RTV[^`V`a
 +9a	>>%%)*fb)7G1_-77>>$;  	..$q()VR('gQ/7(''..+r#vuX~r2'	X	''..r#vuX~r2'	X	''..WW++U5+Q3'(!,PRTYTgjkTkmxy OQRUvW\]eWegop
 WW++U8^TY+Z3'(!,OQRUvW\]eWegop
 #A&11%89#A&11%89//"1%0078#A&11%.AB 
BsFE(NB	/&//&##E3/06$$UB/0B6$$UC016$$UB/0C//&##E2./ 	B''..WW++U5+Q3'(!,OQRUvW\]eWegij
 ''--/WW++U5+Q3'(!,C''..''--/WW++U5+Q3'(!,#A&,,.3  $''''--/WW++U5+Q3'(!,#A&,,.37 !$''''--/WW++U5+Q#R( I
&%!%,,V,77%.''//%
	
:%!%,,77%.''//%r"%'	T	''.. r:r*'	U	a	''.. WW++W\+]3'(!,OQSXZ^_ WW++W\+]3'(!,OQSXY]S]_de
 WW^^B&cC!UD)* ' WW^^B&cC!U4Z/0 ' WW^^BT^2cC!UE*+ 3 %0 &//&//"3v;OQSXZ^_ %05&&(%0	5) &//&//"3v;OQSXZ]^ 5&&(%0q 4 v v
 s
 Es   3v./v3
v:w"wc                 r   [         c  g [        SS9=ol        U R                  Ul        U R                  R                  U5        UR                  R                  S5        UR                  SS5        [        R                  nUR                  5         UR                  U R                  5        UR                  S5        UR                  S5        SU R                  l        UR!                  S	S
S5        U R#                  SSS9  UR%                  S5        UR                  S5        UR                  S5        ['        [(        R*                  " 5       5      nU R                  R-                  5       nU R/                  U/ 5        Sn[1        XSS-
  / 5      n[3        5       =oqR4                  l        UR9                  S5        [;        S5       H&  nUR=                  U5        UR                  SX5        M(     UR                  S5        U R/                  UR?                  5       S5        U RA                  URC                  5       (       + 5        URE                  S5        U R                  RG                  X5        U R                  RI                  XS-
  SS9n	U R/                  [K        U	5      S5        [1        XS/ 5      n[3        5       =oqR4                  l        UR9                  S5        UR=                  U5        UR                  SX5        UR                  S5        [L        RN                  " URB                  S5      n
U RA                  U
5        U R/                  U
RQ                  5       URS                  5       5        U
n[T        RV                  " U5      n
U R/                  X5        UR                  SXS5        UR                  S5        U R/                  U
RY                  5       S5        U R/                  U
R?                  5       S5        U R                  RI                  XSS9n	U R/                  [K        U	5      S5        U R/                  U	S   RY                  5       S5        U R/                  U	S   R?                  5       S5        [1        XSS-
  S/5      nUR[                  U5        U R]                  UR                  R_                  5       5        [1        U[(        R*                  " 5       S/5      nUR[                  U5        U RA                  UR                  R_                  5       5        UR                  S5        U R                  RI                  XSS9n	U R/                  [K        U	5      S5        U R/                  U	S   RY                  5       S5        U R/                  U	S   R?                  5       S5        [1        US -   [(        R*                  " 5       S!/5      nUR                  S"5        UR[                  U5        U RA                  UR                  R_                  5       5        UR                  S5        [1        US -   [(        R*                  " 5       S!/5      nUR                  S#5        UR[                  U5        U R]                  UR                  R_                  5       5        UR                  S5        U R                  RI                  XSS9n	U R/                  [K        U	5      S$5        U R/                  U	S   RY                  5       S"5        U R/                  U	S   R?                  5       S5        URa                  5         g )%Nr   r   rE   r+   r,   nopr   r   DB_PURGEgMbP?db_purgezPurge database event occurredT)waitg?r   x   r   failureFoundr      Fr   r   banFound   <   ztest-expired-ban-timeztest-actionsi@     r^   ztest-permanentr   r4   r   )1r   r   rt   rs   ru   r   r   r   rF   r	   rv   startdb_setadd
wait_emptyr   add_named_timerassertLogged	wait_idlerL   r   r   getBansrG   r   r   r   failManagersetMaxRetryrI   
addFailuregetBanCountrM   r   r   r   r   rJ   r   wait_forgetRetrygetMaxRetryr   wrapr   putFailTicketrN   checkBanr{   )r   rt   obsr   ticketsr   r   r   rP   r   r   failticket2s               r   testObserverBanTimeIncrDB.testObserver  s   	y11$''$-''//$,,"{F+#))+**TWW''%... $''j%43$?--''%...
fkkm
%GGOO'7B "b)R(&*5-7+'!8a&!77>4(  ..6%%'+//d((**+Q''..WW++c	Z_+`3'(!,b$&*5-7+'! ''.$'..NN4--r2'//'7##%{'>'>'@A +NN;''7(''*gR(..7%%'-7&&(!, WW++V[+\3'(!,#A&113S9#A&224a8 b(%<$=>&V4<<((*+b&++-.)9:&V//$,,'')*..WW++V[+\3'(!,#A&113S9#A&224a8 bffkkm.>-?@&BV//$,,'')*..bffkkm.>-?@&CV4<<((*+..WW++V[+\3'(!,#A&113R8#A&224a8 ((*r!   )r   rs   rr   rt   r#   )rb   rc   rd   re   r   r$   r   r   r   rf   rg   rh   s   @r   rj   rj      s%    ! (g1Rq qr!   rj   c                   V   ^  \ rS rSrU 4S jrU 4S jrS r " S S\5      rS r	Sr
U =r$ )	ObserverTesti5  c                 *   > [         [        U ]  5         gr   )r   r   r   r   s    r   r   ObserverTest.setUp7  s    d!#r!   c                 *   > [         [        U ]  5         grz   )r   r   r$   r   s    r   r$   ObserverTest.tearDown;  s    d$&r!   c                    [        5       nUR                  5         UR                  S5        [        S/5      nUR	                  SUR
                  5        UR	                  SUR                  S5        UR                  S5        U R                  UR                  5        U R                  U[        S/5      5        SUl
        UR	                  SUR
                  5        UR	                  SUR                  S5        UR                  S[        R                  -  5        U R                  UR                  5        U R                  U[        S/5      5        SUl
        UR                  S5        U R                  U[        S/5      5        U R                  UR                  5       5        U R                  UR                  5       5        UR!                  5         S ng )	Nr   testcalltest2Ttest3rE   F)r
   r   r   setr   clearr   rN   is_fullrG   pausedr   DEFAULT_SLEEP_TIMErM   isActiveisAliver{   )r   r   os      r   testObserverBanTimeIncr$ObserverTest.testObserverBanTimeIncr?  sI   #))+--	6(m!''&!''''&!%%!..3;;1c7)n%#*''&!''''&!%%!..e...///#++1c7)n%#*..1c7)n%//#,,.!//#++- ((*#r!   c                       \ rS rSrS rSrg)ObserverTest._BadObserveri^  c                     [        S5      e)Nrun bad thread exception)RuntimeError)r   s    r   runObserverTest._BadObserver.run_  s    	0	11r!    N)rb   rc   rd   re   r   rf   r   r!   r   _BadObserverr   ^  s    2r!   r   c                 B  ^ ^ [         R                  5       nS Ul        [        R                  n/ mU4S j[        l         UR                  5         UR                  5         UR                  5         T R                  [        R                  " U U4S jS5      5        U[        l        T R                  S5        T R                  [        T5      S5        T R                  TS   S   [        5        T R                  [        TS   S   5      S5        g ! U[        l        f = f)	Nc                     g)Nr   r   )vs    r   <lambda>1ObserverTest.testObserverBadRun.<locals>.<lambda>e  s    Br!   c                  &   > TR                  U 5      $ r#   )append)argsxs    r   r   r   i  s    QXXd^r!   c                  J   > [        T5      =(       a    T R                  S5      $ )NUnhandled exception)rJ   
_is_logged)r   r  s   r   r   r   n  s    CF,]tG\7],]r!   r   r  r   r   r   )r   r   r   sys__excepthook__r   r{   rX   rM   r   r   r   rG   rJ   r   rY   )r   r   prev_exchookr  s   `  @r   testObserverBadRunObserverTest.testObserverBadRunb  s    !!###.##,!3#%99;88:88:??ENN$]_`ac$3)*3q611Q47L)3qtAw<!;<	 %3s   AD Dr   )rb   rc   rd   re   r   r$   r   r
   r   r	  rf   rg   rh   s   @r   r   r   5  s(    $'>2N 2= =r!   r   )
__author____copyright____license__r|   r  rn   rp   r   server.mytimer   server.ticketr   r   server.failmanagerr   server.observerr	   r
   server.utilsr   utilsr   	dummyjailr   databasetestcaser   r   r   rj   r   r   r!   r   <module>r     sj   . (
4 	 
    " 1 , 7   %   7D%$ D%N@& @D?=% ?=r!   