mirror of https://github.com/fail2ban/fail2ban
introduces new decorator/conditional helper in order to skip some STOCK-related test-cases (if running outside of stock-config environment).
parent
9af9ec25f5
commit
7a757645bb
|
@ -52,6 +52,7 @@ class SMTPActionTest(unittest.TestCase):
|
|||
|
||||
def setUp(self):
|
||||
"""Call before every test case."""
|
||||
unittest.F2B.SkipIfCfgMissing(action='smtp.py')
|
||||
super(SMTPActionTest, self).setUp()
|
||||
self.jail = DummyJail()
|
||||
pythonModule = os.path.join(CONFIG_DIR, "action.d", "smtp.py")
|
||||
|
|
|
@ -45,8 +45,6 @@ TEST_FILES_DIR_SHARE_CFG = {}
|
|||
from .utils import CONFIG_DIR
|
||||
CONFIG_DIR_SHARE_CFG = unittest.F2B.share_config
|
||||
|
||||
STOCK = os.path.exists(os.path.join('config', 'fail2ban.conf'))
|
||||
|
||||
IMPERFECT_CONFIG = os.path.join(os.path.dirname(__file__), 'config')
|
||||
IMPERFECT_CONFIG_SHARE_CFG = {}
|
||||
|
||||
|
@ -246,8 +244,8 @@ class JailReaderTest(LogCaptureTestCase):
|
|||
self.assertTrue(jail.isEnabled())
|
||||
self.assertLogged("Invalid filter definition 'flt[test'")
|
||||
|
||||
if STOCK:
|
||||
def testStockSSHJail(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
jail = JailReader('sshd', basedir=CONFIG_DIR, share_config=CONFIG_DIR_SHARE_CFG) # we are running tests from root project dir atm
|
||||
self.assertTrue(jail.read())
|
||||
self.assertTrue(jail.getOptions())
|
||||
|
@ -307,6 +305,7 @@ class JailReaderTest(LogCaptureTestCase):
|
|||
self.assertEqual(expected2, result)
|
||||
|
||||
def testVersionAgent(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
jail = JailReader('blocklisttest', force_enable=True, basedir=CONFIG_DIR)
|
||||
# emulate jail.read(), because such jail not exists:
|
||||
ConfigReader.read(jail, "jail");
|
||||
|
@ -597,8 +596,8 @@ class JailsReaderTest(LogCaptureTestCase):
|
|||
self.assertNotLogged("Skipping...")
|
||||
self.assertLogged("No file(s) found for glob /weapons/of/mass/destruction")
|
||||
|
||||
if STOCK:
|
||||
def testReadStockActionConf(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
for actionConfig in glob.glob(os.path.join(CONFIG_DIR, 'action.d', '*.conf')):
|
||||
actionName = os.path.basename(actionConfig).replace('.conf', '')
|
||||
actionReader = ActionReader(actionName, "TEST", {}, basedir=CONFIG_DIR)
|
||||
|
@ -625,6 +624,7 @@ class JailsReaderTest(LogCaptureTestCase):
|
|||
msg="Action file %r: interpolation of actionstart does not contains jail-name 'f2b-TEST'" % actionConfig)
|
||||
|
||||
def testReadStockJailConf(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
jails = JailsReader(basedir=CONFIG_DIR, share_config=CONFIG_DIR_SHARE_CFG) # we are running tests from root project dir atm
|
||||
self.assertTrue(jails.read()) # opens fine
|
||||
self.assertTrue(jails.getOptions()) # reads fine
|
||||
|
@ -687,6 +687,7 @@ class JailsReaderTest(LogCaptureTestCase):
|
|||
|
||||
# Verify that all filters found under config/ have a jail
|
||||
def testReadStockJailFilterComplete(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
jails = JailsReader(basedir=CONFIG_DIR, force_enable=True, share_config=CONFIG_DIR_SHARE_CFG)
|
||||
self.assertTrue(jails.read()) # opens fine
|
||||
self.assertTrue(jails.getOptions()) # reads fine
|
||||
|
@ -705,6 +706,7 @@ class JailsReaderTest(LogCaptureTestCase):
|
|||
"Stock jail.conf references non-existent filters %r" % filters_jail.difference(filters))
|
||||
|
||||
def testReadStockJailConfForceEnabled(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
# more of a smoke test to make sure that no obvious surprises
|
||||
# on users' systems when enabling shipped jails
|
||||
jails = JailsReader(basedir=CONFIG_DIR, force_enable=True, share_config=CONFIG_DIR_SHARE_CFG) # we are running tests from root project dir atm
|
||||
|
@ -767,6 +769,7 @@ class JailsReaderTest(LogCaptureTestCase):
|
|||
% (target_command, str(commands)) )
|
||||
|
||||
def testStockConfigurator(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
configurator = Configurator()
|
||||
configurator.setBaseDir(CONFIG_DIR)
|
||||
self.assertEqual(configurator.getBaseDir(), CONFIG_DIR)
|
||||
|
|
|
@ -43,16 +43,14 @@ from .. import protocol
|
|||
from ..server import server
|
||||
from ..server.mytime import MyTime
|
||||
from ..server.utils import Utils
|
||||
from .utils import LogCaptureTestCase, logSys as DefLogSys, with_tmpdir, shutil, logging
|
||||
from .utils import CONFIG_DIR as STOCK_CONF_DIR
|
||||
from .utils import LogCaptureTestCase, logSys as DefLogSys, with_tmpdir, shutil, logging, \
|
||||
STOCK, CONFIG_DIR as STOCK_CONF_DIR
|
||||
|
||||
from ..helpers import getLogger
|
||||
|
||||
# Gets the instance of the logger.
|
||||
logSys = getLogger(__name__)
|
||||
|
||||
STOCK = exists(pjoin(STOCK_CONF_DIR, 'fail2ban.conf'))
|
||||
|
||||
CLIENT = "fail2ban-client"
|
||||
SERVER = "fail2ban-server"
|
||||
BIN = dirname(Fail2banServer.getServerPath())
|
||||
|
@ -1171,6 +1169,7 @@ class Fail2banServerTest(Fail2banClientServerBase):
|
|||
"Jail 'test-jail1' started", all=True)
|
||||
|
||||
# test action.d/nginx-block-map.conf --
|
||||
@unittest.F2B.skip_if_cfg_missing(action="nginx-block-map")
|
||||
@with_foreground_server_thread(startextra={
|
||||
# create log-file (avoid "not found" errors):
|
||||
'create_before_start': ('%(tmp)s/blck-failures.log',),
|
||||
|
|
|
@ -24,7 +24,6 @@ __license__ = "GPL"
|
|||
|
||||
from __builtin__ import open as fopen
|
||||
import unittest
|
||||
import getpass
|
||||
import os
|
||||
import sys
|
||||
import time, datetime
|
||||
|
@ -43,14 +42,12 @@ from ..server.failmanager import FailManagerEmpty
|
|||
from ..server.ipdns import DNSUtils, IPAddr
|
||||
from ..server.mytime import MyTime
|
||||
from ..server.utils import Utils, uni_decode
|
||||
from .utils import setUpMyTime, tearDownMyTime, mtimesleep, with_tmpdir, LogCaptureTestCase
|
||||
from .utils import setUpMyTime, tearDownMyTime, mtimesleep, with_tmpdir, LogCaptureTestCase, \
|
||||
CONFIG_DIR as STOCK_CONF_DIR
|
||||
from .dummyjail import DummyJail
|
||||
|
||||
TEST_FILES_DIR = os.path.join(os.path.dirname(__file__), "files")
|
||||
|
||||
STOCK_CONF_DIR = "config"
|
||||
STOCK = os.path.exists(os.path.join(STOCK_CONF_DIR, 'fail2ban.conf'))
|
||||
|
||||
|
||||
# yoh: per Steven Hiscocks's insight while troubleshooting
|
||||
# https://github.com/fail2ban/fail2ban/issues/103#issuecomment-15542836
|
||||
|
@ -445,8 +442,7 @@ class IgnoreIPDNS(LogCaptureTestCase):
|
|||
self.assertFalse(self.filter.inIgnoreIPList("128.178.222.70"))
|
||||
|
||||
def testIgnoreCmdApacheFakegooglebot(self):
|
||||
if not STOCK: # pragma: no cover
|
||||
raise unittest.SkipTest('Skip test because of no STOCK config')
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
cmd = os.path.join(STOCK_CONF_DIR, "filter.d/ignorecommands/apache-fakegooglebot")
|
||||
## below test direct as python module:
|
||||
mod = Utils.load_python_module(cmd)
|
||||
|
|
|
@ -1034,7 +1034,7 @@ class LoggingTests(LogCaptureTestCase):
|
|||
os.remove(f)
|
||||
|
||||
|
||||
from clientreadertestcase import ActionReader, JailsReader, CONFIG_DIR, STOCK
|
||||
from clientreadertestcase import ActionReader, JailsReader, CONFIG_DIR
|
||||
|
||||
class ServerConfigReaderTests(LogCaptureTestCase):
|
||||
|
||||
|
@ -1091,9 +1091,8 @@ class ServerConfigReaderTests(LogCaptureTestCase):
|
|||
logSys.debug('# === stop ==='); self.pruneLog()
|
||||
action.stop()
|
||||
|
||||
if STOCK:
|
||||
|
||||
def testCheckStockJailActions(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
# we are running tests from root project dir atm
|
||||
jails = JailsReader(basedir=CONFIG_DIR, force_enable=True, share_config=self.__share_cfg)
|
||||
self.assertTrue(jails.read()) # opens fine
|
||||
|
@ -1159,6 +1158,7 @@ class ServerConfigReaderTests(LogCaptureTestCase):
|
|||
return stream
|
||||
|
||||
def testCheckStockAllActions(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
unittest.F2B.SkipIfFast()
|
||||
import glob
|
||||
|
||||
|
@ -1178,6 +1178,7 @@ class ServerConfigReaderTests(LogCaptureTestCase):
|
|||
|
||||
|
||||
def testCheckStockCommandActions(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
# test cases to check valid ipv4/ipv6 action definition, tuple with (('jail', 'action[params]', 'tests', ...)
|
||||
# where tests is a dictionary contains:
|
||||
# 'ip4' - should not be found (logged) on ban/unban of IPv6 (negative test),
|
||||
|
@ -1813,6 +1814,7 @@ class ServerConfigReaderTests(LogCaptureTestCase):
|
|||
return _actions.CommandAction.executeCmd(realCmd, timeout=timeout)
|
||||
|
||||
def testComplexMailActionMultiLog(self):
|
||||
unittest.F2B.SkipIfCfgMissing(stock=True)
|
||||
testJailsActions = (
|
||||
# mail-whois-lines --
|
||||
('j-mail-whois-lines',
|
||||
|
|
|
@ -59,6 +59,9 @@ if not CONFIG_DIR:
|
|||
else:
|
||||
CONFIG_DIR = '/etc/fail2ban'
|
||||
|
||||
# Indicates that we've stock config:
|
||||
STOCK = os.path.exists(os.path.join(CONFIG_DIR, 'fail2ban.conf'))
|
||||
|
||||
# During the test cases (or setup) use fail2ban modules from main directory:
|
||||
os.putenv('PYTHONPATH', os.path.dirname(os.path.dirname(os.path.dirname(
|
||||
os.path.abspath(__file__)))))
|
||||
|
@ -187,6 +190,31 @@ class F2B(DefaultTestOptions):
|
|||
pass
|
||||
def SkipIfNoNetwork(self):
|
||||
pass
|
||||
|
||||
def SkipIfCfgMissing(self, **kwargs):
|
||||
"""Helper to check action/filter config is available
|
||||
"""
|
||||
if not STOCK: # pragma: no cover
|
||||
if kwargs.get('stock'):
|
||||
raise unittest.SkipTest('Skip test because of missing stock-config files')
|
||||
for t in ('action', 'filter'):
|
||||
v = kwargs.get(t)
|
||||
if v is None: continue
|
||||
if os.path.splitext(v)[1] == '': v += '.conf'
|
||||
if not os.path.exists(os.path.join(CONFIG_DIR, t+'.d', v)):
|
||||
raise unittest.SkipTest('Skip test because of missing %s-config for %r' % (t, v))
|
||||
|
||||
def skip_if_cfg_missing(self, **decargs):
|
||||
"""Helper decorator to check action/filter config is available
|
||||
"""
|
||||
def _deco_wrapper(f):
|
||||
@wraps(f)
|
||||
def wrapper(self, *args, **kwargs):
|
||||
unittest.F2B.SkipIfCfgMissing(**decargs)
|
||||
return f(self, *args, **kwargs)
|
||||
return wrapper
|
||||
return _deco_wrapper
|
||||
|
||||
def maxWaitTime(self,wtime):
|
||||
if self.fast:
|
||||
wtime = float(wtime) / 10
|
||||
|
|
Loading…
Reference in New Issue