Commit 71eee6e2 authored by Stephen Morris's avatar Stephen Morris
Browse files

[trac1024] Make "reset unit test root logger" available to Python

... and use it in the Python unit tests that generate logging output.
parent 0958095d
......@@ -26,6 +26,7 @@ import socket
from import IPAddr
import time
import isc
import isc.log
from isc.testutils.parse_args import TestOptParser, OptsError
......@@ -764,4 +765,5 @@ class TestBrittle(unittest.TestCase):
if __name__ == '__main__':
......@@ -19,6 +19,7 @@ import socket
import tempfile
import sys
from cmdctl import *
import isc.log
SPEC_FILE_PATH = '..' + os.sep
if 'CMDCTL_SPEC_PATH' in os.environ:
......@@ -447,6 +448,7 @@ class TestFuncNotInClass(unittest.TestCase):
if __name__== "__main__":
......@@ -23,6 +23,7 @@ from import *
from pydnspp import *
from xfrout import *
import xfrout
import isc.log
......@@ -670,4 +671,5 @@ class TestInitialization(unittest.TestCase):
self.assertEqual(xfrout.UNIX_SOCKET_FILE, "The/Socket/File")
if __name__== "__main__":
......@@ -20,6 +20,7 @@
#include <log/message_dictionary.h>
#include <log/logger_manager.h>
#include <log/logger_support.h>
#include <log/logger.h>
#include <config/ccsession.h>
......@@ -35,7 +36,7 @@ using boost::bind;
// (tags/RELEASE_28 115909)) on OSX, where unwinding the stack
// segfaults the moment this exception was thrown and caught.
// Placing it in a named namespace instead of the original
// Placing it in a named namespace instead of the originalRecommend
// unnamed namespace appears to solve this, so as a temporary
// workaround, we create a local randomly named namespace here
// to solve this issue.
......@@ -184,6 +185,27 @@ init(PyObject*, PyObject* args) {
// This initialization is for unit tests. It allows message settings to be
// be determined by a set of B10_xxx environment variables. (See the
// description of initLogger() for more details.) The function has been named
// resetUnitTestRootLogger() here as being more descriptive and
// trying to avoid confusion.
resetUnitTestRootLogger(PyObject*, PyObject*) {
try {
catch (const std::exception& e) {
PyErr_SetString(PyExc_RuntimeError, e.what());
return (NULL);
catch (...) {
PyErr_SetString(PyExc_RuntimeError, "Unknown C++ exception");
return (NULL);
logConfigUpdate(PyObject*, PyObject* args) {
// we have no wrappers for ElementPtr and ConfigData,
......@@ -246,6 +268,11 @@ PyMethodDef methods[] = {
"logging severity (one of 'DEBUG', 'INFO', 'WARN', 'ERROR' or "
"'FATAL'), a debug level (integer in the range 0-99) and a file name "
"of a dictionary with message text translations."},
{"resetUnitTestRootLogger", resetUnitTestRootLogger, METH_VARARGS,
"Initialization for unit tests. Sets the severity and output stream "
"according to a set of environment variables. This should not be "
"used in production code. The name is slightly confusing, but it "
"mirrors a method of the same name used for the C++ unit tests."},
{"log_config_update", logConfigUpdate, METH_VARARGS,
"Update logger settings. This method is automatically used when "
"ModuleCCSession is initialized with handle_logging_config set "
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment