[tor-commits] [stem/master] Making the testing log runlevel customizable
atagar at torproject.org
atagar at torproject.org
Sat Dec 31 21:58:55 UTC 2011
commit d84376a1ff3c459de603878763e4fddff019fa43
Author: Damian Johnson <atagar at torproject.org>
Date: Sat Dec 31 12:13:45 2011 -0800
Making the testing log runlevel customizable
I'm gonna be making stem include two runlevels that it doesn't natively
support: TRACE and NOTICE. The later is so we have runlevels to match tor, and
the former is so we can have request/reply logging without cluttering the DEBUG
logs.
---
run_tests.py | 38 ++++++++++++++++++++++++++------------
test/output.py | 7 +++++--
2 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/run_tests.py b/run_tests.py
index 9ceb2b1..577ed2e 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -31,8 +31,8 @@ import test.integ.connection.protocolinfo
import stem.util.enum
import stem.util.term as term
-OPT = "uic:t:lh"
-OPT_EXPANDED = ["unit", "integ", "config=", "targets=", "log", "help"]
+OPT = "uic:t:l:h"
+OPT_EXPANDED = ["unit", "integ", "config=", "targets=", "log=", "help"]
DIVIDER = "=" * 70
UNIT_TESTS = (
@@ -77,7 +77,8 @@ Runs tests for the stem library.
-i, --integ runs integration tests
-c, --config PATH path to a custom test configuration
-t, --target TARGET comma separated list of extra targets for integ tests
- -l, --log includes logging output with test results
+ -l, --log RUNLEVEL includes logging output with test results, runlevels:
+ TRACE, DEBUG, INFO, NOTICE, WARN, ERROR
-h, --help presents this help
Integration targets:
@@ -102,10 +103,11 @@ def print_divider(msg, is_header = False):
print term.format("%s\n%s\n%s\n" % (DIVIDER, msg.center(70), DIVIDER), *attr)
def print_logging(logging_buffer):
- for line in logging_buffer:
- print term.format(line, term.Color.MAGENTA)
-
- print
+ if not logging_buffer.is_empty():
+ for line in logging_buffer:
+ print term.format(line, term.Color.MAGENTA)
+
+ print
if __name__ == '__main__':
start_time = time.time()
@@ -113,7 +115,7 @@ if __name__ == '__main__':
run_integ_tests = False
config_path = None
test_config = stem.util.conf.get_config("test")
- include_logging = False
+ logging_runlevel = logging.FATAL
# parses user input, noting any issues
try:
@@ -143,7 +145,19 @@ if __name__ == '__main__':
config_flag = TARGET_ATTR[target][0]
test_config.set(config_flag, "true")
elif opt in ("-l", "--log"):
- include_logging = True
+ runlevel = arg.upper()
+
+ # TODO: logger has no notion of a TRACE or NOTICE runlevel
+ if runlevel == "TRACE": logging_runlevel = logging.DEBUG - 5
+ elif runlevel == "DEBUG": logging_runlevel = logging.DEBUG
+ elif runlevel == "INFO": logging_runlevel = logging.INFO
+ elif runlevel == "NOTICE": logging_runlevel = logging.INFO + 5
+ elif runlevel == "WARN": logging_runlevel = logging.WARN
+ elif runlevel == "ERROR": logging_runlevel = logging.ERROR
+ else:
+ print "'%s' isn't a logging runlevel, use one of the following instead:" % arg
+ print " TRACE, DEBUG, INFO, NOTICE, WARN, ERROR"
+ sys.exit(1)
elif opt in ("-h", "--help"):
# Prints usage information and quits. This includes a listing of the
# valid integration targets.
@@ -194,7 +208,7 @@ if __name__ == '__main__':
)
stem_logger = logging.getLogger("stem")
- logging_buffer = test.output.LogBuffer()
+ logging_buffer = test.output.LogBuffer(logging_runlevel)
stem_logger.addHandler(logging_buffer)
stem_logger.setLevel(logging.DEBUG)
@@ -210,7 +224,7 @@ if __name__ == '__main__':
sys.stdout.write(test.output.apply_filters(test_results.getvalue(), *output_filters))
print
- if include_logging: print_logging(logging_buffer)
+ print_logging(logging_buffer)
print
@@ -262,7 +276,7 @@ if __name__ == '__main__':
sys.stdout.write(test.output.apply_filters(test_results.getvalue(), *output_filters))
print
- if include_logging: print_logging(logging_buffer)
+ print_logging(logging_buffer)
except OSError:
pass
finally:
diff --git a/test/output.py b/test/output.py
index b7a1991..a22d738 100644
--- a/test/output.py
+++ b/test/output.py
@@ -140,14 +140,17 @@ class LogBuffer(logging.Handler):
can be read later. Log entries are cleared as they are read.
"""
- def __init__(self):
- logging.Handler.__init__(self, level = logging.DEBUG)
+ def __init__(self, runlevel):
+ logging.Handler.__init__(self, level = runlevel)
self.formatter = logging.Formatter(
fmt = '%(asctime)s [%(levelname)s] %(message)s',
datefmt = '%D %H:%M:%S')
self._buffer = []
+ def is_empty(self):
+ return not bool(self._buffer)
+
def __iter__(self):
while self._buffer:
yield self.formatter.format(self._buffer.pop(0))
More information about the tor-commits
mailing list