[tor-commits] [stem/master] Move stacktrace signaling into test invocation

atagar at torproject.org atagar at torproject.org
Wed Apr 10 18:22:31 UTC 2019


commit 854338ca172b5a3fbeb588a905f20878556fe816
Author: Damian Johnson <atagar at torproject.org>
Date:   Wed Apr 10 11:16:38 2019 -0700

    Move stacktrace signaling into test invocation
    
    Functionally teor's patch is fine as test/__init__.py is only imported
    in testing contexts. That said, as a general practice it's better to
    invoke functional code (like signal listeners) when a module is invoked
    rather than imported.
    
    All testing is invoked through run_tests.py's main method, so we can
    register our signal handlers there instead.
---
 run_tests.py     | 16 ++++++++++++++++
 test/__init__.py | 18 ------------------
 2 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/run_tests.py b/run_tests.py
index c31e7b48..f3959d01 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -7,6 +7,7 @@ Runs unit and integration tests. For usage information run this with '--help'.
 """
 
 import os
+import signal
 import sys
 import threading
 import time
@@ -70,6 +71,18 @@ New capabilities are:
 """
 
 
+def log_traceback(sig, frame):
+  """
+  Signal handler that logs the present traceback, and aborts our process with
+  exit status -1 in the case of SIGABRT.
+  """
+
+  print('Signal %s received.\nTraceback:\n%s' % (sig, traceback.format_stack(frame)))
+
+  if sig == signal.SIGABRT:
+    sys.exit(-1)
+
+
 def get_unit_tests(module_prefix = None):
   """
   Provides the classes for our unit tests.
@@ -124,6 +137,9 @@ def main():
     println('%s\n' % exc)
     sys.exit(1)
 
+  signal.signal(signal.SIGABRT, log_traceback)
+  signal.signal(signal.SIGUSR1, log_traceback)
+
   test_config = stem.util.conf.get_config('test')
   test_config.load(os.path.join(test.STEM_BASE, 'test', 'settings.cfg'))
 
diff --git a/test/__init__.py b/test/__init__.py
index dc1ab559..fa9678af 100644
--- a/test/__init__.py
+++ b/test/__init__.py
@@ -16,28 +16,10 @@ Unit and integration tests for the stem library. Helpers include...
 import collections
 import itertools
 import os
-import signal
-import sys
-import traceback
 
 import stem.util.enum
 import stem.version
 
-# Install signal handlers before doing anything else
-def log_traceback(sig, frame):
-  """Log a stack trace. exit(-1) if the signal was SIGABRT."""
-  message  = "Signal {} received.\nTraceback:\n".format(sig)
-  message += ''.join(traceback.format_stack(frame))
-  print(message)
-  if sig == signal.SIGABRT:
-    sys.exit(-1)
-
-# Register handlers
-# Log stack trace and exit
-signal.signal(signal.SIGABRT, log_traceback)
-# Log stack trace and continue
-signal.signal(signal.SIGUSR1, log_traceback)
-
 __all__ = [
   'network',
   'output',



More information about the tor-commits mailing list