ó
ì$Sc           @   sx  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 Z d d l Z d d l	 m
 Z
 e j d k rŽ d d l Z n d d l Z d „  Z d d l m Z d d	 l m Z e j j e j j e ƒ d
 ƒ Z d Z d e j f d „  ƒ  YZ d „  Z xe e d „  e j e j j e d ƒ ƒ ƒ D]9 Z e j d ƒ d Z  e! e d e  j" ƒ  e e  ƒ ƒ q7Wd S(   s"   Copyright (c) 2013 Steven Hiscockst   GPLiÿÿÿÿN(   t   InterpolationMissingOptionErrori   i   c         C   s
   |  j  ƒ  S(   N(   t   next(   t   x(    (    s0   /usr/share/fail2ban/testcases/samplestestcase.pyt   <lambda>    s    (   t   Filter(   t   FilterReadert   filest   configt   FilterSamplesRegexc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s#   t  d ƒ |  _ |  j j t ƒ d S(   s   Call before every test case.N(   R   t   Nonet   filtert	   setActivet   True(   t   self(    (    s0   /usr/share/fail2ban/testcases/samplestestcase.pyt   setUp*   s    c         C   s   d S(   s   Call after every test case.N(    (   R   (    (    s0   /usr/share/fail2ban/testcases/samplestestcase.pyt   tearDown/   s    c         C   sO   |  j  t g  t j |  ƒ D] } | d j d ƒ r | ^ q ƒ d k d ƒ d S(   s    Check to ensure some tests existi    t   testSampleRegexsi
   s&   Expected more FilterSampleRegexs testsN(   t
   assertTruet   lent   inspectt
   getmemberst
   startswith(   R   t   test(    (    s0   /usr/share/fail2ban/testcases/samplestestcase.pyt   testFiltersPresent2   s
    (   t   __name__t
   __module__R   R   R   (    (    (    s0   /usr/share/fail2ban/testcases/samplestestcase.pyR	   (   s   		c            s   ‡  f d †  } | S(   Nc      
      sš  t  ˆ  d d t ƒ} |  j | j ƒ  ˆ  ƒ |  j | j ƒ  d ƒ | j ƒ  | j i  ƒ xb | j ƒ  D]T } | d d k r’ |  j j	 | d ƒ qe | d d k re |  j j
 | d ƒ qe qe W|  j t j j t j j t d ˆ  ƒ ƒ d ˆ  ƒ t j t j j t d ˆ  ƒ ƒ } t ƒ  } x1| D])} t j d	 | ƒ } | r¤y t j | j d
 ƒ ƒ } Wn8 t k
 r”} t d | | j ƒ  | j ƒ  f ƒ ‚ n Xt | ƒ } n( | j d ƒ s | j ƒ  rÆq n i  } |  j j | d t  d t  ƒd
 }	 |	 s,|  j! | j" d t  ƒ d | j ƒ  | j ƒ  | f ƒ q |	 r |  j | j" d t# ƒ d | j ƒ  | j ƒ  | f ƒ |  j t$ |	 ƒ d
 d t% d „  |	 ƒ | j ƒ  | j ƒ  f ƒ |	 d \ }
 } } |  j | | j" d d  ƒ ƒ t' j' j( | ƒ } t' j' j) | j" d d  ƒ d ƒ } |  j | | d | | | j ƒ  | j ƒ  | f ƒ | j* |
 ƒ q q WxF t+ |  j j, ƒ  ƒ D]/ \ } } |  j | | k d ˆ  | | f ƒ qcWd  S(   Nt   jailt   basediri   t   addfailregexi   t   addignoreregext   logss,   No sample log file available for '%s' filters   ^# ?failJSON:(.+)$i   s	   %s: %s:%it   #t   returnRawHostt   checkAllRegext   matchs+   Line not matched when should have: %s:%i %rs*   Line matched when shouldn't have: %s:%i %rs"   Multiple regexs matched %r - %s:%ic         S   s   |  d S(   Ni    (    (   R   (    (    s0   /usr/share/fail2ban/testcases/samplestestcase.pyR   m   s    i    t   hostt   times   %Y-%m-%dT%H:%M:%Ss%   Time  mismatch %s != %s on: %s:%i %r:s,   Regex for filter '%s' has no samples: %i: %r(-   R   t
   CONFIG_DIRt   assertEqualt   getFilet   getNamet   readt
   getOptionst   convertR   t   addFailRegext   addIgnoreRegexR   t   ost   patht   isfilet   joint   TEST_FILES_DIRt	   fileinputt	   FileInputt   sett   reR#   t   jsont   loadst   groupt
   ValueErrort   filenamet
   filelinenoR   R   t   stript   processLineR   t   assertFalset   gett   FalseR   t   mapR
   t   datetimet   fromtimestampt   strptimet   addt	   enumeratet   getFailRegex(   R   t
   filterConft   optt   logFilet
   regexsUsedt   linet   jsonREMatcht   faildatat   et   rett	   failregexR$   R%   t   fail2banTimet   jsonTimet   failRegexIndext	   failRegex(   t   name(    s0   /usr/share/fail2ban/testcases/samplestestcase.pyt
   testFilter;   sl    
!	#	 )	#"	(    (   RX   RY   (    (   RX   s0   /usr/share/fail2ban/testcases/samplestestcase.pyt   testSampleRegexsFactory:   s    Gc         C   s   |  j  d ƒ S(   Ns   common.conf(   t   endswith(   R   (    (    s0   /usr/share/fail2ban/testcases/samplestestcase.pyR   „   s    s   filter.dt   .i    s   testSampleRegexs%s(   i   i   (#   t   __copyright__t   __license__t   unittestt   sysR/   R4   R7   RD   R   t   ConfigParserR   t   version_infoR8   t
   simplejsonR   t   server.filterR   t   client.filterreaderR   R0   R2   t   dirnamet   __file__R3   R&   t   TestCaseR	   RZ   R   t   listdirt   filter_t
   rpartitiont
   filterNamet   setattrt   upper(    (    (    s0   /usr/share/fail2ban/testcases/samplestestcase.pyt   <module>   s&   T	!	J1