
    =*ff_                     \   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J	r	J
r
  SSKJr  SSKJr  SSKJrJr  S	S
KJr   SSKJr  \R,                  rS	SKJrJrJr  \R:                  R=                  \R:                  R?                  \ 5      S5      r!S r" " S S\5      r#g! \ a    Sr NXf = f)z"Copyright (c) 2013 Steven HiscocksGPL    N   )FileContainerFilter)MyTime)
FailTicket)ActionsUtils   )	DummyJail)database)LogCaptureTestCaselogSys
uni_decodefilesc                 l    [         R                  R                  (       a  [        S5      $ [        U 5      $ )N:memory:)unittestF2B	memory_db
Fail2BanDb)filenames    A/usr/lib/python3/dist-packages/fail2ban/tests/databasetestcase.pygetFail2BanDbr   0   s%    LL	J	8    c                      ^  \ rS rSrU 4S jr\S 5       r\R                  S 5       rU 4S jrS r	S r
S rS	 r\S
 5       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S rS rS rS rS r Sr!U =r"$ )DatabaseTest6   c                    > [         [        U ]  5         [        c  [        R
                  " S5      eSU l        [        R                  R                  (       d  [        R                  " SS5      u  ol        SU l        g)zCall before every test case.NzEUnable to import fail2ban database module as sqlite is not available..db	fail2ban_:auto-create-in-memory:)superr   setUpr   r   SkipTest
