From fcae05190f0628417623df26f1dbfd82c11bcc5a Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 12 Aug 2016 20:54:20 +0200 Subject: [PATCH] move common initializing functionality from fail2ban-testcases to tests/utils.py, to afford setting of default options by test execution from setup process. --- bin/fail2ban-testcases | 52 +++-------------------------- fail2ban/tests/utils.py | 74 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 73 insertions(+), 53 deletions(-) diff --git a/bin/fail2ban-testcases b/bin/fail2ban-testcases index 76a8e6ec..dbbcf3f2 100755 --- a/bin/fail2ban-testcases +++ b/bin/fail2ban-testcases @@ -37,10 +37,8 @@ if os.path.exists("fail2ban/__init__.py"): sys.path.insert(0, ".") from fail2ban.version import version -from fail2ban.tests.utils import gatherTests -from fail2ban.helpers import FormatterWithTraceBack, getLogger +from fail2ban.tests.utils import initProcess, gatherTests from fail2ban.setup import updatePyExec -from fail2ban.server.mytime import MyTime from optparse import OptionParser, Option @@ -91,52 +89,10 @@ parser = get_opt_parser() (opts, regexps) = parser.parse_args() # -# Logging +# Process initialization corresponding options (logging, default options, etc.) # -logSys = getLogger("fail2ban") - -# Numerical level of verbosity corresponding to a log "level" -verbosity = {'heavydebug': 4, - 'debug': 3, - 'info': 2, - 'notice': 2, - 'warning': 1, - 'error': 1, - 'critical': 0, - None: 1}[opts.log_level] - -if opts.log_level is not None: # pragma: no cover - # so we had explicit settings - logSys.setLevel(getattr(logging, opts.log_level.upper())) -else: # pragma: no cover - # suppress the logging but it would leave unittests' progress dots - # ticking, unless like with '-l critical' which would be silent - # unless error occurs - logSys.setLevel(getattr(logging, 'CRITICAL')) -opts.log_level = logSys.level - -# Add the default logging handler -stdout = logging.StreamHandler(sys.stdout) - -fmt = ' %(message)s' - -if opts.log_traceback: - Formatter = FormatterWithTraceBack - fmt = (opts.full_traceback and ' %(tb)s' or ' %(tbc)s') + fmt -else: - Formatter = logging.Formatter - -# Custom log format for the verbose tests runs -if verbosity > 1: # pragma: no cover - if verbosity > 3: - fmt = ' | %(module)15.15s-%(levelno)-2d: %(funcName)-20.20s |' + fmt - if verbosity > 2: - fmt = ' +%(relativeCreated)5d %(thread)X %(name)-25.25s %(levelname)-5.5s' + fmt - else: - fmt = ' %(asctime)-15s %(thread)X %(levelname)-5.5s' + fmt -# -stdout.setFormatter(Formatter(fmt)) -logSys.addHandler(stdout) +opts = initProcess(opts) +verbosity = opts.verbosity # # Let know the version diff --git a/fail2ban/tests/utils.py b/fail2ban/tests/utils.py index 3f0822dd..b0dc646f 100644 --- a/fail2ban/tests/utils.py +++ b/fail2ban/tests/utils.py @@ -59,12 +59,73 @@ if not CONFIG_DIR: os.putenv('PYTHONPATH', os.path.dirname(os.path.dirname(os.path.dirname( os.path.abspath(__file__))))) -class F2B(optparse.Values): - def __init__(self, opts={}): - self.__dict__ = opts.__dict__ if opts else { - 'fast': False, 'memory_db':False, 'no_gamin': False, 'no_network': False, - "negate_re": False, +# Default options, if running from installer (setup.py): +class DefaultTestOptions(optparse.Values): + def __init__(self): + self.__dict__ = { + 'log_level': None, 'log_traceback': None, 'full_traceback': None, + 'fast': False, 'memory_db': False, 'no_gamin': False, + 'no_network': False, 'negate_re': False } + +# +# Initialization +# +def initProcess(opts): + # Logger: + logSys = getLogger("fail2ban") + + # Numerical level of verbosity corresponding to a log "level" + verbosity = {'heavydebug': 4, + 'debug': 3, + 'info': 2, + 'notice': 2, + 'warning': 1, + 'error': 1, + 'critical': 0, + None: 1}[opts.log_level] + opts.verbosity = verbosity + + if opts.log_level is not None: # pragma: no cover + # so we had explicit settings + logSys.setLevel(getattr(logging, opts.log_level.upper())) + else: # pragma: no cover + # suppress the logging but it would leave unittests' progress dots + # ticking, unless like with '-l critical' which would be silent + # unless error occurs + logSys.setLevel(logging.CRITICAL) + opts.log_level = logSys.level + + # Add the default logging handler + stdout = logging.StreamHandler(sys.stdout) + + fmt = ' %(message)s' + + if opts.log_traceback: # pragma: no cover + from ..helpers import FormatterWithTraceBack as Formatter + fmt = (opts.full_traceback and ' %(tb)s' or ' %(tbc)s') + fmt + else: + Formatter = logging.Formatter + + # Custom log format for the verbose tests runs + if verbosity > 1: # pragma: no cover + if verbosity > 3: + fmt = ' | %(module)15.15s-%(levelno)-2d: %(funcName)-20.20s |' + fmt + if verbosity > 2: + fmt = ' +%(relativeCreated)5d %(thread)X %(name)-25.25s %(levelname)-5.5s' + fmt + else: + fmt = ' %(asctime)-15s %(thread)X %(levelname)-5.5s' + fmt + + # + stdout.setFormatter(Formatter(fmt)) + logSys.addHandler(stdout) + # + return opts; + + +class F2B(optparse.Values): + def __init__(self, opts): + self.__dict__ = opts.__dict__ if self.fast: self.memory_db = True self.no_gamin = True @@ -114,6 +175,9 @@ if not hasattr(unittest, 'SkipTest'): # pragma: no cover unittest._TextTestResult.addError = addError def initTests(opts): + ## if running from installer (setup.py): + if not opts: + opts = initProcess(DefaultTestOptions()) unittest.F2B = F2B(opts) # --fast : if unittest.F2B.fast: # pragma: no cover