o ;s*bY@sdZdZdZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z ddl mZdd lmZmZdd lmZd d lmZd d lmZd dlmZmZGdddeZGdddeZGdddeZdS)zSerg G. Brester (sebres)z"Copyright (c) 2014 Serg G. BresterGPLN)MyTime) FailTicket BanTicket) FailManager) ObserversObserverThread)Utils)LogCaptureTestCase) DummyJail) getFail2BanDb Fail2BanDbcsJeZdZfddZfddZddZddd Zd d Zd d ZZ S) BanTimeIncrcs,tt|t|_|j|j_t|_dSCall before every test case.N)superrsetUpr _BanTimeIncr__jail calcBanTimer Observerself __class__A/usr/lib/python3/dist-packages/fail2ban/tests/observertestcase.pyr.s  zBanTimeIncr.setUpcstt|dSN)rrtearDownrrrrr5zBanTimeIncr.tearDowncCs|j|j||Sr)rrr)rbanTimebanCountrrrr8r zBanTimeIncr.calcBanTimeNcsB|jdd|dddd|ddddddd ||fd d td d Dgdddgd}|durqt|d}|d krq|d|d ||dgd |}|fdd td d D|dddd|fdd td d Dgddd|fdd td d Dgddddd|fdd td d Dgddddd|d fd!d td"Dvdd|d fd#d td"Dvd ddddddddS)$N incrementtrueTmaxtime1dQrndtimefactor multiplierscg|]}d|qSXr.0iarr Gz+BanTimeIncr.testDefault..r ` %K,r'r'r'30d) r8r9r:r;r<r=r>iXii`  rrcr+r,r.r/r2rrr4Sr52cr+r,r.r/r2rrr4Zr5) r9r:r;r<r=r>r'r'r'r'z1.33cg|] }td|qSr,intrr/r2rrr4`) i<ix ii1icir'r'r'r'12hcr+r,r.r/r2rrr4gr5 r8r9r:r;r<r=rHrHrH24h5mFc&g|]}dfddtdDvqS)r8cg|]}ddqSr-r r.r/r2rrr4nr56BanTimeIncr.testDefault... ranger0cr2rrr4n&rOcrK)r8crLrMr.r/r2rrr4rr5rNrOrPrRr2rrr4rrT) rsetBanTimeExtra assertEqualgetBanTimeExtrarQlensplit assertTrue assertFalse)rr*arrmultcntrr2r testDefault;sh      &           zBanTimeIncr.testDefaultcCs,|d|dddtdDdS)Nz1 2 4 8 16 32 64 128 256r@cSsg|]}td|>qS)r )strr/rrrr4~r5z/BanTimeIncr.testMultipliers..)r^joinrQrrrrtestMultiplierszs "zBanTimeIncr.testMultiplierscs|jdddddddddd|fd d td d Dgd dd|fdd td d Dgddddd|fdd td d Dgddddd|fdd td d Dgddddd|dfdd tdDvdd|dfdd tdDvdddddddddddS)Nr%rIr(formulazGban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)r)z2.0 / 2.885385r*crBr,rCr/r2rrr4rEz+BanTimeIncr.testFormula..r r6r7r?crBr,rCr/r2rrr4rE) r8r9r:r;r<r=r>iXii` 1crBr,rCr/r2rrr4rE) i^iQi/ir'r'r'r'r'r'rFcrBr,rCr/r2rrr4rErGrJFcrK)r8cg|] }tddqSrMrCr/r2rrr4rE6BanTimeIncr.testFormula...rOrPrRr2rrr4rTrOcrK)r8crerMrCr/r2rrr4rErfrOrPrRr2rrr4rT)rrUrVrQrZr[rrr2r testFormulasR                 zBanTimeIncr.testFormular) __name__ __module__ __qualname__rrrr^rbrg __classcell__rrrrr,s   ?rcsBeZdZfddZfddZd ddZdd Zd d ZZS) BanTimeIncrDBcsztt|tdurtjdkrtdtdurdSt dd\}|_ t |j |_ t |_|j |j_t|_|jt_dS)rN)rzEUnable to import fail2ban database module as sqlite is not available.z.db fail2ban_)rrlrrsys version_infounittestSkipTesttempfilemkstemp dbFilenamerdbr jaildatabaser rrMain)r_rrrrs   zBanTimeIncrDB.setUpcs:tdurdS|jdt_t|jtt | dSzCall after every test case.N) rrstoprryosremoverurrlrrrrrrs   zBanTimeIncrDB.tearDownNcCs<|j}|dur||j}|d|j|||}|Sr)rw getBanTimeactions setBanTimer incrBanTime)rticketr!rwincrTimerrrrs  zBanTimeIncrDB.incrBanTimec stdurdSj}j||jd|dd|ddd}tt }t ||g fddt d Dgd  j| d dj||dd Dd |dfg|d ddj| ddj||dd Dd|ddfg ddj|dddDd|ddfg ddjj|||dDd|ddfg jjd|d dgjj|d d} t|d||dfjj|d d} t|d||dfjj||d d} t|d||dfd}t dD]#}||dd} ||dj||}q||dd}||d ||j||}t |d|d g}|d!| j||t |d"|d g}|d#| j||jj|d d} t|d t|d$d%|||d|f t|d d&|d"|d d#fjj|d'd d} t|d  t|dd&|d|d d!f|d ||d ||d||d|d't |d(|d#g|d)|d*d*|d)|d*d)|d*d* j|jj|d d} t|d  t|dd&|d(|d#d*fjjj|d d} t|d d) j|jjj|d d} t|d |d$|d+j_jjj|d d} t|d  |d$|d"d,j_jjj|d d} |gtd-d.} d | j_| ddj| _j| td/d-d0} d | j_j| _j| t ||g} | d1| j| | t ||d1g}|d2| d | j| |jj| |d d} t|d  t|d$d&||d1fjj| |d d} t|d  t|d$d3||d1d2fj|| D] } | d |d1fj|| D] } | d|d1d2fjj|dd4D] } | d |d5f| j!d d6| "j# td&||d1f| j!d d6 | "d | d7d8| !| "j# td&||d)f| ! | "d dS)9NrOr#r$r*z&1 2 4 8 16 32 64 128 256 512 1024 2048 192.0.2.1csg|]}dqS)rO)rr/rrrrr4r5z1BanTimeIncrDB.testBanTimeIncr..)rOrOrOcSg|] \}}}|||fqSrrr0r" timeOfBan lastBanTimerrrr4rEFr cSrrrrrrrr4rErcSrrrrrrrr4rETcSrrrrrrrr4rE) forbantimefromtimei)rrcorrectBanTime)iprzFFailTicket: ip=%s time=%s bantime=20 bancount=2 #attempts=0 matches=[])rrzH[FailTicket: ip=%s time=%s bantime=20 bancount=2 #attempts=0 matches=[]]rwrrrAr'rHrdi@rzGFailTicket: ip=%s time=%s bantime=%s bancount=13 #attempts=0 matches=[]zFFailTicket: ip=%s time=%s bantime=%s bancount=1 #attempts=0 matches=[]i 3r-i]polling)backendz DummyJail-2)nameripi.zFFailTicket: ip=%s time=%s bantime=%s bancount=2 #attempts=0 matches=[]) overalljailsiPF)rr%10m)$rrwrvaddJailrrrUrDrtimerrVrQ incrBanCountaddBangetBansetTimergetCurrentBansr_assertNotEqualrXr[ isTimedOutrZpurgegetIP _purgeAger filter ignoreSelfrx setBanCountrestoreCurrentBans getFailTicketrestored) rrwrstimerestored_ticketsrr1r!ticket2jail1jail2ticket1rowrrrtestBanTimeIncrsv                                               zBanTimeIncrDB.testBanTimeIncrc CstdurdS|j}|j||jd|ddtj}| | |j| d| dd|j_ |ddd |jd d d |d | d| dtt}|j}||gd}t||dg}t}|dtdD]}||| d|||qz| d||d|| |d|j|j||jj ||ddd} |t!| dt||g}t}|d||| d||j|| dt"#|jd} || || $|%| } t&'| } || | | d| |d| d|| (d|| d|jj ||dd} |t!| d|| d(d|| ddt||ddg}|)||*|j+t|tdg}|)|||j+| d|jj ||dd} |t!| d|| d(d|| ddt|dtdg}|d |)|||j+| dt|dtdg}|d!|)||*|j+| d|jj ||dd} |t!| d"|| d(d || dd|,dS)#NrOr#r$noprrDB_PURGEgMbP?db_purgezPurge database event occurredT)waitg?rxr failureFoundrFrr banFound<ztest-expired-ban-timez test-actionsi@rdztest-permanentrr-r)-rrwrvrrrrUrrystartdb_setadd wait_emptyradd_named_timer assertLogged wait_idlerDrrgetBansrVrr setMaxRetryrQ addFailure getBanCountrZrrrrrXr wait_forgetRetry getMaxRetryrwrapr putFailTicketr[checkBanr|) rrwobsrticketsrr failManagerr1rr failticket2rrr testObservers                                   zBanTimeIncrDB.testObserverr) rhrirjrrrrrrkrrrrrls    jrlcsHeZdZfddZfddZddZGdddeZd d ZZ S) ObserverTestctt|dSr)rrrrrrrr6zObserverTest.setUpcrr{)rrrrrrrr:rzObserverTest.tearDowncCst}||dtdg}|d|j|d|jd|d||j| |tdgd|_ |d|j|d|jd|dt j | |j| |tdgd|_ |d| |tdg| || ||d}dS) Nr testcalltest2Ttest3rOF)r rrsetrclearrr[is_fullrVpausedr DEFAULT_SLEEP_TIMErZisActiveisAliver|)rrorrrtestObserverBanTimeIncr>s,      z$ObserverTest.testObserverBanTimeIncrc@seZdZddZdS)zObserverTest._BadObservercCstd)Nrun bad thread exception) RuntimeErrorrrrrrun^szObserverTest._BadObserver.runN)rhrirjrrrrr _BadObserver]s rcst}dd|_tj}gfddt_z|||t fdddW|t_n|t_w d t d ddt tddd dS) NcSsdS)Nrr)vrrrdsz1ObserverTest.testObserverBadRun..cs |Sr)append)args)xrrrhs cstodS)NUnhandled exception)rX _is_loggedrrrrrrmsrrr rr)rrrro__excepthook__rr|rarZr rrrVrXrr_)rr prev_exchookrrrtestObserverBadRunas  zObserverTest.testObserverBadRun) rhrirjrrrr rrrkrrrrr4s   r) __author__ __copyright__ __license__r}rorqrsr server.mytimer server.ticketrrserver.failmanagerrserver.observerrr server.utilsr utilsr dummyjailr databasetestcaserrrrlrrrrrs.