dbFilenamer   r   tempfilemkstemp_db)self_	__class__s     r   r$   DatabaseTest.setUp8   sb    d!#			
  $/			 ((<1o&$(r   c                     [        U R                  [        5      (       a*  U R                  S:X  a  [        U R                  5      U l        U R                  $ )Nr"   )
isinstancer)   strr   r&   r*   s    r   dbDatabaseTest.dbD   s8    #488/H#HDOO,48	/r   c                     [        U R                  [        5      (       a  U R                  R                  5         Xl        g N)r/   r)   r   close)r*   values     r   r2   r3   I   s&    *%%88>>(r   c                    > [         [        U ]  5         [        c  gU R                  b!  [
        R                  " U R                  5        gg)zCall after every test case.N)r#   r   tearDownr   r&   osremove)r*   r,   s    r   r9   DatabaseTest.tearDownO   s8    d$&		__ 99T__ !r   c                     U R                   R                  S:X  a  [        R                  " S5      eU R	                  U R
                  U R                   R                  5        g )Nr   in :memory: database)r2   r   r   r%   assertEqualr&   r1   s    r   testGetFilenameDatabaseTest.testGetFilenameX   sD    	WW#			1	224??DGG$4$45r   c                 ,   U R                  U R                  R                  S5        SU R                  l        U R                  U R                  R                  S5        SU R                  l        U R                  U R                  R                  S5        g )NiQ 1y6mon15d5h30mi_z2y 12mon 30d 10h 60miP)r?   r2   purgeager1   s    r   testPurgeAgeDatabaseTest.testPurgeAge]   sh    477##U+%$''477##X.+$''477##Z0r   c                 N    U R                  [        R                  [        S5        g )Nz/this/path/should/not/exist)assertRaisessqlite3OperationalErrorr   r1   s    r   testCreateInvalidPath"DatabaseTest.testCreateInvalidPathd   s    
 "r   c                 :   U R                   R                  S:X  a  [        R                  " S5      eU R	                  5         [        U R                  5      U l         U R                  U R                  R                  U R                   R                  5       ;   S5        g )Nr   r>   z3Jail not retained in Db after disconnect reconnect.)r2   r   r   r%   testAddJailr   r&   
assertTruejailnamegetJailNamesr1   s    r   testCreateAndReconnect#DatabaseTest.testCreateAndReconnectj   sn    	WW#			1	22t'$'//99>>TWW))++8:r   c                     ^^^ [         R                  m " S S[         R                  5      m " U4S jS[         R                  5      mUU4S jn U [         l        g)z4[Mock-Up] broken connect to cover reparable restore.c                       \ rS rSrS rSrg)2DatabaseTest._mockupFailedDB.<locals>._mckp_Cursory   c                  .    [         R                  " S5      e)Nz[mock-up] broken database)rI   Error)argskwargss     r   execute:DatabaseTest._mockupFailedDB.<locals>._mckp_Cursor.executez   s    
--3
44r    N)__name__
__module____qualname____firstlineno__r]   __static_attributes__r_   r   r   _mckp_CursorrW   y   s    6r   re   c                   "   > \ rS rSrU 4S jrSrg)6DatabaseTest._mockupFailedDB.<locals>._mckp_Connection}   c                     > T" U 0 UD6$ r5   r_   )r[   r\   re   s     r   cursor=DatabaseTest._mockupFailedDB.<locals>._mckp_Connection.cursor~   s    (((r   r_   N)r`   ra   rb   rc   rj   rd   )re   s   r   _mckp_Connectionrg   }   s    ) )r   rl   c                  V   > [         R                  " S5        T[        l        T" U 0 UD6$ )Nz3[mock-up] broken connect to cover reparable restore)	DefLogSysdebugrI   connect)r[   r\   rl   _org_connects     r   _mckp_connect3DatabaseTest._mockupFailedDB.<locals>._mckp_connect   s'    ??HI!7?
D
+F
++r   N)rI   rp   Cursor
Connection)rr   rl   re   rq   s    @@@r   _mockupFailedDBDatabaseTest._mockupFailedDBu   s>     ,6W^^ 6)++ )- "'/r   c           	         [         R                  " SSS9nU(       a
  US   (       d  [        R                  " S5      e[	        US   5      R                  S5      nU(       a4  [        [        [        [        US   5      R                  S5      5      5      OS	nS U l
        U R                  c  [        R                  " S
S5      u  o l        S GHI  nUS:  a  US:  a  SnU R                  5         U R                  SU-  5        [         R"                  " [$        R&                  R)                  [*        S5      U R                  5        [$        R,                  " U R                  [$        R.                  5      n[$        R0                  " XC5        [$        R2                  " U5         [5        U R                  5      U l
        US:  az  U R7                  SSSSS9  U R9                  U R                  R;                  5       [=        S/5      5        U R9                  [?        U R                  RA                  5       5      S5        OxU R7                  SSSSS9  U R9                  [?        U R                  R;                  5       5      S5        U R9                  [?        U R                  RA                  5       5      S5        U R                  (       aQ  U R                  RB                  S:w  a4  [$        RD                  " U R                  RF                  5        S U l
        GMF  GMI  GML     g ! U R                  (       aM  U R                  RB                  S:w  a2  [$        RD                  " U R                  RF                  5        S U l
        f f f = f)Nzsqlite3 --versionT)outputr   zno sqlite3 commandr    .)   r   r   r    r!   )6  i  r}   )r|   *   i@8  z)[test-repair], next phase - file-size: %ddatabase_v1.dbzRepair seems to be successfulzCheck integrityzDatabase updated)all/tmp/Fail2BanDb_pUlZJh.logzRepair seems to be failedzNew database created.r   )$r
   
executeCmdr   r%   r   splittuplemapintr0   r2   r&   r'   r(   rv   pruneLogshutilcopyfiler:   pathjoinTEST_FILES_DIRopenO_RDWR	ftruncater6   r   assertLoggedr?   getLogPathssetlenrR   _dbFilenamer;   _dbBackupFilename)r*   retr+   	truncSizefs        r   testRepairDbDatabaseTest.testRepairDb   s   ,T:#	CF			/	003q6  %#47c#CF))#.01W#$'	__ ((<1o !i5S6\I==<yHI	??GGLL!12DOOE 
wwt		*1<<88A;)DGE	6+  7	dgg))+S2N1O-PQ	c$''..0115	20d  <	c$''--/0!4	c$''..0115ww477&&*4YYtww(()TW 5w3 !2 ww477&&*4YYtww(()TW 5ws    DLA M:c                    S U l          U R                  c  [        R                  " SS5      u  ol        [        R
                  " [        R                  R                  [        S5      U R                  5        [        U R                  5      U l         U R                  U R                   R                  5       [        S/5      5        U R                  U R                   R                  5       [        S/5      5        [        SSS/5      nU R                  U R                   R!                  5       S	   U5        U R                  U R                   R#                  [        R$                  5      [        R$                  5        U R'                  [(        U R                   R"                  [        R$                  S
-   5        U R                   R+                  SSS9nU R                  [-        U5      S
5        U R                  US	   R/                  5       S5        U R                   (       aF  U R                   R0                  S:w  a+  [        R2                  " U R                   R4                  5        g g g ! U R                   (       aF  U R                   R0                  S:w  a+  [        R2                  " U R                   R4                  5        f f f = f)Nr    r!   r   z"DummyJail #29162448 with 0 ticketsr   	127.0.0.1gףծAabc
r   r   iWRi@ )fromtimecorrectBanTimer   )r2   r&   r'   r(   r   r   r:   r   r   r   r   r?   rR   r   r   r   getBansupdateDb__version__rH   NotImplementedErrorgetCurrentBansr   
getBanTimer   r;   r   )r*   r+   ticketticketss       r   testUpdateDbDatabaseTest.testUpdateDb   s   $')
oo!))%=A	??GGLL!12DOOE(47DGG((*C1U0V,WXDGG'')30L/M+NO{MG9=6DGGOO%a(&1DGG$$Z%;%;<j>T>TU($''*:*:J<R<RUV<VWWW##Z#O7CL!$GAJ))+V4
gg$''%%3IIdgg''( 4gdgg$''%%3IIdgg''( 4gs   HI' 'AK c                 F   S U l         U R                  c  [        R                  " SS5      u  ol        [        R
                  " [        R                  R                  [        S5      U R                  5        [        U R                  5      U l         U R                  U R                   R                  5       [        S/5      5        U R                  U R                   R                  5       [        S/5      5        U R                   R                  5       nU R                  [!        U5      S5        [#        SS/ S	Q5      nUR%                  S
5        U R                  US   U5        U R                  US   R'                  5       S5        U R                  U R                   R)                  [        R*                  5      [        R*                  5        [-        SS9U l        U R                   R1                  U R.                  SS9nU R                  [!        U5      S5        U R                  US   R3                  5       S5        U R5                  [6        U R                   R(                  [        R*                  S-   5        [        R8                  " U R                   R:                  5        g )Nr    r!   zdatabase_v2.dbzpam-genericz/var/log/auth.logr   z1.2.3.7if~T)zDec  3 09:31:08 f2btest test:auth[27658]: pam_unix(test:auth): authentication failure; logname= uid=0 euid=0 tty=test ruser= rhost=1.2.3.7zDec  3 09:31:32 f2btest test:auth[27671]: pam_unix(test:auth): authentication failure; logname= uid=0 euid=0 tty=test ruser= rhost=1.2.3.7zDec  3 09:31:34 f2btest test:auth[27673]: pam_unix(test:auth): authentication failure; logname= uid=0 euid=0 tty=test ruser= rhost=1.2.3.7r|   r   r   z1.2.3.8rQ   )rP   r   iX  )r2   r&   r'   r(   r   r   r:   r   r   r   r   r?   rR   r   r   r   r   r   
setAttemptgetIDr   r   r   rP   r   r   rH   r   r;   r   )r*   r+   bansr   r   s        r   testUpdateDb2DatabaseTest.testUpdateDb2   s   $'	__ ((<1o//77<< 014??Dt'$'477'')3+?@477&&(#/B.C*DE		$3t9a i . &
 	A47F#47==?I.477##J$:$:;Z=S=ST]+$)GG""		J"G'3w<#71:((*C0')9)9:;Q;QTU;UV))DGG%%&r   c                     [        5       U l        U R                  R                  U R                  5        U R	                  U R                  R
                  U R                  R                  S5      ;   S5        g )NTzJail not added to database)r   rP   r2   addJailrO   rQ   rR   r1   s    r   rN   DatabaseTest.testAddJail   sM    k$)''//$))//99>>TWW))$//!r   c                    U R                  5         [        R                  " SS5      u  p[        US5      U l        U R
                  R                  U R                  U R                  5      nU R                  US L 5        U R                  X R
                  R                  U R                  5      5        [        R                  " U5        g )Nz.logFail2BanDb_utf-8)rN   r'   r(   r   fileContainerr2   addLogrP   rO   assertInr   r:   r;   )r*   r+   r   poss       r   _testAddLogDatabaseTest._testAddLog   s      7+!$Xw7$tyy$"4"45#//#+--''--dii89))Hr   c                 |   U R                  5         U R                  R                  5       n[        US5      nUR	                  S5        UR                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5       nU R                  US:  5        U R                  R                  U R                  U R                  5        [        US5      U l        U R                  U R                  R                  5       S5        U R                  U R                  R                  U R                  U R                  5      U5        [        US5      nUR	                  S5        UR                  5         [        US5      U l        U R                  U R                  R                  5       S5        U R                  U R                  R                  U R                  U R                  5      S 5        [        R                   " U5        g )Nwz,Some text to write which will change md5sum
r   r   z%Some different text to change md5sum
)r   r   getFileNamer   writer6   readlinegetPosrO   r2   	updateLogrP   r   r?   r   r:   r;   )r*   r   file_lastPoss       r   testUpdateLogDatabaseTest.testUpdateLog   s    ++-(
x
%++=>++- %%''//'A+''DIIt112 %Xw7$4%%,,.2 77>>$))T//0'; x
%++67++-$Xw7$4%%,,.2 77>>$))T//0$8))Hr   c           
      v   U R                  5         U R                  U R                  R                  U R                  S5      S 5        S Hm  nU R                  R                  U R                  SUS[        U5      -   5        U R                  U R                  R                  U R                  S5      U5        Mo     g )Nzsystemd-journal)i /hYi/hYi/hYTEST)rN   r?   r2   getJournalPosrP   updateJournalr0   )r*   ts     r   testUpdateJournalDatabaseTest.testUpdateJournal$  s    477((4EFM/a77$5q&Q-HDGG))$))5FGK 0r   c                 L   U R                  5         [        SSS/5      nU R                  R                  U R                  U5        U R                  R                  U R                  S9nU R                  [        U5      S5        U R                  [        US   [        5      5        g )Nr   r   r   rP   r   )
rN   r   r2   addBanrP   r   r?   r   rO   r/   )r*   r   r   s      r   
testAddBanDatabaseTest.testAddBan-  sz    k1wi0&''..F#GGOOO+'3w<#//gaj*%'r   c                 ~   U R                  5         [        SS/ SQ5      [        SS/ SQ5      [        SS/ SQ5      [        SS/ SQ5      [        S	SS
S/5      [        SSS
S/5      [        SSS
S/5      /nU H)  nU R                  R                  U R                  U5        M+     U R                  S5        U R                  R                  U R                  S9nU R                  S5        U R                  [        U5      S5        [        U5       H  u  pB[        R                  " SXCU   R                  5       5        [        R                  " SXBR                  5       5        U R                  X4   R                  5       UR                  5       5        U R                  [        X4   R                  5       5      [        UR                  5       5      5        M     U R                  S5        [         R"                  n S[         l        U H)  nU R                  R                  U R                  U5        M+     U R%                  S5        U R                  R                  U R                  S9nU R%                  S5        U R                  [        U5      S5        U[         l        U R                  S5        U R                  R                  U R                  [        S5      5        U R                  R                  U R                  S9nU R                  [        U5      S5        U R                  SS5        g ! U[         l        f = f)Nr   r   )user "test"   user "Ñâåòà"u   user "Ã¤Ã¶Ã¼Ã"	127.0.0.2z	127.0.0.3)r   s   user ""s   user "äöüß"z	127.0.0.4)r   r   u   user "äöüß"z	127.0.0.5r   u   unterminated Ïz	127.0.0.6z	127.0.0.7s   unterminated zjson dumps failedr   zjson loads failed   zreadtickets[%d]: %rz == tickets[%d]: %rz[test-phase 2] simulate errorszf2b-test::non-existing-encoding   z[test-phase 3] still operable?z	127.0.0.8   )rN   r   r2   r   rP   assertNotLoggedr   r?   r   	enumeratern   ro   getDatar   
getMatchesr   r   
PREFER_ENCr   )r*   r   r   readticketsipriorEncs         r   testAddBanInvalidEncoded%DatabaseTest.testAddBanInvalidEncoded7  s    {Axy{Axy{Az{{Ahi{A/BCD{A/BCD{A/CDE' f77>>$))V$  *+TYY/+*+ 3{#Q'
 W%ia??(!^-C-C-EF??(!^^-=>KN((*FLLN;C1134c&:K:K:M6NO	 & --01  (":8vGGNN499f%  ()dii0;() C$b)!8 --01''..J{34TYY/+3{#R(*,?@ "8s   9BL/ /L<c                 "   U R                  5         S H:  n[        SU-  SS/5      nU R                  R                  U R                  U5        M<     U R                  R                  U R                  S9nU R                  [        U5      S5        U$ )N)r   r   r|   z
192.0.2.%dr   ztest
r   r|   )rN   r   r2   r   rP   r   r?   r   )r*   r   r   r   s       r   _testAdd3BansDatabaseTest._testAdd3Banss  sv    aq(1xj9677>>$))V$  GGOOO+'3w<#	.r   c                    U R                  5       nU R                  R                  U R                  US   R	                  5       5        U R                  [        U R                  R                  U R                  S95      S5        U R                  R                  U R                  US   R	                  5       US   R	                  5       5        U R                  [        U R                  R                  U R                  S95      S5        g )Nr   r   r   r   )r   r2   delBanrP   r   r?   r   r   )r*   r   s     r   
testDelBanDatabaseTest.testDelBan|  s     '''..GAJ,,./3twwDII67;''..GAJ,,.
0@0@0BC3twwDII67;r   c                     U R                  5         U R                  R                  U R                  5        U R	                  [        U R                  R                  U R                  S95      S5        g )Nr   r   )r   r2   r   rP   r?   r   r   r1   s    r   testFlushBansDatabaseTest.testFlushBans  sJ    ''..3twwDII67;r   c           	         U R                  5         U R                  R                  U R                  [	        S[
        R                  " 5       S-
  S/5      5        U R                  R                  U R                  [	        S[
        R                  " 5       S-
  S/5      5        U R                  [        U R                  R                  U R                  SS95      S5        U R                  [        U R                  R                  U R                  SS95      S	5        U R                  [        U R                  R                  U R                  S
S95      S5        g )Nr   <   r   (   2   )rP   bantimer      r   r   )
rN   r2   r   rP   r   r   timer?   r   r   r1   s    r   testGetBansWithTime DatabaseTest.testGetBansWithTime  s    ''..99jfkkmb&87)DF''..99jfkkmb&87)DF3twwDIIbABAF3twwDIIbABAF 3twwDIIbABAFr   c           
      n
   U R                  5         SnS/[        S/5      S.S/[        S/5      S.S/[        SS/5      S.S/[        SS/5      S./nU Vs/ s H
  o3S	   S
   PM     nnSnU H`  nUS-  n[        S[        R                  " 5       U-
  US9nUR                  S5        U R                  R                  U R                  U5        Mb     XR                  l	        U R                  R                  S5      nU R                  UR                  5       S5        U R                  UR                  5       [        U5      5        U R                  [        UR                  5       5      U5        U R                  UR                  5       XA* S  5        [        S[        R                  " 5       S-
  US[        SS/5      0S9nUR                  [        U5      5        U R                  R                  U R                  U5        U R                  R                  S5      nU R                  UR                  5       S[        U5      -  5        U R                  [        UR                  5       5      U5        U R                  UR                  5       XA* S  5        U R                  R!                  U R                  S[        R                  " 5       S-
  S9nU R#                  US L5        U R                  UR                  5       [        U5      5        U R                  [        UR                  5       5      U5        U R                  UR                  5       XA* S  5        U R                  R!                  U R                  S[        R                  " 5       S-
  SS9nU R                  [        UR                  5       5      S5        U R                  UR                  5       US   S	   5        U R                  R!                  U R                  S[        R                  " 5       S-
  S
S9nU R                  [        UR                  5       5      S
5        UR%                  / SQ5        S
U R                  l	        U R                  R                  U R                  U5        U R                  R!                  U R                  S[        R                  " 5       S-
  S9nU R#                  US L5        U R                  UR                  5       [        U5      5        U R                  [        UR                  5       5      S
5        g s  snf )Nr   r   test)matchesuser123
ABC
rootz1234
r   r   P   
   r   )datar   r   d   )r   )r   
maxmatchesr|   )123)rN   r   r   r   r   r   r2   r   rP   
maxMatchesgetBansMergedr?   r   
getAttemptr   r   r   rO   
setMatches)r*   r  failuresr   matches2findr   r   s          r   testGetBansMerged_MaxMatches)DatabaseTest.testGetBansMerged_MaxMatches  s3   *y#vh-0y#vh-0y#vv&6"78z3'7#89	( ,448aI,q/8,4!a71{FKKMA$5A>6	Q77>>$))V$	  "''77  -&6<<>;/6$$&H63v((*+Z86$$&[\(BCk6;;=2#5|	ff%&')&CM"''..F#77  -&6$$&CM(9:3v((*+Z86$$&[\(BC77!!$))[6;;=QTCT!U&//&$%6$$&H63v((*+Z86$$&[\(BC77!!$))[6;;=QTCT " &3v((*+Q/6$$&I(>?77!!$))[6;;=QTCT " &3v((*+Q/M"$''''..F#77!!$))[6;;=QTCT!U&//&$%6$$&H63v((*+Q/] 5s   T2c           
         U R                  5         [        SS9nU R                  R                  U5        [	        S[
        R                  " 5       S-
  S/5      nUR                  S5        U R                  R                  U R                  U5        [	        S[
        R                  " 5       S-
  S/5      nUR                  S	5        U R                  R                  U R                  U5        [	        S
[
        R                  " 5       S	-
  S/5      nUR                  S5        U R                  R                  U R                  U5        [	        S[
        R                  " 5       S-
  S/5      nUR                  S5        U R                  R                  X5        U R                  R                  S5      nU R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       / SQ5        U R                  R                  SU R                  S9nU R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       SS/5        U R                  [        U5      [        U R                  R                  SU R                  S95      5        [	        S
[
        R                  " 5       S	-
  S/5      nUR                  S5        U R                  R                  U R                  U5        U R                  [        U5      [        U R                  R                  SU R                  S95      5        [	        S[
        R                  " 5       S-
  S/5      nUR                  S5        U R                  R                  U R                  U5        U R!                  [        U5      [        U R                  R                  SU R                  S95      5        U R                  R                  5       nU R                  [#        U5      S5        U R%                  ['        [)        S U 5       5      5      U Vs/ s H  o"R                  5       PM     sn5        U R                  R                  US9nU R                  [#        U5      S5        U R                  R                  SS9nU R                  [#        U5      S5        U R                  R                  SS9nU R                  [#        U5      S5        U R                  R                  SS9nU R                  [#        U5      S5        U R                  R                  SS9nU R                  [#        U5      S5        U R                  R+                  U R                  S9nU R                  [#        U5      S5        U R                  R+                  S SS9nU R                  UR                  5       S5        U R                  R+                  U R                  S[
        R                  " 5       S9nU R                  [#        U5      S5        U R                  R+                  U R                  S[
        R                  " 5       [
        R,                  " S5      -   S9nU R                  [#        U5      S5        U R                  R+                  U R                  S[
        R                  " 5       [
        R,                  " S5      -   S9nU R                  [#        U5      S5        UR/                  S5        U R                  R                  U R                  U5        U R                  R+                  U R                  S[
        R                  " 5       [
        R,                  " S5      -   S9nU R                  [#        U5      S5        U R1                  SU R                  R3                  5       -  5        U R                  R4                  R/                  S5        U R                  R+                  U R                  S[
        R                  " 5       [
        R,                  " S5      -   S9nU R                  [#        U5      S5        U R                  US   R7                  5       S5        g s  snf )NzDummyJail-2r   r   r   r   r     r   r   r   r   F   )r   r   r   r   r   c              3   @   #    U  H  oR                  5       v   M     g 7fr5   )r   ).0r   s     r   	<genexpr>1DatabaseTest.testGetBansMerged.<locals>.<genexpr>  s     1vLLNNs   r      )r   r      r   r   )rP   ip)rP   
forbantimer   1yearz(ignore ticket (with new max ban-time %r))rN   r   r2   r   r   r   r   r   r   rP   r	  r?   r   r
  r   idassertNotEqualr   assertSortedEquallistr   r   str2seconds
setBanTimer   getMaxBanTimeactionsr   )r*   jail2r   	newTicketr   s        r   testGetBansMergedDatabaseTest.testGetBansMerged  s   

'%''//%k6;;=2#5yA&B''..F#k6;;=2#5yA&B''..F#k6;;=2#5yA&B''..F#k6;;=2#5yA&B''.. 77  -&6<<>;/6$$&+6$$&(CD 77  499 =&6<<>;/6$$&+6$$&'(:; f:dggKdii89; fkkmb&87)D)B''..I&f:dggKdii89; fkkmb&87)D)B''..I&f:dggKdii89; GG!!#'3w<#1112!()vLLN)+ GG!!u!-'3w<#GG!!"!-'3w<#GG!!"!-'3w<#GG!!!!,'3w<# GG!!"!-'3w<#GG""		"2'3w<#77!!t!<&6<<>;/ GG""		bKKM # '3w<#GG""		bKKMF..w77 # 9'3w<#GG""		bKKMF..w77 # 9'3w<#B''..F#GG""		bKKMF..w77 # 9' 3w<#>AXAXAZZ[))r"GG""		bKKMF..w77 # 9'3w<#71:((*B/_ *s   ?c
c                    U R                  5         U R                  U R                  l        U R                  R	                  U R                  5        U R                  R
                  nUR                  S[        R                  R                  [        S5      0 5        UR                  R                  S5        [        U R                  5      =U R                  l        nUR                  R!                  S5        [#        S5      nUR%                  S5        UR'                  SS/5        U R                  R)                  U5        UR+                  5         U R-                  SS	-  5        U R-                  S
S-  5        g )Naction_checkainfozaction.d/action_checkainfo.pyr   r   z1.2.3.4r  r   zban ainfo %s, %s, %s, %s)TTTTzjail info %d, %d, %d, %d)r      r   r   )rN   r2   rP   r   r   r#  addr:   r   r   r   
banManagersetBanTotalr   _Jail__filterfailManagersetFailTotalr   r   r  putFailTicket_Actions__checkBanr   )r*   r#  fltr   s       r   testActionWithDBDatabaseTest.testActionWithDB9  s   ww$))''//$))II'	++77<< ?@ 
  $"("33$))C//r"i &AVV$%))&!	.1IIJ.?@r   c                 4   U R                  5         U R                  R                  U R                  5        U R                  R	                  5       nU R                  [        U5      S:H  =(       a    U R                  R                  U5        U R                  R	                  SS9nU R                  [        U5      S:H  =(       a    U R                  R                  U5        U R                  R	                  SS9nU R                  [        U5      S:H  5        U R                  R                  U R                  5        U R                  R	                  5       nU R                  [        U5      S:H  =(       a    U R                  R                  U5        U R                  R	                  SS9nU R                  [        U5      S:H  =(       a    U R                  R                  U5        U R                  R	                  SS9nU R                  [        U5      S:H  5        g )Nr   F)enabledTr   )
rN   r2   delJailrP   rR   r   r   rQ   rO   r   )r*   jailss     r   testDelAndAddJailDatabaseTest.testDelAndAddJailN  sj   ''//$))
''


 %--E
a2DIINNE:
''

u

-%--E
a2DIINNE:
''

t

,%//#e*/"''//$))
''


 %--E
a2DIINNE:
''

t

,%--E
a2DIINNE:
''

u

-%//#e*/"r   c                 $   U R                  5         U R                  R                  5         U R                  [	        U R                  R                  5       5      S5        U R                  R                  U R                  5        U R                  R                  5         U R                  [	        U R                  R                  5       5      S5        U R                  5         U R                  R                  U R                  5        U R                  R                  5         U R                  [	        U R                  R                  5       5      S5        U R                  [	        U R                  R                  U R                  S95      S5        U R                  5         U R                  R                  U R                  [        S[        R                  " 5       S/5      5        U R                  R                  U R                  5        U R                  R                  5         U R                  [	        U R                  R                  5       5      S5        U R                  [	        U R                  R                  U R                  S95      S5        g )Nr   r   r   r   r   )rN   r2   purger?   r   rR   r8  rP   r   r   r   r   r   r   r1   s    r   	testPurgeDatabaseTest.testPurgea  s   ''--/3tww++-.2''//$))''--/3tww++-.2//''//$))''--/3tww++-.23twwDII67; ''..99jfkkmgY?A''//$))''--/3tww++-.23twwDII67;r   )r)   r2   r&   r   rP   )#r`   ra   rb   rc   r$   propertyr2   setterr9   r@   rE   rK   rS   staticmethodrv   r   r   r   rN   r   r   r   r   r   r   r   r   r   r  r&  r4  r:  r>  rd   __classcell__)r,   s   @r   r   r   6   s    
'   )) 
6
1"	: # #$(T).'B!
%NL':Ax<<
G70rg1RA*#&< <r   r   )$__copyright____license__r:   sysr   r'   rI   r   server.filterr   r   server.mytimer   server.ticketr   server.actionsr	   r
   	dummyjailr   serverr   r   ImportErrorutilsr   r   rn   r   r   r   dirname__file__r   r   r   r_   r   r   <module>rQ     s   , 5 	 
     1 " & +  !! G Fbggooh7AB	<% B	<  s    B   B+*B+