|
@@ -0,0 +1,85 @@
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+import unittest
|
|
|
|
+import os
|
|
|
|
+import isc.log
|
|
|
|
+import isc.util.traceback_handler
|
|
|
|
+
|
|
|
|
+class HandlerTest(unittest.TestCase):
|
|
|
|
+ def setUp(self):
|
|
|
|
+ """
|
|
|
|
+ Save some things to be restored later, if we overwrite them
|
|
|
|
+ for tests.
|
|
|
|
+ """
|
|
|
|
+ self.exit = isc.util.traceback_handler.sys.exit
|
|
|
|
+ self.logger = isc.util.traceback_handler.logger
|
|
|
|
+
|
|
|
|
+ self.assertTrue(self.exit)
|
|
|
|
+ self.assertTrue(self.logger)
|
|
|
|
+
|
|
|
|
+ def tearDown(self):
|
|
|
|
+ """
|
|
|
|
+ Restore mocked things.
|
|
|
|
+ """
|
|
|
|
+ isc.util.traceback_handler.sys.exit = self.exit
|
|
|
|
+ isc.util.traceback_handler.logger = self.logger
|
|
|
|
+
|
|
|
|
+ def test_success(self):
|
|
|
|
+ """
|
|
|
|
+ Test the handler doesn't influence the result of successful
|
|
|
|
+ function.
|
|
|
|
+ """
|
|
|
|
+ def succ():
|
|
|
|
+ return 42
|
|
|
|
+
|
|
|
|
+ self.assertEqual(42,
|
|
|
|
+ isc.util.traceback_handler.traceback_handler(succ))
|
|
|
|
+
|
|
|
|
+ def test_exception(self):
|
|
|
|
+ """
|
|
|
|
+ Test the exception is caught and logged, but not propagated.
|
|
|
|
+ """
|
|
|
|
+
|
|
|
|
+ self.exited = False
|
|
|
|
+ def exit(status):
|
|
|
|
+ self.assertEqual(1, status)
|
|
|
|
+ self.exited = True
|
|
|
|
+ isc.util.traceback_handler.sys.exit = exit
|
|
|
|
+ self.logged = False
|
|
|
|
+ obj = self
|
|
|
|
+ class Logger:
|
|
|
|
+ def fatal(self, message, ename, exception, filename):
|
|
|
|
+ obj.assertTrue(isinstance(exception, Exception))
|
|
|
|
+ obj.assertEqual('Exception', ename)
|
|
|
|
+ with open(filename) as f:
|
|
|
|
+ text = f.read()
|
|
|
|
+ obj.assertTrue(text.startswith('Traceback'))
|
|
|
|
+ os.remove(filename)
|
|
|
|
+ obj.logged = True
|
|
|
|
+ isc.util.traceback_handler.logger = Logger()
|
|
|
|
+
|
|
|
|
+ def fail():
|
|
|
|
+ raise Exception('Anybody there?')
|
|
|
|
+
|
|
|
|
+ self.assertIsNone(isc.util.traceback_handler.traceback_handler(fail))
|
|
|
|
+
|
|
|
|
+ self.assertTrue(self.exited)
|
|
|
|
+ self.assertTrue(self.logged)
|
|
|
|
+
|
|
|
|
+if __name__ == "__main__":
|
|
|
|
+ isc.log.init("bind10")
|
|
|
|
+ isc.log.resetUnitTestRootLogger()
|
|
|
|
+ unittest.main()
|