From 7201cb731552b09c7b7f088039bb8de2b2440a02 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Wed, 19 Feb 2020 17:57:56 +0100 Subject: [PATCH] pytest: Configure logging in a fixture to match stdout capturing pytest captures the output by monkey patching out `sys.stdout`. This may conflict with our use of `sys.stdout` when configuring logging, resulting in the "Write to closed file" issue that is spamming the logs. By making the logging configuration a fixture hopefully we always use the correct stdout (after pytest has monkey-patched it). --- contrib/pyln-testing/pyln/testing/fixtures.py | 15 ++++++++++++++- contrib/pyln-testing/pyln/testing/utils.py | 5 ----- tests/fixtures.py | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/contrib/pyln-testing/pyln/testing/fixtures.py b/contrib/pyln-testing/pyln/testing/fixtures.py index a5e888322..3f61bc930 100644 --- a/contrib/pyln-testing/pyln/testing/fixtures.py +++ b/contrib/pyln-testing/pyln/testing/fixtures.py @@ -1,12 +1,13 @@ from concurrent import futures from pyln.testing.db import SqliteDbProvider, PostgresDbProvider -from pyln.testing.utils import NodeFactory, BitcoinD, ElementsD, env, DEVELOPER, LightningNode +from pyln.testing.utils import NodeFactory, BitcoinD, ElementsD, env, DEVELOPER, LightningNode, TEST_DEBUG import logging import os import pytest import re import shutil +import sys import tempfile @@ -28,6 +29,18 @@ def test_base_dir(): shutil.rmtree(directory) +@pytest.fixture(autouse=True) +def setup_logging(): + logger = logging.getLogger() + before_handlers = list(logger.handlers) + + if TEST_DEBUG: + logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) + + yield + logger.handlers = before_handlers + + @pytest.fixture def directory(request, test_base_dir, test_name): """Return a per-test specific directory. diff --git a/contrib/pyln-testing/pyln/testing/utils.py b/contrib/pyln-testing/pyln/testing/utils.py index 79351ec55..828f92027 100644 --- a/contrib/pyln-testing/pyln/testing/utils.py +++ b/contrib/pyln-testing/pyln/testing/utils.py @@ -17,7 +17,6 @@ import sqlite3 import string import struct import subprocess -import sys import threading import time @@ -69,10 +68,6 @@ SLOW_MACHINE = env("SLOW_MACHINE", "0") == "1" TIMEOUT = int(env("TIMEOUT", 180 if SLOW_MACHINE else 60)) -if TEST_DEBUG: - logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) - - def wait_for(success, timeout=TIMEOUT): start_time = time.time() interval = 0.25 diff --git a/tests/fixtures.py b/tests/fixtures.py index 478d50970..beb9d50bd 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -1,5 +1,5 @@ from utils import DEVELOPER, TEST_NETWORK # noqa: F401,F403 -from pyln.testing.fixtures import directory, test_base_dir, test_name, chainparams, node_factory, bitcoind, teardown_checks, db_provider, executor # noqa: F401,F403 +from pyln.testing.fixtures import directory, test_base_dir, test_name, chainparams, node_factory, bitcoind, teardown_checks, db_provider, executor, setup_logging # noqa: F401,F403 from pyln.testing import utils import pytest