diff --git a/tests/dictserver.py b/tests/dictserver.py index 91cfb1c6440efd..8db46a544a8b80 100755 --- a/tests/dictserver.py +++ b/tests/dictserver.py @@ -35,6 +35,7 @@ except ImportError: # Python 3 import socketserver +from util import ClosingFileHandler log = logging.getLogger(__name__) HOST = "localhost" @@ -138,7 +139,7 @@ def setup_logging(options): # Write out to a logfile if options.logfile: - handler = logging.FileHandler(options.logfile, mode="w") + handler = ClosingFileHandler(options.logfile) handler.setFormatter(formatter) handler.setLevel(logging.DEBUG) root_logger.addHandler(handler) diff --git a/tests/negtelnetserver.py b/tests/negtelnetserver.py index 203e84eb15f272..a155c286886722 100755 --- a/tests/negtelnetserver.py +++ b/tests/negtelnetserver.py @@ -32,6 +32,8 @@ else: import SocketServer as socketserver +from util import ClosingFileHandler + log = logging.getLogger(__name__) HOST = "localhost" IDENT = "NTEL" @@ -313,7 +315,7 @@ def setup_logging(options): # Write out to a logfile if options.logfile: - handler = logging.FileHandler(options.logfile, mode="w") + handler = ClosingFileHandler(options.logfile) handler.setFormatter(formatter) handler.setLevel(logging.DEBUG) root_logger.addHandler(handler) diff --git a/tests/smbserver.py b/tests/smbserver.py index cdcfc1551a8b1d..b5c6f5df416269 100755 --- a/tests/smbserver.py +++ b/tests/smbserver.py @@ -34,7 +34,7 @@ import ConfigParser as configparser # Import our curl test data helper -import curl_test_data +from util import TestData, ClosingFileHandler # impacket needs to be installed in the Python environment try: @@ -120,7 +120,7 @@ def __init__(self, config_parser=config_parser) # Set up a test data object so we can get test data later. - self.ctd = curl_test_data.TestData(test_data_directory) + self.ctd = TestData(test_data_directory) # Override smbComNtCreateAndX so we can pretend to have files which # don't exist. @@ -353,7 +353,7 @@ def setup_logging(options): # Write out to a logfile if options.logfile: - handler = logging.FileHandler(options.logfile, mode="w") + handler = ClosingFileHandler(options.logfile) handler.setFormatter(formatter) handler.setLevel(logging.DEBUG) root_logger.addHandler(handler) diff --git a/tests/curl_test_data.py b/tests/util.py similarity index 79% rename from tests/curl_test_data.py rename to tests/util.py index d9d748f3488eaa..027eac5f0ac7e1 100755 --- a/tests/curl_test_data.py +++ b/tests/util.py @@ -19,7 +19,7 @@ # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # -"""Module for extracting test data from the test data folder""" +"""Module for extracting test data from the test data folder and other utils""" from __future__ import (absolute_import, division, print_function, unicode_literals) @@ -33,6 +33,19 @@ REPLY_DATA = re.compile("[ \t\n\r]*(.*?)", re.MULTILINE | re.DOTALL) +class ClosingFileHandler(logging.StreamHandler): + def __init__(self, filename): + super(ClosingFileHandler, self).__init__() + self.filename = os.path.abspath(filename) + self.setStream(None) + + def emit(self, record): + with open(self.filename, "a") as fp: + self.setStream(fp) + super(ClosingFileHandler, self).emit(record) + self.setStream(None) + + class TestData(object): def __init__(self, data_folder): self.data_folder = data_folder