ó
ì$Sc           @   s‹   d  Z  d Z d Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m	 Z	 d d l
 m Z d e j f d „  ƒ  YZ d S(	   s   Cyril Jaquiers    Copyright (c) 2004 Cyril Jaquiert   GPLiÿÿÿÿN(   t   DateDetector(   t   DateTemplatet   DateDetectorTestc           B   sb   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   c         C   s   t  ƒ  |  _ |  j j ƒ  d S(   s   Call before every test case.N(   R   t   _DateDetectorTest__datedetectort   addDefaultTemplate(   t   self(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   setUp!   s    c         C   s   d S(   s   Call after every test case.N(    (   R   (    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   tearDown&   s    c      	   C   si   d } d d d d d d d d d g	 } d } |  j  |  j j | ƒ | ƒ |  j  |  j j | ƒ | ƒ d  S(	   Ns4   1138049999 [sshd] error: PAM: Authentication failureiÖ  i   i   i   i;   i    g  ÀóPõÐA(   t   assertEqualR   t   getTimet   getUnixTime(   R   t   logt   datet   dateUnix(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   testGetEpochTime)   s
    !c      	   C   sq   d } d d d d d d d d d g	 } d	 } |  j  |  j j | ƒ d  | d  ƒ |  j  |  j j | ƒ | ƒ d  S(
   Ns9   Jan 23 21:59:59 [sshd] error: PAM: Authentication failureiÕ  i   i   i   i;   i   iÿÿÿÿg  À}ÐA(   R	   R   R
   R   (   R   R   R   R   (    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   testGetTime1   s
    !$c   
      C   s  d d d d d d d d d g	 } d } xÔt  d	 f t  d
 f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t  d f t d f t d f t d f t d f t d f t  d f f D]ý \ } } xî t d  f | d! f f D]Ó \ } } | | } | d" } |  j j | ƒ }	 | rÙ|  j |	 d' d# | ƒ |  j |	 d  | d  d$ | |	 d  | d  f ƒ |  j |  j j | ƒ | d% | |	 d  | d  f ƒ q#|  j |	 d' d& | |	 f ƒ q#Wqý Wd' S((   sK   Test detection of various common date/time formats f2b should understand
		iÕ  i   i   i   i;   i   iÿÿÿÿg  À}ÐAs   Jan 23 21:59:59s   Sun Jan 23 21:59:59 2005s   Sun Jan 23 21:59:59s   2005/01/23 21:59:59s   2005.01.23 21:59:59s   23/01/2005 21:59:59s   23/01/05 21:59:59s   23/Jan/2005:21:59:59s   01/23/2005:21:59:59s   2005-01-23 21:59:59s   2005-01-23 21:59:59,099s   23-Jan-2005 21:59:59s   23-01-2005 21:59:59s   01-23-2005 21:59:59.252s   @4000000041f4104f00000000s   2005-01-23T21:59:59.252Zs   2005-01-23T21:59:59-05:00Zs   <01/23/05@21:59:59>s   050123 21:59:59s   Jan-23-05 21:59:59t
   1106513999s   1106513999.123s   audit(1106513999.123:987)t    s   bogus-prefix s)   [sshd] error: PAM: Authentication failures    getTime retrieved nothing for %rs3   getTime comparison failure for %r: "%s" is not "%s"s,   getUnixTime failure for %r: "%s" is not "%s"s.   getTime should have not matched for %r Got: %sN(   t   Falset   TrueR   R
   t   assertNotEqualt   NoneR	   R   (
   R   R   R   t   anchoredt   sdatet   should_matcht   prefixt   ldateR   t   logtime(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   testVariousTimes<   sH    !																						

07c         C   sx   g  |  j  j ƒ  D] } | j ƒ  ^ q } |  j  j ƒ  x< t | |  j  j ƒ  ƒ D]" \ } } |  j | | j ƒ  ƒ qN Wd  S(   N(   R   t   getTemplatest   getNamet   sortTemplatet   zipR	   (   R   t   xt	   old_namest   old_namet   n(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   testStableSortTemplatek   s    (%c         C   s*   |  j  t |  j j |  j j ƒ  d ƒ d  S(   Ni    (   t   assertRaisest
   ValueErrorR   t   _appendTemplateR   (   R   (    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   testAllUniqueTemplateNamesr   s    c         C   s­   d d d d d d g } |  j  |  j j d ƒ d  | ƒ |  j j ƒ  x4 t d ƒ D]& } |  j  |  j j d	 ƒ d  | ƒ qR W|  j j ƒ  |  j  |  j j d ƒ d  | ƒ d  S(
   NiÜ  i
   i   i   i%   i   s#   2012/10/11 02:37:17 [error] 18434#0i   s#   11/10/2012 02:37:17 [error] 18434#0(   R	   R   R
   R    t   xrange(   R   t   m1t   i(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   testFullYearMatch_gh130v   s    c      	   C   s­  g  |  j  j ƒ  D]! } t | d ƒ r | j ƒ  ^ q } d } d „  } t ƒ  } x<| | ƒ D].} x%| D]} | j | ƒ } t | t j d d | ƒ t j d d | ƒ g ƒ }	 xN |  j  j ƒ  D]= } | j ƒ  x* |	 D]" } | j	 | ƒ rØ | j
 ƒ  qØ qØ WqÁ Wg  |  j  j ƒ  D] } | j ƒ  d k r| ^ q}
 |
 g  k sHt ‚ t |
 ƒ d k ri | j | t t d	 „  |
 Dƒ ƒ ƒ f ƒ qi qi Wq\ W| r©d
 GHt j | ƒ n  d  S(   Nt
   getPatterniØ  c         s   sÃ   x¼ t  d d ƒ D]« } x¢ t  d t j |  | ƒ d d d ƒ D]z } xq t  d d d ƒ D]] } xT t  d d d	 ƒ D]@ } x7 t  d d d	 ƒ D]# } t j |  | | | | | ƒ Vqˆ Wqo WqV Wq= Wq Wd  S(
   Ni   i   i   i	   i    i   i   i<   i   (   R+   t   calendart
   monthranget   datetime(   t   yeart   montht   dayt   hourt   minutet   second(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt	   iterDates   s    -s   (\s)0s   \1 s   \1i    i   c         s   s   |  ] } | j  ƒ  Vq d  S(   N(   R   (   t   .0t   template(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pys	   <genexpr>¬   s   s.   WARNING: The following date templates overlap:(   R   R   t   hasattrR/   t   sett   strftimet   ret   subt	   resetHitst	   matchDatet   incHitst   getHitst   AssertionErrort   lent   addt   tuplet   sortedt   pprint(   R   R;   t   patternsR3   R9   t   overlapedTemplatesR   t   patternt   datestrt   datestrst   matchedTemplates(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   testDateDetectorTemplateOverlapŠ   s8    !			
c         C   se   t  ƒ  } | j d ƒ |  j | j ƒ  d ƒ |  j t | j d ƒ |  j | j d ƒ j ƒ  d ƒ d  S(   Ns   ^a{3,5}b?c*$R   t   aaaac(	   R   t   setRegexR	   t   getRegexR'   t	   Exceptiont   getDateRB   t   group(   R   t   t(    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   testDateTemplate²   s
    	(   t   __name__t
   __module__R   R   R   R   R   R&   R*   R.   RQ   RY   (    (    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyR      s   					/				((   t
   __author__t   __copyright__t   __license__t   unittestR0   R2   R?   RJ   t   server.datedetectorR   t   server.datetemplateR   t   TestCaseR   (    (    (    s5   /usr/share/fail2ban/testcases/datedetectortestcase.pyt   <module>   s   <