simplify fail2ban-testcases: move some code pieces inclusive option parser from fail2ban-testcases to tests/utils.py (+ coverage)

pull/1516/head
sebres 2016-08-18 14:40:53 +02:00
parent f7f618b15d
commit af126eb308
2 changed files with 54 additions and 55 deletions

View File

@ -37,11 +37,9 @@ if os.path.exists("fail2ban/__init__.py"):
sys.path.insert(0, ".") sys.path.insert(0, ".")
from fail2ban.version import version from fail2ban.version import version
from fail2ban.tests.utils import initProcess, gatherTests from fail2ban.tests.utils import getOptParser, initProcess, gatherTests
from fail2ban.setup import updatePyExec from fail2ban.setup import updatePyExec
from optparse import OptionParser, Option
# Update fail2ban-python env to current python version (where f2b-modules located/installed) # Update fail2ban-python env to current python version (where f2b-modules located/installed)
bindir = os.path.dirname( bindir = os.path.dirname(
# __file__ seems to be overwritten sometimes on some python versions (e.g. bug of 2.6 by running under cProfile, etc.): # __file__ seems to be overwritten sometimes on some python versions (e.g. bug of 2.6 by running under cProfile, etc.):
@ -49,52 +47,7 @@ bindir = os.path.dirname(
) )
updatePyExec(bindir) updatePyExec(bindir)
def get_opt_parser(): (opts, regexps) = getOptParser(__doc__).parse_args()
# use module docstring for help output
p = OptionParser(
usage="%s [OPTIONS] [regexps]\n" % sys.argv[0] + __doc__,
version="%prog " + version)
p.add_options([
Option('-l', "--log-level", type="choice",
dest="log_level",
choices=('heavydebug', 'debug', 'info', 'notice', 'warning', 'error', 'critical'),
default=None,
help="Log level for the logger to use during running tests"),
Option('-v', "--verbosity", action="store",
dest="verbosity", type=int,
default=None,
help="Set numerical level of verbosity (0..4)"),
Option("--log-direct", action="store_false",
dest="log_lazy",
default=True,
help="Prevent lazy logging inside tests"),
Option('-n', "--no-network", action="store_true",
dest="no_network",
help="Do not run tests that require the network"),
Option('-g', "--no-gamin", action="store_true",
dest="no_gamin",
help="Do not run tests that require the gamin"),
Option('-m', "--memory-db", action="store_true",
dest="memory_db",
help="Run database tests using memory instead of file"),
Option('-f', "--fast", action="store_true",
dest="fast",
help="Try to increase speed of the tests, decreasing of wait intervals, memory database"),
Option('-i', "--ignore", action="store_true",
dest="negate_re",
help="negate [regexps] filter to ignore tests matched specified regexps"),
Option("-t", "--log-traceback", action='store_true',
help="Enrich log-messages with compressed tracebacks"),
Option("--full-traceback", action='store_true',
help="Either to make the tracebacks full, not compressed (as by default)"),
])
return p
parser = get_opt_parser()
(opts, regexps) = parser.parse_args()
# #
# Process initialization corresponding options (logging, default options, etc.) # Process initialization corresponding options (logging, default options, etc.)
@ -103,13 +56,10 @@ opts = initProcess(opts)
verbosity = opts.verbosity verbosity = opts.verbosity
# #
# Let know the version # Gather tests (and filter corresponding options)
# #
if opts.verbosity != 0: # pragma: no cover
print("Fail2ban %s test suite. Python %s. Please wait..." \
% (version, str(sys.version).replace('\n', '')))
tests = gatherTests(regexps, opts) tests = gatherTests(regexps, opts)
# #
# Run the tests # Run the tests
# #

View File

@ -43,6 +43,7 @@ from ..server.mytime import MyTime
from ..server.utils import Utils from ..server.utils import Utils
# for action_d.test_smtp : # for action_d.test_smtp :
from ..server import asyncserver from ..server import asyncserver
from ..version import version
logSys = getLogger(__name__) logSys = getLogger(__name__)
@ -73,6 +74,49 @@ class DefaultTestOptions(optparse.Values):
# #
# Initialization # Initialization
# #
def getOptParser(doc=""):
Option = optparse.Option
# use module docstring for help output
p = optparse.OptionParser(
usage="%s [OPTIONS] [regexps]\n" % sys.argv[0] + doc,
version="%prog " + version)
p.add_options([
Option('-l', "--log-level", type="choice",
dest="log_level",
choices=('heavydebug', 'debug', 'info', 'notice', 'warning', 'error', 'critical'),
default=None,
help="Log level for the logger to use during running tests"),
Option('-v', "--verbosity", action="store",
dest="verbosity", type=int,
default=None,
help="Set numerical level of verbosity (0..4)"),
Option("--log-direct", action="store_false",
dest="log_lazy",
default=True,
help="Prevent lazy logging inside tests"),
Option('-n', "--no-network", action="store_true",
dest="no_network",
help="Do not run tests that require the network"),
Option('-g', "--no-gamin", action="store_true",
dest="no_gamin",
help="Do not run tests that require the gamin"),
Option('-m', "--memory-db", action="store_true",
dest="memory_db",
help="Run database tests using memory instead of file"),
Option('-f', "--fast", action="store_true",
dest="fast",
help="Try to increase speed of the tests, decreasing of wait intervals, memory database"),
Option('-i', "--ignore", action="store_true",
dest="negate_re",
help="negate [regexps] filter to ignore tests matched specified regexps"),
Option("-t", "--log-traceback", action='store_true',
help="Enrich log-messages with compressed tracebacks"),
Option("--full-traceback", action='store_true',
help="Either to make the tracebacks full, not compressed (as by default)"),
])
return p
def initProcess(opts): def initProcess(opts):
# Logger: # Logger:
logSys = getLogger("fail2ban") logSys = getLogger("fail2ban")
@ -123,7 +167,12 @@ def initProcess(opts):
# #
stdout.setFormatter(Formatter(fmt)) stdout.setFormatter(Formatter(fmt))
logSys.addHandler(stdout) logSys.addHandler(stdout)
#
# Let know the version
if opts.verbosity != 0:
print("Fail2ban %s test suite. Python %s. Please wait..." \
% (version, str(sys.version).replace('\n', '')))
return opts; return opts;