From 9a2b41f6adee45c88909059ff61240ee58ec4236 Mon Sep 17 00:00:00 2001
From: Yaroslav Halchenko <debian@onerussian.com>
Date: Sat, 30 Jun 2012 00:35:43 -0400
Subject: [PATCH] ENH: add more verbosity levels to be controlled while running
 unittests

---
 fail2ban-testcases | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/fail2ban-testcases b/fail2ban-testcases
index 528659ac..7da9d82c 100755
--- a/fail2ban-testcases
+++ b/fail2ban-testcases
@@ -52,8 +52,8 @@ def get_opt_parser():
 	p.add_options([
 		Option('-l', "--log-level", type="choice",
 			   dest="log_level",
-			   choices=('debug', 'fatal'),
-			   default='fatal',
+			   choices=('debug', 'info', 'warn', 'error', 'fatal'),
+			   default=None,
 			   help="Log level for the logger to use during running tests"),
 		])
 
@@ -77,9 +77,17 @@ logSys = logging.getLogger("fail2ban")
 # Add the default logging handler
 stdout = logging.StreamHandler(sys.stdout)
 logSys.addHandler(stdout)
-logSys.setLevel(getattr(logging, opts.log_level.upper()))
+if opts.log_level is not None:
+	# so we had explicit settings
+	logSys.setLevel(getattr(logging, opts.log_level.upper()))
+else:
+	# suppress the logging but it would leave unittests' progress dots
+	# ticking, unless like with '-l fatal' which would be silent
+	# unless error occurs
+	logSys.setLevel(getattr(logging, 'FATAL'))
 
-print "Fail2ban " + version + " test suite. Please wait..."
+if not opts.log_level or opts.log_level != 'fatal':
+	print "Fail2ban " + version + " test suite. Please wait..."
 
 tests = unittest.TestSuite()
 
@@ -102,7 +110,8 @@ filters = [FilterPoll]					  # always available
 #      with good old unittest
 try:
 	from server.filtergamin import FilterGamin
-	#filters.append(FilterGamin)
+	# That shmug plain doesn't work and stalls things ATM
+	# filters.append(FilterGamin)
 except:
 	pass
 
@@ -131,7 +140,13 @@ tests.addTest(unittest.makeSuite(filtertestcase.DNSUtilsTests))
 tests.addTest(unittest.makeSuite(datedetectortestcase.DateDetectorTest))
 
 # Tests runner
-testRunner = unittest.TextTestRunner()
+testRunner = unittest.TextTestRunner(
+	verbosity={'debug': 3,
+			   'info': 2,
+			   'warn': 1,
+			   'error': 1,
+			   'fatal': 0,
+			   None: 1}[opts.log_level])
 testRunner.run(tests)
 
 # Just for the sake of it reset the TZ