Procházet zdrojové kódy

Enable configuring test log level via env var (#4506)

I got fed up with always adding '@unittest.DEBUG' every time I needed to debug a test.
tags/v0.99.0rc1
Richard van der Hoff před 5 roky
committed by GitHub
rodič
revize
5488cadaae
V databázi nebyl nalezen žádný známý klíč pro tento podpis ID GPG klíče: 4AEE18F83AFDEB23
4 změnil soubory, kde provedl 80 přidání a 30 odebrání
  1. +1
    -0
      changelog.d/4506.misc
  2. +18
    -0
      tests/test_utils/__init__.py
  3. +54
    -0
      tests/test_utils/logging_setup.py
  4. +7
    -30
      tests/unittest.py

+ 1
- 0
changelog.d/4506.misc Zobrazit soubor

@@ -0,0 +1 @@
Make it possible to set the log level for tests via an environment variable

+ 18
- 0
tests/test_utils/__init__.py Zobrazit soubor

@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2019 New Vector Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
Utilities for running the unit tests
"""

+ 54
- 0
tests/test_utils/logging_setup.py Zobrazit soubor

@@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
# Copyright 2019 New Vector Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import os

import twisted.logger

from synapse.util.logcontext import LoggingContextFilter


class ToTwistedHandler(logging.Handler):
"""logging handler which sends the logs to the twisted log"""
tx_log = twisted.logger.Logger()

def emit(self, record):
log_entry = self.format(record)
log_level = record.levelname.lower().replace('warning', 'warn')
self.tx_log.emit(
twisted.logger.LogLevel.levelWithName(log_level),
log_entry.replace("{", r"(").replace("}", r")"),
)


def setup_logging():
"""Configure the python logging appropriately for the tests.

(Logs will end up in _trial_temp.)
"""
root_logger = logging.getLogger()

log_format = (
"%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s"
)

handler = ToTwistedHandler()
formatter = logging.Formatter(log_format)
handler.setFormatter(formatter)
handler.addFilter(LoggingContextFilter(request=""))
root_logger.addHandler(handler)

log_level = os.environ.get("SYNAPSE_TEST_LOG_LEVEL", "ERROR")
root_logger.setLevel(log_level)

+ 7
- 30
tests/unittest.py Zobrazit soubor

@@ -31,38 +31,14 @@ from synapse.http.server import JsonResource
from synapse.http.site import SynapseRequest
from synapse.server import HomeServer
from synapse.types import UserID, create_requester
from synapse.util.logcontext import LoggingContext, LoggingContextFilter
from synapse.util.logcontext import LoggingContext

from tests.server import get_clock, make_request, render, setup_test_homeserver
from tests.test_utils.logging_setup import setup_logging
from tests.utils import default_config, setupdb

setupdb()

# Set up putting Synapse's logs into Trial's.
rootLogger = logging.getLogger()

log_format = (
"%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s"
)


class ToTwistedHandler(logging.Handler):
tx_log = twisted.logger.Logger()

def emit(self, record):
log_entry = self.format(record)
log_level = record.levelname.lower().replace('warning', 'warn')
self.tx_log.emit(
twisted.logger.LogLevel.levelWithName(log_level),
log_entry.replace("{", r"(").replace("}", r")"),
)


handler = ToTwistedHandler()
formatter = logging.Formatter(log_format)
handler.setFormatter(formatter)
handler.addFilter(LoggingContextFilter(request=""))
rootLogger.addHandler(handler)
setup_logging()


def around(target):
@@ -96,7 +72,7 @@ class TestCase(unittest.TestCase):

method = getattr(self, methodName)

level = getattr(method, "loglevel", getattr(self, "loglevel", logging.WARNING))
level = getattr(method, "loglevel", getattr(self, "loglevel", None))

@around(self)
def setUp(orig):
@@ -114,7 +90,7 @@ class TestCase(unittest.TestCase):
)

old_level = logging.getLogger().level
if old_level != level:
if level is not None and old_level != level:

@around(self)
def tearDown(orig):
@@ -122,7 +98,8 @@ class TestCase(unittest.TestCase):
logging.getLogger().setLevel(old_level)
return ret

logging.getLogger().setLevel(level)
logging.getLogger().setLevel(level)

return orig()

@around(self)


Načítá se…
Zrušit
Uložit